梯度下降的特征缩放
1.特征缩放
- 确保不同特征的特征值都处在一个相近的范围,这样的梯度下降法就能更快的收敛
假如有两个特征,一个是房子的面积 x1,一个是房间数量
0< x1<2000 feet2,一个特征是房间数量 x2,1<=x2<=5
x1 远远大于 x2,故轮廓图如下
由于 x1和x2的范围相差太大,轮廓图是一个又瘦又高的椭圆型轮廓图
寻找全局最小的路径将会是一条曲折的路径
而如果用这个代价函数来运行梯度下降的话,要得梯度值,最终可能需要花很长一段时间并且可能来回波动,然后经过很长时间才能收敛到全局最小值。
-
可以想象如果这两个特征值方范围相差越大,轮廓图越纤细,梯度下降的过程更缓慢
在这样的情况下,一种有效的进行特征缩放的方法是:
两个特质之间的范围差距缩小了,这样的轮廓图更加圆,梯度下降算法就会找到一条更加捷径的路径通向全局最小。
-
因此 通过特征缩放,通过“消耗掉”这些值范围。在这个例子中,我们把 x1,x2都缩小到(0,1)之间
-
更一般的,执行特征缩放的时候,我们经常是将特征的取值约束到 -1 到 1 的范围内,不一定是(-1,1)
之间,如(0,3)或(-2,0) 这些都非常接近
如果特征值的范围缩小在(-100,100)或 (-0-0001,0.00001)则会认为这个特征不太好
2.判断梯度代价函数是否收敛
- 画出代价函数迭代步数增加的变化曲线
通常,看这类曲线来试着判断梯度下降算法是否已经收敛
- 如果代价函数的下降小于一个很小的值 ξ 就认为已经收敛,但选择一个合适的阈值 ξ 是相当困难的
2.1代价函数 J(Θ) 随迭代步数的变化曲线情况
如图所示:梯度下降算法没有正常工作
而这样的曲线通常意味着你应该使用较小的 学习率α
2.2 总结
学习率α太小会使迭代缓慢,学习率太大会使每次迭代不一定是减小
学习率可以尝试取:
… 0.001,0.003,0.01,0.03,0.1,0.3,1, 1x3 …