Lecture4 反向传播算法

  先放两个链接

  https://www.zhihu.com/question/27239198/answer/89853077

  https://www.cnblogs.com/charlotte77/p/5629865.html

参数的展开

  在使用高级优化方法训练神经网络模型时(fminunc),需要以向量形式传递参数,而我们在神经网络中的$ heta_{1},,, heta_{l-1}$均为矩阵形式。这是我们需要将参数展开后传入fminunc函数。相应的,在计算代价函数及梯度的函数中,我们也需要将参数改为向量形式,并在计算之前先将向量形式的参数恢复为矩阵形式。

  具体的展开和恢复代码:

thetaVec=[Theta1(:);Theta2(:)];

Theta1=reshape(thetaVec(1:110),10,11);

梯度检测

  实现反向传播算法经常会出现一些不易被发现的bug,为了得到期望的结果,我们在训练模型之前要先对梯度进行检测。

  检测方法,用传统的方法计算出代价函数对每一个参数的倒数,然后与梯度进行对比,若两者近似相等,则检测通过。

  注意:不能用传统的计算倒数的方法来训练模型,这样计算量相当大。

随机初始化

  如果像之前那样,在进行训练之前将所有参数初始化为0,则会引起每一层内的参数及a均相同,则训练毫无意义,这称为对称权重问题 。

  解决方法是,我们把参数设为[-ε,ε]内的随机值,设置方法为:

Theta1=rand(10,11)*(2*boundary)-boundary;

  往往把初始化后的梯度缩到很小的范围,防止梯度弥散:https://blog.csdn.net/Mr_health/article/details/84671456

人工神经网络方法总结

   1.随机初始化权重(参数)。

  2.进行前向传播,求出对于每一个样例的h(x)

  3.求出代价函数J(Θ)

  4.反向传播以求出梯度

  5.将梯度与手动求的导数对比

  6.使用梯度下降法或者高级优化方法训练模型

原文地址:https://www.cnblogs.com/cs-zzc/p/11316821.html