李宏毅深度学习CP12Transformer(part1)

Posted 奇跡の山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了李宏毅深度学习CP12Transformer(part1)相关的知识,希望对你有一定的参考价值。

学习总结

(1)上半部分是详解Seq2seq在各领域的应用效果挺好,如聊天机器人、QA问答系统、语法分析、目标检测等,下半部分是初探transformer的Encoder模块,其实就在原来的self-attention机制基础上加上residual connecttion等步骤。
(2)batch normalization是对不同example,不同feature的同一个dimension,去计算mean跟standard deviation。
但layer normalization,它是对同一个feature,同一个example里面不同的dimension去计算mean跟standard deviation。

一、详解Seq2seq

Transformer就是一个,Sequence-to-sequence的model。之前在讲input a sequence的,case的时候,我们说input是一个sequence,那output有几种可能:

  • 一种是input跟output的长度一样,这个是在作业二的时候做的
  • 有一个case是output指,output一个东西,这个是在作业四的时候做的
  • 那接来作业五的case是,我们不知道应该要output多长,由机器自己决定output的长度,即Seq2seq

0.举栗子

1)语音识别


输入的声音信号就是一串vector,输出对应的文字,输入和输出的长度有一定关系,但是没有绝对的关系,输出的长度由机器听这段声音信号后自己决定输出的语音识别结果(即机器自己决定)。

2)机器翻译

作业HW5的机器翻译,让机器读一个语言的句子,输出另一种语言的句子,也是又机器自己决定输出的句子长度。

3)语音翻译

之所以不认为语音翻译就是直接将语音识别和机器翻译结合起来,是因为世界上有很多语言没有文字,也就不能先通过语音识别转成对应语音的文字,我们想直接通过语音翻译转成其他能看懂的语言的文字。

1.硬train一发(闽南语、台语)

这部分李宏毅老师主要是讲了直接训练一个模型,机器在听了一千五百个小时的乡土剧后(硬train一发),对它输入一句台语后,能输出对应的一句中文文字。

2.Seq2seq for Chatbot聊天机器人

因为聊天机器人也是对它说一句话,他回应你一句话,输入输出都是文字(文字就是一个vector sequence),所以完成可以用Seq2seq的model来做一个聊天机器人。
收集大量人的对话(如电视剧、电影台词等)进行训练。

3.Question Answering (QA)

很多NLP的任务都可想为QA任务,即让机器读一段文字,然后你问机器一个问题,希望他能够给你一个正确答案。

很多NLP问题都能看做是QA问题,可以用Seq2seq模型解决,举栗子:翻译德文输出德文;给机器一篇长文,让他把文章的摘要输出;对商品评价进行情感分析,把某篇提到商品的文章丢进model然后让文章判断评价是正面还是负面。

Seq2Seq model只要是输入一段文字,输出一段文字,只要是输入一个Sequence,输出一个Sequence就可以解,所以你可以把QA的问题,硬是用Seq2Seq model解,叫它读一篇文章读一个问题,然后就直接输出答案,所以各式各样NLP的任务,其实都有机会使用Seq2Seq model

但是特制化的模型对于具体的语音相关的任务更能得到好效果(具体的可以参看台大NLP的课程:Source webpage: https://speech.ee.ntu.edu.tw/~hylee/dlhlp/2020-spring.html):

举例来说在做语音辨识,我们刚才讲的是一个Seq2Seq model,输入一段声音讯号,直接输出文字,今天Google的 pixel4,Google官方告诉你,Google pixel4也是用N to N的Neural network,pixel4裡面就是有一个Neural network,输入声音讯号,输出就直接是文字。但他其实用的不是Seq2Seq model,他用的是一个叫做RNN transducer的 model,像这些模型他就是为了语音的某些特性所设计。

4.Seq2seq for Syntactic Parsing(语法分析)

在语音还有自然语言处理上的应用,其实有很多应用,你不觉得他是一个Seq2Seq model的问题,但你都可以硬用Seq2Seq model的问题硬解他

举例来说文法剖析,给机器一段文字,比如Deep learning is very powerful

机器要做的事情是产生一个文法的剖析树 告诉我们deep加learning合起来是一个名词片语,very加powerful合起来,是一个形容词片语,形容词片语加is以后会变成,一个动词片语,动词片语加名词片语合起来是一个句子

那今天文法剖析要做的事情就是产生这样子的一个Syntactic tree,所以在文法剖析的任务裡面,假设你想要deep learning解的话,输入是一段文字,他是一个Sequence,但输出看起来不像是一个Sequence,输出是一个树状的结构,但事实上一个树状的结构,可以硬是把他看作是一个Sequence

这个树状结构可以对应到一个,这样子的Sequence,从这个Sequence里面你也可以看出

  • 这个树状的结构有一个S,有一个左括号,有一个右括号
  • S裡面有一个noun phrase,有一个左括号跟右括号
  • NP裡面有一个左括号跟右括号,NP裡面有is
  • 然后有这个形容词片语,他有一个左括号右括号

这一个Sequence就代表了这一个tree 的structure,先把tree 的structure转成一个Sequence以后,就可以用Seq2Seq model硬解他

train一个Seq2Seq model,读这个句子,然后直接输入这一串文字,再把这串文字转成一个树状的结构,你就可以硬是用Seq2Seq model,来做文法剖析这件事,这是真的可以做得到的,

可以参考一篇paper:grammar as a Foreign Language

比较老的paper(14年的),当时的seq2seq model还不流行,当时seq2seq主要用在翻译上,作者把文法剖析当做是一个翻译问题,即将文法当做另一种语言,直接套用当时人们认为只能用在翻译上的seq2seq模型硬做,就得到了SOTA结果。

李宏毅老师当时在国际会议上遇到这个第一作者,作者说没有什么tips,连Adam都没有用,就直接gradient descent然后直接train seq2seq model第一次就成功了,但是要冲到SOTA还是要微调下参数。

5.multi-label classification

注意multi-class的classification,跟multi-label的classification不是一个意思,因为后者是说同一个东西,是可以属于多个class的,如下图所示的文章分类:

可能这篇文章 属於class 1跟3,这篇文章属於class 3 9 17等等,你可能会说,这种multi-label classification的问题,能不能直接把它当作一个multi-class classification的问题来解

举例来说把这些文章丢到一个classifier裡面

  • 本来classifier只会输出一个答案,输出分数最高的那个答案
  • 我现在就输出分数最高的前三名,看看能不能解,multi-label的classification的问题

这种方法可能是行不通的——因為每一篇文章对应的class的数目根本不一样;有些东西 有些文章对应的class的数目,是两个 有的是一个 有的是三个

所以 如果你说 我直接取一个threshold,我直接取分数最高的前三名,class file output分数最高的前三名,来当作我的输出 显然不一定能够得到好的结果 那怎麼办呢

这边可以用seq2seq硬做,输入一篇文章 输出就是class 就结束了,机器自己决定 它要输出几个class

我们说seq2seq model,就是由机器自己决定输出几个东西,输出的output sequence的长度是多少,既然 你没有办法决定class的数目,那就让机器帮你决定每篇文章 要属于多少个class。

6.Seq2seq for Object Detection

object detection就是给机器一张图片,然后它把图片裡面的物件框出来,把它框出说 这个是斑马,具体了解可以参考上图中的paper。

二、初探Encoder-Decoder


一般的seq2seq’s model分成2块——Encoder和Decoder

你input一个sequence有Encoder,负责处理这个sequence,再把处理好的结果丢给Decoder,由Decoder决定,它要输出什么样的sequence。其实seq2seq起源很早(14年9月,如下图)。不过今天讲到seq2seq大家都会第一时间想到transformer。

1.Encoder


Encoder要的事就是给一排向量,输出另一排向量(这个过程其实CNN、RNN、self-attention也能做到,即输入一排向量,output另一个同样长度的向量)。在transformer里的encoder用的就是self-attention,我们先看简化图,最后在和transformer原始论文的图进行对比。

现在的Encoder里分成很多block,每个block都是输入一排向量输出一排向量,注意这里每个block其实不是neural network的一层,是好几个layer做的事情(如下图所示):

  • 先做一个self-attention,input一排vector以后,做self-attention,考虑整个sequence的资讯,Output另外一排vector.
  • 接下来这一排vector,会再丢到fully connected的feed forward network裡面,再output另外一排vector,这一排vector就是block的输出

但其实在原来的transformer里面这个block做的事更加复杂。在之前讲的self-attention中输入一排vector输出一排vector,这里的每个vector是考虑了所有的input后得到的结果。而在transformer里面加了了一个设计——不只是输出这个vector,还要把这个vector加上它的input得到新的ouput(这样的network架构叫做residual connecttion,在DL领域也是应用非常广泛)

把得到的residual结果做normalization(这边用的不是batch normalization,而是用layer normalization)。
计算出mean跟standard deviation以后,就可以做一个normalize,我们把input 这个vector里面每一个dimension减掉mean再除以standard deviation以后得到x’,就是layer normalization的输出。
x i ′ = x i − m σ x'_i=\\frac{x_i-m}{\\sigma} xi=σxim
得到layer normalization的输出以后,它的这个输出 才是FC network的输入。

注意:
batch normalization是对不同example,不同feature的同一个dimension,去计算mean跟standard deviation
layer normalization,它是对同一个feature,同一个example里面不同的dimension去计算mean跟standard deviation

FC network这边也有residual的架构,所以 我们会把FC network的input跟它的output加起来 做一下residual得到新的输出。这个FC network做完residual以后,还不是结束 你要把residual的结果再做一次layer normalization得到的输出,才是residual network里面的一个block的输出。

2.回到transformer的图

  • 首先 你有self-attention,其实在input的地方,还有加上positional encoding(如果你只光用self-attention,你没有位置的资讯)
  • Multi-Head Attention,这个就是self-attention的block,用到多头注意力机制
  • Add&norm,就是residual加layer normalization
  • 接下来,要过feed forward network
  • fc的feed forward network以后再做一次Add&norm,再做一次residual加layer norm,才是一个block的输出,
  • 然后这个block会重复n次,这个复杂的block,其实在之后会讲到的一个非常重要的模型BERT,它其实就是transformer的encoder

三、更多参考

(1)on layer normalization in the transformer architecture:https://arxiv.org/abs/2002.04745
layer normalization为什么是放在刚才说的地方呢,为什么是先做residual在做layer normalization,能不能把layer normalization放到每一个block的input。这篇paper就是把顺序换了下(如下图右边所示),说明原始的transformer架构并不是一个最optimal的设计,也能有其他设计方式:

(2)Power Norm:,Rethinking Batch Normalization In Transformers:https://arxiv.org/abs/2003.07845
为什么用layer norm而不是batch normalization,这篇paper提出一个power normalization可以比layer normalization的performance差不多甚至更好一点。
(3)transformer一步步构建的jupyter

四、Reference

李宏毅机器学习2021课程

以上是关于李宏毅深度学习CP12Transformer(part1)的主要内容,如果未能解决你的问题,请参考以下文章

深度学习中Transformer的原理和方法(李宏毅视频课笔记)

机器学习李宏毅——Transformer

学习笔记李宏毅2021春机器学习课程第5.1节:Transformer

NLP(task1)Transformers在NLP中的兴起 + 环境配置

深度学习 -- 1天搞懂深度学习,李宏毅,lecture 2

《深度学习》 --李宏毅学习笔记总结 (待更新)