目录
Attention is all you need! 操作流程
感谢B站up主搬运的课程:
【李宏毅2020机器学习深度学习(完整版)国语】 https://www.bilibili.com/video/BV1JE411g7XF/?share_source=copy_web&vd_source=262e561fe1b31fc2fea4d09d310b466d
来由
处理 Seq2Seq 问题,之前常用 RNN
但这样的问题是,虽然 RNN 擅长处理序列信息,但必须按着顺序处理,无法实现并行处理(同时出结果 、
……
那换成用 CNN 的思想来处理序列问题
可以发现确实实现了并行处理
但是仍存在问题,如果需要卷出长序列的关系,需要经过多层 CNN 才能卷到,因为 filter 总是小的,没法一下子就卷出序列中离得远的单元的关系。
这时,我们就有了 Self-Attention ,既可 Seq2Seq ,亦可并行计算。
Attention is all you need! 操作流程
我们把输入乘上一个矩阵,把 变成
,然后丢进 Self-Attention 层里,通过
与矩阵
、
、
相乘得到每个
对应的
、
、
( q 用于匹配其他元素, k 用于被匹配, v 则会是被提取的信息)
开始操作
再对算出来的 取 softmax
最后与各个 取一下加权和,求得
往后做依然是同理
这样就可以用旧序列 得到新序列
本质是一堆的矩阵乘法
Multi-head Self-attention
“不同的 head 关注点不同,能够学到不同的东西,关注于邻近的信息或是长远的信息。”
Position Encoding 位置编码
从其计算的流程来看,位置并不影响其结果(这样当然不行啦,序列是有顺序的)
计算如下图所示
Transformer 架构
注意 input 和作为输入的已经产生的 output 都是转换成 word embedding;
encoder 、 decoder 都有N个(重复N次)
Layer Norm 让一个向量的所有维度变成位于 的分布里,
Batch Norm 则让多有向量的同一维度变成位于 的分布里。