深度学习基础
第一章的时候我就介绍过深度学习,深度学习就是人工神经网络的升级:深度神经网络。顾名思义就是将原来的单层或几层的神经网络,变成十几层甚至上百层的网络。说的简单点就是模拟人类的大脑。
这个就是神经网络的一个剖面图,但是往往不会如此简单,如:
和大脑处理信息一样,构成神经网络的是由神经元构成,无数个神经元构成神经网络,就可以完成复杂的处理。所以神经网络的主旨就是:化繁为简,化整为零。
深度神经网络的发展迅猛的原因其实有很多,但主要的原因是:一、使用了正向传播、反向传播算法。二、使用非线性激活函数。三、使用了Dropout正则化方法。四、硬件升级使得运算速度大大增加。
正向传播、反向传播算法
在开始介绍深度学习前,先介绍一下梯度下降法。电脑不能像人一样可以逐步逐步求解,所以对于很复杂的函数,会很耗时间,就可以将函数无限缩小,这样就显得很简单。所以使用梯度下降,函数就可以很快的下降。
其中α表示学习率,α越大,函数下降越快,但是α如果过大,函数就无法下降到最小值。所以α的确定非常重要。
对于深度学习,前向传播非常简单,假设每一层函数为,那么输出为:
对于深度学习,普通的梯度下降法会出现问题,那就是参数过多,一般一个深度神经网络有几千万甚至上亿的参数,如果对每个参数同时进行更新,计算量则太大。我们可以每次只更新一层的参数,然后将结果传回去。这就是反向传播。
非线性激活函数
早先的神经网络,人们没有使用激活函数,由于网络时线性的,只能解决线性问题,不能解决XOR之类的问题。所以需要使用非线性激活函数。非线性激活是指在函数的每一层之后,是输出通过一个非线性函数,之后输入下一层。
有了非线性激活函数,才使得深度神经网络可以拟合任意种类的函数,而无需对函数及逆行任何的先验假设,这使得深度学习脱颖而出。
Dropout正则化方法
深度学习有一个小问题,就是当模型层数过深的时候,会出现过拟合。深度学习中提出了一种新的方法:Dropout。这种方法非常有意思,在训练的时候,会随机的选择神经元进行激活,只有激活的神经元才能参与正向传播与反向求导。在测试的时候,则以神经元参数x激活概率作为神经元的值。
可能很多人会困惑为什么Dropout就能避免过拟合。举个简单的例子,我们再分辨一个人的时候,是需要做基因检测嘛?不需要,只需要看他的身形,或者眼镜,鼻子,发型等特征,也就是只需要很少的特征就可以了,不需要很多的特征。对于机器也是,如果要识别一个物体,假设有100个特征点,只需要其中的几个或者10个就可以了,不足要太多,一旦全部检测,可能就会出现过拟合。
左边的是正常网络,右边的是Dropout后的网络。是不是显得简单。那么运算速度就更快了。
GPU加速运算
人们都知道,现在中国在芯片方面被卡脖子,组成芯片的其中一部分就是CPU,人们都知道CPU很重要 ,但是GPU也是很重要的。GPU的控制结构非常简单,只有很简单的控制逻辑单元,那可能有人说了,CPU那么强大,为什么不用。如果说让你写一份100万份的论文,那么你是选择一个教授还是100个学生,那肯定是100个学生,很快就能做完。对于神经网络这种计算量大,但是结构简单的问题,不需要CPU,用GPU就可以搞定了。简单点,杀鸡焉用牛刀!
现在很多公司都在研究TPU,运算速度会更快,相信到时候深度学习会更加的火。