李宏毅transformer笔记

 

首先这里解决的问题是Seq2Seq

列出各种场景,语音识别,机器翻译,chatbot

 

当前现在NLP模型之所以这么重要,在于他的通用能力,很多场景都可以转换成Seq2Seq

summary,情感分析啊,只要你能通过QA和机器交互的场景都可以是Seq2Seq

这里的例子,语法树解析,多元分类,甚至是对象识别

Seq2Seq其实也不是啥新问题,以前都是用RNN来解决的

当然现在都用transformer

Transformer分为Encoder和Decoder

这里看下Encoder,当然这样的encoder可以是各种模型,RNN,CNN都行

对于transformer,可以看出Encoder就是一个self-Attention模型,n2n,输入和输出个数相同

和之前说的标准的Self-attention相比,差异在于

加入residual,每一层都输出都会加上输入,residual的目的主要是在网络过深的时候防止梯度消失

在每层输出都加入layer Norm,这个norm的过程很直觉

 至于使用Multi-head,和加入Positional Encoding的目的前面也都说过

Bert的架构和这个完全一样

Encode讲完,看下Decode

Decode有两种,AR和NAR

AR,顾名思义,输出的向量是一个个依次输出的,每次取概率最大的那个,其实就是个分类问题

每个向量输出,作为下个输入

为了能有效结束,需要加入end token

Decoder的结构,不看中间的部分,和Encoder几乎相同

唯一的差别就是,这是用Masked Attention

为何用Masked,这个很直觉,因为在Decode的时候,无法像普通的Self Attention一样看到所有的输出,只能看到之前的

对于NAT,是一次性输入所有的输出向量,这里的问题自然是如何决定个数?训练一个predicter来输出num或者每次都输出些,找到end截断

NAT,会比较高效,但是准确率不行,这就是为何主要还是用AT的decoder

现在把中间的部分补上,这部分叫Cross Attention

在Self Attention中,是看encoder中一个输入和其他输入的Attention Score,即相关度

这里是,decoder根据Begin token生成的向量作为q,计算和Encoder中每个输出向量的Attention Score,用到的是K,V两个向量

所以称为cross Attention,这个输出是由decoder生成的向量,和所有encoder输出向量决定的,影响力由cross Attention score决定

 

最后看下如何训练,

训练就是看生成向量和训练集中答案算minimize cross entropy

这里需要注意的是,在训练的时候,Decoder输入是正确答案,而不是生成的值;但是测试的时候输入是生成的值

这里产生不一致,称为exposure bias,怎么弥补?方法居然是训练的时候故意给点错误

 

posted on 2023-05-01 21:58  fxjwind  阅读(109)  评论(0编辑  收藏  举报