[动手学深度学习PyTorch笔记四]

一 机器翻译及相关技术

机器翻译(MT):将一段文本从一种语言自动翻译为另一种语言,用神经网络解决这个问题通常称为神经机器翻译(NMT)。 主要特征:输出是单词序列而不是单个单词。 输出序列的长度可能与源序列的长度不同。
首先进行数据预处理,将数据集清洗、转化为神经网络的输入的minbatch,包括分词、建立字典、载入数据集。

Encoder-Decoder

一种通用模型框架。Encoder:编码器,从输入到隐藏状态
Decoder:解码器,从隐藏状态到输出。
特点:输入输出的长度可以不相等。不论输入和输出的长度是什么,中间隐藏状态的长度都是固定的。根据不同的任务可以选择不同的编码器和解码器(可以是一个 RNN ,但通常是其变种 LSTM 或者 GRU)
及其翻译中的一种Encoder-Decoder模型叫做Sequence to sequence 模型。Encoder得到语义编码作为Decoder的输入。Decoder是一个语言模型。

二 注意力机制与Seq2seq模型

在一般的Sequence to sequence 模型中,解码器在各个时间步依赖相同的背景变量(context vector)来获取输⼊序列信息。当编码器为循环神经⽹络时,背景变量来⾃它最终时间步的隐藏状态。但是RNN机制实际中存在长程梯度消失的问题,且隐藏状态向量的长度也有限制。解码的目标词语可能只与原输入的部分词语有关,而并不是与所有的输入有关。在seq2seq模型中,解码器只能隐式地从编码器的最终状态中选择相应的信息。然而,注意力机制可以将这种选择过程显式地建模。

注意力机制框架

Attention 是一种通用的带权池化方法,输入由两部分构成:询问(query)和键值对(key-value pairs)。 attention layer得到输出与value的维度一致, 对于一个query来说,attention layer 会与每一个key计算注意力分数并进行权重的归一化,输出的向量则是value的加权求和,而每个key计算的权重与value一一对应。不同的attetion layer的区别在于 注意力分数函数 的选择。
假设用函数 α \alpha α计算query q q q和key k i k_i ki的相似性,计算注意力分数:
a i = α ( q , k i ) . a_i=\alpha (q,k_i). ai=α(q,ki).
再用softmax函数进行归一化获得注意力权重:
b 1 , b 2 , . . . , b n = s o f t m a x ( a 1 , a 2 , . . . , a n ) . b_1,b_2,...,b_n=softmax(a_1,a_2,...,a_n). b1,b2,...,bn=softmax(a1,a2,...,an).
输出value的加权和: o = ∑ i = 1 n b i v i . o=\sum _{i=1}^n b_iv_i. o=i=1nbivi.
注意层的内存由键-值对组成,因此它的输出接近于键类似于查询的值。

点积注意力

The dot product 假设query和keys有相同的维度,通过计算query和key转置的乘积来计算attention score,通常还会除去 d \sqrt d d 减少计算出来的score对维度 d d d的依赖性:
α ( q , k ) = < q , k > / d = q k T / d . \alpha (q,k)=<q,k> /\sqrt d=qk^{T} / \sqrt d. α(q,k)=<q,k>/d =qkT/d .

多层感知机注意力

将 query and keys 投影到 R h \Bbb R^h Rh,将可以学习的参数映射为 W k ∈ R h × d k {\bf W}_k\in \Bbb R^{h\times d_k} WkRh×dk W q ∈ R h × d q {\bf W}_q\in \Bbb R^{h\times d_q} WqRh×dq v ∈ R h {\bf v}\in \Bbb R^h vRh,定义:
α ( q , k ) = v T t a n h ( W k k + W q q ) . \alpha (\bf q,k)=v^T\it tanh(\bf W_{\it k}k+W_{\it q}q). α(q,k)=vTtanh(Wkk+Wqq).
然后将key 和 value 在特征的维度上合并(concatenate),然后送至 a single hidden layer perceptron 这层中 hidden layer 为 ℎ and 输出的size为 1 .隐层激活函数为tanh,无偏置.

引入注意力机制的Seq2seq模型

将注意机制添加到sequence to sequence 模型中,以显式地使用权重聚合states。attention layer保存着encodering看到的所有信息——即encoding的每一步输出。在decoding阶段,解码器的t时刻的隐藏状态被当作query,encoder的每个时间步的hidden states作为key和value进行attention聚合. Attention model的输出当作成上下文信息context vector,并与解码器输入拼接起来一起送到解码器。
encoder输出的各个状态,被用于attetion layer的memory部分,有相同的key和values。编码器最后一个时间步的隐藏状态,被用于初始化decoder 的hidden state。在解码的每个时间步,使用解码器的最后一个RNN层的输出作为注意层的query。然后,将注意力模型的输出与输入嵌入向量连接起来,输入到RNN层。虽然RNN层隐藏状态也包含来自解码器的历史信息,但是attention model的输出显式地选择了编码器的有效输出,这样attention机制就会尽可能排除其他不相关的信息。

三 Transformer

CNNs 易于并行化,却不适合捕捉变长序列内的依赖关系。RNNs 适合捕捉长距离变长序列的依赖,但是却难以实现并行化处理序列。为了整合CNN和RNN的优势,[Vaswani et al., 2017] 创新性地使用注意力机制设计了Transformer模型。该模型利用attention机制实现了并行化捕捉序列依赖,并且同时处理序列的每个位置的tokens,使得Transformer模型在性能优异的同时大大减少了训练时间。Transformer也基于编码器-解码器架构:
Transformer blocks:将seq2seq模型重的循环网络替换为了Transformer Blocks,该模块包含一个多头注意力层(Multi-head Attention Layers)以及两个position-wise feed-forward networks(FFN)。对于解码器来说,另一个多头注意力层被用于接受编码器的隐藏状态。
Add and norm:多头注意力层和前馈网络的输出被送到两个“add and norm”层进行处理,该层包含残差结构以及层归一化。
Position encoding:由于自注意力层并没有区分元素的顺序,所以一个位置编码层被用于向序列元素里添加位置信息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值