NLP 前置知识2 —— 深度学习算法

包括RNN、LSTM、Self-attention、Transformer

一. 算法介绍

1. RNN & LSTM

    1.1 原理简介

    隐含层的输出 stored in mem,下一次的输入同时也会考虑mem中储存的信息(这里mem可以初      始化为0)

       

    if deeper, it can be like this:

        1.2 Elam NetWork & Jordan NetWork

         Jordan 将最终输出存入mem作为输入,Perfomance会优于Elam,因为输出层有target,输

         出的效果会比较有保障

        1.3 双向RNN

        同时进行正向输入和反向输入,将隐含层都丢给output layer

         1.3.1优点:看的范围比较广

2. LSTM (比较长的shorterm memory,记的memory比较长)

 2.1 原理 :对Memory Cell 设置Input Gate, Forget Gate, Ourtput Gate, gate =1 则打开,=0关闭

        参数计算过程:

         

          1> 激活函数f 一般用sigmoid

          2> 当f(Zi)=0时,g(Z)无法传入mem,=1时,g(Z)可以传入

        f(Zf)=0时,forget gate被关闭,过去的mem被消掉;f(Zf)=1时,forget gate开启,过去的                 mem还是会传入, Output gate 同原理

        例子:

        

 vetor操控所有LSTM

 ct-1 到 ct 的传递过程:

xt操控所有LSTM,其中xt经过linear transform得到zf,zi,z,z0,zf,zi,z,z0分别操控LSTM不同端口

 ct-1即t-1阶段的 Cell值      

ht:hiddle layer的输出,作为下一个时间点的input

 peehole:把存在mem cell中的值也拉到下一次的输入,与ht, xt+1一起作为输入

  2.2 GRU (只有两个gate 但是效果差不多)

        Keras 支持 LSTM / GRU / Simple RNN

3. Self-Attention

        3.1 应用场景:

        输入:不只是单一向量,而是序列,而且序列(sequence)中向量的长度不相同时 

        尤其应用于:文本、语音处理、关系网、生物研究

         输出:1 /n / n'

         其中翻译问题就是sequence2sequence, 输出的长度是不确定的

        3.2 原理

        获得序列之间的相互关联性

         (1)a的计算:

                计算方法有两种,第一种较为常用

Dot-product:

domain 输入· Wq 矩阵=q

 其他输入 · Wk矩阵 =k

a=q · k

步骤:

step1 :q, k

step2:  v

 这里不一定要用Soft-max,可以采取其他的 (比如关系抽取问题(?)中用的是sigmoid)

 

整体计算过程用矩阵表示如下:

 

 3.3 Multi-head Self-attention

语音辨识等,用多头效果会更好

如下以2头为例,将q,k,v各分两种

 3.4 Positional Encoding 位置编码

词性分析时等实例时,位置信息是有用的,即输入向量的次序先后也是信息。

 Positional Encoding要怎么做,这部分可参考论文: https://arxiv.org/abs/2003.09229

 3.5 应用

1. 在NLP领域广泛应用

transformer

BERT

应用举例:Self-attention for speech

 

 语音传入的向量维数较大,计算attention矩阵A'时计算量也会较大。

采用Truncated Self-attention, 只考虑与输入ak相邻的输入a' (有点类滑窗思想)

 2. 图像领域

 3.6 Self-attention VS CNN

(1) 处理域上的区别

(2) 性能区别

data量小适用CNN,data量大Self-attention

(3) 详见论文

 3.7 Self-attention VS RNN

(1)双向RNN也可以认为是考虑了整个input的sequence

(2)RNN若要考虑序列的第1个向量,要记很久

 (3)RNN的输出不能平行处理,SA可以;运算速度上Sa更胜一筹

 3.8 Self- attention的变形

4. GNN (Graph Neutural Network)

 5. Transfomer

5.1 应用:sequence2sequence问题,输出seqence的长度由机器自己决定

NLP的很多任务都可转化成QA问题,QA问题可归属为sequence2sequence问题

 比如,句法分析/目标检测

5.2 原理:

transfomer 包括encode和decoder两部分

(1)Encoder:Encoder可以采用CNN/RNN,但是transfomer用的是self-Attention

Self-Attention的结构

1>positoinal encoding 位置信息

2>Muti-head Attention 多头

3>Add & Norm,Add表示Residual, Layer norm表示Layer标准化 (优于batch标准化)

Add & Norm 过程如下所示:

step1: 原始输入b+输出a作为residual,对residual进行正则化,作为输出1

step2:输出1 进入全连接层得到输出c,输出1+输出c作为residual,正则化residual,作为1个bloc的输出

 (2)Decoder ———Autoregressive

1>Autoregressive 自回归

max 表示输出概率最大的值

 

2>BEGIN & END embedding

BEGIN和END用来决定输出的长度

3> Decoder的内部结构

Mask Self-attention

计算attention时,只考虑次序在前面的输入(比如,计算attention b2,只考虑a1 & a2)

 

(3) Decoder——Nonautoregressive (NAT)

 1.NAT 是同时读入 ——优点:parallel

 2.NAT如何确定输出的长度?

(1)再用另外一个模型训练得到输出长度———优点:NATD的输出长度会较好控制

(2)先输出,把END后的结果忽略掉

3.NAT的表现差于AT ,但是由于selfattention(parellel )的出现,NAT的研究成为热门

 5.3 Encoder和Decoder的衔接

通过Cross attention 衔接

decoder层的输入进行如下操作,以BEGIN为例,w1,w2...同理

 

 

 很多层的encoder和decoder,可以交叉作cross attention

5.4 训练

 输出值与真实值做 minimize cross entrophy (最小交叉熵)

再Teacher Forcing模式中, decoder的输入是真实值

5.5 Exposure Bias

训练过程中输入 Ground Truth, 然而测试过程中没有正确答案的输入,测试结果可能会出错。

 解决办法是 Scheduled Sampling,也输入一些错误的信息

 5.6 一些训练tips

1. Guided Attention

做一些限定,比如说顺序的限定

2. Dropout

dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。

一般模型,训练时要加dropout,测试的时候不加;但是TTS 语音合成任务中, 测试要加dropout

一些任务中,加入一点随机性反而效果更换。

3.强化学习

来源:

1.台大李宏毅21年机器学习课程 self-attention和transformer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值