Yin的笔记本

vuePress-theme-reco Howard Yin    2021 - 2024
Yin的笔记本 Yin的笔记本

Choose mode

  • dark
  • auto
  • light
Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • Linux
  • MyIdeas
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • Node
  • Python
  • Nvidia
  • Rust
  • Shell
  • Tex
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
author-avatar

Howard Yin

299

Article

152

Tag

Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • Linux
  • MyIdeas
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • Node
  • Python
  • Nvidia
  • Rust
  • Shell
  • Tex
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
  • Transformer结构

    • Encoder单元
      • Decoder单元
        • 具体的运行过程

        Transformer结构

        vuePress-theme-reco Howard Yin    2021 - 2024

        Transformer结构


        Howard Yin 2022-06-08 14:04:00 人工智能Transformer神经网络注意力机制

        原文:《Attention Is All You Need》

        原文:The Illustrated Transformer

        学Transformer之前请先理解《机器学习中的Attention机制》,Transformer会用到里面讲的自注意力和多头注意力机制。

        先看论文里给出的结构:

        一看,也是和《机器学习中的Attention机制》里介绍的RNN很相似的Encoder-Decoder结构。结合网上的各自解析我们可以知道,这个Encoder和Decoder都是由一个个基本单位叠起来的(可以看到原图中也写了这个“Nx”表示堆叠了多个像这样的单元)。

        # Encoder单元

        Encoder单元内部长这样:

        输入的词经过自注意力+多头注意力之后经过一个全连接层。并且这自注意力和全连接层还吸收了残差网络的思想做了Add和Normalize:

        注意这里Encoder有全连接层为什么还能输入任意长度?因为可以看到这个全连接层一次只处理一个词的输出,从《机器学习中的Attention机制》里介绍的自注意力+多头注意力可以知道每个词的自注意力输出的大小是固定的。

        # Decoder单元

        下面这图左边就是Decoder单元:

        右边是Encoder单元的对堆叠方式,因为Self Attention和Feed Forward都没改变输入的尺寸,所以Encoder单元的输出可以直接作为下一个Encoder单元的输入,Decoder单元也是同样的原理堆叠方式也是一样。

        此外,还可以看到,这个Decoder的中间有一个Attention层既接收了编码器的输入又接收了解码器前面的输入,那么这一层的KKK、QQQ、VVV都是多少?看这就知道了:

        # 具体的运行过程

        大佬做的动图,首先是把Encoder输出的KKK、VVV矩阵放进Decoder里,然后输入一个起始字符:

        第一步的输出就是输出句子的一个词向量。

        接下来的步骤就和RNN里的Decoder有异曲同工之妙,就是把之前的输出作为输入再输进Decoder里:

        疑问:

        • 如果按照上面几张图的Decoder结构,Decoder模块的输出向量数量应该和输入的一样多,即输到最后的Linear+Softmax的矩阵大小是不断增长的不可能由一个固定的Linear+Softmax完成,是我漏看了什么吗?

        解答:

        • 编码器输入到解码器中的两个矩阵是作为KKK和VVV的,解码器生成的序列作为QQQ,它们的特征维数都相同。
        • 于是在Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})VAttention(Q,K,V)=softmax(dk​​QKT​)V中,QKTQK^TQKT计算得到的矩阵长宽分别为QQQ的样本数(QQQ的行数)和KKK的样本数(KTK^TKT的列数)。
        • 而KKK的样本数和VVV的样本数相同,所以再乘上一个VVV之后的长宽就是QQQ的样本数和VVV的特征维数(等于QQQ的特征维数)。
        • 所以解码器输出矩阵和输入QQQ的矩阵大小相同

        帮助我们改善此页面!
        创建于: 2021-11-23 11:43:15

        更新于: 2022-06-08 14:04:06