李宏毅机器学习笔记:Transformer和Normalization

前言:

本文主要记录关于李宏毅机器学习2021中Transfomer和Normalization章节的相关笔记,其中Transformer主要介绍了在NLP领域的作用而Normalization主要介绍Batch Normalization的操作。

一、Normalization

① 为什么要做归一化处理

先说归一化的目的或者优点:归一化的目的主要是为了让模型的收敛速度更快,对于使用梯度下降优化的模型,每次迭代会找到梯度最大的方向迭代更新模型参数。但是,如果模型的特征属性量纲不一,那么寻求最优解的特征空间,就可以看做是一个椭圆形的,其中大量冈的属性对应的参数有较长的轴。在更新过程中,可能会出现更新过程不是一直朝向极小点更新的,而是呈现‘Z’字型。使用了归一化对齐量纲之后,更新过程就变成了在近似圆形空间,不断向圆心(极值点)迭代的过程,如下图所示
李宏毅机器学习笔记:Transformer和Normalization_第1张图片
再说为什么需要归一化:如果输入层 x 很大,在反向传播时候传递到输入层的梯度就会变得很大。梯度大,学习率就得非常小。在这种情况下,学习率的选择需要参考输入层数值大小,而直接将数据归一化操作,能很方便的选择学习率。而且受 x 和 w 的影响,各个梯度的数量级不相同,因此,它们需要的学习率数量级也就不相同。对 w1 适合的学习率,可能相对于 w2 来说会太小,如果仍使用适合 w1 的学习率,会导致在 w2 方向上走的非常慢,会消耗非常多的时间,而使用适合 w2 的学习率,对 w1 来说又太大,搜索不到适合 w1 的解。

② 归一化的方法

深度学习中典型的特征归一化代表就是Batch Normalization批归一化,具体的计算方法也是较简单即计算批中均值和方差,通过均值和方差对原数据进行归一化操作:
李宏毅机器学习笔记:Transformer和Normalization_第2张图片
另外,需要注意的是在训练过程中由于大量数据总是可以有batch从而进行归一化,但是在测试集中并不一定都会有batch,这时候参考Pytorch源码中的做法,计算训练过程中均值和方差的move average:
李宏毅机器学习笔记:Transformer和Normalization_第3张图片

③ Batch Normalization的表现

BN归一化的表现没有说特别突出,因为Normalization不仅仅只有BN,还有其他Layer Normalization,• Instance Normalization等等,但是BN所使用最为广泛,并且如图实验数据可以看出BN的加入能够使得模型收敛速度更快并且随着batch的增大表现出更大的优势,特别是在使用sigmoid的时候,由于sigmoid函数曲线的特殊性,使得BN后输入sigmoid激活函数中能够表现出更好的梯度。
李宏毅机器学习笔记:Transformer和Normalization_第4张图片

二、Transformer

① Sequence-to-sequence (Seq2seq)

很典型的Seq2Seq的应用就是语音识别或语音翻译,即输入给机器一段中文让机器翻译出英文或者给机器输入一段语音让机器识别出来并播放,再典型的例子就是,智能机器人,例如机器客服等,能够和机器进行简单的文字语音对话,还有就是利用Seq2Seq将很长的文章进行摘要。Seq2Seq的基本架构由Encoder和一个Decoder组成,如图所示:
李宏毅机器学习笔记:Transformer和Normalization_第5张图片

② Encoder

Transformer的Encoder里面使用的就是之前的Self-Attention,但是这里会稍微更复杂一些,这里在Self-Attention之后output会加上之前的input作为最后的输出,这样子的network架构,叫做residual connection,这种residual connection在deep learning的领域用的是非常的广泛,得到residual的结果后,将他放入Nomalization中这里的norm用的是Layer normalization,得到norm的输出后再输入FC中,这里FC也使用了residual的架构,总的框架如图所示:
李宏毅机器学习笔记:Transformer和Normalization_第6张图片

③ Decoder

Decoder的作用就是产生输出,产生识别的结果,事实上,Decoder也就是接收来自Encoder编码后的Seq然后一个vector向量包含每个字符的概率,概率最大的即输出的字符,Decoder的运作机制就是给定一个token,当接收到这个开始token的时候Decoder便开始了工作,不断接受来自encoder的输出,Decoder每接收并输出一个字符后就会像后传递,即每个输出字符都会借鉴参考先前的输出,这样就使得字符或者单词产生了关联性,如图所示:
李宏毅机器学习笔记:Transformer和Normalization_第7张图片
Decoder内部的具体操作如图所示,Decoder和Encoder事实上在结构上相差不大,最主要的区别在于Encoder使用的是Self-attention而Decoder使用的是Mask Self-attention,而这两者的主要区别在于Mask Self-attention仅仅只参考并计算当前位置及之前的参数,并不计算当前位置之后的参数,如图所示,当然这也和Decoder的输出形式相对应,Decoder的每次输出也是仅仅只参考当前及之前的输出
李宏毅机器学习笔记:Transformer和Normalization_第8张图片
李宏毅机器学习笔记:Transformer和Normalization_第9张图片
最后关于Decoder的输出seq的长度是多少如何决定,而且按照Decoder这样的运作方式那么如果不设置暂停decoder将会一直参考过去的输出一直输出下去,因此需要设置一个暂停的token,类似开始的token一样,当机器推断完毕后让他最后推断出暂停符号使其暂停下来

④ 训练部分

关于Transformer的训练,同样需要每个对应的标签,其每个字的输出像是在做分类任务一样,在计算其loss的时候也是计算输出和标签的交叉熵
李宏毅机器学习笔记:Transformer和Normalization_第10张图片

⑤ 评估

如何评估测试的效果,如果只是一个字符一个字符进行对比计算距离评估不见得会很好,因为一个句子中每个单词间可能是关联起来的,因此这里在做评估的时候将句子和句子间进行计算blue score作为最终输出评估的结果

你可能感兴趣的:(机器学习,transformer,深度学习,机器学习)