美文网首页动手学深度学习PyTorch版
《动手学深度学习》第五天2020-02-16

《动手学深度学习》第五天2020-02-16

作者: _a30a | 来源:发表于2020-02-16 16:38 被阅读0次

    https://www.boyuai.com/elites/

    2) 第二次打卡内容(2月15日-17日)截止打卡时间:2/17-22:00

    Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶(1天)

    Task04:机器翻译及相关技术;注意力机制与Seq2seq模型;Transformer(1天)

    Task05:卷积神经网络基础;leNet;卷积神经网络进阶(1天)

    Task04:机器翻译及相关技术;注意力机制与Seq2seq模型;Transformer(1天)

    13、机器翻译和数据集

    数据预处理中分词(Tokenization)的工作是把字符形式的句子转化为单词组成的列表。

    Encoder-Decoder常应用于输入序列和输出序列的长度是可变的应用,如机器翻译、对话机器人、语音识别任务,而分类问题的输出是固定的类别,不需要使用Encoder-Decoder。

    Sequence to Sequence模型中,每个batch训练时encoder和decoder都有固定长度的输入,每个batch的输入需要形状一致。

    集束搜索(Beam Search)是一种贪心算法,结合了greedy search和维特比算法,使用beam size参数来限制在每一步保留下来的可能性词的数量。

    14、注意力机制与Seq2seq模型

    留坑

    注意力机制借鉴了人类的注意力思维方式,以获得需要重点关注的目标区域。

    在计算注意力权重时,key 和 query 对应的向量维度不一定相等。在Dot-product Attention中,key与query维度需要一致,在MLP Attention中则不需要。

    点积注意力层不引入新的模型参数。

    注意力掩码可以用来解决一组变长序列的编码问题。

    对于加入Attention机制的seq2seq模型,

    seq2seq模型可以生成无穷长的序列。seq2seq模型的预测需人为设定终止条件,设定最长序列长度或者输出[EOS]结束符号,若不加以限制则可能生成无穷长度序列。

    每个时间步,解码器输入的语境向量(context vector)相同。每个位置都会计算各自的attention输出。

    解码器RNN仍由编码器最后一个时间步的隐藏状态初始化。

    引入注意力机制不能加速模型训练。注意力机制本身有高效的并行性,但引入注意力并不能改变seq2seq内部RNN的迭代机制,因此无法加速。

    点积注意力机制,

    高维张量的矩阵乘法可用于并行计算多个位置的注意力分数。

    计算点积后除以\sqrt{d}d​ 以减轻向量维度对注意力权重的影响。

    可视化注意力权重的二维矩阵有助于分析序列内部的依赖关系。

    对于两个有效长度不同的输入序列,若两组键值对完全相同,那么对于同一个query的输出不一定相同。有效长度不同导致 Attention Mask 不同,屏蔽掉无效位置后进行attention,会导致不同的输出。参考代码Dot-Product Attention的测试部分。

    15、Transformer

    留坑

    在训练和预测过程中,解码器部分均只需进行一次前向传播是错误的。训练过程1次,预测过程要进行句子长度次前向传播。

    Transformer 内部的注意力模块并不均为自注意力模块,并不都是来自于自编码器,Decoder 部分的第二个注意力层不是自注意力,key-value来自编码器而query来自解码器。

    解码器部分在预测过程中不需要使用 Attention Mask。

    自注意力模块理论上可以捕捉任意距离的依赖关系,因为自注意力会计算句子内任意两个位置的注意力权重。

    在Transformer模型中,注意力头数为h,嵌入向量和隐藏状态维度均为d,那么一个多头注意力层所含的参数量是:h个注意力头中,每个的参数量为3d^2,最后的输出层形状为hd×d,所以参数量共为4hd^2。

    对于层归一化,

    层归一化有利于加快收敛,减少训练时间成本。

    层归一化对一个中间层的所有神经元进行归一化。

    层归一化不是对每个神经元的输入数据以mini-batch为单位进行汇总。批归一化(Batch Normalization)才是对每个神经元的输入数据以mini-batch为单位进行汇总。

    层归一化的效果不会受到batch大小的影响。

    3) 第三次打卡内容(2月18日-21日)截止打卡时间:2/21-22:00

    直播分享(2月18日)

    Task06:批量归一化和残差网络;凸优化;梯度下降(1天)

    Task07:优化算法进阶;word2vec;词嵌入进阶(1天)

    Task08:文本分类;数据增强;模型微调(1天)

    直播分享(2月21日)

    Task06:批量归一化和残差网络;凸优化;梯度下降(1天)

    16、批量归一化(BatchNormalization)和残差网络

    16.1 批量归一化(BatchNormalization)

    对输入的标准化(浅层模型)

    处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。

    标准化处理输入数据使各个特征的分布相近。

    批量归一化(深度模型)

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

    使得各个特征的分布相近和各层的中间输出的数值更稳定带来的好处是什么?归一化相比未归一化结果相差多少?

    1.对全连接层做批量归一化

    2.对卷积层做批量归⼀化

    位置:卷积计算之后、应⽤激活函数之前。

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

    3.预测时的批量归⼀化

    训练:以batch为单位,对每个batch计算均值和方差。

    预测:用移动平均估算整个训练数据集的样本均值和方差。

    代码实现能力才是真本事,是基础;文本知识的掌握只是必备元素之一。

    讲解视频虽然三分之二都在讲解代码,但缺点是大都粗略而过,产生“原本就会的人没必要看,不会的人看了后收获不大(比如我)”的情况。视频中应强调:本节知识点在函数库调用中怎么实现及注意事项?有无和之前讲到的知识点有联系的地方,有的话捎带复习一遍。可能这就是线上网课的内在固有缺陷(和学生主讲视频有一定关系)。

    代码安排有:从零实现和基于LeNet的应用,很到位了。

    通过学习各种网络结构也更加理解了对于网上调包侠的调侃,确实没有什么技术含量。。。

    16.2 残差网络(ResNet)

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

    方法:引入残差块,类似于控制中的反馈调节思想

    残差块(Residual Block)

    恒等映射:

    左边:f(x)=x

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

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

    ResNet模型的代码实现

    卷积(64,7x7,3)

    批量一体化

    最大池化(3x3,2)

    残差块x4 (通过步幅为2的残差块在每个模块之间减小高和宽)

    全局平均池化

    全连接

    稠密连接网络(DenseNet)

    主要构建模块:

    稠密块(dense block): 定义了输入和输出是如何连结的。

    过渡层(transition layer):用来控制通道数,使之不过大。

    1×1卷积层:来减小通道数

    步幅为2的平均池化层:减半高和宽

    在稠密块中,假设由3个输出通道数为8的卷积层组成,稠密块的输入通道数是3,那么稠密块的输出通道数=输入通道数+卷积层个数*卷积输出通道数=27

    BN中的拉伸参数和偏移参数为可学习参数。

    nn.BatchNorm2d(6)的含义是卷积层的批量归一化,通道数为6。

    nn.BatchNorm2d()表示卷积层的BN,参数为通道数。nn.BatchNorm1d()表示全连接层的BN,参数为输出神经元个数。

    17、凸优化

    假设A和B都是凸集合,则A和B的交集仍是凸集合,并集不一定。

    多维变量的鞍点描述正确的是:鞍点是对所有自变量一阶偏导数都为0,且Hessian矩阵特征值有正有负的点。即只是某一个方向上的最小值点。

    优化在深度学习中面临的挑战:局部最小值、鞍点、梯度消失

    有限制条件的优化问题可以用什么方法解决:拉格朗日乘子法、添加惩罚项、投影法。

    凸函数的充分必要条件:二阶导数大于等于0 ——f″(x)≥0⟺f(x) 是凸函数

    限制条件类函数的处理方法:

    \begin{array}{l}{\underset{\mathbf{x}}{\operatorname{minimize}} f(\mathbf{x})} \\ {\text { subject to } c_{i}(\mathbf{x}) \leq 0 \text { for all } i \in\{1, \ldots, N\}}\end{array}

    拉格朗日乘子法

    L(\mathbf{x}, \alpha)=f(\mathbf{x})+\sum_{i} \alpha_{i} c_{i}(\mathbf{x}) \text { where } \alpha_{i} \geq 0

    惩罚项

    欲使 ci(x)≤0, 将项 αici(x) 加入目标函数,如多层感知机章节中的 λ2||w||2

    投影法:向目标方向进行投影

    \operatorname{Proj}_{X}(\mathbf{x})=\underset{\mathbf{x}^{\prime} \in X}{\operatorname{argmin}}\left\|\mathbf{x}-\mathbf{x}^{\prime}\right\|_{2}

    18、梯度下降算法(优化方法)

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

    数学公式有点多。。。容易使得注意力分散

    程序员的核心能力:会写子函数

    18.2 随机梯度下降

    随机梯度下降的时间复杂度为O(1)

    牛顿法:牛顿法相比梯度下降的一个优势在于:梯度下降“步幅”的确定比较困难,而牛顿法相当于可以通过Hessian矩阵来调整“步幅”。牛顿法需要计算Hessian矩阵的逆,计算量比较大。在牛顿法中,局部极小值也可以通过调整学习率来解决。

    动态学习率:不同区间赋值  指数  复合多项式

    \begin{array}{ll}{\eta(t)=\eta_{i} \text { if } t_{i} \leq t \leq t_{i+1}} & {\text { piecewise constant }} \\ {\eta(t)=\eta_{0} \cdot e^{-\lambda t}} & {\text { exponential }} \\ {\eta(t)=\eta_{0} \cdot(\beta t+1)^{-\alpha}} & {\text { polynomial }}\end{array}

    动态学习率的说法:在最开始学习率设计比较大,加速收敛,随着迭代次数增加减小学习率。学习率可以设计为指数衰减或多项式衰减在优化进行一段时间后可以适当减小学习率来避免振荡。

    可以通过修改视频中 train_sgd 函数的参数__batch_size__来分别使用梯度下降、随机梯度下降和小批量随机梯度下降,因为三者的区别在于每次更新时用的样本量。

    编程实践:小批量随机梯度下降从零开始实现和简洁实现。

    用时约3小时,未进行编程实践。

    相关文章

      网友评论

        本文标题:《动手学深度学习》第五天2020-02-16

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