深度学习与反向传播
1.深度学习
深度学习是用于建立、模拟人脑进行分析学习的神经网络,并模仿人脑的机制来解释数据的一种机器学习技术。它的基本特点是试图模仿大脑的神经元之间传递,处理信息的模式。最显著的应用是计算机视觉和自然语言处理(NLP)领域。显然,“深度学习”是与机器学习中的“神经网络”是强相关,“神经网络”也是其主要的算法和手段;或者我们可以将“深度学习”称之为“改良版的神经网络”算法。
1.1 深度学习的一般步骤
- Step1:神经网络(Neural network)
- Step2:模型评估(Goodness of function)
- Step3:选择最优函数(Pick best function)
1.1.1 Step1:神经网络(Neural network)
神经网络中最基本的成分是神经元(neuron)模型,神经网络有很多不同的连接方式,这样就会产生不同的结构(structure),神经元模型可以简单地想象成一个逻辑回归函数,而每一个逻辑回归函数都有各自的权重与偏差,这些权重与偏差就是参数。深度学习的第一步即:建立自己的神经网络,设计不同的神经元连接方式,可得到不同的神经网络。
以完全连接前馈神经网络(Fully Connect Feedforward Network)为例,前后每层之间两两都有连接(Fully Connect),且信号传递方向是由后往前传,一直到输出层,其中任意两层之间的连接并没有反馈(Feedforward)。
当中间的hidden layer有许多层时,便可以叫做Deep,随着层数变多,错误率降低,随之运算量增大,通常都是超过亿万级的计算。对于这样复杂的结构,使用loop循环效率很低,所以引入矩阵计算(Matrix Operation)能使得运算的速度以及效率高很多。
神经网络中的矩阵计算过程如上图,类似于嵌套计算的过程,所以整个神经网络运算就相当于一连串的矩阵运算。 矩阵运算的好处是,可以使用GPU加速,大大加快了计算的速度。
总结:
神经网络的本质就是通过隐藏层进行特征转换,把隐藏层通过特征提取来替代原来的特征工程,这样在最后一个隐藏层输出的就是一组新的特征(相当于黑箱操作)而对于输出层,其实是把前面的隐藏层的输出当做输入(经过特征提取得到的一组最好的特征)然后通过一个多分类器(可以是softmax函数)得到最后的输出y。
1.1.2 Step2:模型评估(Goodness of function)
神经网络通常采用交叉熵(cross entropy)函数来对和的损失进行计算,对于损失,不单单要计算一笔数据的,而是要计算整体所有训练数据的损失,然后把所有的训练数据的损失都加起来,得到一个总体损失L。接下来就是在function set里面找到一组函数能最小化这个总体损失L,或者是找一组神经网络的参数,来最小化总体损失L。
1.1.3 Step3:选择最优函数(Pick best function)
一般采用梯度下降方法找到最优的函数和最好的一组参数,具体流程:是一组包含权重和偏差的参数集合,随机找一个初试值,接下来计算一下每个参数对应偏微分,得到的一个偏微分的集合 就是梯度,有了这些偏微分,我们就可以不断更新梯度得到新的参数,这样不断反复进行,就能得到一组最好的参数使得损失函数的值最小。
2.反向传播
在上述Step3:选择最优函数的过程中需要求损失函数L对参数w的偏微分,通常使用反向传播的方法解决。
- 反向传播的核心:链式法则
取出一个Neuron进行分析
从这一小部分中去看,可以把计算梯度分成两个部分 计算(Forward pass的部分)和 计算
2.1.1 Forward Pass
根据求微分原理,forward pass的运算规律就是: 这里计算得到的和恰好就是输入的和。
2.1.1 Backward Pass
Backward Pass的部分相较于Forward Pass部分的计算更为困难复杂,由式子可知,需知道才可能进行计算,而是最后一层。
- 这里我们采用链式法则(Chain Rule)进行计算:
- 从上图可以看出,最后问题转变为对和的求解,下面分情况讨论:
- case 1 : y1与y2是输出值,设和是最后一层的隐藏层
- case 2 : y1与y2是不是输出值,就需要继续往后一直通过链式法则算下去,直到最后一层是输出层
总结:
反向传播可拆分为Forward Pass部分和Backward Pass部分进行求解,其中Forward Pass部分求解出来的结果即为输入值,Backward Pass部分则需要通过链式法则进行求解。