【笔记3】动手学深度学习

资料来源:伯禹学习平台。

批量归一化 BatchNormalization和残差网络:

批量归一化的作用:

1、  对输入标准化,使各个特征分布相近,更加容易训练出有效模型

2、  批量归一化:深层模型接近输出层数据变化剧烈,BN使各层输出更稳定

批量归一化应用位置:应用在全连接 或 卷积层之后,**函数之前

BN在训练时:

全连接层是对mxd个值做批量归一化;卷积层是对mxpxq个值做批量归一化,输出的每个通道分别做批量归一化

BN在预测时:用移动平均的方法估算整个数据集样本的均值和方差

移动平均:moving_mean | var = momentum * moving_mean | var + (1-momentum) * mean | var

ResNet

输入可以通过跨层通道更快前向传播

易于捕捉恒等映射的细微波动

DenseNet

和残差网络结构类似,差别在于不是输出和输入求和,而是输出和输入通道数进行concat

包括稠密块和过渡层两部分,稠密块最终的输出维度是in_channels + num_conv*out_channels,过渡层则是通过1x1卷积层减少通道数避免通道数过高

 

 

凸优化:

优化方法目标和深度学习的目标不一致:

优化方法:训练集损失函数值

深度学习:测试集损失函数值

优化在深度学习中的挑战:局部最小值、鞍点(一二阶导都为0)

海森矩阵:多变量函数所有二次偏导数组成的矩阵

鞍点以及局部最值与海森矩阵的关系:在一些偏导数为零的点,

如果海森矩阵特征值都为正数,就是局部最小值点

如果海森矩阵特征值都为负数,就是局部最大值点

如果海森矩阵特征值有正有负就是鞍点(函数图像从一个方向看是局部最大值,从另一个方向看是局部最小值)

梯度消失:函数梯度很平稳很小,优化过程非常慢

凸性:

凸集合中任意两点连线上所有点都在集合内

凸集合的交集还是凸集合

凸集合的并集不一定是凸集合

凸函数定义:

【笔记3】动手学深度学习

【笔记3】动手学深度学习

凸函数,非凸函数,凸函数

Jensen不等式:

【笔记3】动手学深度学习

函数值的期望>=期望的函数值

凸函数性质:

1、  无局部最小值

2、  凸集:Sb={x|x∈X and f(x) ≤ b}

3、  凸函数和二阶导数:f’’(x) ≥ 0 <=> f(x)是凸函数

有限制条件的函数优化:

1、  拉格朗日乘子法

2、  加入惩罚项

3、  投影

 

 

梯度下降:

沿着梯度反方向移动自变量可以减小函数值

【笔记3】动手学深度学习

学习率自适应算法 牛顿法:

【笔记3】动手学深度学习

海森矩阵辅助梯度下降:

【笔记3】动手学深度学习

海森矩阵辅助梯度下降例子:两个变量,x1∈[-1,1],x2∈[-10, 10],如果η都是0.1,x1优化一次就是0.9,x2是9.9,海森矩阵能够加快x2的优化速度

梯度下降与线性搜索(共轭梯度法):能够加快收敛速度

梯度下降:是使用所有样本的梯度均值对参数进行更新

随机梯度下降(降低时间复杂度):每计算一个样本梯度后都更新参数

小批量随机梯度下降:梯度下降和随机梯度下降的折衷方法

动态学习率:使用随机梯度下降时,减少在最小值点附近的震荡

优化算法进阶:

ill-conditioned Problem:

【笔记3】动手学深度学习

λmax和λmin分别是海森矩阵的最大和最小特征值,如果condH过大则是一个ill-conditioned problem

在二阶优化中,ill-conditioned problem会导致多个变量所要求的最优学习率不一致

ill-conditioned Problem 解决方法:

1Preconditioning gradient vector

2Averaging history gradient

动量法:解决上述ill-conditioned问题

【笔记3】动手学深度学习

指数加权移动平均:

【笔记3】动手学深度学习

由指数加权移动平均理解动量法:

【笔记3】动手学深度学习

在动量法中,自变量在各个方向上的移动幅度不仅取决当前梯度,还取决于过去的各个梯度在各个方向上是否一致

AdaGrad根据自变量在每个维度的梯度值的大小来调整各个维度上的学习率

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

【笔记3】动手学深度学习

接着,将目标函数自变量中每个元素的学习率通过按元素运算重新调整:

【笔记3】动手学深度学习

AdaGrad特点:如果目标函数有关自变量中某个元素的偏导数一直都较大,那么该元素的学习率将下降较快;反之,如果目标函数有关自变量中某个元素的偏导数一直都较小,那么该元素的学习率将下降较慢

 

RMSProp:AdaGrad算法做了修改,优化AdaGrad在迭代后期学习率过小导致难以优化的问题, 自变量每个元素的学习率在迭代过程中就不会一直降低

RMSProp将梯度按元素平方做指数加权移动平均:

【笔记3】动手学深度学习

将目标函数自变量中每个元素的学习率通过按元素运算重新调整,然后更新自变量:

【笔记3】动手学深度学习

AdaDelta:同样针对AdaGrad算法在迭代后期可能较难找到有用解的问题做了改进

使用了小批量随机梯度gt按元素平方的指数加权移动平均变量st在时间步0,它的所有元素被初始化为0

【笔记3】动手学深度学习

RMSProp算法不同的是,AdaDelta算法还维护一个额外的状态变量Δxt,其元素同样在时间步0时被初始化为0

【笔记3】动手学深度学习

【笔记3】动手学深度学习

 

Adam:

RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均

使用了动量变量mtRMSProp算法中小批量随机梯度按元素平方的指数加权移动平均变量vt,并在时间步0将它们中每个元素初始化为0:

【笔记3】动手学深度学习

RMSProp算法中一样, 将小批量随机梯度按元素平方后的项gtgt做指数加权移动平均得到vt:

【笔记3】动手学深度学习

对于任意时间步t,我们可以将mt再除以1−β1t,从而使过去各时间步小批量随机梯度权值之和为1

【笔记3】动手学深度学习

【笔记3】动手学深度学习

【笔记3】动手学深度学习

 

Word2Vec: 离散词语转换为连续空间的向量

词嵌入与One-hot: One-hot无法表达不同单词之间的相似度,词嵌入的提出就是为了解决这个问题

词嵌入:将词表达成一定维度向量,并在大量语料上训练

两种模型:skip-gram跳字模型背景词由中心词生成 一到多

         CBOW词袋模型中心词由背景词生成,多到一

Skip-gram: 包括中心词和背景词两个词嵌入层

二次采样:对词语索引表进行二次采样,丢弃类似 a、the、in等词,有助于提高效果

负采样近似:因为词表可能很大,softmax的计算量非常大

 

词嵌入进阶:

子词嵌入:FastText和BPE

GloVe全局向量词嵌入:优化损失函数

GloVe的改进:

1、使用非概率分布的变量 P’ij=X­ij 和 q′ij=exp(uj⊤vi),并对它们取对数;

2、为每个词 wi 增加两个标量模型参数:中心词偏差项 bi 和背景词偏差项 ci,松弛了概率定义中的规范性;

3、将每个损失项的权重 xi 替换成函数 h(xij),权重函数 h(x) 是值域在 [0,1] 上的单调递增函数,松弛了中心词重要性与 xi 线性相关的隐含假设;

4、用平方损失函数替代了交叉熵损失函数

近义词:词向量空间中的余弦相似性可以衡量词语含义的相似性

类比词:搜索与 vec(c)+vec(b)−vec(a) 的结果向量最相似的词向量

文本分类:

文本分类也属于词嵌入的下游应用

分本分类步骤:

  1. 读取数据
  2. 预处理数据:分词,创建词典,将文本从字符串转换为单词下标序列
  3. 创建数据迭代器,定义神经网络(循环神经网络|卷积神经网络)

加载预训练的词向量:

预训练词向量的词典及词语索引与使用的数据集并不相同,需要根据目前的词典及索引的顺序来加载预训练词向量

TextCNN模型:

主要使用了一维卷积层和时序最大池化层

TextCNN计算步骤:

  1. 定义多个一维卷积核,并使用这些卷积核对输入分别做卷积计算。宽度不同的卷积核可能会捕捉到不同个数的相邻词的相关性。
  2. 对输出的所有通道分别做时序最大池化,再将这些通道的池化输出值连结为向量。
  3. 通过全连接层将连结后的向量变换为有关各类别的输出。这一步可以使用丢弃层应对过拟合

 

数据增强:降低过拟合,增加模型泛化能力

图像增强一般包括:为了在预测时得到确定的结果,图像增强只应用在训练过程

主要使用torchvision.transforms模块

  1. 翻转和裁剪:

左右翻转更常用

池化层和图像随机裁剪让物体以不同比例出现在图像的不同位置,都有利于降低模型对目标位置的敏感性

  1. 变化颜色:亮度、对比度、饱和度、色调

 

模型微调:

学习率设置:

输出层设置较大的学习率,从头训练

隐藏层设置较小的学习率,对这些参数进行微调,以保存预训练模型的特征提取能力

数据处理注意点:

使用预训练模型时,一定要与预训练模型做同样的预处理