美文网首页
动手学深度学习-03打卡

动手学深度学习-03打卡

作者: 一技破万法 | 来源:发表于2020-02-25 21:21 被阅读0次

    批量归一化和残差网络

    批量归一化(BatchNormalization)

    对输入的标准化

    处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。
    标准化处理输入数据使各个特征的分布相近

    批量归一化(深度模型)

    利用小批量上的均值和标准差,不断调整神经网络中间输出,从而使整个神经网络在各层的中间输出的数值更稳定。

    对全连接层做批量归一化

    位置:全连接层中的仿射变换和激活函数之间

    全连接:
    全连接层
    批量归一化:
    批量归一化

    这⾥ϵ > 0是个很小的常数,保证分母大于0


    批量归一化

    引入可学习参数:拉伸参数γ和偏移参数β。若


    求Y
    批量归一化无效

    对卷积层做批量归一化

    位置:卷积计算之后、应⽤激活函数之前。
    如果卷积计算输出多个通道,我们需要对这些通道的输出分别做批量归一化,且每个通道都拥有独立的拉伸和偏移参数。 计算:对单通道,batchsize=m,卷积计算输出=pxq 对该通道中m×p×q个元素同时做批量归一化,使用相同的均值和方差。

    预测时的批量归一化

    训练:以batch为单位,对每个batch计算均值和方差。
    预测:用移动平均估算整个训练数据集的样本均值和方差。

    残差网络(ResNet)

    深度学习的问题:深度CNN网络达到一定深度后再一味地增加层数并不能带来进一步地分类性能提高,反而会招致网络收敛变得更慢,准确率也变得更差

    残差块(Residual Block)

    恒等映射:
    左边:f(x)=x
    右边:f(x)-x=0 (易于捕捉恒等映射的细微波动)


    残差网络

    在残差块中,输入可通过跨层的数据线路更快地向前传播。

    ResNet模型

    卷积(64,7x7,3)
    批量一体化
    最大池化(3x3,2)
    残差块x4 (通过步幅为2的残差块在每个模块之间减小高和宽)
    全局平均池化
    全连接

    稠密连接网络(DenseNet)

    ResNet和DenseNet

    两者在跨层连接上的主要区别就是使用相加和使用连结

    主要构建模块:

    稠密块(dense block):定义了输入和输出是如何连结的
    过渡层(transition layer):用来控制通道数,使之不过大(使用1*1卷积来减少通道数,使用步幅为2的平均池化层来减半高和宽 )

    优化和深度学习

    优化与估计

    尽管优化方法可以最小化深度学习中的损失函数值,但本质上优化方法达到的目标与深度学习的目标并不相同。
    优化方法目标:训练集损失函数值
    深度学习目标:测试集损失函数值(泛化性)

    优化在深度学习中的挑战

    1.局部最小值
    2.鞍点
    3.梯度消失

    局部最小值
    𝑓(𝑥)=𝑥cos𝜋𝑥 𝑓(𝑥)=𝑥cos𝜋𝑥

    在这个函数中,局部最小值如上图local minimum。

    鞍点
    鞍点

    如上图函数为f(x)=x**3,中间部分平滑的曲线即鞍点。


    鞍点

    三维视图中鞍点如图所示。

    凸性(Convexity)

    Jensen不等式

    Jensen不等式

    性质

    1.无局部极小值
    2.与凸集的关系
    3.二阶条件

    无局部最小值

    证明:假设存在 𝑥∈𝑋 是局部最小值,则存在全局最小值 𝑥′∈𝑋 , 使得 𝑓(𝑥)>𝑓(𝑥′) , 则对 𝜆∈(0,1] :
    𝑓(𝑥)>𝜆𝑓(𝑥)+(1−𝜆)𝑓(𝑥′)≥𝑓(𝜆𝑥+(1−𝜆)𝑥′)

    与凸集的关系

    对于凸函数 𝑓(𝑥) ,定义集合 𝑆𝑏:={𝑥|𝑥∈𝑋 and 𝑓(𝑥)≤𝑏} ,则集合 𝑆𝑏 为凸集
    证明:对于点 𝑥,𝑥′∈𝑆𝑏 , 有 𝑓(𝜆𝑥+(1−𝜆)𝑥′)≤𝜆𝑓(𝑥)+(1−𝜆)𝑓(𝑥′)≤𝑏 , 故 𝜆𝑥+(1−𝜆)𝑥′∈𝑆𝑏
    𝑓(𝑥,𝑦)=0.5𝑥2+cos(2𝜋𝑦)

    凸函数与二阶导数

    𝑓″(𝑥)≥0⟺𝑓(𝑥) 是凸函数

    必要性 ( ⇐ ):

    对于凸函数:


    必要性
    充分性 ( ⇒ ):

    令 𝑎<𝑥<𝑏 为 𝑓(𝑥) 上的三个点,由拉格朗日中值定理:
    𝑓(𝑥)−𝑓(𝑎)=(𝑥−𝑎)𝑓′(𝛼) for some 𝛼∈[𝑎,𝑥] and
    𝑓(𝑏)−𝑓(𝑥)=(𝑏−𝑥)𝑓′(𝛽) for some 𝛽∈[𝑥,𝑏]
    根据单调性,有𝑓′(𝛽)≥𝑓′(𝛼) , 故:
    𝑓(𝑏)−𝑓(𝑎)=𝑓(𝑏)−𝑓(𝑥)+𝑓(𝑥)−𝑓(𝑎)
    =(𝑏−𝑥)𝑓′(𝛽)+(𝑥−𝑎)𝑓′(𝛼)
    ≥(𝑏−𝑎)𝑓′(𝛼)


    充分性

    限制条件

    限制条件

    拉格朗日乘子法

    拉格朗日乘子法

    惩罚项

    欲使 𝑐𝑖(𝑥)≤0 , 将项 𝛼𝑖𝑐𝑖(𝑥) 加入目标函数。例如 𝜆/2 * ||𝑤||**2

    投影

    投影

    梯度下降

    一维梯度下降

    证明:沿梯度反方向移动自变量可以减小函数值
    泰勒展开:

    泰勒展开式
    带入沿着梯度方向的移动量
    移动量
    设一个函数为y=x**2,学习率为0.2,迭代十步,如下图: 迭代
    当学习率为0.05时,迭代十次,如下图:
    迭代
    当学习率为1.1时,迭代十次,如下图:
    迭代
    令函数为𝑓(𝑥)=𝑥cos𝑐𝑥,学习率为2,迭代次数为10次,如下图:
    迭代
    该x迭代到局部最小值。

    多维梯度下降

    多维梯度下降

    假设目标函数为:


    目标函数

    通过学习率为0.1的函数迭代20次,结果为:


    迭代结果

    自适应方法

    牛顿法

    在 𝑥+𝜖 处泰勒展开:


    泰勒展开
    最小值点处满足:∇𝑓(𝐱)=0,即我们希望∇𝑓(𝐱+𝜖)=0 ,对上式关于𝜖求导,忽略高阶无穷小,有: 公式

    收敛性分析

    只考虑在函数为凸函数, 且最小值点上 𝑓″(𝑥∗)>0 时的收敛速度:
    令 𝑥𝑘 为第 𝑘 次迭代后 𝑥 的值, 𝑒𝑘:=𝑥𝑘−𝑥∗ 表示 𝑥𝑘 到最小值点 𝑥∗ 的距离,由 𝑓′(𝑥∗)=0 :
    0=𝑓′(𝑥𝑘−𝑒𝑘)=𝑓′(𝑥𝑘)−𝑒𝑘𝑓′′(𝑥𝑘)+12𝑒2𝑘𝑓′′′(𝜉𝑘)for some 𝜉𝑘∈[𝑥𝑘−𝑒𝑘,𝑥𝑘]
    两边除以 𝑓″(𝑥𝑘) , 有:
    𝑒𝑘−𝑓′(𝑥𝑘)/𝑓′′(𝑥𝑘)=12𝑒2𝑘𝑓′′′(𝜉𝑘)/𝑓′′(𝑥𝑘)
    代入更新方程 𝑥𝑘+1=𝑥𝑘−𝑓′(𝑥𝑘)/𝑓′′(𝑥𝑘) , 得到:
    𝑥𝑘−𝑥∗−𝑓′(𝑥𝑘)/𝑓′′(𝑥𝑘)=12𝑒2𝑘𝑓′′′(𝜉𝑘)/𝑓′′(𝑥𝑘)
    𝑥𝑘+1−𝑥∗=𝑒𝑘+1=12𝑒2𝑘𝑓′′′(𝜉𝑘)/𝑓′′(𝑥𝑘)
    当 12𝑓′′′(𝜉𝑘)/𝑓′′(𝑥𝑘)≤𝑐 时,有:
    𝑒𝑘+1≤𝑐𝑒2𝑘

    预处理(Heissan阵辅助梯度下降)
    梯度下降

    随机梯度下降

    参数更新

    对于有n个样本对训练数据集,设 𝑓𝑖(𝑥) 是第 𝑖 个样本的损失函数, 则目标函数为:


    目标函数

    其梯度为:


    目标梯度
    使用该梯度的一次更新的时间复杂度为O(n)
    随机梯度下降更新公式O(1):

    <center>𝐱←𝐱−𝜂∇𝑓𝑖(𝐱)<center>

    且有 更新公式
    现在设公式为
    学习率为0.1,迭代次数为50次,如下图 迭代过程
    动态学习率
    当学习率变成动态时,如下: 动态学习率

    下图为两个动态学习率:


    𝜂0⋅𝑒−𝜆𝑡 𝜂0⋅(𝛽𝑡+1)−𝛼

    目标检测

    目标检测和边界框

    锚框

    以每个像素为中心生成多个大小和宽高比不同的边界框,这些边界框被称为锚框(anchor box)。

    生成多个锚框

    假设输入图像高为 ℎ ,宽为 𝑤 。我们分别以图像的每个像素为中心生成不同形状的锚框。设大小为 𝑠∈(0,1] 且宽高比为 𝑟>0 ,那么锚框的宽和高将分别为 𝑤𝑠𝑟√ 和 ℎ𝑠/𝑟√ 。当中心位置给定时,已知宽和高的锚框是确定的
    下面我们分别设定好一组大小 𝑠1,…,𝑠𝑛 和一组宽高比 𝑟1,…,𝑟𝑚 。如果以每个像素为中心时使用所有的大小与宽高比的组合,输入图像将一共得到 𝑤ℎ𝑛𝑚 个锚框。虽然这些锚框可能覆盖了所有的真实边界框,但计算复杂度容易过高。因此,我们通常只对包含 𝑠1 或 𝑟1 的大小与宽高比的组合感兴趣,即
    <center>(𝑠1,𝑟1),(𝑠1,𝑟2),…,(𝑠1,𝑟𝑚),(𝑠2,𝑟1),(𝑠3,𝑟1),…,(𝑠𝑛,𝑟1).<center>
    也就是说,以相同像素为中心的锚框的数量为 𝑛+𝑚−1 。对于整个输入图像,我们将一共生成 𝑤ℎ(𝑛+𝑚−1) 个锚框。

    交并比

    量化锚框与真实边界框之间的相似度,采用Jaccard系数衡量。给定集合A和B,它们的Jaccard系数即两者交集大小除以二者并集大小:


    Jaccard系数

    实际上,我们可以把边界框内的像素区域看成是像素的集合。如此一来,我们可以用两个边界框的像素集合的Jaccard系数衡量这两个边界框的相似度。当衡量两个边界框的相似度时,我们通常将Jaccard系数称为交并比(Intersection over Union,IoU),即两个边界框相交面积与相并面积之比,如下图所示。交并比的取值范围在0和1之间:0表示两个边界框无重合像素,1表示两个边界框相等。


    IoU

    标注训练集的锚框

    在训练集中,我们将每个锚框视为一个训练样本。为了训练目标检测模型,我们需要为每个锚框标注两类标签:一是锚框所含目标的类别,简称类别;二是真实边界框相对锚框的偏移量,简称偏移量(offset)。在目标检测时,我们首先生成多个锚框,然后为每个锚框预测类别以及偏移量,接着根据预测的偏移量调整锚框位置从而得到预测边界框,最后筛选需要输出的预测边界框。
    我们知道,在目标检测的训练集中,每个图像已标注了真实边界框的位置以及所含目标的类别。在生成锚框之后,我们主要依据与锚框相似的真实边界框的位置和类别信息为锚框标注。那么,该如何为锚框分配与其相似的真实边界框呢?
    假设图像中锚框分别为 𝐴1,𝐴2,…,𝐴𝑛𝑎 ,真实边界框分别为 𝐵1,𝐵2,…,𝐵𝑛𝑏 ,且 𝑛𝑎≥𝑛𝑏 。定义矩阵 𝑋∈ℝ𝑛𝑎×𝑛𝑏 ,其中第 𝑖 行第 𝑗 列的元素 𝑥𝑖𝑗 为锚框 𝐴𝑖 与真实边界框 𝐵𝑗 的交并比。 首先,我们找出矩阵 𝑋 中最大元素,并将该元素的行索引与列索引分别记为 𝑖1,𝑗1 。我们为锚框 𝐴𝑖1 分配真实边界框 𝐵𝑗1 。显然,锚框 𝐴𝑖1 和真实边界框 𝐵𝑗1 在所有的“锚框—真实边界框”的配对中相似度最高。接下来,将矩阵 𝑋 中第 𝑖1 行和第 𝑗1 列上的所有元素丢弃。找出矩阵 𝑋 中剩余的最大元素,并将该元素的行索引与列索引分别记为 𝑖2,𝑗2 。我们为锚框 𝐴𝑖2 分配真实边界框 𝐵𝑗2 ,再将矩阵 𝑋 中第 𝑖2 行和第 𝑗2 列上的所有元素丢弃。此时矩阵 𝑋 中已有两行两列的元素被丢弃。 依此类推,直到矩阵 𝑋 中所有 𝑛𝑏 列元素全部被丢弃。这个时候,我们已为 𝑛𝑏 个锚框各分配了一个真实边界框。 接下来,我们只遍历剩余的 𝑛𝑎−𝑛𝑏 个锚框:给定其中的锚框 𝐴𝑖 ,根据矩阵 𝑋 的第 𝑖 行找到与 𝐴𝑖 交并比最大的真实边界框 𝐵𝑗 ,且只有当该交并比大于预先设定的阈值时,才为锚框 𝐴𝑖 分配真实边界框 𝐵𝑗 。
    如下图左边所示,假设矩阵 𝑋 中最大值为 𝑥23 ,我们将为锚框 𝐴2 分配真实边界框 𝐵3 。然后,丢弃矩阵中第2行和第3列的所有元素,找出剩余阴影部分的最大元素 𝑥71 ,为锚框 𝐴7 分配真实边界框 𝐵1 。接着下图(中)所示,丢弃矩阵中第7行和第1列的所有元素,找出剩余阴影部分的最大元素 𝑥54 ,为锚框 𝐴5 分配真实边界框 𝐵4 。最后下图(右)所示,丢弃矩阵中第5行和第4列的所有元素,找出剩余阴影部分的最大元素 𝑥92 ,为锚框 𝐴9 分配真实边界框 𝐵2 。之后,我们只需遍历除去 𝐴2,𝐴5,𝐴7,𝐴9 的剩余锚框,并根据阈值判断是否为剩余锚框分配真实边界框。


    真实边界框索引
    现在我们可以标注锚框的类别和偏移量了。如果一个锚框 𝐴 被分配了真实边界框 𝐵 ,将锚框 𝐴 的类别设为 𝐵 的类别,并根据 𝐵 和 𝐴 的中心坐标的相对位置以及两个框的相对大小为锚框 𝐴 标注偏移量。由于数据集中各个框的位置和大小各异,因此这些相对位置和相对大小通常需要一些特殊变换,才能使偏移量的分布更均匀从而更容易拟合。设锚框 𝐴 及其被分配的真实边界框 𝐵 的中心坐标分别为 (𝑥𝑎,𝑦𝑎) 和 (𝑥𝑏,𝑦𝑏) , 𝐴 和 𝐵 的宽分别为 𝑤𝑎 和 𝑤𝑏 ,高分别为 ℎ𝑎 和 ℎ𝑏 ,一个常用的技巧是将 𝐴 的偏移量标注为 偏移量标注
    其中常数的默认值为 𝜇𝑥=𝜇𝑦=𝜇𝑤=𝜇ℎ=0,𝜎𝑥=𝜎𝑦=0.1,𝜎𝑤=𝜎ℎ=0.2 。如果一个锚框没有被分配真实边界框,我们只需将该锚框的类别设为背景。类别为背景的锚框通常被称为负类锚框,其余则被称为正类锚框。

    输出预测边界框

    在模型预测阶段,我们先为图像生成多个锚框,并为这些锚框一一预测类别和偏移量。随后,我们根据锚框及其预测偏移量得到预测边界框。当锚框数量较多时,同一个目标上可能会输出较多相似的预测边界框。为了使结果更加简洁,我们可以移除相似的预测边界框。常用的方法叫作非极大值抑制(non-maximum suppression,NMS)。
    我们来描述一下非极大值抑制的工作原理。对于一个预测边界框 𝐵 ,模型会计算各个类别的预测概率。设其中最大的预测概率为 𝑝 ,该概率所对应的类别即 𝐵 的预测类别。我们也将 𝑝 称为预测边界框 𝐵 的置信度。在同一图像上,我们将预测类别非背景的预测边界框按置信度从高到低排序,得到列表 𝐿 。从 𝐿 中选取置信度最高的预测边界框 𝐵1 作为基准,将所有与 𝐵1 的交并比大于某阈值的非基准预测边界框从 𝐿 中移除。这里的阈值是预先设定的超参数。此时, 𝐿 保留了置信度最高的预测边界框并移除了与其相似的其他预测边界框。 接下来,从 𝐿 中选取置信度第二高的预测边界框 𝐵2 作为基准,将所有与 𝐵2 的交并比大于某阈值的非基准预测边界框从 𝐿 中移除。重复这一过程,直到 𝐿 中所有的预测边界框都曾作为基准。此时 𝐿 中任意一对预测边界框的交并比都小于阈值。最终,输出列表 𝐿 中的所有预测边界框。
    实践中,我们可以在执行非极大值抑制前将置信度较低的预测边界框移除,从而减小非极大值抑制的计算量。我们还可以筛选非极大值抑制的输出,例如,只保留其中置信度较高的结果作为最终输出。

    小结

    以每个像素为中心,生成多个大小和宽高比不同的锚框。
    交并比是两个边界框相交面积与相并面积之比。
    在训练集中,为每个锚框标注两类标签:一是锚框所含目标的类别;二是真实边界框相对锚框的偏移量。
    预测时,可以使用非极大值抑制来移除相似的预测边界框,从而令结果简洁。

    图像风格迁移

    样式迁移

    通过卷积神经网络自动将某图像中的样式应用在另一图像之上。这里我们需要输入两张图像,一张是内容图像,一张是样式图像。我们使用神经网络修改内容图像使其在样式上接近样式图像。如下图:


    样式迁移

    首先,我们初始化合成图像,例如将其初始化成内容图像。该合成图像是样式迁移过程中唯一需要更新的变量,即样式迁移所需迭代的模型参数。然后,我们选择一个预训练的卷积神经网络来抽取图像的特征,其中的模型参数在训练中无须更新。深度卷积神经网络凭借多个层逐级抽取图像的特征。我们可以选择其中某些层的输出作为内容特征或样式特征。以下图为例,这里选取的预训练的神经网络含有3个卷积层,其中第二层输出图像的内容特征,而第一层和第三层的输出被作为图像的样式特征。接下来,我们通过正向传播(实线箭头方向)计算样式迁移的损失函数,并通过反向传播(虚线箭头方向)迭代模型参数,即不断更新合成图像。样式迁移常用的损失函数由3部分组成:内容损失(content loss)使合成图像与内容图像在内容特征上接近,样式损失(style loss)令合成图像与样式图像在样式特征上接近,而总变差损失(total variation loss)则有助于减少合成图像中的噪点。最后,当模型训练结束时,我们输出样式迁移的模型参数,即得到最终的合成图像。


    样式迁移

    读取内容图像和样式图像

    其中两张图像的尺寸要相同。

    预处理和后处理图像

    预处理时在输入图像RGB三个通道分别做标准化,并将结果变换成卷积神经网络接受的输入公式。后处理将输出图像中的像素值还原回标准化之前的值。

    抽取特征

    为了抽取图像的内容特征和样式特征,我们可以选择VGG网络中某些层的输出。一般来说,越靠近输入层的输出越容易抽取图像的细节信息,反之则越容易抽取图像的全局信息。为了避免合成图像过多保留内容图像的细节,我们选择VGG较靠近输出的层,也称内容层,来输出图像的内容特征。我们还从VGG网络中选择不同层的输出来匹配局部和全局的样式,这些层也叫样式层。我们使用第四卷积块的最后一个卷积层当作内容层,以及每个卷积块的第一个卷积层作为样式层。在抽取特征时,我们只需要用到VGG从输入层到最靠近输出层的内容层或样式层之间的所有层。
    给定输入x,如果只前向计算,则只能获得最后一层的输出。由于我们还需要中间层的输出,因此这里我们逐层计算,并保留内容层和样式层的输出。
    下面一个对内容图像抽取内容特征,一个对样式图像抽取样式特征。因为在训练时无需改变预训练的VGG的模型参数,所以我们可以在训练开始之前就提取出内容图像的内容特征,以及样式图像的样式特征。由于合成图像是样式迁移所需迭代的模型参数,我们只能在训练过程中抽取合成图像的内容特征和样式特征。

    定义损失函数

    内容损失

    通过平方误差函数衡量合成图像与内容图像在内容特征上的差异

    样式损失

    也是通过平房误差函数衡量合成图像与样式图像在样式上的差异。首先计算样式层的输出。假设该输出的样本数为1,通道数为 𝑐 ,高和宽分别为 ℎ 和 𝑤 ,我们可以把输出变换成 𝑐 行 ℎ𝑤 列的矩阵 𝑋 。矩阵 𝑋 可以看作是由 𝑐 个长度为 ℎ𝑤 的向量 𝑥1,…,𝑥𝑐 组成的。其中向量 𝑥𝑖 代表了通道 𝑖 上的样式特征。这些向量的格拉姆矩阵(Gram matrix) 𝑋𝑋⊤∈ℝ𝑐×𝑐 中 𝑖 行 𝑗 列的元素 𝑥𝑖𝑗 即向量 𝑥𝑖 与 𝑥𝑗 的内积,它表达了通道 𝑖 和通道 𝑗 上样式特征的相关性。我们用这样的格拉姆矩阵表达样式层输出的样式。需要注意的是,当 ℎ𝑤 的值较大时,格拉姆矩阵中的元素容易出现较大的值。此外,格拉姆矩阵的高和宽皆为通道数 𝑐 。为了让样式损失不受这些值的大小影响。
    所以样式损失的平方误差函数的两个格拉姆矩阵输入分别基于合成图像与样式图像的样式层输出。

    总变差损失

    当合成图像里有大量高频噪点,即有特别亮或者特别暗的颗粒像素。一种常用的降噪方法是总变差降噪(total variation denoising)。假设xi,j表示坐标为(i,j)的像素值,降低总变差损失
    <center>∑𝑖,𝑗∣∣𝑥𝑖,𝑗−𝑥𝑖+1,𝑗∣∣+∣∣𝑥𝑖,𝑗−𝑥𝑖,𝑗+1∣∣<center>
    能够尽可能使相临近的像素值相似。

    小结

    • 样式迁移常用的损失函数由3部分组成:内容损失使合成图像与内容图像在内容特征上接近,样式损失令合成图像与样式图像在样式特征上接近,而总变差损失则有助于减少合成图像中的噪点。
    • 可以通过预训练的卷积神经网络来抽取图像的特征,并通过最小化损失函数来不断更新合成图像。
    • 用格拉姆矩阵表达样式层输出的样式。

    图像分类案例1

    数据集

    使用的是CIFAR-10图像分类问题,每张图像都是32*32像素,涵盖10个类别。

    训练模型

    训练模型使用的是ResNet-18网络结构,结构如下:


    ResNet网络结构

    图像分类案例2

    数据集

    使用ImageNet数据集的子集,确定120种不同的狗。

    训练模型

    使用的是预训练的ResNet-34模型,直接复用预训练模型在输出层的输入,及抽取的特征,然后我们重新定义输出层。

    优化算法进阶

    动量(momentum)

    目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向。在每次迭代中,梯度下降根据自变量当前的位置,沿着当前位置的梯度更新自变量。但是自变量的迭代方向仅仅取决于自变量当前位置,这可能带来一些问题。我们需要谨慎的选择学习率和batch size来控制梯度方差和收敛的结果。


    An ill-conditioned Problem


    假设一个输入和输出分别为二维向量x=[x1,x2]T和标量的目标函数:


    ill-conditioned

    Maximum Learning Rate

    对于f(x)来说,其中的𝜂 <1/L,其中L是f(x)的最大二阶导数。
    一般情况下,只需要𝜂 <2/L就可以。

    Supp:Preconditioning

    在二阶优化中,我们使用Hessian matrix的逆矩阵(或者pseudo inverse)来左乘梯度向量 𝑖.𝑒.Δ𝑥=𝐻−1𝐠 ,这样的做法称为precondition,相当于将 𝐻 映射为一个单位矩阵,拥有分布均匀的Spectrum,也即我们去优化的等价标函数的Hessian matrix为良好的identity matrix。


    eta=0.4

    可以看到,同一位置上,目标函数在竖直方向( 𝑥2 轴方向)比在水平方向( 𝑥1 轴方向)的斜率的绝对值更大。因此,给定学习率,梯度下降迭代自变量时会使自变量在竖直方向比在水平方向移动幅度更大。那么,我们需要一个较小的学习率从而避免自变量在竖直方向上越过目标函数最优解。然而,这会造成自变量在水平方向上朝最优解移动变慢。
    下面我们试着将学习率调得稍大一点,此时自变量在竖直方向不断越过最优解并逐渐发散。


    eta=0.6

    Momentum Algorithm

    动量法的提出是为了解决梯度下降的上述问题。设时间步 𝑡 的自变量为 𝑥𝑡 ,学习率为 𝜂𝑡 。 在时间步 𝑡=0 ,动量法创建速度变量 𝑚0 ,并将其元素初始化成 0。在时间步 𝑡>0 ,动量法对每次迭代的步骤做如下修改:


    Momentum Algorithm

    其中,动量超参数 𝛽 满足 0≤𝛽<1 。当 𝛽=0 时,动量法等价于小批量随机梯度下降。
    在使用动量法之后,迭代轨迹如下图:


    eta=0.4
    可以看到使用较小的学习率 𝜂=0.4 和动量超参数 𝛽=0.5 时,动量法在竖直方向上的移动更加平滑,且在水平方向上更快逼近最优解。下面使用较大的学习率 𝜂=0.6 ,此时自变量也不再发散。
    eta=0.6

    即使是使用较大的学习率,也不会出现震荡的情况。

    Exponential Moving Average

    为了从数学上理解动量法,让我们先解释一下指数加权移动平均(exponential moving average)。给定超参数 0≤𝛽<1 ,当前时间步 𝑡 的变量 𝑦𝑡 是上一时间步 𝑡−1 的变量 𝑦𝑡−1 和当前时间步另一变量 𝑥𝑡 的线性组合:


    指数加权移动平均

    我们可以将y展开:


    展开y
    因此,在实际中,我们常常将 𝑦𝑡 看作是对最近 1/(1−𝛽) 个时间步的 𝑥𝑡 值的加权平均。例如,当 𝛾=0.95 时, 𝑦𝑡 可以被看作对最近20个时间步的 𝑥𝑡 值的加权平均;当 𝛽=0.9 时, 𝑦𝑡 可以看作是对最近10个时间步的 𝑥𝑡 值的加权平均。而且,离当前时间步 𝑡 越近的 𝑥𝑡 值获得的权重越大(越接近1)。

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

    现在,我们对动量法对移动速度变量做变形:


    动量法变形

    由指数加权移动平均的形式可得,速度变量 𝑣𝑡 实际上对序列 {𝜂𝑡−𝑖𝑔𝑡−𝑖/(1−𝛽):𝑖=0,…,1/(1−𝛽)−1} 做了指数加权移动平均。换句话说,相比于小批量随机梯度下降,动量法在每个时间步的自变量更新量近似于将前者对应的最近 1/(1−𝛽) 个时间步的更新量做了指数加权移动平均后再除以 1−𝛽 。所以,在动量法中,自变量在各个方向上的移动幅度不仅取决当前梯度,还取决于过去的各个梯度在各个方向上是否一致。在本节之前示例的优化问题中,所有梯度在水平方向上为正(向右),而在竖直方向上时正(向上)时负(向下)。这样,我们就可以使用较大的学习率,从而使自变量向最优解更快移动。

    Implement

    相对于小批量随机梯度下降,动量法需要对每一个自变量维护一个同它一样形状的速度变量,且超参数里多了动量超参数。
    我们首先将动量超参数设置为0.5


    implement

    然后将动量超参数增大到0.9


    Implement
    可见目标函数值在后期迭代过程中的变化不够平滑。直觉上,10倍小批量梯度比2倍小批量梯度大了5倍,我们可以试着将学习率减小到原来的1/5。此时目标函数值在下降了一段时间后变化更加平滑。
    Implement

    AdaGrad

    动量法可以在两个梯度值有较大变化时,选择足够小的学习率使得自变量在梯度值较大的维度上不发散。但这样会导致自变量在梯度值较小的纬度上迭代过慢。动量法依赖指数加权移动平均使得自变量的更新方向更加一致,从而降低发散的可能。而AdaGrad算法根据自变量在每个维度的梯度值的大小来调整各个维度上的学习率,从而避免统一的学习率难以适应所有维度的问题。

    Algorithm

    AdaGrad算法会使用一个小批量随机梯度 𝑔𝑡 按元素平方的累加变量 𝑠𝑡 。在时间步0,AdaGrad将 𝑠0 中每个元素初始化为0。在时间步 𝑡 ,首先将小批量随机梯度 𝑔𝑡 按元素平方后累加到变量 𝑠𝑡 :𝑠𝑡←𝑠𝑡−1+𝑔𝑡⊙𝑔𝑡,其中 ⊙ 是按元素相乘。接着,我们将目标函数自变量中每个元素的学习率通过按元素运算重新调整一下:


    调整x

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

    Feature

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

    下面我们仍然以目标函数 𝑓(𝑥)=0.1𝑥21+2𝑥22 为例观察AdaGrad算法对自变量的迭代轨迹。我们实现AdaGrad算法并使用和上一节实验中相同的学习率0.4。可以看到,自变量的迭代轨迹较平滑。但由于 𝑠𝑡 的累加效果使学习率不断衰减,自变量在迭代后期的移动幅度较小。 eta=0.4
    下面将学习率增加到2,可以看到自变量更为迅速的逼近了最优解。
    eta=2

    RMSProp

    在AdaGrad中,因为调整学习率时分母上的变量St一直在累加按元素平方的小批量随机梯度,所以目标函数自变量每个元素的学习率在迭代过程中一直在降低或不变。因此,当学习率在迭代早期讲的较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率较小,可能较难找到一个有用的解。为了解决这一问题,RMSProp算法对AdaGrad算法做了修改。

    Algorithm

    在RMSProp中状态变量 𝑠𝑡 是截至时间步 𝑡 所有小批量随机梯度 𝑔𝑡 按元素平方和,RMSProp算法将这些梯度按元素平方做指数加权移动平均。具体来说,给定超参数 0≤𝛾0 计算
    𝑣𝑡←𝛽𝑣𝑡−1+(1−𝛽)𝑔𝑡⊙𝑔𝑡.
    和AdaGrad算法一样,RMSProp算法将目标函数自变量中每个元素的学习率通过按元素运算重新调整,然后更新自变量:


    更新自变量

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


    eta=0.4

    Adam

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

    Algorithm

    Adam算法使用了动量变量 𝑚𝑡 和RMSProp算法中小批量随机梯度按元素平方的指数加权移动平均变量 𝑣𝑡 ,并在时间步0将它们中每个元素初始化为0。给定超参数 0≤𝛽1<1 (算法作者建议设为0.9),时间步 𝑡 的动量变量 𝑚𝑡 即小批量随机梯度 𝑔𝑡 的指数加权移动平均:


    Adam

    和RMSProp算法中一样,给定超参数 0≤𝛽2<1 (算法作者建议设为0.999), 将小批量随机梯度按元素平方后的项 𝑔𝑡⊙𝑔𝑡 做指数加权移动平均得到 𝑣𝑡 :


    Adam
    由于我们将 𝑚0 和 𝑠0 中的元素都初始化为0, 在时间步 𝑡 我们得到 𝑚𝑡=(1−𝛽1)∑𝑡𝑖=1𝛽𝑡−𝑖1𝑔𝑖 。将过去各时间步小批量随机梯度的权值相加,得到 (1−𝛽1)∑𝑡𝑖=1𝛽𝑡−𝑖1=1−𝛽𝑡1 。需要注意的是,当 𝑡 较小时,过去各时间步小批量随机梯度权值之和会较小。例如,当 𝛽1=0.9 时, 𝑚1=0.1𝑔1 。为了消除这样的影响,对于任意时间步 𝑡 ,我们可以将 𝑚𝑡 再除以 1−𝛽𝑡1 ,从而使过去各时间步小批量随机梯度权值之和为1。这也叫作偏差修正。在Adam算法中,我们对变量 𝑚𝑡 和 𝑣𝑡 均作偏差修正:
    偏差修正

    接下来,Adam算法使用以上偏差修正后的变量 𝑚̂ 𝑡 和 𝑚̂ 𝑡 ,将模型参数中每个元素的学习率通过按元素运算重新调整:


    偏差修正
    其中 𝜂 是学习率, 𝜖 是为了维持数值稳定性而添加的常数,如 10−8 。和AdaGrad算法、RMSProp算法以及AdaDelta算法一样,目标函数自变量中每个元素都分别拥有自己的学习率。最后,使用 𝑔′𝑡 迭代自变量:
    迭代后变量

    数据增强

    图像增广

    图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。图像增广的另一种解释是,随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力。例如,我们可以对图像进行不同方式的裁剪,使感兴趣的物体出现在不同位置,从而减轻模型对物体出现位置的依赖性。我们也可以调整亮度、色彩等因素来降低模型对色彩的敏感度。可以说,在当年AlexNet的成功中,图像增广技术功不可没。本节我们将讨论这个在计算机视觉里被广泛使用的技术。

    常用图像增广方法

    1.翻转和裁剪
    2.变化颜色
    3.叠加多个图像增广方法

    模型微调

    微调步骤

    1.在源数据集上预训练一个神经网络模型
    2.创建一个新的神经网络模型
    为目标模型添加一个输出大小为目标数据集类别个数的输出层
    4.在目标数据集上训练目标模型


    模型微调

    相关文章

      网友评论

          本文标题:动手学深度学习-03打卡

          本文链接:https://www.haomeiwen.com/subject/eddxqhtx.html