【Machine Learning, Coursera】机器学习Week5 理解神经网络(四)

理解神经网络(Neural Networks)(四)

本节内容:神经网络算法实现的注意事项

1. Unrolling Parameters

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

总结:
这里写图片描述

2. Gradient Checking

BP算法的实现非常复杂,大型的神经网络训练一次的时间成本是很大的。有时候我们的代码会出现一些后期调试难以发现的bug,我们需要在正式训练前修正它们,以免给后期调试带来麻烦。
梯度检验(gradient checking)就是一种验证算法是否存在问题的方法。它是对梯度的数值估计,它的原理是,对于连续函数 J ( θ ) 和一个很小的 ϵ ,有

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

对于含有多个参数的 J ( θ ) ,可分别对每个参数进行如下梯度检验:
这里写图片描述
总结:
这里写图片描述

在实现过程中尤其需要注意的一点是,在训练分类器之前一定要关闭梯度调试,否则会导致训练极其缓慢。
这里写图片描述

3. Random Initialization

使用梯度下降算法或者其他高级优化算法都需要初始化参数 Θ 。如果将所有参数全部初始化为0,会导致在每一层训练得到的激励值和误差值都相同,更新之后的参数值也都相同。这意味着我们只学习到了一种特征,这样的训练结果是没有意义的。
这里写图片描述
因此,我们需要随机初始化(random initialization)参数,其目的是打破对称。我们在某一特定范围内生成参数值,如 [ ϵ , ϵ ] . 这里的 ϵ 和梯度检验的 ϵ 无关。
具体用代码表示如下。Theta1生成一个10x11的矩阵,Theta2生成一个1x11的向量。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42395916/article/details/81908543
今日推荐