Self-attention
输入n个向量,要输出相同个数的向量(比如,输入一个句子,输出句子中每个词的词性。每个单词转化为向量可以用one-hot vector或者word embedding方法)
如果将每个向量连一个FC(fully connected network),会出现像 I saw a saw这种情况,两个saw单词一样,所以两个FC输出结果也会一样
这时,我们可以在FC之前加一层网络,这个网络要考虑到整个句子,即self-attention
要考虑当前向量和其余向量的相似程度,流程如下
先由某个向量通过运算(其中
从矩阵的角度来看:
还有一种扩展,Multi-head Self-attention,就是每个向量产生出两个q,k,v,第一个q做运算时候都与第一个k做运算,同理,得到第一个输出和第二个输出,在这两个输出线性组合得到最终的输出
总结一下:
- 可以在加上一个和位置有关的参数:Positional Encoding
- 发现 dot-product 做的事情和 CNN 中 filter 对每一个 receptive field 做的事相似,这两者有什么关系?事实上,CNN 是 self-attention 的特殊版,因为 CNN 是对每一个感受野做运算,而 self-attention 实际上是拿每一个序列中的向量和序列中的所有向量做运算,相当于把感受野设置为整个序列。在数据量相对较小的时候,CNN 效果好,数据量极大的时候,self-attention 较好
- self-attention 和 RNN 的关系?比 RNN 更强。首先,RNN 是串行的,无法并行;其次,RNN(双向 RNN 也是)对于头和尾两个元素的相关性没有那么高,但是 self-attention 没有这个问题
- 由于需要更新的是整个矩阵,运算量较大,因此产生了许多其它的变形(如 transformer)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下