《动手学深度学习》课后习题3

《动手学深度学习》学习网址:

参考资料
《动手学深度学习》中文版官网教材:
PyTorch中文文档:
部分PyTorch代码来自GitHub开源仓库:

《动手学》:批量归一化和残差网络

  1. nn.BatchNorm2d(6)的含义是

答案:全连接层的批量归一化,输出神经元个数为
解析:nn.BatchNorm2d()表示卷积层的BN,参数为通道数。nn.BatchNorm1d()表示全连接层的BN,参数为输出神经元个数。

2.关于BN层描述错误的是
A. 卷积层的BN位于卷积计算之后,激活函数之前。
B. 拉伸参数和偏移参数均为超参数。
C. 预测时用移动平均估算整个训练数据集的样本均值和方差。
D. BN层能使整个神经网络在各层的中间输出的数值更稳定。

答案:B
解析:拉伸参数和偏移参数为可学习参数。

3.关于ResNet描述错误的是
A残差网络由多个残差块组成。
B在残差块中,输⼊可通过跨层的数据线路更快地向前传播。
C可以通过不断加深网络层数来提高分类性能。
D较普通网络而言,残差网络在网络较深时能更好的收敛。

答案:C
解释:网络达到一定深度后再一味地增加层数反而会招致网络收敛变得更慢,准确率也变得更差。

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

答案:减小通道数

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

答案:27
解释:输出通道数=输入通道数+卷积层个数*卷积输出通道数

《动手学》:凸优化

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

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

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

4.假设A和B都是凸集合,那以下是凸集合的是:A和B的交集

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

《动手学》:梯度下降

1.关于梯度下降描述正确的是:_______

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

2.关于牛顿法说法正确的是:______。

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

3.随机梯度下降的时间复杂度是_____。

在这里插入图片描述

4.关于动态学习率的说法,正确

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

5.可以通过修改视频中 train_sgd 函数的参数___batch_size____来分别使用梯度下降、随机梯度下降和小批量随机梯度下降。

《动手学》:优化算法进阶

选择题
1.下列算法中哪个没有使用到Exponential Moving Average:C
A .RMSProp
B.Adam
C.Adagrad
D.SGD Momentum

答案解释 选项1: RMSProp的自适应学习率分母使用了EMA
选项2: Adam自适应学习率的分子和分母都使用了EMA 选项3:
Adagrad的自适应学习率没有使用EMA,而是对梯度平方进行累加,因而存在梯度消失的问题
选项4: Momentum也即对梯度计算EMA

2.下列关于RMSProp, AdaGrad, AdaDelta, Adam等高阶优化算法的说法错误的是:D
A.RMSProp利用Exponential Moving Average解决了Adagrad梯度消失的问题
B. AdaGrad出现梯度消失的原因是自适应学习率分母的不断累加使其存在最终趋于0的可能
C.AdaDelta是基于RMSProp的改进算法,其只有一个超参数
D.Adam没有使用Momentum算法

答案解释
选项1: 正确,RMSProp不是直接对梯度平方进行累加,而是使用EMA对上一时刻的自适应学习率的分母进行衰减
选项2:正确,当梯度一直不为0时,Adagrad的自适应学习率的分母会不断累加,使自适应学习率趋于0,出现梯度消息的问题
选项3:正确,Adelta是基于RMSprop的改进,只需传入EMA的衰减参数
选项4: 错误,Adam使用了Momentum算法,其是RMSProp与Momentum的结合

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

A. Adam使用了Exponential Moving Average
B.Adam对大小相差很大数量级的梯度都可以rescale到相近的大小
C.Adam是RMSProp和Momentum算法的结合,并对EMA权重进行了无偏操作
D.Adam使用了两次Exponential Moving Average,并且二者使用相同的衰减参数

答案解释
选项2: 正确,Adam算法中的 m_t和 v_t分别是梯度的一阶矩和二阶矩估计,二者相比,可以使更新量rescale到1的附近。
选项4: 错误,m_t 和 v_t均使用了EMA,但是二者的衰减参数并不相同

《动手学》:word2vec

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

A.训练好的词向量中能够包含更多语义信息
B.词向量的维度是可以自由设定的
C.词嵌入的实现与使用都更方便
D. 词嵌入模型需要运用大规模语料进行训练

答案:C
解释
选项1:one-hot向量只是一个简单的编码,很难包含复杂的语义信息如词语的相似性等,而训练好的词向量则可以从向量的空间关系上去体现词语间的关系,从而蕴含一定的语义信息
选项2:用 one-hot向量表示词语时,为了使每个词语都获得唯一的编码,向量长度至少要与词典大小相当,而词嵌入模型中的词向量维度则没有这个限制(实际上,词嵌入可以看作是对one-hot 词向量基于语义相似度进行的一个降维操作)

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

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

2.对定义好的 Embedding 层 embed = nn.Embedding(num_embedding=5, embed_dim=10) 进行前向计算操作 x = embed(torch.tensor([[1, 2], [3, 4], [5, 6]], dtype=torch.long)),得到的张量形状是:3×2×10

答案解释 nn.Embedding 层的实际作用就是将整数张量中的下标,替换为词向量,从张量形状上看,就是在最后添加 embed_dim
维,故得到的张量形状是 3×2×10,代码中 num_embedding 为词典的大小。

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

A 在训练时使用负采样近似,即对每个中心词都采集若干噪音词
B 分别定义中心词和背景词的词嵌入层
C. 在词典中去掉出现频率极低的词,或将其在文本中替换为 等特殊字符
D. 将词向量的维度设定得尽可能的大,使之匹配词典的大小

答案解释
选项1:大语料库意味着大的词典,若不使用负采样近似方法,词嵌入模型进行前向计算和梯度回传时,softmax的计算代价将是难以承受的
选项2:由于 skip-gram 模型(或 CBOW模型)的假设中,中心词和背景词都处于一种不对称的关系,而模型的数学表达式里,向量的点积项u ⊤ v却又是对称的,所以只能通过引入两个词嵌入层来保留假设中的非对称关系

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

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

《动手学》:词嵌入进阶

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

A词嵌入模型的训练本质上是在优化模型预测各词语同时出现的概率
B词嵌入模型的设计和训练语料库的选取都很重要
C不管是什么任务,在使用他人已经训练好的词向量时,直接复制词向量的权重就行了,不需要再进行任何额外的操作
D. GloVe 模型用到了语料库上全局的统计信息,而 Skip-Gram 和 CBOW 模型则只用到了局部的统计信息

答案解释
选项2:抽象地说,词嵌入方法都是通过在大规模的语料库上进行训练,来让模型更好地“理解”词义,而好的模型设计则能提高训练的效率及模型的上界
选项3:由于他人训练词向量时用到的语料库和当前任务上的语料库通常都不相同,所以词典中包含的词语以及词语的顺序都可能有很大差别,此时应当根据当前数据集上词典的顺序,来依次读入词向量,同时,为了避免训练好的词向量在训练的最初被破坏,还可以适当调整嵌入层的学习速率甚至设定其不参与梯度下降

2.关于 GloVe 方法基于 Skip-Gram 的改动,以下哪项描述是错误的:C
A.GloVe 使用了非概率分布的变量,并添加了中心词和背景词的偏差项,这样做是在松弛概率的规范性,即各个概率事件的概率和加起来等于1
B.GloVe 使用了一个单调递增的权重函数来加权各个损失项
C.由于交叉熵损失函数在很多任务中都被证明比平方损失函数更加有效,所以 GloVe 沿用了交叉熵损失函数
D.GloVe 的损失函数计算公式中用到了语料库上的全局统计信息

3.关于利用词向量求近义词和类比词,以下哪项描述是错误的:
A.我们可以直接使用他人预训练好的词向量,而不必从头开始训练
B.载入预训练词向量时,语料库和词向量维度的选取并不会对任务的表现有所影响
C.词语含义上的相似性和词向量空间中的余弦相似性是可以对应的
D.求类比词时可以复用求近义词的代码

答案解释
选项1:由于我们的计算资源和时间都很有限,所以我们通常都会加载他人预训练好的词向量,而非在大规模语料库上从头开始训练
选项2:在进行预训练词向量的载入时,我们需要根据任务的特性来选定语料库的大小和词向量的维度,以均衡模型的表达能力和泛化能力,同时还要兼顾计算的时间复杂度
选项4:求类比词时我们先会对给定的三个词的词向量进行加减运算,以得到一个虚拟的词向量,再去求这个虚拟词向量的近义词,就可以找到类比词

《动手学》:文本分类

1.关于数据的读取,以下哪项描述是错误的: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:每个卷积和池化后的结果都可以看作是该卷积核在文本上提取出的特征,而拼接这些特征,就能得到整个文本的一个整体表示

《动手学》:数据增强

1.下列不属于图像增广的作用的是
A缓解过拟合
B缓解欠拟合
C增加模型泛化能力
D通过旋转/翻转等方式可以降低对某些属性的依赖。

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

2.下列不属于图像增广的方法有

A复制图片
B翻转图片
C加入噪点
D调整亮度

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

3.torchvision.transforms.RandomHorizontalFlip()函数的作用是 左右翻转图片

答案解释 :
通过torchvision.transforms模块创建RandomHorizontalFlip实例来实现一半概率的图像左右翻转。

《动手学》:模型微调

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

A.复制源模型的参数进行初始化
B随机初始化参数
C用全零初始化参数
D不需要初始化

答案解释
选项一:错误,修改后源模型的输出层结构和目标模型不同,无法复制参数。

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

A.对输出层使用较大的学习率,对其他层使用较小的学习率。
B.对输出层使用较小的学习率,对其他层使用较大的学习率。
C.对输出层和其他层使用相同大小的学习率。
D.对输出层进行微调,其他层保持参数不变,不需要学习。

  • 第3次打卡

  • 特别感谢Datawhale、伯禹学习平台。

你可能感兴趣的:(动手学深度学习)