1、神经网络model

先介绍个三层的神经网络,如下图所示

输入层(input layer)有三个units(机器学习算法--BP神经网络为补上的bias,通常设为1

机器学习算法--BP神经网络表示第j层的第i个激励,也称为为单元unit

机器学习算法--BP神经网络为第j层到第j+1层映射的权重矩阵,就是每条边的权重

 机器学习算法--BP神经网络

所以可以得到:

隐含层:
机器学习算法--BP神经网络
机器学习算法--BP神经网络
机器学习算法--BP神经网络

输出层
机器学习算法--BP神经网络 其中,S型函数机器学习算法--BP神经网络,也称为激励函数

可以看出机器学习算法--BP神经网络 为3x4的矩阵,机器学习算法--BP神经网络为1x4的矩阵

机器学习算法--BP神经网络 ==》j+1的单元数x(j层的单元数+1)

2、代价函数

假设最后输出的机器学习算法--BP神经网络,即代表输出层有K个单元

机器学习算法--BP神经网络 其中,机器学习算法--BP神经网络代表第i个单元输出

与逻辑回归的代价函数机器学习算法--BP神经网络差不多,就是累加上每个输出(共有K个输出)

3、正则化

L-->所有层的个数,机器学习算法--BP神经网络-->第l层unit的个数

正则化后的代价函数
机器学习算法--BP神经网络

机器学习算法--BP神经网络共有L-1层,然后是累加对应每一层的theta矩阵,注意不包含加上偏置项对应的theta(0)

4、反向传播BP

上面正向传播可以计算得到J(θ),使用梯度下降法还需要求它的梯度

BP反向传播的目的就是求代价函数的梯度

假设4层的神经网络,机器学习算法--BP神经网络记为-->l层第j个单元的误差

机器学习算法--BP神经网络《===》机器学习算法--BP神经网络(向量化)

机器学习算法--BP神经网络

机器学习算法--BP神经网络

没有机器学习算法--BP神经网络,因为对于输入没有误差

因为S型函数机器学习算法--BP神经网络的导数为:机器学习算法--BP神经网络,所以上面的机器学习算法--BP神经网络机器学习算法--BP神经网络可以在前向传播中计算出来

反向传播计算梯度的过程为:

机器学习算法--BP神经网络机器学习算法--BP神经网络是大写的机器学习算法--BP神经网络

for i=1-m:
-机器学习算法--BP神经网络
-正向传播计算机器学习算法--BP神经网络(l=2,3,4...L)
-反向计算机器学习算法--BP神经网络机器学习算法--BP神经网络...机器学习算法--BP神经网络
-机器学习算法--BP神经网络
-机器学习算法--BP神经网络
机器学习算法--BP神经网络

最后机器学习算法--BP神经网络,即得到代价函数的梯度。

5、BP可以求梯度的原因

实际是利用了链式求导法则

因为下一层的单元利用上一层的单元作为输入进行计算

大体的推导过程如下,最终我们是想预测函数与已知的y非常接近,求均方差的梯度沿着此梯度方向可使代价函数最小化。可对照上面求梯度的过程。 机器学习算法--BP神经网络

求误差更详细的推导过程: 机器学习算法--BP神经网络

6、梯度检查

检查利用BP求的梯度是否正确,

利用导数的定义验证: 机器学习算法--BP神经网络

求出来的数值梯度应该与BP求出的梯度非常接近

验证BP正确后就不需要再执行验证梯度的算法了。

7、权重的随机初始化

神经网络不能像逻辑回归那样初始化theta0,因为若是每条边的权重都为0,每个神经元都是相同的输出,在反向传播中也会得到同样的梯度,最终只会预测一种结果。

所以应该初始化为接近0的数。

参考文章:https://github.com/lawlite19/MachineLearning_Python

相关文章: