【机器学习】李宏毅——自注意力机制(Self-attention)

前面我们所讲的模型,输入都是一个向量,但有没有可能在某些场景中输入是多个向量,即一个向量集合,并且这些向量的数目并不是固定的呢

在这里插入图片描述

这一类的场景包括文字识别、语音识别、图网络等等。

那么先来考虑输出的类型,如果对于输入是多个数目不定的向量,可以有以下这几种输出方式:

  • 每个向量对应一个输出:输出的数目与输入向量的数目一致,例如下图的词性识别、语调识别、状态识别等等

在这里插入图片描述

  • 只有单个输出:这种应用于例如判断一段话的正负面作用、语音辨认说话者等等,如下图:

在这里插入图片描述

  • 机器自己决定输出多少个结果(seq2seq):如翻译、语音转文字等等

Sequence Labeling(输入输出数目一致)

最简单的思路当然是将每一个向量单独作为一个输入,然后将其丢入到一个全连接之中,每个单独产生结果。但是这种方法的问题在于没办法考虑前后向量之间的联系。那么转换另一个思路就是开一个window,每次将window中的向量一起输入到全连接网络中,如下图:

在这里插入图片描述

这种方式的问题在于如果遇到某些场景需要全部向量都考虑,但是我们无法事先知道这个场景中向量的数目,我们也就很难调整我们的window去适应。在这种情况下就需要用到自注意力机制了。

Self-attention

可以将自注意力机制看成一层,其接受所有向量的输入,然后输出的数目跟输入的数目的是一样的,可以认为它的每个输出都是考虑了整个向量集之后的结果,之后再将这些输出每个单独放入一个全连接网络中来得到输出,这样可以显著的降低全连接网络的参数量。并且这个也可以多次使用,自注意力后FC再自注意力再FC等等。

在这里插入图片描述

那么接下来的问题就是这个机制如何接受输入并作出相应的输出。这边以第一个向量对应的第一个输出为例:

在这里插入图片描述

  1. 计算每个输入向量之间的关联性:计算关联性 α \alpha α有很多种方法:

在这里插入图片描述

最常见的是这种Dot-product,就是将两个向量分别乘以一个矩阵,得到新的向量,然后再进行点乘得到一个数值,也就是 α \alpha α

  1. 计算出两两向量之间的相关性后进行Sortmax:如下图:
    在这里插入图片描述

  2. 对每个向量再乘以一个另外的矩阵得到一个新的向量,再进行加权和得到结果

在这里插入图片描述

哪一个向量对应的 α \alpha α(attention score)越大,那么得到的b就越接近于它所计算出来的 v v v,这就是最终结果了

从矩阵角度理解全过程

  1. 由于每一个输入向量都需要计算 q , k , v q,k,v q,k,v三个向量,因此可以利用矩阵的形式更加简洁方便的进行计算:

在这里插入图片描述

  1. 计算 α \alpha α也是同理:

在这里插入图片描述

  1. 计算b也是转换成矩阵操作:

在这里插入图片描述

而经过上述的分析,可以看到需要学习的参数只有 W q , W k , W v W^q,W^k,W^v Wq,Wk,Wv而已

Multi-head Self-attention

这是认为不同的输入向量之间可能不止有一种相关性,因此:

在这里插入图片描述

各种参数都有多重,只不过各自算各自的

Position embedding

在前面的自注意力过程中,我们并没有关注到各个输入向量之间的位置信息!这在一些场景里面是很关键的一部分信息,但是我们只是计算了各自的相关性没有考虑到位置信息,因此需要加上Position embedding:

在这里插入图片描述

只需要在每个输入向量上加上一个 e i e^i ei即可,这个里面就包含了具体的位置信息,而如何产生 e i e^i ei仍然是一个在研究的问题

CNN与Self-attention

事实上,CNN是受限制的Self-attention,也就是Self-attention的特例,Self-attention可以通过某些设计和限制就可以变成CNN,完成和CNN同样的任务

RNN与Self-attention

RNN也是处理输入是向量序列问题的算法,其具体过程就是一开始有一个memory,它和第一个输入向量一起输入到RNN中将会输出一个向量,该向量一方面放入全连接网络中得到一个输出,另一方面和下一个输入向量一起作为下一个RNN的输入,以此类推

在这里插入图片描述

而它们的区别在于:

  • 对不同位置的考虑:在RNN中如果最后一个黄色的输出向量希望它能够与第一个输入的蓝色向量有关,那么就需要蓝色向量从一开始输入就一直被记得,直到最后一个;而在Self-attention则不用考虑到这个问题,计算就已经是统筹兼顾了
  • 计算的平行性:RNN是无法进行平行计算的,而Self-attention是可以的。
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
李宏的2020机器学习笔记中,有一个关于注意力机制(Attention)的部分。这部分内容主要介绍了生成模型(Generation)、注意力(Attention)、生成的技巧(Tips for Generation)以及指针网络(Pointer Network)。在生成模型中,主要讲述了如何生成一个有结构的对象。接下来介绍了注意力机制,包括一些有趣的技术,比如图片生成句子等。在生成的技巧部分,提到了一些新的技术以及可能遇到的问题和偏差,并给出了相应的解决方案。最后,稍微提到了强化学习。其中还提到了在输出"machine"这个单词时,只需要关注"机器"这个部分,而不必考虑输入中的"学习"这个部分。这样可以得到更好的结果。另外,还提到了关于产生"ei"的方法,其中有研究应用了连续动态模型自注意力(Self-attention)来学习位置编码的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [2020李宏机器学习笔记-Condition Generation by RNN&Attention](https://blog.csdn.net/zn961018/article/details/117593813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [李宏机器学习学习笔记:Self-attention](https://blog.csdn.net/weixin_44455827/article/details/128094176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值