调试方法
特征缩放
对于某些不具有比较性的样本特征
x
i
x_i
xi (比如对其他的x来说
x
i
x_i
xi 相当大或者相当小),梯度下降的过程可能会非常漫长,并且可能来回波动才能最后收敛到全局的最小值。
在这样的情况下,可以对
x
i
x_i
xi 进行缩放(如
x
i
≔
α
x
i
x_i≔αx_i
xi:=αxi 或者
x
i
=
x
i
/
α
x_i=x_i/α
xi=xi/α),使得
x
i
x_i
xi 与其他的
x
x
x具有可比性,以增加梯度下降的效率。
**通常将
x
x
x缩放至⟦-1,1⟧**的区间内。(只表示一个大致的范围,这不是绝对的。)
均值归一
将
x
i
x_i
xi 替换为
x
i
−
μ
i
x_i−μ_i
xi−μi 使得特征值具有为0的平均值(对
x
0
x_0
x0 不适用)
x
i
:
=
(
x
i
−
μ
i
)
/
s
i
x_i:=(x_i−μ_i)/s_i
xi:=(xi−μi)/si
定义
μ
i
μ_i
μi 为训练集
X
X
X 的平均值,
s
i
=
∣
x
i
m
a
x
−
x
i
m
i
n
∣
s_i=|x_imax−x_imin |
si=∣ximax−ximin∣, 表示
x
i
x_i
xi 的取值范围(近似值),或者直接设置为
s
i
s_i
si 的标准差。
学习率(Learning rate)
梯度下降调试的方法:
-
绘制 m i n J ( θ ) − b a t c h minJ(θ)-batch minJ(θ)−batch的图像
原则:每一个batch之后 θ 的值都应该减小,这样的图像能够通过直观地表现变化率来表现梯度下降是否收敛(变化率为0)。
-
自动收敛测试
如果 J ( θ ) J(θ) J(θ)在某一次迭代之后的下降值小于某个值 ε ε ε后,就能够判断算法已经达到了收敛。
ε ε ε的值比较难取,所以通常采取1.中的方法进行观测。
常见的α过大的
m
i
n
J
(
θ
)
−
b
a
t
c
h
minJ(θ)-batch
minJ(θ)−batch的图像:
α过大,出现梯度爆炸,每次
J
(
θ
)
J(θ)
J(θ)变化很大,导致代价函数无法收敛
α过小,梯度消失,每次 J ( θ ) J(θ) J(θ)变化很小,导致代价函数收敛速度过慢