b站视频-李宏毅机器学习2021-自注意力机制
1.要解决的问题
当把输入看成一个向量,输出是数值或者类别。但是如果遇到更复杂的问题呢?
假设输入是多个向量,而且数目不固定,要怎么处理呢?
总结-自注意力机制要解决的问题是:当神经网络的输入是多个大小不一样的向量,并且可能因为不同向量之间有一定的关系,而在训练时却无法充分发挥这些关系,导致模型训练结果较差。
(1)输入vector set as input —向量集输入举例
例1 文字处理
假设输入是一句英语,显然每个单词的长短不一,并且每个词汇对应一个向量,所以输入是多个长短不一的向量。
如何将词汇表示成向量?
如下图所示,第一种方式可以利用one-hot encoding,但是这种方式下每一个词之间没有关系。第二种方式是word enbedding,很显然这种方式下类别相同的词聚集在一起。
共同点:一个词对应一个向量,即一句话对应一个向量集。
例2 一段声音也可以是一个向量集
(2)那么输出是什么
三种可能性
- 每一个向量都有一个标签
举例
- 一整个向量集的输入对应一个标签
举例
- 机器自己决定输出标签的个数
2、引出自注意力机制
主要讲的是上述第一种情况,每一个输入向量对应一个标签,这种情况又叫做sequence labeling
问题1:前提-该句中有两个saw怎么判断它们的词性。引出有没有可能让fc考虑上下文?
答:fc可以考虑一个window
问题2:如果某个任务需要考虑整个序列?
答:如果让一个window包括整个序列,但是这会让fc参数非常多,变得很复杂。
这时,自注意力机制应运而生。可以考虑一整个序列
3、怎么运作(即怎么产生b1)
1、根据a1找到跟它相关的,每一个向量跟a1之间的关联程度用α来表示。
怎么计算α呢--常用方法dot-product
两个向量作为输入,直接输出α,具体是输入的两个向量分别乘不同的矩阵,得到q,k,然后进行点乘即可得到α
怎么套用到self-attention呢
计算出a1和每一个向量的关联性之后,别忘了计算和自己的关联性。要做一个softmax,也可以用别的函数,比如relu
得到α‘(1,1)这些之后,要根据α‘来抽取重要的信息
怎么抽取?每一个向量乘以一个新的w(v)得到新的向量.......。
以此类推可以得到b2/b3/b4,要注意的是b1到b4不是依次产生的,是同时计算得到