【深度学习-笔记】(1)--优化器

【深度学习-笔记】(1)–优化器

个人笔记,记录思考过程,已注明参考文献。
如果你看不懂他,可以试着先去接受他。就好像,打不过就加入。

一、优化器

1. 梯度下降相关

1.1 梯度下降法(Gradient Descent Algorithm,GD)

一层感知机的正向传递过程
在这里插入图片描述
在这里插入图片描述

a 1 [ l − 1 ] a_{1}^{[l-1]} a1[l1]:表示第 [ l − 1 ] [l-1] [l1]层中第 1 1 1个感知机的输出。那么第 [ l − 1 ] [l-1] [l1]层的总输出为 a [ l − 1 ] a^{[l-1]} a[l1]
W i , 1 [ l ] W_{i,1}^{[l]} Wi,1[l]:”表示第 [ l ] [l] [l]层的第 i i i个感知机上的对应上一层第 1 1 1个输入的权重信息。而 b i [ l ] b_{i}^{[l]} bi[l]表示偏置。
那么第 [ l ] [l] [l]层将所有输入整合过后的结果为 z i [ l ] z_{i}^{[l]} zi[l],计算过程为:

在这里插入图片描述

最后通过激活函数(sigmoid)得到该感知机的输出
σ ( z i [ l ] ) = a i [ l ] \sigma(z_{i}^{[l]})=a_{i}^{[l]} σ(zi[l])=ai[l]
多个感知机的正向传递过程
在这里插入图片描述
在这里插入图片描述

那么,隐藏层的输出结果可以假设为 a [ l ] a^{[l]} a[l](二分类任务中)或者是 a i [ l ] a_{i}^{[l]} ai[l](多分类任务中)
引入损失函数

​ 这里使用交叉熵损失函数(PS:详见第二章第一节交叉熵损失函数),简单定义为:
J ( y ( k ) , a [ l ] ( k ) ) J(y^{(k)},a^{[l](k)}) J(y(k),a[l](k))
其中, y ( k ) y^{(k)} y(k)表示标签,来源于人工标注,可以是分类任务的 l a b e l {label} label,亦或是分割任务中的 m a s k {mask} mask
具体的,输入数据定义为: x = ( x ( 1 ) , x ( 2 ) , . . , x ( k ) , . . . , x ( m ) {x=(x^{(1)},x^{(2)},..,x^{(k)},...,x^{(m)}} x=(x(1),x(2),..,x(k),...,x(m), m {m} m表示一个batch的大小, k {k} k为一个 b a t c h {batch} batch中的第 k {k} k个数据。
对于像素级的分割任务来说,每个像素点都是有具体划分的,因此,
在这里插入图片描述
x 1 ( k ) {x_{1}^{(k)}} x1(k)表述第 k {k} k个数据中的第一个像素点的值。而 a 1 ( 0 ) {a_{1}^{(0)}} a1(0)则为第0层中第1个像素点的输出。
那么综上,损失已经得到,下面开始反向传播。
反向传播
在这里插入图片描述
以上过程为反向传播的具体公式表示。 η \eta η 表示学习率 l r lr lr
可以看到,梯度下降法是基于输入数据量大小进行计算的。

1.2 批量梯度下降法(Batch Gradient Descent, BGD)

批量梯度下降法是最原始的形式,相对于 1.1 {1.1} 1.1中所描述的一样,这里是指所有的样本(整个数据集)。
优点:
 (1)一次迭代是对所有样本进行计算,此时利用矩阵进行运算,实现了并行。
 (2)由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,批量梯度下降一定能够得到全局最优解。
缺点:
 (1)有时我们会遇到样本数目 m 很大的训练集合,如果有几十上百万,甚至上亿的训练样本。这意味着我们每执行一次批梯度下降算法,都要对m个样本进行求和。我们的程序也就需要检测这上百万的样本,甚至我们完成值下降的第一步都十分困难。这样会导致,训练过程很慢,花费很长的时间。

1.3 随机梯度下降法(Stochastic Gradient Descent, SGD)

相比于批量梯度下降取全部样本的交叉熵之和后去平均的方法,随机梯度下降则将交叉熵平方后再除以2,意思是说每次迭代使用一个样本来对参数进行更新。这样能够使训练速度加快。(batch_size=1)
优点:
 (1)由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。
缺点:
 (1)准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
 (2)可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
 (3)不易于并行实现。

1.4 小批量梯度下降法(Mini-batch Gradient Descent, MBGD)

考虑到批梯度的方式在每次迭代时都要使用到所有的样本,这徒然增加了计算成本,因此,小批量梯度下降法(MBGD)利用了部分样本代替所有样本来参与计算的思想,引入了mini-batch的概念。
假定mini-batch为10个样本,总样本为100个,则每10个样本进行一次改变权值。可以认为mini-batch等于batch,所以,batch的大小直接影响了模型的训练速度与寻优能力。
batch的选择带来的影响:
 (1)在合理地范围内,增大batch的好处:
   a. 内存利用率提高了,大矩阵乘法的并行化效率提高。
   b. 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
   c. 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
 (2)盲目增大batch的坏处:
   a. 内存利用率提高了,但是内存容量可能撑不住了。
   b. 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
   c. batch增大到一定程度,其确定的下降方向已经基本不再变化。
优点:
 (1)通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
 (2)每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。(比如上例中的30W,设置batch_size=100时,需要迭代3000次,远小于SGD的30W次)
 (3)可实现并行化。
缺点:
 (1)batch_size的不当选择可能会带来一些问题。

2. 动量法相关

写在前面: θ \theta θ(参数)的移动基于动量 m t m_{t} mt

2.1 动量法(Momentum)

在这里插入图片描述
动量法在实际梯度优化时表现方式如上图所示。其具体公式如下:
g t = ∇ J ( θ t − 1 ) m t = β 1 ∗ m t − 1 − l r ∗ g t θ = θ t − 1 + m t g_{t}=\nabla J(\theta_{t-1})\\ {m}_{t}=\beta_{1}*{m}_{t-1}-{lr} *{g}_{t} \\ \theta=\theta_{t-1}+{m}_{t} gt=J(θt1)mt=β1mt1lrgtθ=θt1+mt
其中, m t {m}_{t} mt一阶动量 β 1 \beta_{1} β1是动量因子, t t t表示迭代的次数, l r {lr} lr表示学习率, J J J为模型目标函数, θ t \theta_{t} θt表示当前迭代时需要更新的模型参数, g t g_{t} gt是目标函数的梯度。

2.2 Nesterov Momentum

m t = β 1 ∗ m t − 1 − l r ∗ ∇ J ( θ t − 1 + β 1 ∗ m t − 1 ) θ t = θ t − 1 + m t m_{t}=\beta_{1} * m_{t-1}-{lr}* \nabla J\left(\theta_{t-1}+\beta_{1} * m_{t-1}\right) \\ \theta_{t}=\theta_{t-1}+m_{t} mt=β1mt1lrJ(θt1+β1mt1)θt=θt1+mt

5. Adagrad

针对于学习率,对学习率进行自适应约束,间接影响参数。
n t = n t − 1 + g t 2 Δ θ t = − l r n t + ε ∗ g t θ t = θ t − 1 + Δ θ t n_{t}=n_{t-1}+g_{t}^{2} \\ \Delta \theta_{t}=-\frac{lr}{\sqrt{n_{t}+\varepsilon}} * g_{t} \\ \theta_{t}=\theta_{t-1}+\Delta \theta_{t} nt=nt1+gt2Δθt=nt+ε lrgtθt=θt1+Δθt
其中 ε \varepsilon ε很小,为了保证分母不为0; n t n_{t} nt是梯度平方的累积,为二阶动量,初始为0;
优点:不需要手工调节学习率,在稀疏数据场景下效果较好,对于经常更新的参数,我们已经积累了大量关于它的知识,不希望被单个样本影响太大,希望学习速率慢一些;对于偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学一些,即学习速率大一些。
缺点:随着时间的增长,单调增长,单调减少,有可能过早的变为0,训练过早的结束。而且依然依赖与人工设定的学习率。

6. RMSprop

由于AdaGrad单调递减的q学习率变化过于激进,RMSprop只关注过去一段时间的梯度平均值,离的时间越远越不重要。
n t = β 1 n t − 1 + ( 1 − β 1 ) g t 2 Δ θ t = − l r n t + ε ∗ g t θ t = θ t − 1 + Δ θ t n_{t}=\beta_{1} n_{t-1}+\left(1-\beta_{1}\right) g_{t}^{2} \\ \Delta \theta_{t}=-\frac{lr}{\sqrt{n_{t}+\varepsilon}} * g_{t} \\ \theta_{t}=\theta_{t-1}+\Delta \theta_{t} nt=β1nt1+(1β1)gt2Δθt=nt+ε lrgtθt=θt1+Δθt
n t n_{t} nt是梯度平方的累积,为二阶动量,初始为0; β 1 {\beta}_{1} β1为动量因子。

7. Adadelta

RMSprop依然需要自己设定全局学习率,因此Adadelta在RMSprop的基础上,用参数更新的平方来替代全局学习率的位置,这样就可以省略全局学习率了。
解决两个问题:
1.在整个训练过程中,学习率不断下降;
2.需要手动选择全局学习率。
n t = β 1 n t − 1 + ( 1 − β 1 ) g t 2 V t = γ V t − 1 + ( 1 − γ ) △ θ t 2 Δ θ t = − V t + ε n t + ε ∗ g t θ t = θ t − 1 + Δ θ t n_{t}=\beta_{1} n_{t-1}+\left(1-\beta_{1}\right) g_{t}^{2} \\ V_{t}=\gamma V_{t-1}+(1-\gamma) \triangle \theta_{t}^{2} \\ \Delta \theta_{t}=-\frac{\sqrt{V_{t}+\varepsilon}}{\sqrt{n_{t}+\varepsilon}} * g_{t} \\ \theta_{t}=\theta_{t-1}+\Delta \theta_{t} nt=β1nt1+(1β1)gt2Vt=γVt1+(1γ)θt2Δθt=nt+ε Vt+ε gtθt=θt1+Δθt

8. 自适应矩估计(Adaptive moment estimation,Adam)

融合一阶动量和二阶动量。
m t = β 1 m t − 1 + ( 1 − β 1 ) g t n t = β 2 n t − 1 + ( 1 − β 2 ) g t 2 m_{t}=\beta_{1} m_{t-1}+\left(1-\beta_{1}\right) g_{t}\\ n_{t}=\beta_{2} n_{t-1}+\left(1-\beta_{2}\right) g_{t}^{2} mt=β1mt1+(1β1)gtnt=β2nt1+(1β2)gt2
因为当 m t m_{t} mt n t n_{t} nt一开始被初始化为 0 时,最初的几步通常会偏向0,表示参数更新太慢。
他们使用偏差纠正系数,来修正一阶矩和二阶矩的偏差:
m ^ t = m t 1 − β 1 t n t ^ = n t 1 − β 2 t Δ θ t = − η ∗ m ^ t n ^ t + ε θ t = θ t − 1 + Δ θ t \hat{m}_{t}=\frac{m_{t}}{1-\beta_{1}^{t}} \\ \hat{n_{t}}=\frac{n_{t}}{1-\beta_{2}^{t}} \\ \Delta \theta_{t}=-\eta * \frac{\hat{m}_{t}}{\sqrt{\hat{n}_{t}+\varepsilon}} \\ \theta_{t}=\theta_{t-1}+\Delta \theta_{t} m^t=1β1tmtnt^=1β2tntΔθt=ηn^t+ε m^tθt=θt1+Δθt

9.AdamW

m ^ t = m t 1 − β 1 t n t ^ = n t 1 − β 2 t Δ θ t = − η ∗ ( m ^ t n ^ t + ε + λ θ t − 1 ) θ t = θ t − 1 + Δ θ t \hat{m}_{t}=\frac{m_{t}}{1-\beta_{1}^{t}} \\ \hat{n_{t}}=\frac{n_{t}}{1-\beta_{2}^{t}} \\ \Delta \theta_{t}=-\eta *( \frac{\hat{m}_{t}}{\sqrt{\hat{n}_{t}+\varepsilon}}+\lambda{\theta_{t-1}} )\\ \theta_{t}=\theta_{t-1}+\Delta \theta_{t} m^t=1β1tmtnt^=1β2tntΔθt=η(n^t+ε m^t+λθt1)θt=θt1+Δθt

二、损失函数

1.交叉熵损失函数

什么是交叉熵损失函数?

二分类

在二分的情况下,模型最后需要预测的结果只有两种情况,对于每个类别我们的预测得到的概率为p和 1-p ,此时表达式为:
L = 1 N ∑ i L i = 1 N ∑ i − [ y i ⋅ log ⁡ ( p i ) + ( 1 − y i ) ⋅ log ⁡ ( 1 − p i ) ] L=\frac{1}{N} \sum_{i} L_{i}=\frac{1}{N} \sum_{i}-\left[y_{i} \cdot \log \left(p_{i}\right)+\left(1-y_{i}\right) \cdot \log \left(1-p_{i}\right)\right] L=N1iLi=N1i[yilog(pi)+(1yi)log(1pi)]
其中:
y i − 表示样本 i 的 l a b e l ,正类为 1 ,负类为 0 p i − 表示样本 i 预测为正类的概率 {y}_{i}-表示样本i的label,正类为1,负类为0 \\ {p}_{i}-表示样本i预测为正类的概率 yi表示样本ilabel,正类为1,负类为0pi表示样本i预测为正类的概率

三、功能函数

1.均值函数(mean function)—>可以用期望表示 E ( X ) E(X) E(X)

1) 标题算术平均数(Arithmetic Mean)
在这里插入图片描述

优点:相比于中位数、众数,更少收到随机因素的影响
缺点:更容易收到极端值(biased value)的影响
2) 几何平均数(Geometric Mean)
在这里插入图片描述
优点:适用于对比率数据的平均,主要用于计算数据平均增长率
3) 调和平均数(Harmonic Mean)
在这里插入图片描述
优点:计算平均速率,感觉很多paper都在用,用于计算平均速率
4) 平方平均数(Quadratic Mean)
在这里插入图片描述
优点:是2次方的广义平均数的表达式。可以定义在连续区间。常用来计算一组数据与某个数据之间的平均差。

2.协方差函数(covariance function)

1)协方差
对于单一的随机变量,我们考虑其期望 E ( X ) {E(X)} E(X)与方差 D ( X ) {D(X)} D(X)
当想比较两个随机变量,我们引入了协方差(两个随机变量可以对应数据分析中的两个字段,即可以不属于同一定义域)。协方差,看名字就知道,其定义来源于方差。对两个随机变量X和Y,其协方差就是:
在这里插入图片描述
2)协方差函数
设随机过程为 X ( t ) {X(t)} X(t),定义域为 D D D t 1 t_{1} t1, t 2 t_{2} t2 ϵ \epsilon ϵ D D D,定义协方差函数 C X ( t 1 , t 2 ) {C_{X}(t_{1},t_{2})} CX(t1,t2) t 1 t_{1} t1 t 2 t_{2} t2的协方差,形成的函数。
C X ( t 1 , t 2 ) = E { [ X ( t 1 ) − μ X ( t 1 ) ] [ X ( t 2 ) − μ X ( t 2 ) ] } C_{X}\left(t_{1}, t_{2}\right)=E\left\{\left[X\left(t_{1}\right)-\mu_{X}\left(t_{1}\right)\right]\left[X\left(t_{2}\right)-\mu_{X}\left(t_{2}\right)\right]\right\} CX(t1,t2)=E{[X(t1)μX(t1)][X(t2)μX(t2)]}

References

[1] 十三、梯度下降方法对比
[2] 机器学习方法(一)——梯度下降法
[3] 机器学习(四):批量梯度下降法(BGD)、随机梯度下降法(SGD)和小批量梯度下降法(MBGD)
[4] 如何理解“梯度下降法”?什么是“反向传播”?通过一个视频,一步一步全部搞明白
[5]期望、方差、协方差、协方差函数、期望函数、方差函数
[6]协方差与相关系数
[7]高斯过程-百度百科
[8]箱型图
[9]深度学习优化函数详解(4)-- momentum 动量法
[10]深度学习最优化(四)—— 动量法/Nesterov/Adagrad/Adadelta/RMSprop/Adam/Nadam
[11]adam和adamW

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 《鲁伟深度学习笔记》是一本关于深度学习的资料,提供了对深度学习的深入理解和实践指导。这本笔记以简明扼要的方式介绍了深度学习的基本原理和常用算法,并结合实例讲解了如何使用深度学习解决实际问题。 首先,笔记深度学习的基础概念入手,包括神经网络、激活函数、损失函数等,为读者打下坚实的理论基础。然后,笔记详细介绍了深度学习中常用的模型结构,如卷积神经网络、循环神经网络等,并对它们的原理和应用进行了剖析。 此外,笔记还重点介绍了深度学习中的优化算法和正则化方法,如梯度下降、随机梯度下降、批量归一化等,帮助读者了解如何提高模型的性能和减少过拟合。 在实践部分,笔记提供了丰富的代码示例和数据集,通过实际操作,读者可以学到如何使用深度学习框架搭建模型、训练和评估模型,并解决真实世界的问题。 总的来说,《鲁伟深度学习笔记》是一本深度学习入门的好资料,通过阅读笔记,读者可以初步掌握深度学习的基本原理和应用方法,为进一步深入学习和研究打下基础。 ### 回答2: 《鲁伟深度学习笔记》pdf可以在网络上找到,它是对深度学习领域的一本权威教材。这本书由知名的教育家鲁伟撰写,详细介绍了深度学习所涉及的各个方面和应用。该pdf经过了精心编辑和排版,使读者能够很方便地阅读。 这本笔记的内容包括深度学习的基本概念、神经网络的原理、常用的深度学习模型以及它们的应用领域等。书中详细介绍了卷积神经网络、循环神经网络和生成对抗网络等常用模型,并给出了它们的实际案例和代码实现。 阅读《鲁伟深度学习笔记》pdf对于深度学习初学者和从业者来说都是很有价值的。对于初学者来说,它提供了一个很好的入门教材,帮助他们快速了解深度学习的基本概念和应用。对于从业者来说,它提供了详细的技术指导和实践案例,帮助他们提高自己的技术水平和解决实际问题。 总而言之,《鲁伟深度学习笔记》pdf是一本权威且实用的深度学习教材,适合各个层次的读者参考学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

spongia丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值