zoukankan      html  css  js  c++  java
  • 小匠_碣 第三周期打卡 Task06~Task08

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

    批量归一化和残差网络

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

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

    批量归一化(深度模型)

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

     

    ResNet:

      残差网络,普通神经网络和残差网络对比,残差网络拟合的是残差,残差块通过跨层的数据通道从而能够训练出有效的深度神经网络。

      稠密连接网络(DenseNet):

        DenseNet包括稠密块(dense block)和过渡层(transition layer),前者定义了输 入和输出是如何连结的,后者则用来控制通道数,使之不过大。

     

      稠密块:

        输出通道数=输入通道数+卷积层个数*卷积输出通道数

     

      过渡层:

        由于每个稠密块都会带来通道数的增加,使用过多则会带来过于复杂的模型。过渡层用来控制模 型复杂度。它通过1 × 1卷积层来减小通道数,并使用步幅为2的平均池化层减半高和宽,从而进 一步降低模型复杂度。

     

    练习:

    nn.BatchNorm2d(6)的含义是:D

    A:全连接层的批量归一化,batchsize为6

    B:卷积层的批量归一化,batchsize为6

    C:全连接层的批量归一化,输出神经元个数为6

    D:卷积层的批量归一化,通道数为6

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

     

    关于BN层描述错误的是:B

    A:卷积层的BN位于卷积计算之后,激活函数之前。

    B:拉伸参数和偏移参数均为超参数。

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

    D:BN层能使整个神经网络在各层的中间输出的数值更确定。

    选项1:正确,参考BN层的定义。

    选项2:错误,拉伸参数和偏移参数为可学习参数。

    选项3:正确,参考BN层的定义。

    选项4:正确,参考BN层的定义

     

    关于ResNet描述错误的是:C

    A:残差网络由多个残差块组成。

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

    C:可以通过不断加深网络层数提高分类性能。

    D:较普通网络而言,残差网络在网络较深时能更好的收敛。

    选项1:正确,参考ResNet的结构特征。

    选项2:正确,参考ResNet的结构图。

    选项3:错误,网络达到一定深度后再一味地增加层数反而会招致网络收敛变得更慢,准确率也变得更差。

    选项4:正确,参考ResNet的结构特征。

     

     

    稠密连接网络过渡层中,1*1卷积层的主要作用是:A

    A:减小通道数

    B:增加通道数

    C:引入非线性

    D:代替全连接层

    减小通道数正确,参考过渡层的作用。

    凸优化

    优化方法的目标是最小化 训练集损失函数,深度学习的目标是最小化 测试集 损失函数值。

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

    鞍点是对所有自变量一阶偏导数都为0,而且Hessian矩阵特征值有正有负的点。

    假设A和B都是凸集合,A和B的交集也是凸集合。

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

    梯度下降

    关于梯度下降,局部极小值是梯度下降算法面临的一个挑战。梯度下降是沿着梯度的反方向移动自变量从而减小函数值的。

    牛顿法:

      牛顿法相比梯度下降的一个优势在于:梯度下降‘步幅’的确定较为困难,而牛顿法相当于可以通过Hessian矩阵来调整‘步幅’。

      在牛顿法中,局部极小值也可以通过调整学习率来解决。

      牛顿法需要计算Hessian矩阵的逆,计算量比较大。

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

      

      梯度下降算法中的正数 η 通常叫作学习率。这是一个超参数,需要人工设定。如果使用过小的学习率,会导致 x 更新缓慢从而需要更多的迭代才能得到较好的解。学习率选择太大则,步子太大,容易扯着蛋, 跨越最优解。

      
    小批量随机梯度下降在参数进行更新的时候每一次取一小部分样本进行梯度下降,对梯度取均值进行梯度更新。当批量较大时,每个小批量梯度里可能含有更多的冗余信息。为了得到较好的解,批量较大时比批量较小时需要计算的样本数目可能更多,例如增大迭代周期数

      

    对于动态学习率:

      在最开始学习率设计比较大,加速收敛。

      学习率可以设计为指数衰减或多项式衰减。

      在优化进行一段时间后可以适当减小学习率来避免震荡。

      动态学习率可以随着迭代次数增加减小学习率。


    mathcal{O}(

    Task07:优化算法进阶;word2vec;词嵌入进阶

    优化算法进阶

      

    1. 批量梯度下降---最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小。
    2. 随机梯度下降---最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。
    3. 视频的模型比较简单,确实效果差异不明显,实际的大模型需要调整

    下列算法中哪个没有使用到Exponential Moving Average :C

    A:RMSProp

    B:Adam

    C:Adagrad

    C:SGD Momentum

    RMSProp的自适应学习率分母使用了EMA

    Adam自适应学习率的分子和分母都使用了EMA

    Adagrad的自适应学习率没有使用EMA,而是对梯度平方进行累加,因而存在梯度消失的问题

    Momentum也即对梯度计算EMA

    下列关于PMSProp,AdaGrad,AdaDelta,Adamd等高阶优化算法的说法错误的是:D

    A:RMSProp利用Exponential Mobing Average 解决了Adagrad梯度消失问题。

    B:AdaGrad出现梯度消失的原因是自适应学习率分母的不断累加使其存在最终趋于0的可能。

    C:Adam没有使用Momentum算法。

    RMSProp不是直接对梯度平方进行累加,而是使用EMA对上一时刻的自适应学习率的分母进行衰减。

    当梯度一直不为0时,Adagrad的自适应学习率的分母会不断累加,使自适应学习率趋于0,出现梯度消失的问题。

    Adelta使基于RMSprop的改进,只需要传入EMA的衰减参数。

    Adam使用了Momentum算法,其是RMSProp与Momentum的结合

    下列关于Adam的说法错误的是:D

    A:Adam使用了Exponential Moving Average

    B:Adam对大小相差很大数量级的梯度都可以rescale到相近的大小。

    C:Adam是RMSProp和Momentum算法的结合,并对EMA权重进行了无偏操作。

    D:Adam使用了两次Exponential Moving Average ,并且二者使用相同的衰减参数。

    Adam算法中的mt和vt(原文符号)分别是梯度的一阶矩和二阶矩估计,二者相比,可以使更新量rescale到1的附近。

    word2vec

      one-hot 向量表示单词,虽然它们构造起来很容易,但通常并不是一个好选择。一个主要的原因是,one-hot 词向量无法准确表达不同词之间的相似度,Word2Vec 能从语料中学到如何将离散的词映射为连续空间中的向量,并保留其语义上的相似关系。

      

      词嵌入方法实际上就是想让模型学出 wj 有多大概率是 wi 的背景词,而真实的标签则是语料库上的统计数据。同时,语料库中的每个词根据 xi 的不同,在损失函数中所占的比重也不同。

      

    相比于使用 one-hot 向量表示词语,以下哪一项不是词嵌入模型的优点:C

    A:训练好的词向量中能够包含更多词义信息。

    B:词向量的维度是可以自由设定的。

    C:词嵌入的表现与使用都更方便。

    D:词嵌入模型需要运用大规模预料进行训练。

    选项1:one-hot 向量只是一个简单的编码,很难包含复杂的语义信息如词语的相似性等,而训练好的词向量则可以从向量的空间关系上去体现词语间的关系,从而蕴含一定的语义信息

    选项2:用 one-hot 向量表示词语时,为了使每个词语都获得唯一的编码,向量长度至少要与词典大小相当,而词嵌入模型中的词向量维度则没有这个限制(实际上,词嵌入可以看作是对 one-hot 词向量基于语义相似度进行的一个降维操作)

    选项3:词嵌入模型首先需要在大规模语料库上进行训练,才能得到更有意义的词向量,其次在后续模型的训练过程中,可能还需要进行进一步的模型参数优化,所以在实现和使用上,都是比 one-hot 向量更复杂的

    选项4:无论是 skip-gram 模型还是 CBOW 模型,都是假设词语的含义是由其周围的单词所决定的,而为了使模型能够“学会”词语的含义,就必须将其置于大规模语料库上进行长时间的训练

    在大语料库上进行大规模的词向量训练时,一下哪一个操作是不必要的:D

    A:在训练时使用负采样近似,即对每个中心词斗采集若干噪音词。

    B:分别定义中心词和背景词的词嵌入层。

    C:在词典中去掉出现频率极低的词,或将其在文本中替换为<unk>等特殊字符。

    D:将词向量的维度设定得尽可能的大,使之匹配词典的大小。

    选项1:大语料库意味着大的词典,若不使用负采样近似方法,词嵌入模型进行前向计算和梯度回传时,softmax 的计算代价将是难以承受的

    选项2:由于 skip-gram 模型(或 CBOW 模型)的假设中,中心词和背景词都处于一种不对称的关系,而模型的数学表达式里,向量的点积项 u^ op vuv 却又是对称的,所以只能通过引入两个词嵌入层来保留假设中的非对称关系

    选项3:大语料库中通常含有非常多的低频词,若不对其进行处理,将会严重损害模型的泛化能力,甚至降低高频词词向量的质量,同时,更大的词典也会意味着更大的存储和计算开销

    选项4:词嵌入本质上就是在对词典进行降维操作,所以过大的词向量维度,反而可能会导致模型过拟合

    词嵌入进阶

    载入预训练的 GloVe 向量

    GloVe 官方 提供了多种规格的预训练词向量,语料库分别采用了维基百科、CommonCrawl和推特等,语料库中词语总数也涵盖了从60亿到8,400亿的不同规模,同时还提供了多种词向量维度供下游模型使用。

    torchtext.vocab 中已经支持了 GloVe, FastText, CharNGram 等常用的预训练词向量,我们可以通过声明 torchtext.vocab.GloVe 类的实例来加载预训练好的 GloVe 词向量。

    对于Skip-Gram,CBOW,GloVe等词嵌入方法的理解,以下哪项是错误的:C

    A:词嵌入模型的训练本质上是在优化模型预测各词语同时出现的概率。

    B:词嵌入模型的设计和训练语料库的选取都很重要。

    C:不管是什么任务,在使用他人已经训练好的词向量时,直接复制词向量的权重就行了,不需要再进行任何额外的操作。

    D:GloVe模型用到了语料库上全局的统计信息,而Skip-Gram和CBOW模型则只用到了局部的统计信息。

    b抽象地说,词嵌入方法都是通过在大规模的语料库上进行训练,来让模型更好地“理解”词义,而好的模型设计则能提高训练的效率及模型的上界

    c由于他人训练词向量时用到的语料库和当前任务上的语料库通常都不相同,所以词典中包含的词语以及词语的顺序都可能有很大差别,此时应当根据当前数据集上词典的顺序,来依次读入词向量,同时,为了避免训练好的词向量在训练的最初被破坏,还可以适当调整嵌入层的学习速率甚至设定其不参与梯度下降

    关于GloVe方法基于Skip-Gram 的改动,以下哪项描述是错误的:C

    A:GloV使用了非概率分布的变量,并添加了中心词和背景词的偏差项,这样做是在松弛概率的规范性,即各个概率事件的概率和加起来等于1。

    B:GloVe使用了一个单调递增的权重函数来加权各个损失项。

    C:由于交叉熵损失函数在很多任务中都被证明比平方损失函数更加有效,所以GloVe沿用了交叉熵损失函数。

    D:GloVe的损失函数计算公式中用到了语料库上的全局统计信息。

    关于利用词变量求近义词和类比词,以下哪项描述是错误的:B

    A:我们可以直接使用他人预训练好的词向量,而不必从头开始训练。

    B:载入与训练词向量时,语料库和词向量维度的选取并不会对任务的表现有所影响。

    C:词语含义上的相似性和词向量空间中的余弦相似性是可以对应的。

    D:求类比词时可以复用求近义词的代码。

    a由于我们的计算资源和时间都很有限,所以我们通常都会加载他人预训练好的词向量,而非在大规模语料库上从头开始训练。

    b在进行预训练词向量的载入时,我们需要根据任务的特性来选定词料库的大小和词向量的维度,以均衡模型的表达能力和泛化能力,同时还要兼顾计算的时间复杂度。

    d求类比词时我们先会对给定的三个词的词向量进行加减运算,以得到一个虚拟的词向量,再去求这个虚拟词向量的近义词,就可以找到类比词。

    Task08:文本分类;数据增强;模型微调

    文本分类

    关于数据的读取,以下哪项描述是错误的:C

    A:除了运用一个固定的分割符进行单词的切分外,在实现分词函数时,还能加上更多的功能,如子词的切分和特殊字符的处理等

    B:从原理上来说,对数据中的句子进行补齐或截断是不必要的,这么做是为了加强模型并行计算的能力

    C:将文本序列转化为下标张量时,需要将张量转换为 torch.float 进行存储

    D:直接读取预训练好的 GloVe 词向量和其对应的词典也能完整地实现文本情感分类模型,并不一定需要针对数据集本身创建词典

    答案解释

    选项1:针对任务或语言的特性特殊实现的分词函数,将更有利于模型的训练,但在设计该函数时要注意预训练词向量是定义在什么词典上的,不能使 out-of-vocabulary 词过多

    选项2:无论是循环神经网络,还是卷积神经网络,理论上都是能在任何长度的文本上进行运算的,但规范化模型的长度会有利于模型进行批量化的计算

    选项3:PyTorch 的嵌入层在进行前向传播时,其输入张量需要为 torch.long 格式

    选项4:理论上这么做是可行的,但缺少个性化的词典,会使模型在该任务上的表现下降

    2.

    关于使用双向循环神经网络进行文本情感分类,以下哪项描述是错误的:D

    A:双向循环神经网络比单向循环神经网络更能抓住文本的特征

    B:双向循环神经网络中的隐藏状态不能并行地计算

    C:通常会给循环神经网络模型输入两个特殊的初始状态向量,以表示文本的两端

    D:双向循环神经网络不能进行多层叠加

    答案解释

    选项1:由于自然语言中常常有一些特殊的倒装结构,所以拥有两个方向的隐藏状态的双向循环神经网络,其输出更具文本代表性。注意,虽然两个方向的隐藏状态在输出前被拼接在了一起,但他们仍然是独立地被运算出来的,所以双向循环神经网络也不能从根本上解决文本的双向依赖问题,而卷积神经网络和 Transformer 这样完全并行的结构则不存在该问题

    选项2:对于每个方向的每个隐藏状态,计算它时都会用到该方向中上一步的隐藏状态,所以双向循环神经网络中的隐藏状态不能被并行地算出

    选项4:可以将双向循环神经网络的输出再次作为输入,输入到下一层的双向循环神经网络中,从而得到一个多层的结构

    3.

    关于使用卷积神经网络进行文本情感分类,以下哪项描述是错误的:A

    A:一维卷积层输出的宽度为输入的宽度减去核的宽度

    B:定义多个输出通道的卷积核有利于模型提取更丰富的文本特征,定义多种宽度的卷积核有利于模型提取多个层次的文本特征

    C:并不需要对每一个卷积核都单独地定义一个池化层

    D:对所有卷积操作的结果进行池化和拼接之后,得到的向量就可以作为文本的一个整体的表示

    答案解释

    选项1:一维卷积层输出的宽度为输入的宽度减去核的宽度加一

    选项2:输出通道数越多,可以捕捉的单词的组合就越多;而拥有不同宽度的核,就能让模型对文本中各个长度的单词组合都有关注

    选项3:由于池化操作与输入的序列长度无关,本身也不含任何参数,故可以所有卷积核共用一个池化层

    选项4:每个卷积和池化后的结果都可以看作是该卷积核在文本上提取出的特征,而拼接这些特征,就能得到整个文本的一个整体表示

    数据增强

    下列不属于图像增广的作用的是:B

    A:缓解过拟合

    B:缓解欠拟合

    C:增加模型泛化能力

    D:通过旋转/翻转等方式可以降低对某些属性的依赖。

    答案解释

    选项二:错误,欠拟合普遍原因是模型对于数据过于简单,因此图像增广不能缓解欠拟合,但是能缓解过拟合,通过加入相似的图片也能 提高泛化能力和减小对某些无关属性如图片方向、大小的依赖。

    2.

    下列不属于图像增广的方法有:A

    A:复制图片

    B:翻转图片

    C:加入噪点

    D:调整亮度

    答案解释

    选项一:错误,复制图片并没有改变图片,也没有扩大数据集,仅仅增加了该图片训练的次数。

    3.

    torchvision.transforms.RandomHorizontalFlip()函数的作用是:D

    A:180°旋转图片

    B:顺时针90°旋转图片

    C:上下翻转图片

    D:左右翻转图片

    答案解释

    选项四:正确,通过torchvision.transforms模块创建RandomHorizontalFlip实例来实现一半概率的图像左右翻转。

    模型微调

    1.假设我们将源模型的输出层改成输出大小为目标数据集类别个数的输出层,则对于这个新的输出层如何初始化B

    A:复制源模型的参数进行初始化

    B:随机初始化参数

    C:用全零初始化参数

    D:不需要初始化

     

    2.假设我们将源模型的输出层改成输出大小为目标数据集类别个数的输出层,在训练过程中下列说法正确的是A

    A:对输出层使用较大的学习率,对其他层使用较小的学习率。

    B:对输出层使用较小的学习率,对其他层使用较大的学习率。

    C:对输出层和其他层使用相同大小的学习率。

    D:对输出层进行微调,其他层保持参数不变,不需要学习。

  • 相关阅读:
    ubuntu android jdk问题
    android adb ubuntu问题
    常用命令
    svn info
    TaskRecord分析
    moveTasktoBack 把当前任务放入后台
    WatchDog机制
    双系统安装
    制作安装U盘
    android 小游戏 ---- 数独(二)
  • 原文地址:https://www.cnblogs.com/Dreamer-Jie/p/12353007.html
Copyright © 2011-2022 走看看