神经网络参数的反向传播算法

学习地址

代价函数

在之前的前向传播算法中并没于介绍神经网络是如何训练参数的,而作业也是直接给出了θ1和θ2。那么这里介绍神经网络的代价函数就是这个目的。
定义:
L:神经网络总层数
sl:第l层的单元数,不包括bias unit在内

二分类问题输出只有0和1,但多元分类问题输出可能是个向量也可能是个矩阵,这里就先用下图为例,输出是一个4维向量
2019-07-29 09-21-12 的屏幕截图.png

神经网络代价函数:
2019-07-29 09-45-49 的屏幕截图.png
关于神经网络代价函数解释:

  • 在神经网络问题中,应用的是多元分类问题,输出一个多维向量,那么假设函数hθ(X)∈RK。(hθ(X))i表示第i个输出的假设函数。我们在多元分类与前向传播算法中就是根据这个值确定属于哪一分类的。
  • yk(i)表示第i的样本的输出,也是一个binary vector如上图。
  • 最后一项是正则化项,最初(逻辑回归)在接触正则化项的时候只是为了防止过拟合现象,这里本质也还是逻辑回归。有时候正则化项也叫惩罚项,老板是这样叫的。
  • 为什么正则化项是三层循环呢?用上面的神经网络图来解释,就相当于把每条线上的权值求平方和而已,一般不惩罚第0项θ,但其实惩罚也没多大差别,只不过不惩罚θ0更常用些。

反向传播算法 Backpropagation

视频地址:反向传播算法 ,比较复杂
目的:最小化代价函数。
TODO:代码实现计算代价函数J(θ),推导并实现出偏导项
2019-07-29 10-15-33 的屏幕截图.png
梯度计算方法如下:这里参照前向传播作业可以直接用矩阵实现
hθ(x)叫激活值
2019-07-29 10-17-55 的屏幕截图.png

反向传播算法概念与计算方法:
2019-07-29 11-04-33 的屏幕截图.png
解释:

  • δj(l)表示第i层第j个节点误差,即aj(i)-yj
  • 知道了最后一层的误差就可以推出前面所有层的误差,如上计算公式
  • g′(z(3))表示导数项,z=θTX;hθ(X)=g(z)=a=sigmoid(z)=1/(1+e-z)。而由微积分对z求导可以推出g′(z(3))=a(3) (1-a(3)),其余同理。这里.*表示普通元素对应相乘。

计算方法:
2019-07-29 11-29-06 的屏幕截图.png

理解反向传播算法

Cost(i)表示了神经网络预测样本值的准确程度,即网络的输出值与实际y值的偏差程度
反向传播算法实际上是在计算δj(l),而δj(l)恰恰等于cost(i)关于zj(l)的偏导数,其中对于只有一个样本输入来说,cost(i)已经给出如下:
2019-07-29 14-39-38 的屏幕截图.png
2019-07-29 15-32-15 的屏幕截图.png

展开参数

为了计算方便将所有参数矩阵展开成向量形式,传入函数进行计算
2019-07-29 15-56-23 的屏幕截图.png
2019-07-29 15-56-44 的屏幕截图.png

梯度检测

为了保证正确实现了梯度,而且每次下降都是正确的,不至于最终得出结果和实际误差存在量级别的差异。
梯度检测是计算量非常大,在验证了反向传播算法所计算的梯度和梯度检测相差不多时就可以关闭梯度检测再直接用反向传播算法训练分类器。
2019-07-29 16-10-49 的屏幕截图.png
2019-07-29 16-09-57 的屏幕截图.png
2019-07-29 16-12-37 的屏幕截图.png
2019-07-29 16-16-12 的屏幕截图.png

随机初始化

高级优化算法中会默认我们所传入的参数是会提供一些初始值的。
问题:如果对参数进行初始化?

思想1:全部赋为0 ,在神经网络中并不适用

思想2:随机初始化
2019-07-29 16-35-45 的屏幕截图.png

汇总

  1. 选择神经网络结构:输入单元个数为单个样本输入X(i)的维数;输出单元的个数[1-10]都可以,但一般用向量且对应位为1其余为0表示i.e,[0,0,0,1,0,0]T;隐藏单元通常默认只有一层,但也可不止一层,这样每个隐藏层单元数要相同,通常等于特征数,或者是特征数的倍数个。
  2. 训练神经网络:随机初始化权重θ为接近0的数;实现前向传播算法得到hθ((x(i)));计算代价函数;实现反向传播算法得到偏导数项;用梯度检查比较得出的偏导数项,确定偏差不大则屏蔽梯度检查部分;使用梯度下降或更高级的优化方法来最小化J(θ)并得到参数θ
    2019-07-29 16-53-29 的屏幕截图.png
    2019-07-29 17-03-44 的屏幕截图.png