机器学习笔记02:最优化方法:梯度下降算法 木灵的炼金工作室

但不是所有的代价函数均可以通过求偏导数,解方程组而得到最优解(比如某些偏导数方程组不满秩的代价函数)。

但所有的代价函数均能求全微分,也就可以找到使其函数值以最大程度减少的方向向量,这个向量就是函数的梯度。

因此我们求出代价函数的梯度$\nabla J(\bold{\Theta})$,为其乘上一个预定的,描述”步长”的系数学习率(Learning Rate),再将这个向量的负值(因为我们要找到其最小值,而梯度描述的是增大的方向。在微分的”尺度”下,最大增大方向的相反方向也正是最大的减小方向)加在我们目前的$\theta$向量中,重新得到一个$\theta$向量。不断重复上述步骤直到梯度归零,我们就得到了一个使得代价函数最小化的局部最优化解。

数学描述

对于某代价函数$J(\bold{\Theta})$,我们首先为向量$\Theta$(所有预测函数的参数张成的向量)分配一个”随机的”初值(一般为零向量),随后对于每一个$\theta$,将其赋值为:

$\theta_i \leftarrow \theta_i-\alpha\frac{\partial J}{\partial \theta_i}$

其中,$\alpha$为上述决定步长的学习率。由于其与一个偏导数相乘,因此我们无需实时地控制其大小,偏导数会自动控制每一步迭代的步长。数学真奇妙。

直到所有的$\frac{\partial J}{\partial \theta_i}$均为0.

应注意,在一轮更新未结束时,所有的偏导数都应用本轮开始时的初始J,不应使用中途更新后的J。

更新方式

关于学习率

学习率需要慎重决定。学习率过高可能会导致算法不收敛,学习率过低可能会导致迭代数过多。

一般来讲,我们可以每隔10倍选取2个点,如0.001, 0.003, 0.01, 0.03, 0.1, 0.3…

局部最优和全局最优

梯度下降算法可能会陷入一切梯度为零向量的点,包括局部极小值,甚至是局部最大值。因此我们可以为其引入随机因子来避免这种情况:

$\theta_i \leftarrow \theta_i-\alpha(\frac{\partial J}{\partial \theta_i}+random)$


Copyright AmachiInori 2017-2021. All Right Reserved.
Powered By Jekyll.
amachi.com.cn