深度学习 学习笔记六

理论:

1.网络优化

递度下降: 批量递度下降(BGD)、随机梯度下降(SGD)、小批量递度下降(MBGD)

 

批量递度下降(BGD):

优点:

  1. 一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。
  2. 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。

缺点:

  1. 当样本数目 m 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。

从迭代的次数上来看,BGD迭代的次数相对较少。其迭代的收敛曲线示意图可以表示如下:

 

随机梯度下降:

随机梯度下降法不同于批量梯度下降,随机梯度下降是每次迭代使用一个样本来对参数进行更新。使得训练速度加快。

优点:

  1. 由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。

缺点:

  1. 准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
  2. 可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
  3. 不易于并行实现。

 

 

 

小批量递度下降:

小批量梯度下降,是对批量梯度下降以及随机梯度下降的一个折中办法。其思想是:每次迭代 使用 ** batch_size** 个样本来对参数进行更新。

优点:

  1. 通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
  2. 每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。(比如上例中的30W,设置batch_size=100时,需要迭代3000次,远小于SGD的30W次)
  3. 可实现并行化。

缺点:

  1. batch_size的不当选择可能会带来一些问题。

 

batch_size的选择带来的影响:

  1. 在合理地范围内,增大batch_size的好处:
    1. 内存利用率提高了,大矩阵乘法的并行化效率提高。
    2.  跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
    3. 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
  2. 盲目增大batch_size的坏处:
    1. 内存利用率提高了,但是内存容量可能撑不住了。
    2. 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
    3. Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。

 

 

 

学习率衰减

https://zhuanlan.zhihu.com/p/93624972

随时间慢慢减少学习率来加快学习算法

在使用mini-batch梯度下降法时,mini-batch数量不大,大概64或者128个样本,在迭代过程中会有噪音(蓝色线),下降朝向最小值,但是不会精确地收敛,所以你的算法最后在附近摆动,并不会真正收敛,因为你用的α是固定值,不同的mini-batch中有噪音。

 

 

 

但要慢慢减少学习率α的话,在初期的时候,α学习率还较大,你的学习还是相对较快,但随着α变小,你的步伐也会变慢变小,所以最后你的曲线(绿色线)会在最小值附近的一小块区域里摆动,而不是在训练过程中,大幅度在最小值附近摆动。

所以慢慢减少α的本质在于,在学习初期,你能承受较大的步伐,但当开始收敛的时候,小一些的学习率能让你步伐小一些。

 

1.指数衰减

学习率按照指数的形式衰减是比较常用的策略,我们首先需要确定需要针对哪个优化器执行学习率动态调整策略,也就是首先定义一个优化器:

 

optimizer_ExpLR = torch.optim.SGD(net.parameters(), lr=0.1)

 

定义好优化器以后,就可以给这个优化器绑定一个指数衰减学习率控制器:

 

ExpLR = torch.optim.lr_scheduler.ExponentialLR(optimizer_ExpLR, gamma=0.98)

 

其中参数gamma表示衰减的底数,选择不同的gamma值可以获得幅度不同的衰减曲线,如下:

 

 

 

2、固定步长衰减

有时我们希望学习率每隔一定步数(或者epoch)就减少为原来的gamma分之一,使用固定步长衰减依旧先定义优化器,再给优化器绑定StepLR对象:

 

optimizer_StepLR = torch.optim.SGD(net.parameters(), lr=0.1)

StepLR = torch.optim.lr_scheduler.StepLR(optimizer_StepLR, step_size=step_size, gamma=0.65)

 

其中gamma参数表示衰减的程度,step_size参数表示每隔多少个step进行一次学习率调整,下面对比了不同gamma值下的学习率变化情况:

 

 

 

3、多步长衰减

上述固定步长的衰减的虽然能够按照固定的区间长度进行学习率更新,但是有时我们希望不同的区间采用不同的更新频率,或者是有的区间更新学习率,有的区间不更新学习率,这就需要使用MultiStepLR来实现动态区间长度控制:

 

optimizer_MultiStepLR = torch.optim.SGD(net.parameters(), lr=0.1)
torch.optim.lr_scheduler.MultiStepLR(optimizer_MultiStepLR,
                    milestones=[200, 300, 320, 340, 200], gamma=0.8)

 

其中milestones参数为表示学习率更新的起止区间,在区间[0. 200]内学习率不更新,而在[200, 300]、[300, 320].....[340, 400]的右侧值都进行一次更新;gamma参数表示学习率衰减为上次的gamma分之一。其图示如下:

从图中可以看出,学习率在区间[200, 400]内快速的下降,这就是milestones参数所控制的,在milestones以外的区间学习率始终保持不变。

 

 

4、余弦退火衰减

严格的说,余弦退火策略不应该算是学习率衰减策略,因为它使得学习率按照周期变化,其定义方式如下:

 

optimizer_CosineLR = torch.optim.SGD(net.parameters(), lr=0.1)
CosineLR = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer_CosineLR, T_max=150, eta_min=0)

 

其包含的参数和余弦知识一致,参数T_max表示余弦函数周期;eta_min表示学习率的最小值,默认它是0表示学习率至少为正值。确定一个余弦函数需要知道最值和周期,其中周期就是T_max,最值是初试学习率。下图展示了不同周期下的余弦学习率更新曲线:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AdaGrad算法、RMSprop算法、AdaDelta

https://blog.csdn.net/zenglaoshi/article/details/103261168

AdaGrad算法

AdaGrad算法会使用一个小批量随机梯度gt按元素平方的累加变量st。在时间步0,AdaGrad将s0中每个元素初始化为0。在时间步t,首先将小批量随机梯度gt 按元素平方后累加到变量st:

​ 其中⊙是按元素相乘。接着,我们将目标函数自变量中每个元素的学习率通过按元素运算重新调整一下:

其中η是学习率,ϵ是为了维持数值稳定性而添加的常数,如10-6。这里开方、除法和乘法的运算都是按元素运算的。这些按元素运算使得目标函数自变量中每个元素都分别拥有自己的学习率。

 

特点:

​ 需要强调的是,小批量随机梯度按元素平方的累加变量st​出现在学习率的分母项中。因此,如果目标函数有关自变量中某个元素的偏导数一直都较大,那么该元素的学习率将下降较快;反之,如果目标函数有关自变量中某个元素的偏导数一直都较小,那么该元素的学习率将下降较慢。然而 ,由于st​一直在累加按元素平方的梯度,自变量中每个元素的学习率在迭代过程中一直在降低(或不变)。所以,当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率过小,可能较难找到一个有用的解。

 

RMSProp

思想:AdaGrad+momentum

​ AdaGrad算法因为调整学习率时分母上的变量st​一直在累加按元素平方的小批量随机梯度,所以目标函数自变量每个元素的学习率在迭代过程中一直在降低(或不变)。为了解决这一问题,RMSProp算法对AdaGrad算法做了一些改进,并且结合了momentum中指数加权移动平均的思想。

 

​不同于AdaGrad算法里状态变量st是截至时间步t所有小批量随机梯度gt按元素平方和,RMSProp算法将这些梯度按元素平方做指数加权移动平均。给定超参数0≤γ<10,RMSProp算法在时间步t>0计算

​ 和AdaGrad算法一样,RMSProp算法将目标函数自变量中每个元素的学习率通过按元素运算重新调整,然后更新自变量

 

 

​ 其中η是学习率,ϵ是为了维持数值稳定性而添加的常数,如10−6。因为RMSProp算法的状态变量st​是对平方项gt⊙gt的指数加权移动平均,所以可以看作是最近1/(1−γ)个时间步的小批量随机梯度平方项的加权平均。如此一来,自变量每个元素的学习率在迭代过程中就不再一直降低(或不变)。

 

AdaDelta算法

我们经常讲如果你只能调节一个超参数,那么你就调节学习率,调一个好的学习率是比较困难的,学习率太大会在底部振荡(步子要一步一步的迈,步子迈大了容易扯着dan),学习率太小,可能无法达到损失函数的极小值。既然学习率调节这么麻烦(就是个祸害),那么就有人想要为民除害,AdaDelta算法就是这样的”侠客“。

 

​ AdaDelta算法也像RMSProp算法一样,使用了小批量随机梯度gt按元素平方的指数加权移动平均变量st​。在时间步0,它的所有元素被初始化为0。给定超参数0≤ρ<1(对应RMSProp算法中的γ),在时间步t>0,同RMSProp算法一样计算

 

​ 与RMSProp算法不同的是,AdaDelta算法还维护一个额外的状态变量Δx,其元素同样在时间步0时被初始化为0。我们使用Δxt−1来计算自变量的变化量:

​ 其中ϵ是为了维持数值稳定性而添加的常数,如10-5。接着更新自变量:

最后,我们使用Δx来记录自变量变化量g′t按元素平方的指数加权移动平均:

​ 可以看到,如不考虑ϵϵ \epsilonϵ的影响,AdaDelta算法跟RMSProp算法的不同之处在于使用√Δxt−1 ​来替代学习率η。

 

 

 

递度优化方向:动量法、Nesterov 加速梯度、AdaM算法

动量法

SGD很难通过陡谷,即在一个维度的表面弯曲程度远大于其他维度的区域,这种情况通常出现在局部最优点附近,这种情况下,SGD在不断波动下通过陡谷的斜坡,在沿着谷底到局部最优点的路径上缓慢前进,过程如下图(a)所示:

 

如上图(b)所示,动量法是一种帮助SGD在相关方向上加速并抑制摇摆的方法,利于处理非平稳梯度,动量法是将上一次更新量的一个分量γ增加到当前的更新量中,公式如下:

 

可以这样来理解动量。参考文献[1]中这样的比喻很好:从山坡上往下推一个球,在往下滚动的过程中累积动量,速度越来越快,如果有空气阻力,则γ<1。对于参数更新也是如此,对于在当前梯度点处有相同方向的维度,动量项增加,对于在梯度点处改变方向的维度,其动量项减小,因此我们可以获得更快的收敛速度,同时可以减小频繁的波动。

 

Nesterov 加速梯度

接着上面举的例子,如果球盲目的沿着斜率方向向下滚动,结果也不一定总是令人满意,我们希望有一个智能的球,能够知道它将要去哪,如果遇到斜率将要上升时,能够知道减速。

 

Nesterov加速梯度下降法(Nesterov accelerated gradient,NAG)是一种能够给动量项γνt−1一种预知能力的方法。我们使用动量项更新参数,通过计算θ - γνt−1能够告诉我们参数未来位置的一个近似值,也就是告诉我们参数将大致变为多少。通过计算参数未来的近似位置的梯度,即使用θ - γνt−1计算梯度,而不是使用θ来计算梯度,我们可以更加高效的求解(我自己理解为:这里的一次参数更新近似于动量法的两次更新,所以是加速了):

  • 动量法:首先计算当前的梯度值(箭头线1),然后在更新的累积梯度上前进一大步(箭头线2);
  • 加速梯度下降法:首先作一个预见性的更新,即在先前累积梯度方向上前进一大步(箭头线3),并计算出梯度作为一个修正(箭头线4),修正后为箭头线5。这里的预见性更新增强了算法的响应能力(即加速),同时通过修正防止了前进地太快。这一点对于很多RNN的任务的性能提升有着重要的意义。

AdaM算法

自适应矩估计(Adaptive Moment Estimation, Adam)也是一种会对每一个参数会计算出自适应学习率的算法。可以看作一个动量算法和RMSprop算法的结合体,既考虑到了利用动量项来加速训练过程,又考虑到对于学习率的约束。Adam也会计算出来一个指数衰减的历史平方梯度的平均vt ,Adam同时还计算一个指数衰减的历史梯度的平均mt,类似于动量:

 

通过上面对Adam的理解,可以看出来,Adam结合了Adagrad善于处理稀疏梯度和Momentum善于处理非平稳目标的优点,相较于其他几种优化器效果更好。

 

3.数据预处理

数据可能存在的问题:

在实际业务处理中,数据通常是脏数据。所谓的脏,指数据可能存在以下几种问题(主要问题):

  1. 数据缺失 (Incomplete) 是属性值为空的情况。如 Occupancy = “ ”
  2. 数据噪声 (Noisy)是数据值不合常理的情况。如 Salary = “-100”
  3. 数据不一致 (Inconsistent)是数据前后存在矛盾的情况。如 Age = “42” vs. Birthday = “01/09/1985”
  4. 数据冗余 (Redundant)是数据量或者属性数目超出数据分析需要的情况。
  5. 数据集不均衡 (Imbalance)是各个类别的数据量相差悬殊的情况。
  6. 离群点/异常值 (Outliers)是远离数据集中其余部分的数据。
  7. 数据重复(Duplicate)是在数据集中出现多次的数据。

 

数据预处理步骤

数据进行预处理主要有以下步骤,第一部分提及的各种脏数据的处理就在这些步骤中完成:

  1. 数据清洗 Data Cleansing
  2. 数据转换 Data Transformation
  3. 数据描述 Data Description
  4. 特征选择 Feature Selection 或特征组合 Feature Combination
  5. 特征抽取 Feature Extraction

 

在数据清洗阶段,我们处理第一部分提及的缺失数据、离群点和重复数据。

缺失数据有以下几类:

  1. Missing completely at random: 缺失的概率是随机的,比如门店的计数器因为断电断网等原因在某个时段数据为空。
  2. Missing conditionally at random: 数据是否缺失取决于另外一个属性,比如一些女生不愿意填写自己的体重。
  3. Not missing at random: 数据缺失与自身的值有关,比如高收入的人可能不愿意填写收入。

处理方式有以下几种:

  1. 删数据,如果缺失数据的记录占比比较小,直接把这些记录删掉完事。
  2. 手工填补,或者重新收集数据,或者根据领域知识来补数据。
  3. 自动填补,简单的就是均值填充,或者再加一个概率分布看起来更真实些,也可以结合实际情况通过公式计算,比如门店计数缺失,可以参考过往的客流数据,转化数据,缺失时段的销售额,用一个简单公式自动计算回补。

 

在数据转换阶段,我们对数据进行采样处理、类型转换、归一化。

采样是从特定的概率分布中抽取样本点的过程。采样在机器学习中有非常重要的应用:将复杂分布简化为离散的样本点;用重采样可以对样本集进行调整以更好地进行调整并适应后期的模型学习;用于随机模拟以进行复杂模型的近似求解或推理。采样的一个重要作用是处理不均衡数据集。

 

 

5.超参数优化

https://zhuanlan.zhihu.com/p/69025104

常见的超参数

  • 网络结构,包括神经元之间的连接关系、层数、每层的神经元数量、激活函数的类型。
  • 优化参数,包括优化方法、学习率、小批量的样本数量。
  • 正则化系数

 

存在的困难

  1. 超参数优化是一个组合优化问题,无法像一般参数那样通过梯度下降法来优化。
  2. 评估一组超参数配置的时间代价非常高,从而导致一些优化方法(如演化算法等)在超参数优化中难以应用。(每调整一次超参数必须重新训练才能评估效果,这在模型很大的时候效率会非常低。)

 

  1. 网格搜索(尝试所有超参数的组合)
  2. 随机搜索(随机组合)
  3. 贝叶斯优化(时序模型优化)

  1. 动态资源分配

由于目前神经网络的优化方法一般都采取随机梯度下降,因此我们可以通过一组超参数的学习曲线来预估这组超参数配置是否有希望得到比较好的结果。如果一组超参数配置的学习曲线不收敛或者收敛比较差,可以应用早期停止(early-stopping)策略终止当前训练。

 

 

  1. 神经架构搜索

 

 

6.正则化:L1&L2, 权重衰减、提前停止、Dropout

 

L1&L2

https://blog.csdn.net/zhaomengszu/article/details/81537197

  • L1正则化是指权值向量ww中各个元素的绝对值之和,通常表示为||w||1||w||1
  • L2正则化是指权值向量ww中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号),通常表示为||w||2||w||2

 

作用:

  • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择
  • L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合

 

权重衰减

权重衰减(Weight Decay)是一种有效的正则化方法 [Hanson et al., 1989],

在每次参数更新时,引入一个衰减系数.

其中 g𝑡为第 𝑡步更新时的梯度,𝛼 为学习率,𝛽 为权重衰减系数,一般取值比较小,比如 0.0005.在标准的随机梯度下降中,权重衰减正则化和 ℓ 2正则化的效果相同.因此,权重衰减在一些深度学习框架中通过 ℓ 2正则化来实现. 参见习题7-9. 但是,在较为复杂的优化方法(比如 Adam)中,权重衰减正则化和 ℓ 2正则化并不等价

 

提前停止

提前停止对于深度神经网络来说是一种简单有效的正则化方法.

由于深度神经网络的拟合能力非常强,因此比较容易在训练集上过拟合.在使用梯度下降法进行优化时,我们可以使用一个和训练集独立的样本集合,称为验证集(Validation Set),并用验证集上的错误来代替期望错误.当验证集上的错误率不再下降,就停止迭代.

 

 

Dropout

当训练一个深度神经网络时,我们可以随机丢弃一部分神经元(同时丢弃其对应的连接边)来避免过拟合,这种方法称为丢弃法(Dropout Method).每次选择丢弃的神经元是随机的.最简单的方法是设置一个固定的概率 𝑝.对每一个神经元都以概率 𝑝 来判定要不要保留.

 

集成学习角度的解释 每做一次丢弃,相当于从原始的网络中采样得到一个子

网络.如果一个神经网络有 𝑛 个神经元,那么总共可以采样出 2 𝑛 个子网络.每

次迭代都相当于训练一个不同的子网络,这些子网络都共享原始网络的参数.那

么,最终的网络可以近似看作集成了指数级个不同网络的组合模型.

 

贝叶斯学习角度的解释 丢弃法也可以解释为一种贝叶斯学习的近似.用 𝑦 = 𝑓 (𝒙;𝜃) 来表示要学习的神经网络,贝叶斯学习是假设参数 𝜃 为随机向量,并且先验分布为 𝑞 (𝜃),贝叶斯方法的预测为

 

7.数据增强

通过数据增强(Data Augmentation)来增加数据量,提

高模型鲁棒性,避免过拟合.目前,数据增强还主要应用在图像数据上,在文本等

其他类型的数据上还没有太好的方法.

图像数据的增强主要是通过算法对图像进行转变,引入噪声等方法来增加

数据的多样性.增强的方法主要有几种:

  1. 旋转
  2. 翻转
  3. 缩放
  4. 平移
  5. 加噪声
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
半监督深度学习是一种结合了监督学习和无监督学习的方法,旨在利用有限的标记数据和大量的未标记数据来进行模型训练。在半监督学习中,回归任务是核心,而分类任务的信息被用来优化回归函数。\[2\]半监督学习的目标是通过找到一个函数来适应数据,从而实现回归任务。这个函数的优化过程则利用了分类任务的信息。\[2\] 在半监督学习中,还有一种特殊情况叫做自监督学习。自监督学习是一种从大规模无监督数据中挖掘自身监督信息的机器学习方法。它需要标签,但这些标签不是来自人工标注,而是来自数据本身。自监督学习的监督信号源于数据本身的内容,也可以看作是实例级别的标注,每个样本是一个类。自监督学习方法可以基于上下文、时序或对比等方式进行。\[3\] 所以,半监督深度学习是一种结合了监督学习和无监督学习的方法,旨在利用有限的标记数据和大量的未标记数据进行模型训练。而自监督学习则是半监督学习的一种特殊情况,它通过挖掘数据本身的监督信息来进行训练。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [半监督学习笔记(一):综述,定义,方法](https://blog.csdn.net/IRONFISHER/article/details/120328715)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [机器学习(Machine learning,ML) 学习笔记(区分监督学习与半监督学习)](https://blog.csdn.net/czmjy/article/details/124426142)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值