注意,此处的神经网络指的是Feedforward neural network,或者说是多层感知器(MLP, Multilayer perceptron)
为什么需要神经网络?解决线性不可分问题

神经网络理解之两部曲:
1.随机梯度下降(Stochastic gradient descent)
2.动态规划(Dynamic programming)
随机梯度下降(SGD)
一般的,机器学习算法中参数都是通过最小化损失函数来进行参数的迭代更新,但是这里隐含了一个条件,那就是对损失函数的定义是建立在所有训练样本之上的,换句话说,将所有的训练样本放到算法中进行学习,得到损失函数,随后更新参数,这样的方法叫批量梯度下降(Batch gradient descent),公式如下:
但是对于SGD来说,参数的每一次更新只从一个随机样本中得到,公式如下:
这样子做的好处有:
1.简化(偏)导数的计算
2.可以更好的确定学习率,每一次计算都可以重新换一个
神经网络为什么需要这个?
继续往下分析,即可明白。
动态规划
在进行动态规划的解释之前,首先画一下基本的神经网络的结构,并且将一些数字规范做好,便于之后的推导

数字标注:从左往右看:
第
个样本
第
层第
个感知器的输出
线性回归函数
非线性函数,也叫激活函数
第
层感知器的个数
现在着重看第层第
个感知器其数据的流向:

从第
层第
个感知器传来的值
第
层第
个感知器对于第
层第
个传来输入的权重
第
层第
个感知器经过
得到的求和值
从第
层第
个感知器经过
非线性变换后的输出值
从第
层第
个感知器对于前一层所有输入的偏置
通过上述表示可以得到如下公式:
神经网络其实是许多个这样的感知器堆叠而成,所以其所谓的前向传播(Forward propagation) 就是上面的这两个公式。
那么现在来看参数更新的问题,通过前向传播可以得到一个样本的最终预测值,也就可以得到其对应的损失函数
,这个时候就可以通过反向传播去得到参数的偏导数,并进行更新。(这里可以看到,仅仅只是使用一个样本,计算量都比较大,所以SGD的思想很重要)
为了方便理解反向传播的动态规划,继续画一张图来理解:

参数的更新:
具体的求解方式如下:
先求关于的偏导数:
我们令 为
那么
现在我们来关注一下这个,这里就运用到了dynamic programming的概念——关联
和
而这里
可以是sigmoid函数,也可以是其他激活函数,这里假设为tanh函数,而tanh 函数的导数可以表示为
总结一下,一个非常重要的关联公式就出来了:
到这里,dp浮出水面,也就是说,通过计算当前层的可以反推出上一层的
,通过由右及左的方式便可以得到所有的
而关于对的更新,其实和
一样
也就是说 等价于
至此,可以说将神经网络参数一次更新的前前后后细节讲完了。之后便就是多次训练更新参数的问题了。
网友评论