【李宏毅机器学习】Self-attention架构详解 | 全程手码,放心食用(2021p23、24)

全文总结于哔哩大学的视频:(强推)李宏毅2021春机器学习课程

2020版课后作业范例和作业说明在github上:点击此处

本博客持续更新,结合哔哩大学的视频观看效果更佳。

下文加粗字体为内容引导标题。

在这里插入图片描述
Self-attention想解决的问题是什么呢?
一般network input 都是一个向量,输出可能是一个类别或者标量。假设我们遇到一个复杂的问题,输入是一排向量。假设输入为一个句子,每个词作为一个向量,即这个句子是多个向量。
在这里插入图片描述
例如一段声音也可以当作一排向量,图中将25ms长度的声音信号当作一个向量。一秒声音信号可以分为一百个向量。
在这里插入图片描述
那么输出都应该是什么呢?
有三种可能:
1、每一个向量都对应一个label,这个叫做Sequence labeling;
机器回把句子的每个词都输出一个词性,动词名词等。语音图片类似。这种情况下输入和输出的数目一样。

2、一整个sequence(序列)输出一个标签;
列入一段话会输出是消极句子还是正面的句子,比如公司推出了一个产品,那么可以通过这个应用判断产品下的评论大多是好是坏。语音可以输出是谁在说话。
在这里插入图片描述

3、机器自己决定要输出多少个label。
即输入是n个向量,但是输出了不知道多少个label,机器自己去判断。
以上第三个这种情况就是seq2seq,在transform中有应用.
例如翻译就是seq2seq,因为输入和输出是不同的语言,语音辨识输入语音输出对应文字。
在这里插入图片描述

以下为上面三种情况的详细讲解。

1、Sequence labeling
例如句子:I saw a saw.
因为句子中有两个saw但是要输出的词性是不一样的,所以要联系上下文才能输出正确的词性。但是一句句子很长,不同的句子长度不一样,联系整个句子很麻烦。
在这里插入图片描述
解决方法是:

Self-attention

通过Self-attention的向量都是考虑一整个sequence后才输出的向量。
怎么办到的呢?
如图,首先通过a1找到和a1相关的其他向量,每一个向量和a1相关联的程度我们都用一个阿尔法来表示。
在这里插入图片描述
那是怎么决定两个向量之间的关联性呢?
这里需要一个计算attention的模组,输入两个向量,输出阿尔法。下图左侧为一个做法Dot-product,是将两个向量分别乘上不同的矩阵,左边乘上Wq矩阵,右边乘上Wk矩阵,分别得到向量q、k,再做qk的神奇运算,就能得到阿尔法。右边是类似的一种方法。
在这里插入图片描述
用上述方法进行计算整个句子。其中第一个是自己和自己算关联性,后边是a1和其他向量计算关联性。
在这里插入图片描述
我们从中就可以选出哪些向量是和a1最有关系的具体操作是每个向量都乘出一个新的向量v1-v4,然后都乘上alpha prime,相加得到b1,类似计算出b2。例如a1和a2的关联性很强,则b1的值就很很接近v2,就可以被抽出。
在这里插入图片描述

那么具体是怎么矩阵计算的呢?

具体的矩阵计算方法李宏毅讲的太好了,去看他的视频讲解吧,从视频的开头到十分钟。
在这里插入图片描述

总结如图,从输入的向量I到O就是做了self-attention,而这其中从输入的向量I到最后的O,只有wq、wk、wv是未知的,是需要训练出来的。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值