【Transformer学习笔记】

Transformer笔记

  • 目录
    • 前言
    • RNN
      • 背景与提出
        • RNN的结构
        • BPTT算法
    • LSTM&
    • Transformer
      • Self-Attention机制
      • Muti-head Attention注意力机制

目录

前言

  最近这两天一直在看有关Transformer的一些概念,首先Transformer的提出是基于NLP应用嘛,早期NLP常用的模型包括RNN,LSTM,RUG。但是上述方法所共有的一个缺陷就是不支持并行化,且对于长序列的效果较差。
  而Transformer很好的解决的这两点:
              1、在物理设备允许的情况下,transformer理论上可以支持无限长度的序列。
              2、transformer实现了输入数据的并行化处理
最先看的是csdn中浏览量很广的"史上最小白系列"。 总体来说学习路线为:RNN->LSTM->Attention机制->Transformer->vision Transformer(vit)->SwinTransformer
  在po主的文章中,关于Attention机制的介绍可以说很全面了,用一句话总结:Attention机制就是实现了对的自动对齐功能。 但是在Attenyion机制章节中,关于Self-Attention的介绍相对来说是一笔带过了,可能对于大佬来说,认为自己已经解释的很全面了。但是处于小白阶段的我还是看的一头雾水,然后今天看到了b站上一位up主的视频详解,可以说茅塞顿开。
   可以说支撑Transformer的底层原理就是Attention机制,Transformer中最精华的两个部分即为Self-Attention以及Muti-head Attention Module,下文是关于这两天学习的一些笔记和思考吧。

RNN

背景与提出

RNN即循环神经网络(Recurrent Neural Network),RNN的提出主要是为了处理序列信息问题,如NLP。
【Transformer学习笔记】_第1张图片
上图是一个全连接神经网络图,图中可见 ,对于每一层,他们都是相互独立的,每次的输入生成一个节点,每层节点又相互独立时,那么我们每次的输入与前面的输入其实是没关系的,所以在某些任务中不能很好处理序列信息。故为解决此问题,提出了循环神经网络RNN。

RNN的结构

【Transformer学习笔记】_第2张图片
左图为RNN的结构,右图为他的展开式。
1、单看左图,可以看出它与正常的全连接网络结构差不多,只是在隐藏层多了一个循环层W的操作。
2、接下来看到右图
W、U、V是对应的权重矩阵
Xt为t时刻的输入变量,St为t时刻隐藏层的值,Ot为t时刻输出层的值。
从右图可以看出,隐藏层St的值不止与Xt有关,还与St-1有关。
故,所谓的隐藏层的循环操作其实就是:计算每一时刻隐藏层的值St,然后将其传递到下一时刻,达到信息传递的目的。
【Transformer学习笔记】_第3张图片
【Transformer学习笔记】_第4张图片

BPTT算法

  这里默认大家已经掌握了BP算法。BP算法本质就是梯度下降法,通过计算损失函数然后求导,反向更新参数的过程。
  实际上BP算法与BPTT算法的差别就是,BPTT算法不仅要对直线链进行求导,还要对前一时刻隐藏层的值St-1进行求导,具体操作看下图:
【Transformer学习笔记】_第5张图片
此处,ht等价于刚才的st。
RNN中需要调整的参数为:W、U、V
在这里插入图片描述
【Transformer学习笔记】_第6张图片

1、对V求偏导
 首先计算t时刻关于V的偏导
【Transformer学习笔记】_第7张图片
由于 损失函数是根据时间累加的,故总损失为:
【Transformer学习笔记】_第8张图片
则对应的V偏导为
【Transformer学习笔记】_第9张图片
2、对U、W求偏导
从上图ht的公式可以看出,ht不光与U、W有关,还与前一时刻隐藏层的值ht-1有关。
故,我们设t=3,对U求导有:
在这里插入图片描述
由此我们可以写出对U、W求导的通式:
【Transformer学习笔记】_第10张图片
而对于整个损失函数就是将每个时刻的值加起来,与上面一样,此处就不展示了。

现在看到蓝框部分
【Transformer学习笔记】_第11张图片
可以看到是一个连乘的形式。ht的计算公式引入激活函数后就是:
在这里插入图片描述
【Transformer学习笔记】_第12张图片
那么我们上方为什么说一般激活函数采用tanh而不用sigmoid函数呢?
首先我们看一下这两个函数的图像和它们对应的导数图:
【Transformer学习笔记】_第13张图片
【Transformer学习笔记】_第14张图片
可以看到sigmoid与tanh函数的导数都是小于一的,对于一系列的导数连乘,就会出现梯度消失现象。
而tanh的导数范围为【0,1】,sigmoid的范围为【0,0.25】
虽然二者都会出现梯度消失现象,但是,tanh的表现还是要比sigmoid要好的,可以在一定程度上缓解梯度消失现象。
问:在CNN中解决梯度消失使用了ReLU函数,为什么在RNN中不可以呢?
答:引入ReLu确实可以解决梯度消失现象,但是会引入新的梯度爆炸问题。
【Transformer学习笔记】_第15张图片
可以看到ReLU函数的导数恒为1,那么由上面的公式我们可以看到
【Transformer学习笔记】_第16张图片
当权重W大于1时,经过多次连乘很容易就会发生梯度爆炸。
事实上目前大家解决梯度消失 都是使用的LSTM- -即RNN的变种。故在这里也没有必要纠结到底是使用哪个激活函数了。于是就折中选择了tanh函数。

接下来我们看LSTM

LSTM&

Transformer

Transformer出自论文 Attention Is All You Need
推荐博文:详解Transformer中Self-Attention以及Multi-Head Attention
如果我们在网上搜索Transformer的话,第一时间看到的大概率就是下图:
【Transformer学习笔记】_第17张图片
接下来让我们一步步解析这三张图,首先是Self-Attention

Self-Attention机制

在这里插入图片描述

【Transformer学习笔记】_第18张图片
第一步:对于原始输入x1,x2,进行embedding操作,将其映射到一个更高的维度,得到a1,a2,设组成矩阵为A
[Embedding 嵌入层]:将稀疏矩阵转化为稠密矩阵的过程。即将两个独立的向量联系起来。
将得到的a1、a2分别乘以上方的三个权重矩阵(体现权重共享,且是可训练的三个参数矩阵),得到q、k、v
【V代表了从矩阵中提取到的信息】
【Transformer学习笔记】_第19张图片此处体现了Transformer的并行化,我们将得到的a1,a2进行拼接,假设这个大矩阵为A,分别乘以权重矩阵,得到公式中的Q、K、V
【Transformer学习笔记】_第20张图片
第二步,当我们得到对应的三个矩阵Q、K、V后,令q与k做匹配,d代表k的dimension,k在图中为一维向量,则d就是k的元素个数。
【Transformer学习笔记】_第21张图片
第二步即公式中的在这里插入图片描述操作

Muti-head Attention注意力机制

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