假设有两个参数,随意取初值
,因此就有
然后令偏导值为,上式可以变为:
如下图所示,梯度下降的方向就是损失函数的等高线的法线方向。先设置开始点,再计算
的梯度方向,移到
;再计算
的梯度方向,移到
;以此类推。
Tip 1:Tuning your learning rates(小心得调整学习率)
一般而言,当参数超过三个时,学习率带来的损失函数的变化是很难描述的。
学习率对于损失函数的影响:当学习率很大的时候,每更新一次,损失函数变化很大;当学习率小的时候,每更新一次,损失函数变化就小。
合适的学习率——事实上,开始时,我们距离目的地很远,所以我们会使用较大的学习率;经历多次更新后,我们距离目的地比较近,所以我们会降低学习率。学习率不能一刀切,我们要给不同的参数不同的学习率。
令,
,其中
是一个参数。
Vanilla Gradient descent:
Adagrad:(将每个参数的学习率(
)除以其先前导数的均方根(
))
例如:
,
,
......
,
因为
所以可以化简为:,其中
可以造成反差的效果!
实际上,无论是Vanilla Gradient descent还是Adagrad,从可以看到:梯度越大,步长越长。
ps:步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。
而最佳的步长我们可以从图中看出来,等于一阶导数的绝对值/二阶导数。
Tip 2:Stochastic Gradient Descent(随机梯度下降)
对比梯度下降的,随机梯度下降的
下降得更快!
Tip 3: Feature Scaling(特征缩放)
可以通过参数前的实数来 不同的特征具有相同的缩放比例。
对于每个维度,均值为
,标准差为
将每个维度的值进行标准化,使得所有维度的均值变为1,标准差变为0。
Formal Derivation(形式化推导)
每次更新参数时,我们并不会获得使得变小的
。但是加入给了一个点,我们可以很容易找到在它附近更小的点,以此类推。
泰勒公式:
假如接近
扩展到多参数的情况:
因此将泰勒公式运用于形式化推导中可得:可以看出,当可以使得损失函数变小。
令,
因此为了使得损失函数最小: