(1)梯度下降算法主要通过哪两个控制因子实现最优参数选择?这两个因子分别起到什么作用?
答:梯度下降算法有两个重要的控制因子:一个是步长,由学习率控制;一个是方向,由梯度指定。
1.在梯度下降算法中,步长决定了每一次迭代过程中,会往梯度下降的方向移动的距离。试想一下,如果步长很大,算法会在局部最优点附近来回跳动,不会收敛(如下图);但如果步长太短,算法每步的移动距离很短,就会导致算法收敛速度很慢。
2.梯度的意义从几何意义上讲,就是函数变化增加最快的地方。具体来说,对于函数f(x,y),在点(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度减少最快,也就是更加容易找到函数的最小值。
(2)为什么计算损失函数最优值采用梯度下降算法而不是直接对损失函数求导数等于0时的最优解?
答:多维函数偏导为0并非是局部极值,偏导为零是该点为极值的必要不充分条件,所以极值为0不一定是极值,你求偏导为0是没有用的,求出来也未必是极值点。不管是直接令偏导等于0还是使用梯度下降,都无法解决损失函数为非凸函数时陷入局部最优的问题。之所以使用梯度下降而不直接令偏导等于0,是因为神经网络的损失函数大多没有解析解,就是说你无法显式地表示函数的偏导,所以只能通过数值求解的方法迭代地找到最优解(或者局部最优解)。
(3)如何判断梯度下降算法是否正确工作?
答:可以绘制一个α——J(θ)曲线图,通过图像判断是否正确工作。
对于一个足够小的学习率α,每次迭代后损失函数J(θ)都会下降
如果α过小,梯度下降的收敛速度很慢
如果α太大,损失函数可能不会在每次迭代都下降,甚至可能不收敛
选择使得J(θ)曲线快速下降的α值