1 梯度下降法
我们使用梯度下降法是为了求目标函数最小值f(X)对应的X,那么我们怎么求最小值点x呢?注意我们的X不一定是一维的,可以是多维的,是一个向量。我们先把f(x)进行泰勒展开:
这里的α是学习速率,是个标量,代表X变化的幅度;d表示的是单位步长,是一个矢量,有方向,单位长度为1,代表X变化的方向。什么意思呢?就是说我们这里求最值,不是一下子就找到最小值对应的X,而是一点点的迭代,逼近最小值对应的X,每一次迭代新的X即X’就是X+αd(下图蓝色点都可以是X’),(注意这里的αd是矢量,这里是矢量相加,有方向的问题。)如图(以二维为例):
那么我们每一次迭代想要的X’要有什么要求呢?要求就是每次迭代新的X’使达到最小值,即在上面的所有的X’,那个红框的X’使f(X’)最小,我们就是找到那个X’,然后不断的迭代,(如果你觉得每次迭代的X幅度小,就调整那个学习速率α,幅度大,就调小)我们就找到趋近于f(X)最小的X。我们来看每次迭代中,怎么找到新的X’。
我们想找f(X+αd)的最小值,我们认为o(α)(即二次导数及以上的项)为无穷小,忽略不计。(这个决定也是梯度下降法与牛顿法的区别,下面说原因 )那么问题就变成了,我们要最小,
α是一个系数,是两个向量的内积,也就是|g|*|d|*cosθ,如图:
那么也就是梯度向量与d的向量夹角为180°的时候,取最小值:-|g|*|d|。梯度向量与d的向量夹角为180°.即如图:
所以我们的αd可取值为-αg,因此X’=X-αg.
接下来继续重复上述步骤迭代。直到收敛。
2 牛顿法
上面的最速下降法只用到了梯度信息,即目标函数的一阶导数信息,而牛顿法则用到了二阶导数信息。我们先把f(x)进行泰勒展开:
其中的g的每一维度是f(X)分别对X的每一维求一阶偏导数(所以g是一个向量),G是f(X)的每一维度分别对变量X的每一维求二阶导数(因此G是一个矩阵,叫hessian矩阵,如图(右))。这次跟上面那个公式只是形式稍微变了一下,内容都是一样的。这里的Xk表示原来的X点,X表示新的X点(就是上面的X’)。在这里我们令d=X-Xk,即每次迭代在单位向量d上进行X的变化(没有α这个幅度了,d的模也不一定是1,这里不是人为制定的步长多少,而是计算中该是多少就多少)。即我们找到了d,我们就知道了新的X,如图(左):
每一次迭代中,我们依然要通过最小化每一次的f(X)找到每一次想要的红框的X。
这一次,我们通过对f(X)求导=0,那么得到的X就是每一次迭代想要的红框的X。即:
因为我们已知X=Xk-d,所以,那么新的X就得到了。然后继续迭代,直到收敛。
。