记录一下自己的学习过程~也能让自己的印象更深吧
AdaDelta算法主要是为了解决AdaGrad算法中存在的缺陷,下面先介绍一下AdaGrad算法优点和以及存在的问题:
AdaGrad的迭代公式如下所示:
Δ x t = η ∑ i = 1 t g i 2 ∗ g t \Delta{x_{t}}=\frac{\eta}{\sqrt{\sum_{i=1}^{t}{g_i^2}}}*g_t Δxt=∑i=1tgi2η∗gt
x t = x t − 1 − Δ x t x_t=x_{t-1}-\Delta{x_t} xt=xt−1−Δxt
其中 g t g_t gt表示当前迭代次数的梯度值。
- 优点
学习率将随着梯度的倒数增长,也就是说较大梯度具有较小的学习率,而较小的梯度具有较大的学习率,可以解决普通的sgd方法中学习率一直不变的问题 - 缺点
还是需要自己手动指定初始学习率,而且由于分母中对历史梯度一直累加,学习率将逐渐下降至0,并且如果初始梯度很大的话,会导致整个训练过程的学习率一直很小,从而导致学习时间变长。
而AdaDelta算法的提出就是为了解决上述的问题,AdaDelta有两种解决方案:
改进方法一:Accumulate Over Window
- 在一个窗口
w
中对梯度进行求和,而不是对梯度一直累加 - 因为存放 w 之前的梯度是低效的,所以可以用对先前所有梯度均值(使用RMS即均方根值实现)的一个指数衰减作为代替的实现方法。
更新公式如下:
① 将累计梯度信息从全部历史梯度变为当前时间向前的一个窗口期内的累积:
E [ g 2 ] t = ρ ∗ E [ g 2 ] t − 1 + ( 1 − ρ ) ∗ g t 2 E[g^2]_t=\rho*E[g^2]_{t-1}+(1-\rho)*g_t^2 E[g2]t=ρ∗E[g2]t−1+