zoukankan      html  css  js  c++  java
  • Transformer架构记录(三)

    Transformer架构记录(二)中提到,整个Encoder-block的结构如下图所示:

    本文聚焦上图中的Multi-Head Attention模块,即下图所示:

    1. self-Attention

    self-Attention是理解Multi-Head Attention模块的基础,因此需要理解自注意力机制在Transformer中的具体原理。

    1.1 Q、K、V计算

    对于Transformer架构记录(二)中提到的输入 X (X的行数表示一句话中的Token数目,列数表示每个Token的embedding维数,与词向量维数、位置向量维数一致),将 X 与3个矩阵(WQ、WK、WV)做乘法得到 Q、K、V 3个矩阵;

    显然,WQ、WK、WV的行数必需与 X 的列数保持相同(确保矩阵乘法得以实施);至于WQ、WK、WV的列数,一般要求WQ、WK的列数相同,WV的列数并不强制要求与WQ、WK的列数相同。

    WQ、WK、WV作为模型参数,其具体数值可在模型训练过程中得以更新。

    1.2 attention计算

    在得到的Q、K、V 上施以函数Attention(),具体如下:

    1. 即Q乘以K的转置,得到的矩阵QK^T的size为NxN(N为一句话中的Token数目);

    2. 将QK^T的每个元素除以d_k(d_k即前述矩阵Q、K的列数,也是WK、WV的列数)的算术平方根;

    3. 对2所得矩阵的每一行进行 Softmax,即使得矩阵每一行的和都变为 1;

    4. 对3所得矩阵与先前的矩阵 V 作矩阵乘法,所得矩阵记为 Z, Z的size为(N, d_v) d_v表示矩阵 V 的列数。

    可以看到,self-attention利用一组矩阵(WQ、WK、WV),将输入 X(N, E)转换为 Z (N, d_v),N为一句话中的Token数目,E词向量维数,d_v表示矩阵 V 的列数。

    2. Multi-Head Attention

    Multi-Head Attention即为输入 X 配置多组(WQ_i、WK_i、WV_i),从而得到多个Z (N, d_vi),d_vi为对于矩阵 WV_i 的列数,一般设置所有的 WV_i 列数相同。

    如下图所示:

    得到 8 个输出矩阵 Z1 到 Z8 之后,将它们拼接在一起 (Concat),再次乘以矩阵(该矩阵的列数与输入 X 的列数相同),得到 Multi-Head Attention 最终的输出 Z。

    输出的矩阵 Z 与其输入的矩阵 X 的维度是一样的

    上述输出矩阵 Z 对应到“ Transformer架构记录(二)”中的 X_mha .

    下期预告:Decoder-block理解

    参考资源
    链接:https://www.jianshu.com/p/9b87b945151e
    《Attention Is All You Need》

    作者: python之家

    出处: http://www.cnblogs.com/pythonfl/

    本文版权归作者和博客园共有,转载时请标明本文出处;如对本文有疑问,欢迎邮件15256636585@qq.com联系;如发现文中内容侵犯到您的权利,请联系作者予以处理。

  • 相关阅读:
    cmd中编译java
    java出错
    去掉开始菜单中新装程序的红色标记【Windows】
    Windows安装java
    看视频缓冲好还一卡一卡【解决】
    python图像卷积
    电脑硬盘、内存
    python 查询Neo4j多节点的多层关系
    python 快速排序实现
    python 二分法实现
  • 原文地址:https://www.cnblogs.com/pythonfl/p/15364426.html
Copyright © 2011-2022 走看看