【深度学习入门基础】二、简单理解 Transformer

文章目录

  • 【深度学习入门基础】二、简单理解 Transformer
    • 自注意力层
    • 多头注意力
    • Transformer
      • 输入(输出)嵌入
      • 位置编码
      • Add 和 Norm
      • Feed Forward
      • Linear
      • Nx
      • seq2seq 模型和 marked 注意力机制
    • 训练
    • 其他

这是“深度学习入门基础”系列的第二篇文章,事多更新慢,望见谅。前一篇文章(先导篇)见:
【深度学习入门基础】一、从线性代数和微积分的角度看神经网络

ResNet 和 Transformer 近五年来是影响最深远的两个网络结构,没有之一,bert 也是从 Transformer 发展而来。近年来,Transformer 更是从 NLP 领域走入了 CV 领域,似乎什么东西都可以 attention 一下,大有一统天下之势。

因为 Transformer 很火,所以网上的各式各样的讲解很多,我就不介绍(chao xi)了,意义不大。本文依然秉承先导篇的代数风格,我们对 Transformer 做一个简单的总结。为了方便入门,我将尽可能少地去引入一些新名词。

自注意力层

Transformer 的核心是 self-attention layer,所以,我们先介绍一下这是个什么东西。

它是一个变换,把一个输入序列,变成一个输出序列。如图所示,

它把 4 个向量 a1,a2,a3,a4a_1,a_2,a_3,a_4a1,a2,a3,a4 输入(习惯上,下面所有的向量一般都是指列向量),通过的一波瞎操作,变成了 4 个向量输出 b1,b2,b3,b4b_1,b_2,b_3,b_4b1,b2,b3,b4。那么,这一波瞎操作是什么呢?看过先导篇的直到,神经网络层无非是一些“矩阵乘向量”的函数表示,那么这一波瞎操作,无非就是一些代数运算,人们称之为 Self-Attention Layer。

下面我们开门见山地给出这一波瞎操作。假设输入是一组列向量 xi,i=1,⋯,nx_i,i=1,\cdots,nxii=1,,n,输入也是一组列向量, yi,i=1,⋯,ny_i,i=1,\cdots,nyii=1,,n,我们把输入输出按行排成一个矩阵,即
X=[x1,x2,⋯,xn]X = [x_1,x_2,\cdots,x_n]X=[x1,x2,,xn]
Y=[x1,x2,⋯,xn]Y = [x_1,x_2,\cdots,x_n]Y=[x1,x2,,xn]
那么,attention 做的事情无非就是,
A=WXA=WXA=WX
Y=WVAsoftmax⁡((WKA)TWQAd)Y = W_VA\operatorname{softmax}\left(\frac{(W_KA)^TW_QA}{\sqrt d}\right)Y=WVAsoftmax(d

(WKA)TWQA)

其中,softmax⁡\operatorname{softmax}softmax 作用在矩阵上分别对每一列做 softmax⁡\operatorname{softmax}softmax
softmax⁡(M)ij=eMij∑i=1NeMij\operatorname{softmax}(M)_{ij}=\frac{e^{M_{ij}}}{\sum_{i=1}^{N}e^{M_{ij}}} softmax(M)ij=i=1NeMijeMij
其中,W,WV,,WK,WQW,W_V,,W_K,W_QW,WV,,WK,WQ 都是一些参数矩阵,d=WK的行数=WQ的行数d = W_K 的行数 = W_Q 的行数d=WK=WQ。参数矩阵的大小要令等式 make sense 即可。令 WVA=V,WKA=k,WQA=QW_VA = V,W_KA = k,W_QA=QWVA=V,WKA=k,WQA=Q,那么上面的公式可以简记为:
Y=Vsoftmax⁡(KTQd)Y = V \operatorname{softmax}\left(\frac{K^TQ}{\sqrt d}\right)Y=Vsoftmax(d

KTQ)

看公式总是可以接受,但是不太好形象地理解,有点莫名其妙。没关系,可以看看李宏毅老师的对 transformer 的宇宙最强解释,他的 PPT 做的我认为极好。

多头注意力

什么是 multi-head self-attention?假设我们有多组K,Q,VK,Q,VK,Q,V,那么就可以得到多组的 YYY,这些组的 YYY 可以揉成一个 YYY。多组 K,Q,VK,Q,VK,Q,V 的可以原始的一组“分裂”得到。多组的 YYY 揉成一个 YYY 可以通过在行方向上串联,再乘以一个系数矩阵得到。

细致地说,假设 Q,K,VQ,K,VQ,K,V 通过如下方式分裂成 hhh 个头,
Ki=WK,iK,i=1,⋯,hK_i = W_{K,i}K, \space i=1,\cdots,hKi=WK,iK,i=1,,h
Qi=WQ,iQ,i=1,⋯,hQ_i = W_{Q,i}Q, \space i=1,\cdots,hQi=WQ,iQ,i=1,,h
Vi=WV,iV,i=1,⋯,hV_i = W_{V,i}V, \space i=1,\cdots,hVi=WV,iV,i=1,,h
那么,multi-head 就是
Y=WO(V1softmax⁡(K1TQ1d1)V2softmax⁡(K2TQ2d2)⋮Vhsoftmax⁡(KhTQhdh))Y = W_O\left(\begin{array}{l} V_1 \operatorname{softmax}\left(\frac{K_1^TQ_1}{\sqrt {d_1}}\right) \\ V_2 \operatorname{softmax}\left(\frac{K_2^TQ_2}{\sqrt {d_2}}\right) \\ \vdots \\ V_h \operatorname{softmax}\left(\frac{K_h^TQ_h}{\sqrt {d_h}}\right) \end{array}\right) Y=WOV1softmax(d1

K1TQ1)V2softmax(d2

K2TQ2
)
Vhsoftmax(dh

KhTQh
)

其中 WOW_OWO 是为了把结果降维的系数矩阵,did_idi 对应着 QiQ_iQi(or KiK_iKi)的行数。

Transformer

Attention 是 transformer 的核心,介绍了 attention-layer,下面就可以介绍 transformer 了。不同的神经网络层,无非就是把输入变成输出的不同的处理方式,如果不在乎细节的话,你甚至可以把某些层就当成黑箱。深度学习论文好阅读的地方就在于,我们看到它们给的神经网络架构图,如果操作就能大概猜个八九不离十了,不明白的地方再看看论文也就全部了解。我们一起来看看 原论文。

核心就一张图如下:

箭头就表示了数据的流向,这就不用多说了。下面我们再来解释一下,那些英文单词标注的层都是什么意思。

输入(输出)嵌入

Embedding 是什么呢?我们知道,输入需要时一组向量,那么 Input Embedding 就是想办法把输入点变成一个向量。比如说做翻译,我们需要找到每个词组对应的向量是什么,词组对应什么向量,怎么个对应法,我们暂时不用管,只要知道这是训练出来的结果即可。

位置编码

什么是 Positional Encoding?由上述过程,我们知道所有的输入是地位等价的、位置无关的,没有蕴含相对位置信息在里面,也就是说即使打乱顺序也不影响结果,这不符合输入序列有序的性质。那么,我们就需要对位置进行编码,即在上述的过程中,对 AAA 进行一个偏移,别的过程一样,
A=A+EA = A+EA=A+E
其中 EEE 是和 AAA 相同形状的矩阵。

Add 和 Norm

黄色框的 Add 顾名思义就是将前一步 Multi-Head Attention 的输出和输入加载一起。Norm 是 normalization 的缩写,他在这里表示的其实是 Layer Normalization,所谓的 normalization 也就是常说的 “减去均值,除以方差”。这里的 Layer Normalization 先不用管它是怎么个 Layer 法的,只要知道它无非是对数据做了某种“规范化”。感兴趣可以参考再 google search一下。

Feed Forward

这里的 Feed Forward 也就是最最最简单的前馈神经网络,也就是你能想到的你最开始学的那个神经网络。

Linear

顾名思义,这就是线性化处理。

Nx

表示图中框住的部分要跑 N 遍。

seq2seq 模型和 marked 注意力机制

我们注意到,Figure 1 还有一部分没有不明晰的。即右边那个图的输入 “Outputs” 是什么东西,是 “Output Probability” 的 “Output” 吗?另外,提到的 marked attention 又是什么?
要说清楚这个,就不得不介绍 seq2seq model,seq2seq 这不是指 sequence to sequence 的一类模型,这是一个模型,来自于某个作者在某篇论文中提出的。

简单地说,Figure 1 左边的一半编码器,右边的一半叫解码器,解码器可能会被循环多次。解码器的输入来自于解码器的已有输出(起始输入是一个“起始命令”,知道输出为“终止命令”不再循环解码器结束输出)。

听起来比较抽象,我们举个简单的例子,比如说翻译 “我爱中国”。将“我”、“爱”、“中国”三个词儿词嵌入编码后进行输入,通过左边的编码器,将他们编码成了 c 待用。然后,我们开始解码,解码器输入 bos,告诉解码器开始解码,如图 1 所示,在 Multi-Head Attention 层,将 c 和 到这一层之前的输出放一块,一起做 attention,再经过后面的一堆操作,最后得到了解码器的 Output——I。接着我们把这个 I 作为解码器的输入,一堆操作到了 Multi-Head Attention 层,依然和 c 一起做 attention,再经过几层得到了解码器的输出——Love。再一次,我们将 I 和 Love 作为解码器的输入,通过 Masked Multi-Head Attention 层做了 attention, Add & Norm 之后再次和 c 做 attention,再经过后面的几层输入得到了解码器新的输出——China。最后,我们依然将 I Love China 作为输入,通过加码器,得到结束翻译标志的输出 eos,表示翻译终止。

容易发现,在解码的这个过程中,解码器的输入是慢慢增加的,是已经翻译出来的一些词。所以,为了以示特别,下一层是对已经生成出来的信息做 attention,称为 Masked Multi-Head Attention。事实上,它就是普通的 Multi-Head Attention,我们不用专门去留意它。因为没有生成的信息,我们怎么拿他来做 attention 嘛,我们本来也只能拿已经有的已经翻译出来的词儿做 atten。

训练

到这我们基本上把 transformer 的框架讲清楚了,剩下的细节可以看论文了。比如说训练,依然以翻译举例,seq2seq 模型告诉我们,我们可以拿正确的翻译(标签)来矫正解码器的输入,也就是说,解码器的输入可能不太对,我们用相应的正确的输入把它替代掉。

其他

深度学习的论文,图即一切。《Attention Is All You Need 》还有几张图,我们来解释一下。

这张图是为了说明标准的 Self-Attention 和 Multi-Head Attention 的,前面已经解释过了。

上面的这三种图,是为了阐述 Multi-Head Attention 的必要性。一方面展示了 attention layer 对于语义理解的准确性,譬如代词 attention 的 words 恰是他表达的准确含义,就是这么神奇。另一方面,体现了不同的 head 代表了不同的功能和含义,譬如有的 head 抓住了 local 的信息,有的 head 更侧重于全局的性质。就这样简单地理解就可以,不必深究。

【深度学习入门基础】二、简单理解 Transformer相关推荐

  1. 【深度学习入门基础】一、从线性代数和微积分的角度看神经网络

    [深度学习入门基础]从线性代数和微积分的角度看神经网络 这是深度学习入门系列文章,我们企图用最简洁的语言.最干净的表达,让读者快速获取到他所想要的.本系列文章持续更新.一些网上能查到的基础知识,诸如激 ...

  2. 深度学习入门(二十四)卷积神经网络——填充和步幅

    深度学习入门(二十四)卷积神经网络--填充和步幅 前言 卷积神经网络--填充和步幅 课件 填充 步幅 总结 课本 1 填充 2 步幅 3 小结 前言 核心内容来自博客链接1博客连接2希望大家多多支持作 ...

  3. 【深度学习入门-1】透彻理解卷积的三层含义:从“卷积”、到“图像卷积操作”、再到“卷积神经网络”的含义(学习笔记)

    一.写在前面 笔者在进行卷积神经网络入门的时候花了很多功夫,理解的也不够透彻,基础不牢,地动山摇.在查阅了很多资料后,发现了大佬up"王木头学科学"讲的卷积神经网络的理解,茅塞顿开 ...

  4. 计算机视觉研究院出品:深度学习入门基础全库(附链接下载)

    关注并星标 从此不迷路 计算机视觉研究院 学习群|扫码在主页获取加入方式 计算机视觉研究院专栏 作者:Edison_G 今天我们"计算机视觉研究院"主要分享深度学习入门的基础书籍集 ...

  5. 人工智能:深度学习算法及应用——简单理解CNN卷积神经网络并python实现(带源码)

    深度学习算法及应用 一. 实验目的 二. 实验要求 三. 实验的硬件.软件平台 四. 实验原理 1.1. 深度学习概述 1.2. 深度学习的常见结构 1.3. 卷积神经网络(CNN) **卷积** * ...

  6. 深度学习入门基础讲义

    工作确定以后,闲暇时间做了如下一个PPT讲义,用于向实验室新生介绍深度学习.他们大部分在本科期间学习通信相关专业课程,基本没有接触过图像处理和机器学习. 对于一个研究生而言,自学应当是一个最基本也是最 ...

  7. 3D点云数据结合深度学习入门基础(目标篇)

    最近,老师让我们研究深度学习与3D点云数据的研究方向,开始时,确实也不清楚何为3D点云,以及深度学习. 由于实验室师弟师妹全部是做深度学习识图相关横向研究工作的,所以很快的就掌握了,深度学习识图技术, ...

  8. 深度学习入门篇(二)Lenet网络在caffe+QtCreator上部署应用

    一.部署流程 先参考上一篇博客,学会Lenet在caffe上训练 caffe+qt+lenet实现手写体识别源码下载地址. 把训练好的权重文件和深度神经网络部署到Qt上,实现手写体的识别. 环境要求( ...

  9. 深度学习入门基础CNN系列——卷积计算

    卷积计算 卷积是数学分析中的一种积分变换的方法,在图像处理中采用的是卷积的离散形式.这里需要说明的是,在卷积神经网络中,卷积层的实现方式实际上是数学中定义的互相关 (cross-correlation ...

最新文章

  1. 线上服务 CPU 又 100% 啦?一键定位 so easy!
  2. 土壤生物和生化专业委员会暨土壤生物与土壤健康研讨会(杭州5月8-11)
  3. 解决在AX 2009中删除公司时提示:未授权用户##删除表“DEL_PBATRANSLATECONSISTOF”中的记录...
  4. 【数据挖掘】高斯混合模型 ( 与 K-Means 每个步骤对比 | 初始参数设置 | 计算概率 | 计算平均值参数 | 计算方差参数 | 计算高斯分布概率参数 | 算法终止条件 )
  5. 图像的稀疏表示——ScSPM和LLC的总结
  6. oracle主从表分离怎么实时更新数据_高可用数据库主从复制延时的解决方案
  7. flash跨域访问解决办法
  8. java.net.url 中文乱码,.Net获取URL中文参数值的乱码问题解决方法总结
  9. cf244D. Match amp; Catch 字符串hash (模板)或 后缀数组。。。
  10. Spring Boot 2 快速教程:WebFlux 集成 Thymeleaf(五)
  11. 好爸爸陪宝宝必做的50件小事儿
  12. 集群节点基于Hadoop集群的HBase集群的配置【2】
  13. Play framework 2.0 -应用程序全局设置(转)
  14. java自定义classloader_java自定义ClassLoader加载指定的class文件操作
  15. [CODEVS1911] 孤岛营救问题(分层图最短路)
  16. python 读grid 数据_如何将TextGrid文件的变量读入Python?
  17. Linux下gzip、bzip、zip、tar压缩命令的使用详解
  18. CentOS7 (精简操作指令)
  19. Druid基本概念及架构介绍
  20. SVG排版教程 | 样式背景属性详解与应用

热门文章

  1. python实时监控滚动日志,推送企业微信消息
  2. 一篇文章带你详解HTTP协议(1)
  3. 渲染行业需要什么,云渲染的优势是什么?
  4. java 解锁window屏幕,如何检测iPhone上的屏幕锁定/解锁事件?
  5. 最长回文子序列 java
  6. 这份软件工程师简历火了:手磨14nm咖啡,在微软传播性病,90%公司伸橄榄枝
  7. Shiro系列(三)--- Shiro身份验证和授权
  8. unicode编码 php,PHP解码unicode编码
  9. 微服务治理 高可用 HA (High Availability) 的一些理解
  10. 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引