Neural Networks: Learning 课程内容
文章参考:CodingRae
链接:链接
*****最好配合着ppt看***
代价函数和反向传播
L:这个神经网络结构的总层数
sl:第L层的单元的数量,神经元的数量
中间隐藏层神经元的每层数量是相同的
两种分类:二元分类及多元分类
二元:y=0或1----一个输出单元
多元分类:
k个输出单元
代价函数
注意:
∑m∑K简单地将输出层中每个单元计算的逻辑回归成本相加
反向传播算法
用于计算导数项
误差
推导反向算法函数比较详细的解释:https://zhuanlan.zhihu.com/p/25609953
实现反向传播算法的原理:
向后传播直观理解(例子)Back propagation intuition
当只有一个样本(xi,yi),一个输出单元且不考虑正则化时
具体算法应用讲解
Unrolling parameters展开参数
矩阵形式的优点在于当你的系数以矩阵形式存储时,计算前向传播和反向传播会更方便。当你使用某种向量化的实现时,使用矩阵形式会更简单。
梯度检验gradient checking
后向传播有很多细节会导致一些BUG,如果你用梯度下降来计算,表面上关于theta的函数J在减小,但是你可能最后得到的结果实际上有很大的误差。
梯度检验能确保我们的反向传播如预期工作。
*********非常重要********
算法顺序如下:
- 首先,使用反向传播来计算DVec
- 然后,用gradApprox实现梯度检验
- 确定DVec和gradApprox给出接近结果
- 最后,验证了反向传播代码正确之后,在用反向传播代码训练前,关掉梯度检验(在开始迭代训练之前一定要关掉梯度检验不再计算gradAppro,如果你对梯度下降的每次迭代都进行数值梯度计算,那么你的算法会非常慢。)
Random Initialization
当你使用梯度下降算法,或者其他高级的优化算法,我们需要设置初始值。
当初始值全部是零时,神经网络实际上进入很有意思的情况,不仅有两个隐层,还有很多很多层。所有你的隐层的结果都一样,十分冗余。我们看到的问题叫做对称现象。
所以我们需要随机初始化。我们进行初始化的操作目的就是打破对称。
‘
搭建网络的大体框架Put it together
当我们在训练一个神经网络时,我们要做的第一件事就是搭建网络的大体框架,意思是神经元之间的连接模式
一般来说隐藏单元越多越好
实现神经网络的训练过程:
1、构建一个神经网络,随机初始化权值(通常初始化为接近于0的值)
2、执行前向传播算法,对任意输入 x(i) 计算出对应的 hθ(x(i))
3、通过代码计算代价函数 J(Θ)
4、执行反向传播算法,计算偏导数
5、使用梯度检验用反向传播得到的偏导项和用数值计算得到的估计值,确保两者比较接近。然后去掉梯度检验代码。
6、使用一个最优化算法(梯度下降、BFGS 共轭梯度…)和反向传播算法结合,计算偏导。
**对于神经网络,代价函数J(Θ)是个非凸函数。**尽管我们不能保证这些优化算法一定会得到全局最优值,但通常能够得到一个很小的局部最小值。
测验 Neural Networks: Learning
编程作业