【深度学习(deep learning)】花书第8章 深度模型中的优化 读书笔记

【深度学习(deep learning)】花书第8章 深度模型中的优化 读书笔记


前言

打基础,阅读花书,感觉一次性啃不动。看一点算一点,写一点笔记留作纪念。以便日后查看与回顾。内容分类是按照第八章开头的一段介绍划分的,感觉比目录划分得更清晰。 2020.11.24-2020.11.26

以下是正式内容。

一、学习与优化的关系

深度学习中涉及的优化问题中最难的是神经网络训练。
训练实质上总是基于梯度的优化。

深度模型训练的优化算法与传统的优化算法的区别:

1.机器学习关注性能度量P,转化为损失函数J,希望降低损失函数而提升P,从而达到 间接优化 P的目的。纯优化的目的就是最小化J。

2.代价函数J可以定义为基于训练集的误差的平均,也就是数据经验分布下的期望(经验风险)。而机器学习算法的终极目标是优化基于数据生成分布下的损失的期望(风险)。而真实分布通常不可知,则使用经验分布代替真实分布,即经验风险最小化。在这一点上与传统优化是一致的。但是机器学习中,基于梯度的经验风险最小化并非真的可行。

3.损失函数的原始定义应该是0-1损失,但是这个损失数学性质不好,不适合优化。而训练过程中,一般使用替代损失函数,如指数损失函数/对数损失函数/合页损失函数等。

4.使用替代损失的训练优化,会在满足提前终止(早停)条件时停止,判断早停条件使用的是原始的0-1损失函数,这时替代损失函数可能仍然有较大的导数。而纯优化在终止在损失函数的局部极值点,导数会比较小。

5.机器学习算法的目标函数可以分解为样本上的求和。这样在优化的时候就可以只计算一部分样本的损失来估计整体的期望。可以根据这个量的大小,分为批量(全部样本),小批量(一部分样本),随机(一个样本)。

二、神经网络优化中存在的挑战

神经网络的优化总是非凸的,这就是一个很不利的先天条件。

1.病态

一般指hessian矩阵的病态。
病态是指对输入的轻微扰动都会引起巨大改变的情况,这种敏感性是矩阵的固有属性。病态会使误差在计算中放大。
病态在神经网络训练过程中体现为随机梯度下降会卡在某些位置,即使更新很小的步长也会使代价函数增加。

2.局部极小

在凸优化中,局部极小就是全局最小。但是非凸情况下,容易陷入局部极小。
神经网络的非凸是多方面原因造成的。一方面是代价函数本身的非凸性。另一方面是因为模型可辨识性问题导致了神经网络甚至拥有非常多甚至无数多的局部极小。
另外,对于神经网络,局部极小很多不可怕,可怕的是局部极小很大。如果得到的是很小的局部极小也是可接受的。

3.鞍点

鞍点,一阶导数同样为0.且鞍点的数目远多于局部极值点(高维空间中)。鞍点附近同时存在“上坡”与“下坡”,hessian矩阵同时具有正负特征值,位于正特征值得特征向量方向的点比鞍点值要大(上坡),位于负特征值方向的点比鞍点小。而鞍点的代价通常会比局部极值点的代价高。
对于一阶优化算法,鞍点不构成严峻的问题,很多梯度下降算法都可以逃离鞍点。
对于二阶优化算法,鞍点就是很大的问题。因为二阶算法的目的就是寻找梯度为0的点,显然鞍点就是,所以牛顿法就会跳进鞍点。有改进算法如 无鞍牛顿法可以缓解这一问题,但是还难以扩展到大型网络。
如果是一大片鞍点组成了平原,依旧是所有数值优化的主要问题。

4.梯度爆炸

存在像悬崖一样的斜率非常大的区域,是由几个很大的参数连乘所导致的。在循环神经网络中很常见。
我们希望顺着悬崖而下,贴着走。但是遇到悬崖时通常会顺着斜率方向飞出去,飞到很远的地方。
可以使用启发式梯度截断,来缓解这种情况:当计算出一个很大的梯度,要更新很大一步时,梯度截断会干涉,减小步长。

5.长期依赖

当计算图变得很深的时候,模型会丧失学习先前信息的能力。在循环网络中尤其突出。
比如,一条反复与矩阵W相乘的计算路径,即对W求t次幂,做特征值分解后即特征对角矩阵的t次幂,若特征值比1大,则会爆炸(梯度爆炸),若小于1,则会趋于0(梯度消失).
前馈网络中一般不会进行大规模的幂运算,能在很大程度上避免梯度消失与爆炸。

6.近似梯度

目标函数不可解,且样本含有噪声,会导致梯度不能精确计算。
可以基于小批量采样样本的估计近似替代精确梯度,当目标函数不可解时,使用替代损失函数。

7.局部 != 全局(贪心)

无论是梯度爆炸“悬崖”,梯度消失“平原”,鞍点“山鞍”,局部极值“山谷”都是某个点上(局部)的问题,解决了这个局部问题并不代表就真的改善了全局问题的求解。
跳出某条错误的下山的路,只是跳到了另外一条路上,但不一定是跳到了正确的通往山底的路,可能只是跳到了另一条通往另一个悬崖/山谷/平原的路,或者舍近求远的路上。
也就是说,梯度下降在局部只能保证是下山的路,但这条路不一定通往山底。本质上是因为梯度下降等训练算法都是贪心的,只能找到当前的一个最优解/可行解。我们希望跳出错误的路的同时,朝着正确的路(全局最优/可行)的方向前进。
可行的改良办法是进行良好的初始化。山底在山的这一面,如果初始化在山的另一面可能无论如何也找不到通往山底的路,如果初始化在山底那就更好了。

8.优化算法自身的限制

理论上,优化算法有限制,但是不影响在神经网络中的实际应用。

三、经典的优化算法

3.1 (批量)梯度下降

批量梯度下降就是使用全部的样本计算梯度,对于深度模型来说,计算量太大,不太可行。因此使用部分数据进行估计,即小批量梯度下降,就是随机梯度下降。

梯度的实际计算是通过反向传播算法完成的。

3.2 随机梯度下降 SGD

随机梯度下降:Stochastic Gradient Descent,SGD。机器学习中应用最广泛的优化算法。

SGD迭代流程:
     1. 采集包含m(batch size)个样本的小批量(minibatch)(独立同分布)
     2.计算它们的梯度均值,得到梯度的无偏估计
g ^ ← + 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{\hat{g}}\gets +\frac{1}{m}\nabla _{\boldsymbol{\theta }}\sum{_iL\left( f\left( \boldsymbol{x}^{\left( i \right)};\boldsymbol{\theta } \right) ,\boldsymbol{y}^{\left( i \right)} \right)} g^+m1θiL(f(x(i);θ),y(i))
     3.更新参数
θ ← θ − ϵ g ^ \boldsymbol{\theta }\gets \boldsymbol{\theta }-\epsilon \boldsymbol{\hat{g}} θθϵg^

注:

  1. 学习率是关键参数,学习率需要随着训练而逐步降低,即自适应的
    ϵ ← ϵ k \epsilon \gets \epsilon _k ϵϵk
    通常使用线性衰减(直到第τ次迭代),之后使ε保持常数 ϵ k   =   ( 1 − α ) ϵ 0 + α ϵ τ   ,   α = k τ \epsilon _k\ =\ \left( 1-\alpha \right) \epsilon _0+\alpha \epsilon _{\tau \ },\ \alpha =\frac{k} {\tau} ϵk = (1α)ϵ0+αϵτ , α=τk
  2. 初始学习率的设置也很关键。如果太大,会震荡(步长太大,反复横跳);如果太小,就会收敛很慢。
  3. SGD会面临 :局部极值、鞍点的问题,梯度为0;峡谷(病态)的问题,理论上应该顺着峡谷下降,但是因为采样噪声/计算等原因,梯度不精准,就会碰到峡谷的一壁(梯度很大),然后就会在峡谷两壁疯狂碰撞。

3.3 动量 Momentum

改进SGD,一方面加速学习,另一方面改善病态条件/梯度噪声(峡谷)等问题。
具体地,动量引入了变量v,充当速度(代表参数在参数空间运动地方向和速率)。(动量 = 单位质量 * 速度 = 速度,带来的物理意义是考虑了质量惯性

更新规则:
v ← α v − ϵ ∇ θ ( 1 m ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) ) \boldsymbol{v}\gets \alpha \boldsymbol{v}-\epsilon \nabla _{\boldsymbol{\theta }}\left( \frac{1}{m}\sum{_iL\left( f\left( \boldsymbol{x}^{\left( i \right)};\boldsymbol{\theta } \right) ,\boldsymbol{y}^{\left( i \right)} \right)} \right) vαvϵθ(m1iL(f(x(i);θ),y(i))) θ ← θ + v \boldsymbol{\theta }\gets \boldsymbol{\theta }+\boldsymbol{v} θθ+v

Momentum 迭代流程:
     1. 采集包含m个样本的小批量(独立同分布)
     2. 计算它们的梯度均值,
g ← + 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{g}\gets +\frac{1}{m}\nabla _{\boldsymbol{\theta }}\sum{_iL\left( f\left( \boldsymbol{x}^{\left( i \right)};\boldsymbol{\theta } \right) ,\boldsymbol{y}^{\left( i \right)} \right)} g+m1θiL(f(x(i);θ),y(i))
     3.计算速度更新 v ← α v − ϵ g \boldsymbol{v}\gets \alpha \boldsymbol{v}-\epsilon \boldsymbol{g} vαvϵg
     4.更新参数 θ ← θ + v \boldsymbol{\theta }\gets \boldsymbol{\theta }+\boldsymbol{v} θθ+v
注:

  1. 动量不仅考虑了当前的梯度,还考虑了历史的梯度,如果梯度序列一直指向相同的方向,那么步长会变化到最大。
  2. 引入了超参数α,它也需要随着时间推移而调整,由小变大(一开始历史方向不怎么重要,但是随着运动起来,惯性越来越大)。但是调整α没有调整ε重要。

3.4 Nesterov 动量

动量算法的变种。在标准动量中加入了校正因子。标准动量将历史梯度方向和当前梯度方向合并后更新,而nesterov动量是按照历史梯度先走一步,之后利用当前梯度再进行修正。梯度计算是在施加当前速度之后,所以说是一个校正因子。

Nesterov 动量迭代流程:
     1. 采集包含m个样本的小批量(独立同分布)
     2.按照历史梯度先走一步,临时更新 θ ~ ← θ + α v \boldsymbol{\tilde{\theta}}\gets \boldsymbol{\theta }+\alpha \boldsymbol{v} θ~θ+αv
     3.在临时点上计算梯度 g ← + 1 m ∇ θ ~ ∑ i L ( f ( x ( i ) ; θ ~ ) , y ( i ) ) \boldsymbol{g}\gets +\frac{1}{m}\nabla _{\boldsymbol{\tilde{\theta} }}\sum{_iL\left( f\left( \boldsymbol{x}^{\left( i \right)};\boldsymbol{\tilde{\theta} } \right) ,\boldsymbol{y}^{\left( i \right)} \right)} g+m1θ~iL(f(x(i);θ~),y(i))
     4.更新速度 v ← α v − ϵ g \boldsymbol{v}\gets \alpha \boldsymbol{v}-\epsilon \boldsymbol{g} vαvϵg     5.更新参数 θ ← θ + v \boldsymbol{\theta }\gets \boldsymbol{\theta }+\boldsymbol{v} θθ+v
注:
对凸优化的批量梯度下降有改进,对于SGD没有改进收敛率。

四、更高级的优化算法

4.1 自适应优化算法

自适应:学习率是最难调整和最重要的超参数,希望它可以根据模型当前的状况,自动的改变取值,以更好地适应训练。

4.1.1 AdaGrad

给参数θ配一个描述这个方向上梯度下降速度的参数r,具有损失最大偏导的参数相应地有一个快速下降的学习率,具有较小偏导的参数对应下降较小的学习率。也就是越陡的方向,控制学习率快速下降(步长逐步变小);到平坦的地方,控制学习率不要下降太多(步长不能太小,甚至逐步变大)。而r定义为历史梯度平方值的总和的平方根(历史梯度序列的L2范数)。根据r去缩放(反比关系)学习率。

AdaGrad 迭代流程
     1. 采集包含m个样本的小批量(独立同分布)
     2. 计算它们的梯度均值,
g ← + 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{g}\gets +\frac{1}{m}\nabla _{\boldsymbol{\theta }}\sum{_iL\left( f\left( \boldsymbol{x}^{\left( i \right)};\boldsymbol{\theta } \right) ,\boldsymbol{y}^{\left( i \right)} \right)} g+m1θiL(f(x(i);θ),y(i))     3. 累计平方梯度 r ← r + g ⊙ g \boldsymbol{r}\gets \boldsymbol{r}+\boldsymbol{g}\odot \boldsymbol{g} rr+gg     4.计算更新量 Δ θ ← − ϵ δ + r ⊙ g \varDelta \boldsymbol{\theta }\gets -\frac{\epsilon}{\delta +\sqrt{r}}\odot \boldsymbol{g} Δθδ+r ϵg     5.更新参数 θ ← θ + Δ θ \boldsymbol{\theta }\gets \boldsymbol{\theta }+\varDelta \boldsymbol{\theta } θθ+Δθ
注:

  1. δ是一个小常数,为了数值稳定,设置在10^-7左右
  2. 历史梯度会在r上不断累积,最终分母越来越大,学习率越来越小,最造成学习迟缓的问题

4.1.2 RMSProp

对AdaGrad进行修改,缓解其过度衰减的问题,将梯度积累改为指数加权的移动的平均(指数衰减平均),这样可以丢弃一部分过于遥远的历史,使算法在进入山谷范围时快速收敛。引入一个超参数ρ,控制衰减率。

RMSProp 迭代流程
     1. 采集包含m个样本的小批量(独立同分布)
     2. 计算它们的梯度均值,
g ← + 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{g}\gets +\frac{1}{m}\nabla _{\boldsymbol{\theta }}\sum{_iL\left( f\left( \boldsymbol{x}^{\left( i \right)};\boldsymbol{\theta } \right) ,\boldsymbol{y}^{\left( i \right)} \right)} g+m1θiL(f(x(i);θ),y(i))     3. 累计平方梯度 r ← ρ r + ( 1 − ρ ) g ⊙ g \boldsymbol{r}\gets \rho \boldsymbol{r}+(1-\rho)\boldsymbol{g}\odot \boldsymbol{g} rρr+(1ρ)gg     4.计算更新量 Δ θ ← − ϵ δ + r ⊙ g \varDelta \boldsymbol{\theta }\gets -\frac{\epsilon}{\sqrt{\delta +r}}\odot \boldsymbol{g} Δθδ+r ϵg     5.更新参数 θ ← θ + Δ θ \boldsymbol{\theta }\gets \boldsymbol{\theta }+\varDelta \boldsymbol{\theta } θθ+Δθ
注:

  1. δ是一个小常数,为了数值稳定,设置在10^-6左右
  2. 历史梯度每计算一次就会乘上一个系数ρ,越是古老的梯度计算次数越多,ρ的指数越大,对应的历史梯度项就会越小。达到遗忘过去的效果。
  3. 可以应用在Nesterov动量算法上。

4.1.3 AdaDelta

同样使用指数衰减的平均作为约束,但是不是针对学习率,而是直接针对参数的增量。

AdaDelta更新过程:
     1. 采集包含m个样本的小批量(独立同分布)
     2. 计算它们的梯度均值,
g ← + 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{g}\gets +\frac{1}{m}\nabla _{\boldsymbol{\theta }}\sum{_iL\left( f\left( \boldsymbol{x}^{\left( i \right)};\boldsymbol{\theta } \right) ,\boldsymbol{y}^{\left( i \right)} \right)} g+m1θiL(f(x(i);θ),y(i))     3. 累计平方梯度 r ← ρ r + ( 1 − ρ ) g ⊙ g \boldsymbol{r}\gets \rho \boldsymbol{r}+(1-\rho)\boldsymbol{g}\odot \boldsymbol{g} rρr+(1ρ)gg     4.计算参数增量 Δ θ ← − δ + Δ θ δ + r ⊙ g \varDelta \boldsymbol{\theta }\gets -\frac{\sqrt{\delta +\varDelta \boldsymbol{\theta }}}{\sqrt{\delta +r}}\odot \boldsymbol{g} Δθδ+r δ+Δθ g     5计算更新量 Δ θ t ← ρ Δ θ t − 1 + ( 1 − ρ ) Δ θ ⊙ Δ θ \varDelta \boldsymbol{\theta }_t\gets \rho \varDelta \boldsymbol{\theta }_{t-1}+\left( 1-\rho \right) \varDelta \boldsymbol{\theta }\odot \varDelta \boldsymbol{\theta } ΔθtρΔθt1+(1ρ)ΔθΔθ

     6.更新参数 θ ← θ + Δ θ t \boldsymbol{\theta }\gets \boldsymbol{\theta }+\varDelta \boldsymbol{\theta }_t θθ+Δθt
注:在这个算法中已经不存在学习率这个参数了,算法直接维护参数的更新量

4.1.4 Adam

动量与RMSProp的结合。保留了动量中的梯度一阶衰减(指数平均),和RMSProp中的历史梯度平方和衰减(二阶衰减,指数平均)。且Adam包含修正。
RMSProp 迭代流程
     1. 采集包含m个样本的小批量(独立同分布)
     2. 计算它们的梯度均值,
g ← + 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{g}\gets +\frac{1}{m}\nabla _{\boldsymbol{\theta }}\sum{_iL\left( f\left( \boldsymbol{x}^{\left( i \right)};\boldsymbol{\theta } \right) ,\boldsymbol{y}^{\left( i \right)} \right)} g+m1θiL(f(x(i);θ),y(i))      3. 累计一阶有偏估计 s ← ρ 1 s + ( 1 − ρ 1 ) g \boldsymbol{s}\gets \rho_1 \boldsymbol{s}+(1-\rho_1)\boldsymbol{g} sρ1s+(1ρ1)g     4. 累计二阶有偏估计 r ← ρ 2 r + ( 1 − ρ 2 ) g ⊙ g \boldsymbol{r}\gets \rho_2 \boldsymbol{r}+(1-\rho_2)\boldsymbol{g}\odot \boldsymbol{g} rρ2r+(1ρ2)gg     5. 修正一阶估计 s ^ ← s 1 − ρ 1 t \boldsymbol{\hat{s}}\gets \frac{\boldsymbol{s}}{1-\rho _{1}^{t}} s^1ρ1ts     6. 修正二阶估计 r ^ ← r 1 − ρ 2 t \boldsymbol{\hat{r}}\gets \frac{\boldsymbol{r}}{1-\rho _{2}^{t}} r^1ρ2tr     7.计算更新量 Δ θ ← − ϵ s ^ r ^ + δ \varDelta \boldsymbol{\theta }\gets -\epsilon \frac{\boldsymbol{\hat{s}}}{\sqrt{\boldsymbol{\hat{r}}}+\delta} Δθϵr^ +δs^     8.更新参数 θ ← θ + Δ θ \boldsymbol{\theta }\gets \boldsymbol{\theta }+\varDelta \boldsymbol{\theta } θθ+Δθ
注:

  1. 用动量代替了单纯的当前梯度(步骤7中)
  2. ρ的默认推荐值都很大,接近1
  3. 偏差修正的分母是历史梯度记录的权重之和。也就是说原始r中历史梯度权重之和不为1,现在要修正它为1.

4.2 二阶优化算法(略)

使用二阶导数信息(hessian矩阵)指导参数更新步长。

4.2.1 牛顿法

在某个点θ进行泰勒二阶展开近似,求解临界点,得到更新规则:
θ ∗ = θ 0 − H − 1 ∇ θ J ( θ 0 ) \boldsymbol{\theta }^*=\boldsymbol{\theta }_0-\boldsymbol{H}^{-1}\nabla _{\boldsymbol{\theta }}J\left( \boldsymbol{\theta }_0 \right) θ=θ0H1θJ(θ0)对于局部的二次函数(H正定),直接跳进极小值。
局部凸但是非二次,迭代更新逼近极小值。
为了避免牛顿法一头扎进鞍点跳不出来,可以对hessian矩阵正则化(在对角线上加一个常数)。
除了鞍点问题,牛顿法还受到计算/存储等方面的巨大压力。

4.2.2 共轭梯度

通过迭代下降的共轭方向避免hessian矩阵求逆。
直角折线型前进,效率较低。

4.2.3 拟牛顿法

不用二阶偏导数,而是在“拟牛顿” 的条件下构造出可以近似海森矩阵(或海森矩阵的逆) 的正定对称阵。

4.2.4 BFGS

使用矩阵M(迭代更新)近似海恩矩阵的逆。
当M更新时,下降方向与步长(步长是由该方向上的线搜索决定的)也更新,最后更新参数。
ρ t = M t g t \boldsymbol{\rho }_t=\boldsymbol{M}_t\boldsymbol{g}_t ρt=Mtgt θ t + 1 = θ t + ϵ ∗ ρ t \boldsymbol{\theta }_{t+1}=\boldsymbol{\theta }_{t}+\epsilon ^*\boldsymbol{\rho}_t θt+1=θt+ϵρt

五、优化策略

5.1 参数初始化(略)

1.基于梯度的优化,都需要参数有一个初值,参数的初始化就很重要。
2.偏置项(及其他零散的参数)可以启发式地选取一个常数,偏执起初设置为0一般都是可行的。
3.权重为高斯分布或均匀分布中随即采样。
4.要打破单元之间的对称性,相同状况(输入/激活函数一致)的两个隐层单元应该有不同的参数。
5.权重大一点有好处,有助于破坏对称性并稳定传播,但是过大的权重可能会爆炸。
6.参数初始化可以接近0.

5.1.1 随机初始化

从一个高斯分布或者均匀分布中随机采样

5.1.2 Glorot 标准初始化

W i , j ∽ U ( − 6 m + n , 6 m + n ) W_{i,j}\backsim U\left( -\sqrt{\frac{6}{m+n}},\sqrt{\frac{6}{m+n}} \right) Wi,jU(m+n6 ,m+n6 )m是全连接层的输入,n是输出大小

5.1.3 稀疏初始化

每个单元的初始化恰好有k个非零权重,使得参数初始化不独依赖输入m。

5.1.4 偏置初始化

一般设为0即可。

  1. 输入单元:设置偏置为输出边缘统计的激活函数的逆。
  2. 避免饱和:在relu中,偏置应该是一个小的非零整数,避免初始化时饱和。
  3. 门单元:接近1.

5.2 批标准化(Batch Normalization)

自适应的重参数化的方法。
在逐层训练的过程中,数据的分布会发生偏移。
BatchNorm 是规范化,把每层神经元输⼊值的分布拉回均值为0、方差为1 的标准正态分布,这样激活输⼊值落在非线性函数对输入比较敏感的区域,避免梯度消失问题产⽣,梯度变⼤使得学习收敛速度快。

1.标准化:
计算均值μ与方差σ,在计算方差时,会加入一个小常数,防止爆0. 然后广播到整个输入矩阵。
H ′ = H − μ σ ,   H i , j ′ = H i , j − μ j σ j \boldsymbol{H'}=\frac{\boldsymbol{H}-\boldsymbol{\mu }}{\boldsymbol{\sigma }},\ H'_{i,j}=\frac{H_{i,j}-\mu _j}{\sigma _j} H=σHμ, Hi,j=σjHi,jμj
2.标准化后,会对网络的表达能力产生影响,为了恢复数据的表达能力,进行修正γ和β是可学习的参数:
H = γ H ′ + β \boldsymbol{H}=\gamma \boldsymbol{H'}+\beta H=γH+β

这意味着:我们抹掉了原本数据自然变化后附带得复杂的相关关联,然后使用一个人工的可学习得均值方差去拟合丢失信息。

5.3 坐标下降

非梯度的优化算法。
一次根据一个变量优化f,然后轮替变量优化,迭代下降。
块坐标下降根据一个子集进行优化。

5.4 Polyak平均

对参数的访问轨迹上的几个点的平均进行优化。
第t次迭代:
θ ^ ( t ) = 1 t ∑ i θ ^ ( i ) \boldsymbol{ \hat\theta }^{\left( t \right)}=\frac{1}{t}\sum_i{\boldsymbol{\hat\theta }^{\left( i \right)}} θ^(t)=t1iθ^(i)对于非凸问题,使用指数衰减: θ ^ ( t ) = α θ ^ ( t − 1 ) + ( 1 − α ) θ ( t ) \boldsymbol{\hat{\theta}}^{\left( t \right)}=\alpha \boldsymbol{\hat{\theta}}^{\left( t-1 \right)}+\left( 1-\alpha \right) \boldsymbol{\theta }^{\left( t \right)} θ^(t)=αθ^(t1)+(1α)θ(t)

5.5 监督预训练

预训练:先求一个简化问题、训练简单模型。
贪心策略:将复杂问题拆解成许多部分,每个部分求解最优值。在整体解并不是最优的情况下,进行一个精调

参考资料

1.机器学习,周志华
2.统计学习方法,第二版,李航
3.https://zhuanlan.zhihu.com/p/38431213
4.https://github.com/MingchaoZhu/DeepLearning
5.https://www.bilibili.com/video/BV1kE4119726?p=5&t=1340
6.https://zhuanlan.zhihu.com/p/22252270
7.https://www.cnblogs.com/neopenx/p/4768388.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值