机器学习||李宏毅课程笔记⑤Transformer

这是李宏毅老师机器学习【第五节课程】的笔记(仅用于个人学习记录),本节课程简单对Transformer进行了介绍。

一、Seq2seq

seq2seq's model =Encoder + Decoder
image

(1)Encoder

image
用途:输入一排向量(序列),输出另外一排同样长度的向量(序列)
可以使用:Self-attention,RNN CNN

Encoder内部剖析:
image
每一个block都包含若干层(这里,Self-attention+FC)
每个block输入一排向量,输出一排向量

在Transformer中:
image
在送入block之前,需先进行positional encoding

每个Block中的架构:
1.multi self-attention
2.residual connection:把这个vector加上它的input作为output【残差网络】
3.layer normalization:对同一个feature,同一个example,不同的dimension,去计算mean跟standard deviation
4.FC network这边,也有residual的架构
5.把residual的结果,再做一次layer normalization得到的输出,才是residual network裡面,一个block的输出
image

(2)Dncoder

2.1 Autoregressive(AT)

Decoder 要做的事情:產生输出,也就是產生结果
如何产生?
image
1.向Decoder输入Encoder产生的向量
2.在 Decoder 可能產生的文字裡面多加一个特殊的字BEGIN,代表了“开始“这个事情(BOS,begin of sentence)
3.Decoder 会吐出一个向量长度跟 Vocabulary Size 是一样的。在產生这个向量之前,跑一个 Softmax,分数最高的一个中文字,它就是最终的输出。(这里,机,就当做是这个 Decoder 第一个输出)
4.把“机”当做是 Decoder 新的 Input,原来 Decoder的输入有 BEGIN 和“机”
根据这两个输入,它输出一个蓝色的向量;根据这个蓝色的向量裡面,给每一个中文的字的分数,我们会决定第二个输出,再作为输入,继续输出后续的文字,以此类推……
image
5.机器自己决定输出的长度:一个特别的符号”断“END
image

在Transformer中
image
除了中间的部分,Encoder 跟 Decoder,并没有那麼大的差别。最后,我们可能会再做一个 Softmax,使得它的输出变成一个机率分布。

Masked self-attention:产生输出时,不能再看”右边“的部分⇒因为,实际上就是顺次产生的
image

2.2 Non-autoregressive (NAT)

image
NAT不是依次产生,而是一次吃的是一整排的 BEGIN 的 Token,把整个句子一次性都產生出来

问题:如何确定BEGIN的个数?

  1. 另外训练一个 Classifier,吃 Encoder 的 Input,输出是一个数字,代表 Decoder 应该要输出的长度,
  2. 给它一堆 BEGIN 的 Token,(比如输出的句子的最大长度长度,不超过 300),给它 300 个 BEGIN,然后就会输出 300 个字。什么地方输出 END表示这个句子结束。

NAT的好处:

  1. 并行化。NAT 的 Decoder 不管句子的长度如何,都是一个步骤就產生出完整的句子,所以在速度上,NAT 的 Decoder 比AT 的 Decoder 要快,
  2. 容易控制输出长度。

(3)Encoder-Decoder之间的信息传递⇒CrossAttention

image
有两个输入来自Encoder(Encoder 提供两个箭头), Decoder 提供了一个箭头

细节:
image

  1. Encoder输入一排向量,输出一排向量 \(a^1,a^2,a^3\),经过transform產生 Key1 Key2 Key3( \(k^1,k^2,k^3\)),以及 \(v^1,v^2,v^3\).
  2. Decoder 会先吃 BEGIN,得到一个向量,输入多少长度的向量,输出就是多少向量。乘上一个矩阵做一个 Transform,得到一个 Query 叫做 \(q\)
  3. 利用q,k计算attention的分数,并做Normalization,得到 \(\alpha_1',\alpha_2',\alpha_3',\)
  4. \(\alpha_1',\alpha_2',\alpha_3',\)\(v^1,v^2,v^3\)做weighted sum(加权求和),得到 \(v\).
  5. \(v\)丢进Fully-Connected 的Network,做接下来的任务。

总而言之,Decoder 就是產生一个\(q\),去 Encoder 抽取信息出来,当做接下来的 Decoder 的Fully-Connected 的 Network 的 Input

二、Training(以语音辨识为例)⇒分类

image
训练数据:一段音频与对应的文字,文字为one-hot编码的向量
训练过程:Decoder输出的是概率分布。可以通过输出的概率分布与Ground Truth之间的计算交叉熵(Cross Entropy)并求梯度实现优化,交叉熵的值越小越好。
image
注意,最后还有END符号。
注意:在训练Decoder时,会输入“正确答案”而不是自己产生的答案⇒Teacher Forcing
(但是测试的时候,显然没有正确答案可以给 Decoder 看)

posted @ 2024-10-30 21:22  章鱼哥爱吃芒果  阅读(275)  评论(0)    收藏  举报