李宏毅2022机器学习笔记(7)——self attention~

本文介绍了自注意力(self-attention)在自然语言处理中的应用,如何处理输入向量长度不一的问题,以及其与one-hotEncoding、wordembedding的区别。自注意力通过同时考虑整个句子,解决了词组类型判断和上下文依赖问题。还讨论了multi-headself-attention、位置编码和在语音和图像领域的应用。
摘要由CSDN通过智能技术生成

前言

        之前学习过的模型都是输入一个向量,输出一个类型或者数值。但平时遇到的问题中,输入可能是多个向量,并且每个向量的长度不同。

        当向模型输入的是词汇时,词汇需要用向量来表示,向量表示词汇的方法有以下两种。一种是one-hot Encoding,这种方法会开一个很长很长的向量,向量的长度等于全世界词汇的数量,向量中不同的位代表一个词汇,这种方法有个弊端就是看不出每个词汇的类型。word embedding则会给每个词汇一个向量,向量中包含有语义性质的信息。

    对于模型的输出一般有以下几种情况,一是输入的每个向量都有一个label。二是输入的全部向量只有一个label。三是不确定输出有几个label,由机器决定输出几个label。

        对于第一种情况,当我门向fully connected network出入如下图所示的句子时,第一个单词saw和第二个单词saw会被判断为同一个类型的词组,为了解决这个问题,我们可以把相邻两个词组放入fully connected network中,从而判断词组的类型。但是当一个词组需要考虑整个句子时该怎么办呢。

self- attention

       self- attention解决了上面的问题。self- attention将词组考虑整个句子后得到一个新的输出,如下图。self- attention可以做多次,并且可以和FC网络交替使用。

       self- attention的运作如下图所示。下面的b1,b2,b3,b4都是考虑了a1,a2,a3,a4得到的。这里b1,b2,b3,b4是同时得到的。

       下面我们详细讲解一下self- attention的运作流程。对于b1,首先根据a1找到整个句子中与a1的label有关的,每个向量与a1的关联程度用字母\alpha表示。

      两个向量相关性的计算如下图所示,首先将输入向量分别乘w^{q}w^{k}得到q和k之后,q和k做内积就可得到 \alpha

将q+k后放进激活函数中,得到的值乘上W即可得到关联程度\alpha

          self-attention中各个输入计算相关性如下图,当计算a1与a2,a3,a4相关性时,a1*q1 与a2*k2,a3*k3,a4*k4做内积便可得到相关性。对于其他词组同理可得相关性。每个相关性计算完后经过一个softmax得到新的\alpha

       之后根据\alpha抽取出重要信息,用a1~a4分别乘w^{v}得到v1~v4,v1~v4与相关性\alpha相乘并相加得到了b1,由此可见b会接近于\alpha最大的输入的v,若{\alpha }'1,2 最大,则b1会最接近于v2。

同理我们还可以得到b2,b3,b4,其中b1,b2,b3,b4是可以同时得到的,不是一个个计算出来的。

接下来我们从矩阵乘法的角度来分析一下self-attention。

从下图中我们可以看到,将q1~q4写作矩阵Q,a1~a4写作矩阵I,v1~v2写作矩阵V,可以得到Q=w^{q}I,K=w^{k}I,V=w^{v}I

 将相关性\alpha1,1~\alpha4,4写作矩阵A,得到A=K^{T}Q。A经过softmax得到{A}'

 最后将b1~b4写作矩阵O,得到O=V{A}'

 最后可以得到如下图的矩阵乘法推理公式。其中我们只需要学习得出参数W^{q},W^{k},W^{v}.

 Multi-head self-attention

       当相关性有多种考虑方式是可以用到multi-head self-attention,如下图,当相关性有两种考虑方式时,每个输入应有两个q,k,v,最终也会计算出两个b。

 之后将得到的两个b接起来得到一个b。

       有时词组在句子中的位置可能会对词组的含义产生影响,因此用到positional encoding为每个位置设计了一个向量,记作e^{i},将e^{i}加在a^{i}上,便将位置对词性的影响考虑在内。其中e^{i}的样子如下图右边所示。

       而语音中,一个句子往往很长,因此我们可以用truncated self-attention。该方法并不是考虑一整段话,而是只考虑一个范围。

        self-attention也可以用在图像上。CNN就是一种简化版的self-attention,CNN只考虑了一片区域的数据,而self-attention考虑了整个区域。

 而双向RNN和self-attention都考虑了整个句子,他们有什么不同呢

双向RNN在处理最后一个输入时很难考虑到第一个输入,除非第一个输入一直存储在memory中。

self-attention考虑到了每一个词汇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值