GD

CV-梯度下降
θnext=θlastωf(θi) \Large \theta_{next} = \theta_{last} - \omega f'(\theta_i)

直到
f(θnext)=0 \Large f'(\theta_{next}) = 0
对于一般的凸函数,其中的θ\theta是一个关于xx的函数
θi=g(xi) \Large \theta _i = g(x_i)
也就是说,给定一个f(x)f(x)的时候,我们只能确定一个θ\theta,只有全面的遍历所有样本,我们才能够的到f(θ)f(\theta)
J(θ)=12i=1m(fθ(xi)yi)2 最小二乘法: J(\theta) =\frac{1}{2}\sum^{m}_{i=1}(f_\theta(x_i) - y_i)^2
一次性全部展开
θnext=θlastwf(θi)=θlastwf(g(xi)) \begin{aligned} \Large \theta_{next} =& \theta_{last} - wf'(\theta_i) \\ \\ \Large = & \theta_{last} - wf'(g(x_i)) \end{aligned}
但是一般来说,样本不少,直接计算是在耗费资源。

更主要的是,为了刨除一些特殊性质,会打乱样本的顺序进行再次训练,以为提高适应性。
nm,n×m 假设样本个数为n,训练次数为m,总共重复计算量为n \times m

BGD

批量梯度下降,它的有优点在于把随机样本顺序隐藏到了计算步骤当中。
S,nSi,ni{SiSnin 假设总样本为S, 个数为n\\则每次训练的样本集为S_i,样本为n_i \\ \left\{ \begin{matrix} S_i \in S \\ n_i \le n \end{matrix} \right.
ni=nn_i = n的时候,就成了一般的梯度下降方法了。

piSip_i \in S_i的时候,得到的θ\theta是仅适用于pip_i这些点的极值参数。

为了适配全部的点,就应该多组的进行训练,遍历全部样本。

它显式的优势在于,减少了每次计算的计算量,可以通过重复计算来慢慢增加精度。

隐式的优势在于,它把一个一次性达成目的造成的大量计算,拆分成了分步达成,从时间上进行了分离。

把算力分步到了时间片上,相同算力条件下,每次的计算速度加快。

SGD

这个就更加赖皮了,如果把BGD中每次批量的数据量设置为1,也就是
ni=1 n_i = 1
也就是每次只是计算一个点,它内在的原理是进一步发掘了计算结果的累加性
θnext=θlastωf(θi) \Large \theta_{next} = \theta_{last} - \omega f'(\theta_i)
不过计算过程中,样本数据固定的话,每次只取一个样本会增加循环的次数,增加额外开销。

这种办法适合单点计算量比较大的情况下使用,否则只会适得其反
θi=f(xi) \Large \theta_i = f(x_i)

Adagrad

前面的优化办法,都是对计算聚集的拆分办法,还有一个关于学习率ww的问题
CV-梯度下降

红到绿,步子跨大了,错过了最低点。

关于学习率

  • 学习率大了,收敛速度快,但是可能错过极值点,还有反复横跳
  • 学习率太小,收敛速度太慢,计算量大
  • 全部参数使用同一个学习率,收敛慢

为此,Adagrad提出了一个适配的学习率
wi=wikg(θi)2+εkn \Large w_i = \frac{w}{\sqrt{\sum_i^kg'(\theta_i)^2 + \varepsilon}} \quad k \le n
这样一来前期时候可以设置一个较大的学习率,快速的收敛。

后期由于累积的梯度增大,学习率逐渐减小,不容易错过极值反复横跳。

更主要的是,它不一定是一维的,每个维度之间的学习率是独立的,不会在整体收敛情况下让单一维度反复横跳。

其中的ε\Large\varepsilon主要是为了避免除0的情况

RMSprop

一个数字,一直分一半,最小是多少,需要多少次。

Adagrad重心转到了学习率上面,提出一个适配的学习率,解决了诸多问题,但是也引出了一个问题

后期学习率逐渐降低,而且降低的太过分了,当累加的梯度到一个很大的地步,每次的学习率就会极小。

一米的路程,如果一步一纳米,也是很远的路程。

所以RMSprop提出这么一个观点,累加的梯度应该有一个时效性,太久远的梯度影响应该减小。
wi=2ρgi1(θi1)+(1ρ)gi(θi)2+ε \Large w_i = \frac{2}{\sqrt{\rho g'_{i-1}(\theta_{i-1}) + (1 - \rho) g'_i(\theta_i)^2+ \varepsilon}}
其中它的辅助参数只是取了上一次的梯度和当前的梯度加权和,通过ρ\Large\rho进行控制。

根据这种观点,你还可以设计一个卷积函数参数t(n)t(n)
wi=wkit(ki)gi(θi)+ε \Large w_i = \frac{w}{\sum^i_k \sqrt{t(k-i) g'_i(\theta_i) + \varepsilon}}

让辅助参数不那么大,在收敛区域学习率不会过于小,导致收敛缓慢即可。

Momentum

山羊在陡峭的地方也站的很稳,站的很稳不一定就是最低点。

可能有很多的极值点,但并非就是全局最优解,Moment的重心回到了全局最优解这个问题上面。

它朴素的思想是,容易逃离的就不是全局最优。

我们每次寻找下一个点都是根据这个表达式
θi=θi1wg(θi1) \Large \theta_i = \theta_{i-1} - wg'(\theta_{i-1})
当梯度趋于00,完全没有逃离的办法。

调整ww,太大就会左右横跳,太小就会陷入局部最优。

前面的办法都是让w在初期保持较大值,快速收敛,后期减小,都没有办法逃离局部最优,变换模式单一。

也就是说,在梯度很小的时候,不一定要保持较低的学习率进行收敛,需要适应的调整,验证一下是否全局最优。
vi=avi1wg(θi1)θi=θi1+vi \begin{aligned} \Large v_i =& \Large av_{i-1} - wg'(\theta_{i-1})\\ \Large \theta_i =& \Large \theta_{i-1} + v_i \end{aligned}
全部放在一块
θi=θi1wg(θi1)+avi1 \Large \theta_i = \theta_{i-1}- wg'(\theta_{i-1}) +av_{i-1}
也就是说,它在最后加上另一个新的控制手段,以此来对极值点进行校验。每次移动不由单一值控制,而是变成了
avi1wg(θi1) \Large av_{i-1}- wg'(\theta_{i-1})
之前的移动控制学习率的大小,通过之前梯度的影响进行计算。

但是梯度总会减小,偏移量也是一直减小的,无法对当前位置进行更好的调整。

现在加上了一个受之前状态影响的偏移量,使得可以在梯度很小的时候也能够进行偏移,逃离局部最优。

偏移的距离和上一次移动距离正相关,也就是说当梯度绝对值较大的时候偏移量也会比较大。

如果是全局最优,在反复几次偏离后,梯度逐渐减小,偏移逐渐减小,最终得到最优解。

如果是局部最优,就会偏移出局部区域,从而避免局部最优。

其中viv_i初始值为0,aa表示vv的衰减率。

Adam

mi=β1mi1+(1β1)g(θi)ni=β2ni1+(1β2)g(θi)2m^=mi1β1in^=ni1β2iθi+1=θiηm^n^+ε \begin{aligned} \Large m_i &= \Large\beta_1m_{i-1} + ( 1 - \beta_1)g'(\theta_{i}) \\ \\ \Large n_i &=\Large \beta_2 n_{i-1} +(1-\beta_2)g'(\theta_{i})^2 \\ \Large \hat m& = \Large \frac{m_i}{1 - \beta_1^i} \\ \Large \hat n &= \Large \frac{n_i}{1 - \beta_2^i} \\ \Large \theta_{i+1} &= \Large\theta_i - \frac{\eta \hat m}{\sqrt{\hat n + \varepsilon}} \end{aligned}

觉得复杂可以先这样看看
y=kx+by=k(x+bk) \Large y = kx + b \Rightarrow y = k(x + \frac{b}{k})
把原来的式子全部整合为一个
θi+1=θiηβ2ni1+(1β2)g(θi)21β2i+ε(β1mi1+(1β1)g(θi)1β1i) \Large \theta_{i+1} = \theta_i - \frac{\eta } {\sqrt{\frac{\Large \beta_2 n_{i-1} +(1-\beta_2)g'(\theta_{i})^2}{1 - \beta_2^i} + \varepsilon}} \left(\frac{\Large\beta_1m_{i-1} + ( 1 - \beta_1)g'(\theta_{i})}{1 - \beta_1^i}\right)
也就是说,AdamRMSpropMomentum的整合。让学习率ww和偏移都进行一种变化的适配。

在收敛的同时,还能避免局部最优解的限制。

相关文章:

  • 2021-06-25
  • 2021-05-31
  • 2022-12-23
  • 2021-09-16
  • 2022-12-23
  • 2021-04-19
  • 2021-05-01
猜你喜欢
  • 2021-05-20
  • 2022-12-23
  • 2021-05-25
  • 2022-03-01
  • 2021-11-12
  • 2022-02-27
相关资源
相似解决方案