我想知道学习率不当会导致sgd不收敛吗?还是只是会导致收敛慢?
5个回答
是有可能的。比如我们有梯度下降求解$f(x)=x^4$的最小值。
假设初始点是$x=2$,学习率(步长)是$0.5$
初始的时候
$x = 2$, $f'(x) = 32$, $f(x) = 16$
经过一次迭代
$x = -14.0$, $f'(x) = -10976$, $f(x) = 38416$
又一次迭代
$x = 5474$, $f'(x) = 656106545696$, $f(x) = 897881807784976$
我们看到$x$在来回摆荡,而且离最小值越来越远,显然这个情况下就是因为学习率太大了,导致每次更新时都“过犹不及”“矫枉过正”,所以最后并没有收敛。
如果学习率是$0.1$,
$x = 2 $, $f'(x) = 32 $, $f(x) = 16 $
$x = -1.2 $, $f'(x) = -6.91 $, $f(x) = 2.07$
$x = -0.51$, $f'(x) = -0.53$, $f(x) = 0.06$
$x = -0.46$, $f'(x) = -0.38$, $f(x) = 0.04$
$x = -0.42$, $f'(x) = -0.29$, $f(x) = 0.03$
$x = -0.39$, $f'(x) = -0.24$, $f(x) = 0.02$
我们就看到是在逐渐收敛的了
SofaSofa数据科学社区DS面试题库 DS面经举一个例子说明学习率足够小,可以保证得到收敛的解。
解$Ax=b$, $A$可做SVD,$A=USV^T$。
Gradient descent解为
$$x_n=x_{n-1}-\alpha A^T(Ax_{n-1}-b)$$
$$=(I-\alpha A^TA)x_{n-1}+\alpha A^Tb$$
为简化计算,把$x,A,b$都投影到singluar value的向量上,$Z=V^Tx, C=U^Tb$
$$VZ_n=V(I-\alpha S^2)Z_{n-1}+V\alpha SC$$
令$B=I-\alpha S^2$
$$Z_n=BZ_{n-1}+\alpha SC$$
$$Z_n=B^nZ_0+(\sum_{k=0}^{n}B^n)\alpha SC$$
令$Z_0=0$
$$Z_n=(\sum_{k=0}^{n}B^n)\alpha SC$$
根据Neumann series,$(I-B)^{-1}=\sum_{k=0}^{\infty}B^k$
$$\lim_{n\to \infty}Z_n=(I-B)^{-1}\alpha SC$$
$$=1/\alpha S^{-2}\alpha SC$$
$$=S^{-1}C$$
$$\lim_{n\to \infty}x_n=VS^{-1}U^Tb$$
Neumann series收敛的条件是$B$的最大singular value小于1,$|B|<1 => \alpha S_1^2-1<1 =>\alpha<2/S_1^2$。当学习率足够小,$\alpha<2/S_1^2$,保证收敛。
从控制论看,$-1<1-\alpha S_1^2<0$时欠阻尼,振荡衰减;$0<1-\alpha S_1^2<1$时,过阻尼,无振荡衰减。
SofaSofa数据科学社区DS面试题库 DS面经