先放两个链接
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.使用梯度下降法或者高级优化方法训练模型