方法
-
η \eta η 叫做Learning rates(学习速率)
调整学习率
缘由
- 学习速率的大小调整不能太大也不能太小
- 使用参数改变对损失函数的影响来进行可视化
自适应学习率
- 通常刚开始,初始点会距离最低点比较远,所以使用大一点的学习率
- update好几次参数之后呢,比较靠近最低点了,此时减少学习率
- 比如 η t = η t t + 1 \eta^t =\frac{\eta^t}{\sqrt{t+1}} ηt=t+1ηt, t t t 是次数。随着次数的增加, η t \eta^t ηt 减小
Adagrad 算法
-
每个参数的学习率都把它除上之前微分的均方根。
-
w t + 1 ← w t − η t σ t g t (5) w^{t+1} \leftarrow w^t -\frac{η^t}{\sigma^t}g^t \tag5 wt+1←wt−σtηtgt(5)
-
g t = ∂ L ( θ t ) ∂ w (6) g^t =\frac{\partial L(\theta^t)}{\partial w} \tag6 gt=∂w∂L(θt)(6)
-
σ t \sigma^t σt :之前参数的所有微分的均方根,对于每个参数都是不一样的。
-
原理
- 最好的步伐应该是:
一 次 微 分 二 次 微 分 \frac{一次微分}{二次微分} 二次微分一次微分 - 对于 ∑ i = 0 t ( g i ) 2 \sqrt{\sum_{i=0}^t(g^i)^2} ∑i=0t(gi)2 就是希望再尽可能不增加过多运算的情况下模拟二次微分。(如果计算二次微分,在实际情况中可能会增加很多的时间消耗)
- 最好的步伐应该是:
随机梯度下降
-
在每次更新时用1个样本,可以看到多了随机两个字,随机也就是说我们用样本中的一个例子来近似我所有的样本,来调整θ,因而随机梯度下降是会带来一定的问题,因为计算得到的并不是准确的一个梯度,**对于最优化问题,凸问题,**虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。但是相比于批量梯度,这样的方法更快,更快收敛,虽然不是全局最优,但很多时候是我们可以接受的,所以这个方法用的也比上面的多。
-
针对某个例子,计算所有参数的损失函数,然后走一步,对下一个点,重新计算损失函数,然后走一步
之前的梯度下降:
L
=
∑
n
(
y
^
n
−
(
b
+
∑
w
i
x
i
n
)
)
2
(8)
L=\sum_n(\hat y^n-(b+\sum w_ix_i^n))^2 \tag8
L=n∑(y^n−(b+∑wixin))2(8)
θ
i
=
θ
i
−
1
−
η
▽
L
(
θ
i
−
1
)
(9)
\theta^i =\theta^{i-1}- \eta\triangledown L(\theta^{i-1}) \tag9
θi=θi−1−η▽L(θi−1)(9)
而随机梯度下降法更快:
损失函数不需要处理训练集所有的数据,选取一个例子 x n x^n xn
L
=
(
y
^
n
−
(
b
+
∑
w
i
x
i
n
)
)
2
(10)
L=(\hat y^n-(b+\sum w_ix_i^n))^2 \tag{10}
L=(y^n−(b+∑wixin))2(10)
θ
i
=
θ
i
−
1
−
η
▽
L
n
(
θ
i
−
1
)
(11)
\theta^i =\theta^{i-1}- \eta\triangledown L^n(\theta^{i-1}) \tag{11}
θi=θi−1−η▽Ln(θi−1)(11)
此时不需要像之前那样对所有的数据进行处理,只需要计算某一个例子的损失函数Ln,就可以赶紧update 梯度。
特征缩放
- 两个输入的分布的范围很不一样,建议把他们的范围缩放,使得不同输入的范围是一样的。
- 如果不这样,两个方向需要有不同的学习率,同一组学习率会搞不定。做了特征缩放后,更新参数会变得容易点
类比
例子1
- 利用梯度下降法更新参数,损失函数loss function可能会不降反升(利用Mincraft解释该情况);
- 人物的前方是较低方向,右方也是较低方向,利用梯度下降法,往右前方移动一步,然后反复用梯度下降法,往右前方移动一步,周而复始;
- 尽管前方和右方是下降的方向,但往右前方移动,将会失败(因为实际右前方是比较高的地方)。
例子二
- 利用帝国时代的方式模拟梯度下降;
- 在地图上大多数位置我们是未知的,只有我们单位走过的地方是可知;
- 地图上的海拔可以看作损失函数loss function,我们的目的就是寻找海拔的最低点的值;
- 随机初始一个位置,朝向较低的方向移动,周而复始,直到local minimal(在不开天眼的情况下,你始终不会知晓所在位置是否为global minimal)。