0%
boxmoe_header_banner_img

加载中

Self-attention


avatar
mizuki 2026年9月22日 2026年9月28日 13

引言

在之前的学习中,我们常常是通过输入一个向量输出一个值,但是在机器学习中,常常会出现输入多个向量,并且输出多个值的情况,这时候就要用到本章学习的内容

一. 输出

network的输出为向量集合,分为了这几种情况

  • 1.1 长度相同

每个向量的向量长度相同

  • 1.2 长度不同

每个向量的向量长度都不同,例如输入一句话,声音讯号,一个图表

二. 输出

输出也分了三种情况,这里给出讲解

  • 2.1 每个vector都有对应的输出label,输入与输出数量相同
  • 2.2 只输出一个label|
  • 2.3 不知道输出多少个label,由机器自己决定

本篇内容先解决第一种情况,输入与输出数量相同

三. Sequence Labeling

Sequence Labeling这种方式使用来解决输入与输出相同的情况

  • 3.1 Fully-connected

通过FC的方式可以输出每一个向量对应的值

  • 3.2 优化

但是FC是考虑的全部输入向量,再输出对应当前向量的值,但是这种方式太过耗时

因此我们采用window窗口的方式,将目标向量的前后几个向量圈进去,再考虑输出,可以节省时间和算力

但是对于这种方式仍然存在弊端,因为窗口的大小是需要我们自己去指定的,并且也存在错误的情况,例如输出一个句子的单词词性,没有考虑全就可能会输出错误结果

因此我们采用了Self-attention进行优化

四. Self-attention

  • 4.1 作用

Self-Attention 使序列中每个输入向量在产生对应输出时,都能够参考序列中其他位置的信息,通常输入n个向量,就输出n个新的向量

  • 4.2 使用方式

一般与FC混合使用,Self-Attention 负责提取上下文信息,得到新的表示 bib^i,之后可以根据任务再送入全连接层等网络进行预测,如图

  • 4.3 运作原理

a.输入的数据通常已经被表示为向量,例如 token embedding,或者前一层网络输出的特征向量

b.分别通过特定值算出两个向量q和k,q用于查询需要的向量,k(Key)用于和 q 进行匹配q 与 k 的点积决定两个位置之间的相关程度,α用于表达最终的结果,关系也可以表示成这样:

c.分别计算 q 和各个 k 的 attention score,再通过 Softmax 将这些 score 归一化为 attention weight

d.同时,再计算出v,v起到了提供内容的作用,再将α与v相乘相加得到最后的结果

e.为了便于理解,可以分别计算每个 bib^i,实际实现时通常将所有向量组成矩阵,通过矩阵运算一次并行计算

  • 4.4 更好的理解

可以将k,q,v的结果,甚至a的结果都看作一个大矩阵,他们的计算就如同矩阵计算,如下图所示

五. Multi-head Self-attention

对于Self-attention,还可以进行一定程度的优化

  • 5.1 第一步

将q,k,v分成n个head,可以产生不同的相关性

  • 5.2 第二步

再对不同的head分别计算得score,再通过一个矩阵将score拼起来

六. 缺陷

要注意的是,在Self-attention中,所有的结果都是同时计算出来的,因此计算中是不存在位置的咨询的,对于一些需要位置咨询的数据,我们可以认为的为数据增加一个关于位置咨询的向量e,加在α中

七. Self-attention的具体应用

  • 7.1 Self-attention for Speech

对于一些声音讯号的识别,我们可以运用到Self-attention,但是声音讯号一般是很长的,并且隔得很远的讯号关联性不强,所以我们同样可以将声音讯号切成小片段进行分析,这就是Truncated Self-attention

  • 7.2 Self-attention for Image

对于图像来说,我们也可以将它看作多个向量的集合

八. Self-attention v.s. CNN

在上文中我们说到,影像的识别也可以用Self-attention,这里我们对比一下同样可以用于影像识别的CNN

  • 8.1. 区别

a.CNN是简化版的Self-attention,Self-attention包括CNN

b.处理数据的能力不同

  • 8.2 如何选择

要基于数据的复杂性进行选择,复杂的data可以选择Self-attention,不是特别复杂的选择CNN,因为CNN的弹性更小,通过下图可以看出

结尾

这篇文章到这里就结束了,可喜可贺可喜可贺

上一次更新已经跑远了✨ 计算中...
(‾◡◝) 本内容里的一些消息,可能已经跟不上时间啦~


评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字

插入代码
后退
前进
刷新
复制
粘贴
全选
删除
返回首页
0%
目录
顶部
底部
📖 文章导读