Neural Networks: Backpropagation in Practice


本节内容:神经网络算法实现的注意事项
1. 展开参数(unrolling parameters)
2. 梯度检验(gradient checking)
3. 随机初始化(random initialization)


1. Unrolling Parameters

神经网络算法需要处理一系列的矩阵:
Θ(1),Θ(2),Θ(3),...
D(1),D(2),D(3),...
为了能够使用现有的优化函数,如matlab中的fminunc(),我们需要将矩阵中的元素“铺开”,使其变成一个长向量。下图提供了matlab中元素铺开和还原的代码。
【Machine Learning, Coursera】机器学习Week5 Neural Networks: Backpropagation in Practice
总结:
【Machine Learning, Coursera】机器学习Week5 Neural Networks: Backpropagation in Practice

2. Gradient Checking

梯度检验(gradient checking)就是一种验证算法是否存在问题的方法。它是对梯度的数值估计,它的原理是,对于连续函数J(θ)和一个很小的ϵ,有

J(θ)J(θ+ϵ)J(θϵ)2ϵ

对于含有多个参数的J(θ),可分别对每个参数进行如下梯度检验:
【Machine Learning, Coursera】机器学习Week5 Neural Networks: Backpropagation in Practice
总结:
【Machine Learning, Coursera】机器学习Week5 Neural Networks: Backpropagation in Practice

在实现过程中尤其需要注意的一点是,在训练分类器之前一定要关闭梯度调试,否则会导致训练极其缓慢。
【Machine Learning, Coursera】机器学习Week5 Neural Networks: Backpropagation in Practice

3. Random Initialization

使用梯度下降算法或者其他高级优化算法都需要初始化参数Θ。如果将所有参数全部初始化为0,会导致在每一层训练得到的激励值和误差值都相同,更新之后的参数值也都相同。这意味着我们只学习到了一种特征,这样的训练结果是没有意义的。

【Machine Learning, Coursera】机器学习Week5 Neural Networks: Backpropagation in Practice

因此,我们需要随机初始化(random initialization)参数,其目的是打破对称。我们在某一特定范围内生成参数值,如[ϵ,ϵ]. 这里的ϵ和梯度检验的ϵ无关。
具体用代码表示如下。Theta1生成一个10x11的矩阵,Theta2生成一个1x11的向量。
【Machine Learning, Coursera】机器学习Week5 Neural Networks: Backpropagation in Practice

相关文章: