Attention is All You Need
Warning
这是第一次学的时候记的笔记,可能会过于简单、啰嗦,而且后面没记完,完整的 Transformer 梳理在另一篇笔记里。
经典公式
每个 token 都有一个 Query 和 Key:
那么:
每一行表示,某一个 token 应该关注所有 token 的程度
- \(d_k\) 是 Key 向量的维度,除了之后先让点积变小一点,再 softmax,把数值控制在合适的范围
Q K V 从哪里来
每个 token 被嵌入为一个向量,把他们堆起来,得到输入矩阵
然后分别训练三个不同的可训练矩阵:
- \(W_Q\): 学习怎样产生查询角度
- \(W_K\): 学习增样产生被匹配角度
- \(W_V\): 学习增样产生实际传递的信息
Self-Attention: 同一组信息内部互相注意
指的应该就是\(QKV\)都来自同一个输入矩阵\(X\)
让每个 token 不再只是孤立的词,而是根据整个上下文更新自己的含义
Cross-Attention: 一组信息查询另一组信息
一组 token(如\(X_action\)得到的 token) 拿着 Q,去另一组 token(如\(X_{vision-language}\))的 K 和 V 中查询信息
VLA 就会使用类似这样的思想,把图像、语言、机器人状态、动作 token 全拼起来,本质就是让不同模态的信息根据相关性进行交流
Multi-Head Attention
不同 head 拥有不同的:
可以学习不同的角度
每个 head 单独计算:
然后把各个 head 的结果拼起来:
从不同角度查资料,然后把各自的资料汇总起来
head的计算有点没看懂,concat是什么
计算 head_i 里的 QKV 其实是最初的 X,只是为了区分功能写错不一样的字母
concatenate:把几个向量首尾拼接起来
\(W_O\)是为了把不同 head 的直接拼接的信息再杂糅一下
位置编码
句子中的 token 不能光有向量的内容,还要有位置编码写好是第几个 token,在图像中就是二维位置,视频和机器人中就还要时间位置
Mask
训练的时候不看未来的答案
注意力分数矩阵可能原本是:
加上 mask 后,未来位置被屏蔽:
还没太懂
mask 可以同时实现训练的时候前面的 token 不看到后面的 token,同时可以并行计算
计算量
假设有 n 个 token,\(O(n^2)\)
算出权重矩阵之后
接着和所有 token 的 value 信息加权求和
\(V\)的形状是每个 token 的\(v\)堆成的列向量
\(AV\) 就是 \(V\) 的每一行的线性组合