自注意力机制(Self-Attention)--李宏毅机器学习笔记

个人学习笔记,如有错误欢迎指正,也欢迎交流,其他笔记见个人空间 

为什么需要自注意力机制 

传统神经网络(如CNN)处理的是固定长度的向量输入,但现实中的许多任务(如语言、语音、图数据)输入是长度可变的向量集合(Vector Set)

例如:文字处理

问题1:如果我们把一个句子裡面的每一个词汇都描述成一个向量,输入就会是一个数组,且随着句子长度不一样,这个数组也会变化。

问题2:要把每个词汇单独设一个向量,最简单的做法就是One-hot vector,但是随之而来的问题就是这个向量的长度和词汇数量一样多,比如一句话3个单词,apple是100,bag就得是010,单词越多,向量越长,问题越复杂。而且词汇之间彼此没有关联,cat和dog间没有联系,和apple也没有联系。

 李老师介绍了一种方法解决这个问题:词嵌入 Word Embedding

Word Embedding(词嵌入) 是一种将词语表示为稠密向量(dense vector)的技术。与 One-hot 向量相比,它包含语义信息,能更好地反映词与词之间的关系。 

举例:

它和接下来要说的自注意力机制有什么关系呢:

以自然语言处理NLP为例,词语转为嵌入向量,送入 Self-Attention 层,使用 Attention 机制建模词与词之间的关系,输出的是“考虑上下文之后”的向量,最终输出用于分类 / 生成 / 序列标注等任务。

打个比方来说:

  • Word Embedding: 你在派对上初识每个人(你知道他们的身份、个性)

  • Self-Attention: 你通过观察对话来判断谁和谁关系更密切,谁说的话最关键

 Word Embedding不止可以处理单词,对于声音信号、图、分子信息等都能处理

 声音信号:每个Window里的信息可以处理成一个向量frame,窗口每次向右一点再处理一个向量

图是每个节点看作一个向量,节点和节点之间的边就是关系连接吗。原子也类似,每个原子可以看作一个向量,一个分子就类似一个图。

输出的三种情况(对应三种任务) 

Sequence Labeling(如词性标注):每个输入向量对应一个输出label

整体分类(如情感分析):整段输入对应一个输出label

给一段话,判断它是积极还是消极;给一段语音,判断是谁在说;给一个分子判断它有没有疏水性......

 Sequence to Sequence(如机器翻译):输入和输出均为序列,长度不一定相同,机器自己决定输出多少个label

自注意力机制的登场

对于Sequence Labeling问题,以前的直觉就是使用 Fully-Connected Network(FCN)逐个处理向量,提取特征,但是这么做容易忽略上下文,导致出错。

可通过窗口法(上下文拼接)部分缓解,但受限于窗口大小和序列长度的变化。如果任务需要考虑整个句子就搞不定

对于这样的问题, 自注意力机制可以吃下一整个句子

 中间这四个vector,都是考虑一整个句子后才得到的,且Self-Attention不是只能用一次,可以叠加很多次

自注意力机制的过程

简单来说:

  • 输入:一整个向量序列 a1,a2,...,an(可能是整个网络的输入,也可能是某个隐藏层的输出)

  • 输出:每个位置输出一个向量 bi,但这个向量是基于整个序列计算得出的

怎么产生bi呢,这里有一个特别的机制,比方说a1,这个机制可以帮我们找出ai与它有关系,其关联程度用α表示。

核心过程(以 Transformer 用法为例):

  • 每个输入向量被映射为三个向量:查询Query(q)、键Key(k)、值Value(v)

  • 对于每个 Query,计算其与所有 Key 的相似度(通常用 dot product 得到 attention score)

  • 用 softmax 得到归一化的 attention weights(即α')

  • 用这些权重对所有 Value 向量加权求和,得到最终输出向量 bi

PS:还有一种计算α的叫做additive的方式:

q,k,v具体含义

通俗易懂一点来说可以类比成图书馆借书

你走进图书馆,想找一本关于“人工智能”的书。

  • 你心里想要找的主题(人工智能),就是 Query(查询)

  • 每本书的目录或标签信息,就是 Key(关键词)

  • 每本书的实际内容,就是 Value(内容)

Self-Attention 的过程就像这样:

  1. 你拿着你的“查询”(Query),

  2. 对比图书馆里每一本书的“标签”(Key),

  3. 找出那些最匹配的书(注意力分数高的 Key),

  4. 再根据它们的“内容”(Value)加权平均,汇总成一个你想要的“知识结果”。

从矩阵角度理解

每一个a都产生q,k,v

 变成矩阵形式就是这样

 Wq,Wk,Wv就是需要学习的参数

接下来每个q都会去乘不同的key得到 attention score

对于q2,3,4同样操作

 对于b1,b2,b3,b4同理

总的来说就是这样:

Multi-head Self-attention

直译过来就是“多头”

为什么引入“多头”机制?

  • 单一的 attention 只能关注一种类型的关联(比如“语义相似性”)。

  • 不同的注意力头(head)可以学习不同类型的关系,比如语法关系、实体依存等。

  • 多头机制允许模型从多个子空间中并行抽取信息,增强表示能力。

也就是通过不同的q负责不同种类的相关性 

 注意qi1不用乘ki2或者kj2,也不用管vi2/vj2,对于qi2同理

 再把bi1,2拼起来

位置编码Positional Encoding

为什么需要 Positional Encoding?

我们处理的是序列数据(如自然语言),位置信息是不可缺的。比如在语义理解中,“他吃了饭”和“饭吃了他”完全不同,因此模型必须知道词语的顺序。

具体来说就是为每个位置设定一个vector,ei加到ai上即可

Attention is All You Need中

其他 

老师还提到了自注意力机制在声音识别、图像识别中的应用以及和CNN、RNN的区别,这里就不展开说。简单来说CNN 可以看作是一种简化版的 Self-attention,随着训练资料的增多Self-attention的效果会更好。

RNN和Self-attention区别在于Self-attention考虑了整个输入,RNN只考虑上一个hidden的输出,没法平行化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值