NLP 的问题,都可以看做是 QA(Question Answering)的问题,QA 的问题可以看做是 Sequence to Sequence 的问题。
Sequence to Sequence 是一个常见的任务类型,例如:语音识别、语音翻译(语音辨识)、机器翻译、Chatbot、Text-to-Speech (TTS) Synthesis(文本到语音合成)、语法分析、多标签分类、目标检测等等。
Sequence to Sequence 任务可以由各种序列模型执行,其中 RNN 模型是经典的用于序列数据的模型,而随着 Transformer 的出现和成功,它已经在许多序列任务中取代了传统的RNN架构。
Transformer 实际上就是一个关于 Seq2Seq 的 model
整体架构分为两部分:Encoder 与 Decoder
Encoder 做的就是输入一个Vector sequence,输出一个Vector sequence.
Encoder的运作方式如下所示:
Encoder 里面是由多个 Block 组成的,经过多个 Block 的堆叠,最后得到一个Vector sequence.
每个 Block 所做的事情如下:对于输入的每一个 Vector sequence,首先通过 Multi-Head Attention 得到输出 a a a,然后通过残差连接得到 a + b a+b a+b,之后通过 Layer Norm 得到正则化后的Vector sequence,接着送到 Fully Connection layer,同样使用残差连接并使用 Layer Norm 得到 Encoder 的输出。
Decoder 可以分为:Decoder-Autoregressive(AT) 与 Decoder-Non-autoregressive(NAT),在transformer中使用的是 Decoder-Autoressive.
Decoder 做了什么?
在 Decoder 中用了一个 Masked Multi-Head Attention.
Masked Self-atttention 每次一个 vector 在输出的时候,不可以看右边的部分,也就是说在产生 b 1 b^1 b1 的时候不能在考虑 a 2 , a 3 , a 4 a^2,a^3,a^4 a2,a3,a4,产生 b 2 b^2 b2 的时候不能考虑 a 3 , a 4 a^3,a^4 a3,a4,产生 b 3 b^3 b3 的时候不能考虑 a 4 a^4 a4 ,产生 b 4 b^4 b4 的时候就可以考虑全部的信息了。
具体细节如下图所示:
目前的这个 Decoder 运作机制不知道它应该什么时候停下来。
为了让其停下来,所以要有一个END的标记。
通过这个 END 的标记来让模型停下来。
AT Decoder 传入的是一个 START,然后一个一个的进行输出。NAT Decoder 直接传入多个 START,同时输出。
NAT好处:平行化,一个步骤产生出完整的句子,可以控制输出的长度。(怎么控制?可能会有一个 classifier 来决定输出的长度;或者输入很多个 START,那么就会输出很多个输出,忽略 END 之后的输出)
Encoder 和 Decoder 之间的互动是通过 Cross attention 机制进行互动的。主要过程就是将 Decoder 中通过第一个 Masked Multi-Head Attention 以及 Add 与 Norm 后的 vector sequence 与 encoder 输出中的所有 vector sequence 进行 qkv 的计算。计算流程见下图:
①第一个输出的计算
②第二个输出的计算
在decoder输入的时候,要输入正确的答案(Teacher Forcing技术,使用真实的标签作为输入)
把正确答案 Ground truth 给模型,让其与 distribution 进行 cross entropy,每一个输出有一个cross entropy,将这些 cross entropy 求和,进行梯度下降,求解最好的参数,希望 decoder 的输出跟正确答案越接近越好。
参考链接:
【强烈推荐!台大李宏毅自注意力机制和Transformer详解!】 https://www.bilibili.com/video/BV1v3411r78R/?p=3&share_source=copy_web&vd_source=a36f62f9fcd2efea97449039538032fa