理解神经网络(Neural Networks)(四)
本节内容:神经网络算法实现的注意事项
1. Unrolling Parameters
神经网络算法需要处理一系列的矩阵:
为了能够使用现有的优化函数,如matlab中的fminunc(),我们需要将矩阵中的元素“铺开”,使其变成一个长向量。下图提供了matlab中元素铺开和还原的代码。
总结:
2. Gradient Checking
BP算法的实现非常复杂,大型的神经网络训练一次的时间成本是很大的。有时候我们的代码会出现一些后期调试难以发现的bug,我们需要在正式训练前修正它们,以免给后期调试带来麻烦。
梯度检验(gradient checking)就是一种验证算法是否存在问题的方法。它是对梯度的数值估计,它的原理是,对于连续函数
和一个很小的
,有
对于含有多个参数的
,可分别对每个参数进行如下梯度检验:
总结:
在实现过程中尤其需要注意的一点是,在训练分类器之前一定要关闭梯度调试,否则会导致训练极其缓慢。
3. Random Initialization
使用梯度下降算法或者其他高级优化算法都需要初始化参数
。如果将所有参数全部初始化为0,会导致在每一层训练得到的激励值和误差值都相同,更新之后的参数值也都相同。这意味着我们只学习到了一种特征,这样的训练结果是没有意义的。
因此,我们需要随机初始化(random initialization)参数,其目的是打破对称。我们在某一特定范围内生成参数值,如
. 这里的
和梯度检验的
无关。
具体用代码表示如下。Theta1生成一个10x11的矩阵,Theta2生成一个1x11的向量。