Learn_Dive-into-DL-PyTorch 第二次打卡

习题思考

1. 双向循环神经网络

Learn_Dive-into-DL-PyTorch 第二次打卡_第1张图片

双向循环神经网络结构示意图:

Learn_Dive-into-DL-PyTorch 第二次打卡_第2张图片

2. 关于Sequence to Sequence模型

Learn_Dive-into-DL-PyTorch 第二次打卡_第3张图片

Sequence to Sequence模型:

Learn_Dive-into-DL-PyTorch 第二次打卡_第4张图片

3. 卷积神经网络基础

Learn_Dive-into-DL-PyTorch 第二次打卡_第5张图片

二维互相关(cross-correlation)运算的输入是一个二维输入数组和一个二维核(kernel)数组,输出也是一个二维数组,其中核数组通常称为卷积核或过滤器(filter)。卷积核的尺寸通常小于输入数组,卷积核在输入数组上滑动,在每个位置上,卷积核与该位置处的输入子数组按元素相乘并求和,得到输出数组中相应位置的元素。图1展示了一个互相关运算的例子,阴影部分分别是输入的第一个计算区域、核数组以及对应的输出。
填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素)
在互相关运算中,卷积核在输入数组上滑动,每次滑动的行数与列数即是步幅(stride)

在本题中,输入通道数是3,输出通道数是10,所以参数数量是10×3×3×3+10=280

关于注意力机制

注意力机制框架

Attention 是一种通用的带权池化方法,输入由两部分构成:询问(query)和键值对(key-value pairs)。 ki∈Rdk,vi∈Rdv . Query q∈Rdq , attention layer得到输出与value的维度一致 o∈Rdv . 对于一个query来说,attention layer 会与每一个key计算注意力分数并进行权重的归一化,输出的向量 o 则是value的加权求和,而每个key计算的权重与value一一对应。

解码器

由于带有注意机制的seq2seq的编码器与之前章节中的Seq2SeqEncoder相同,所以在此处我们只关注解码器。我们添加了一个MLP注意层(MLPAttention),它的隐藏大小与解码器中的LSTM层相同。然后我们通过从编码器传递三个参数来初始化解码器的状态:

the encoder outputs of all timesteps:encoder输出的各个状态,被用于attetion layer的memory部分,有相同的key和values
the hidden state of the encoder’s final timestep:编码器最后一个时间步的隐藏状态,被用于初始化decoder 的hidden state
the encoder valid length: 编码器的有效长度,借此,注意层不会考虑编码器输出中的填充标记(Paddings)

在解码的每个时间步,我们使用解码器的最后一个RNN层的输出作为注意层的query。然后,将注意力模型的输出与输入嵌入向量连接起来,输入到RNN层。虽然RNN层隐藏状态也包含来自解码器的历史信息,但是attention model的输出显式地选择了enc_valid_len以内的编码器输出,这样attention机制就会尽可能排除其他不相关的信息。

其他文章解释

要了解深度学习中的注意力模型,就不得不先谈Encoder-Decoder框架,因为目前大多数注意力模型附着在Encoder-Decoder框架下,当然,其实注意力模型可以看作一种通用的思想,本身并不依赖于特定框架,这点需要注意。
文本处理领域的Encoder-Decoder框架可以这么直观地去理解:可以把它看作适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型。对于句子对,我们的目标是给定输入句子Source,期待通过Encoder-Decoder框架来生成目标句子Target。Source和Target可以是同一种语言,也可以是两种不同的语言。而Source和Target分别由各自的单词序列构成:
在这里插入图片描述
Encoder顾名思义就是对输入句子Source进行编码,将输入句子通过非线性变换转化为中间语义表示C:
在这里插入图片描述
对于解码器Decoder来说,其任务是根据句子Source的中间语义表示C和之前已经生成的历史信息来生成i时刻要生成的单词
在这里插入图片描述
每个yi都依次这么产生,那么看起来就是整个系统根据输入句子Source生成了目标句子Target。如果Source是中文句子,Target是英文句子,那么这就是解决机器翻译问题的Encoder-Decoder框架;如果Source是一篇文章,Target是概括性的几句描述语句,那么这是文本摘要的Encoder-Decoder框架;如果Source是一句问句,Target是一句回答,那么这是问答系统或者对话机器人的Encoder-Decoder框架。由此可见,在文本处理领域,Encoder-Decoder的应用领域相当广泛。
Encoder-Decoder框架不仅仅在文本领域广泛使用,在语音识别、图像处理等领域也经常使用。比如对于语音识别来说,图2所示的框架完全适用,区别无非是Encoder部分的输入是语音流,输出是对应的文本信息;而对于“图像描述”任务来说,Encoder部分的输入是一副图片,Decoder的输出是能够描述图片语义内容的一句描述语。一般而言,文本处理和语音识别的Encoder部分通常采用RNN模型,图像处理的Encoder一般采用CNN模型。

你可能感兴趣的:(Learn_Dive-into-DL-PyTorch 第二次打卡)