第一个block 的输入为句子单词的表示向量矩阵 , 后续block 的输入是前一个block 的输出 , 最后一个block 输出的矩阵就是编码信息矩阵 C , 这一矩阵后续会用到中 。
4.结构
上图红色部分为的block 结构 , 与block 相似 , 但是存在一些区别:
包含两个 Multi-Head层 。
4.4.1 第一个 Multi-Head
block 的第一个 Multi-Head采用了操作 , 因为在翻译的过程中是顺序翻译的 , 即翻译完第 i 个单词 , 才可以翻译第 i+1 个单词 。通过操作可以防止第 i 个单词知道 i+1 个单词之后的信息 。下面以 “我有一只猫” 翻译成 “I have a cat” 为例 , 了解一下操作 。
下面的描述中使用了类似的概念 , 在的时候 , 是需要根据之前的翻译 , 求解当前最有可能的翻译 , 如下图所示 。首先根据输入 “” 预测出第一个单词为 “I” , 然后根据输入 “ I” 预测下一个单词 “have” 。
可以在训练的过程中使用并且并行化训练 , 即将正确的单词序列 ( I have a cat) 和对应输出 (I have a cat ) 传递到。那么在预测第 i 个输出时 , 就要将第 i+1 之后的单词掩盖住 , 注意 Mask 操作是在 Self- 的之前使用的 , 下面用 0 1 2 3 4 5 分别表示 “ I have a cat ” 。
第一步:是的输入矩阵和 Mask 矩阵 , 输入矩阵包含 “ I have a cat” (0, 1, 2, 3, 4) 五个单词的表示向量 , Mask 是一个 5×5 的矩阵 。在 Mask 可以发现单词 0 只能使用单词 0 的信息 , 而单词 1 可以使用单词 0, 1 的信息 , 即只能使用之前的信息 。
第二步:接下来的操作和之前的 Self- 一样 , 通过输入矩阵X计算得到Q,K,V矩阵 。然后计算Q和 KQ的转置乘积。
第三步:在得到其乘积之后需要进行 , 计算score , 我们在之前需要使用Mask矩阵遮挡住每一个单词之后的信息 , 遮挡操作如下:
得到 Mask [QKT] 之后在 Mask [QKT]上进行 , 每一行的和都为 1 。但是单词 0 在单词 1, 2, 3, 4 上的score 都为 0
第四步:使用 Mask [公式]与矩阵 V相乘 , 得到输出 Z , 则单词 1 的输出向量 [公式] 是只包含单词 1 信息的 。
第五步:通过上述步骤就可以得到一个 Mask Self- 的输出矩阵 , 然后和类似 , 通过 Multi-Head拼接多个输出 , 然后计算得到第一个 Multi-Head的输出Z , Z与输入X维度一样 。
4.4.2 第二个 Multi-Head
block 第二个 Multi-Head变化不大 , 主要的区别在于其中 Self- 的 K, V矩阵不是使用 上一个block 的输出计算的 , 而是使用的编码信息矩阵 C 计算的 。
根据的输出 C计算得到 K, V , 根据上一个block 的输出 Z 计算 Q (如果是第一个block 则使用输入矩阵 X 进行计算) , 后续的计算方法与之前描述的一致 。
这样做的好处是在的时候 , 每一位单词都可以利用到所有单词的信息 (这些信息无需 Mask) 。
4.4.3预测输出单词
block 最后的部分是利用预测下一个单词 , 在之前的网络层我们可以得到一个最终的输出 Z , 因为 Mask 的存在 , 使得单词 0 的输出 Z0 只包含单词 0 的信息 , 如下:
根据输出矩阵的每一行预测下一个单词
这就是block 的定义 , 与一样 , 是由多个block 组合而成 。
五、总结
与 RNN 不同 , 可以比较好地并行训练 。
本身是不能利用单词的顺序信息的 , 因此需要在输入中添加位置 , 否则就是一个词袋模型了 。
- 美国的领土由哪三部分组成
- 一周半宝宝耳屎满了用不用掏,一岁半的宝宝能掏耳屎吗??
- 一天就填一两次煤的懒汉炉,懒人必备微波炉菜谱
- 百家姓里有姓麦的吗,百家姓有姓铅的吗?
- 一周减肥20斤的方法,一周如何减肥20斤
- 网易视频云:HBase GC的前生今世 – 演进篇
- 原作写的真好,转载记录了 有了 IP 地址,为什么还要用 MAC 地址?
- 从ZETA无线通信技术特点出发选择合适的物联网协议
- 红秋葵的种植方法
- 富贵树的养殖方法和注意事项盆栽