多元优化
梯度下降(gradient descent)
梯度下降是沿坡下行这一思想的实用主力版本,也是训练几乎每一个现代神经网络的算法。其思想朴素得令人意外:要最小化一个函数,就反复把当前猜测沿梯度的相反方向轻轻一推,因为那是函数下降最快的方向。
每次更新写作 x_new = x_old - eta 乘 grad f(x_old),其中 eta 是学习率或步长——一个控制步子大小的小正数。eta 取得太小,进展慢得令人痛苦;取得太大,则越过谷底、甚至发散。与教科书式的最速下降不同,实用的梯度下降通常固定 eta(或按计划调度),而不是每步都做精确线搜索,因为当变量有数百万个时,哪怕只算一次梯度就已经很昂贵。在机器学习中还有一个变招,随机梯度下降,每步用一小批随机数据来估计梯度,以精确性换取速度。
这就是训练背后诚实的机制:神经网络的权重是变量,损失是函数 f,梯度由反向传播(穿过网络运用链式法则)高效算出。该方法并不会魔法般地找到最好的权重——它下降到路径所通向的那个局部极小,其成败取决于学习率、初始化和损失地形的形状。梯度下降能在巨大的非凸问题上工作得这么好,一部分是经验上的好运气,一部分是数十年工程打磨的结果。
要通过最小化平方误差来拟合一条直线,梯度下降反复以与误差负梯度成比例的小步调整斜率和截距。经过多次迭代,参数稳定在最小二乘解附近——与正规方程一步给出的答案相同。
梯度下降迭代地达到正规方程直接求出的解——当直接求解过于庞大时很有用。
梯度下降找到的是局部极小,未必是全局极小,而只有在非凸地形上这一区别才显出锋芒。在凸函数上每个局部极小都是全局极小,这正是凸性使该方法可被证明可靠的原因。
又称
另见