白话transformer(一):注意力机制

前面我们分篇讲述了transformer的原理,但是对于很多刚接触transformer的人来说可能会有一点懵,所以我们接下来会分三篇文章用白话的形式在将transformer 讲一遍。
前文链接
Bert基础(一)–自注意力机制

Bert基础(二)–多头注意力

Bert基础(三)–位置编码

Bert基础(四)–解码器(上)

Bert基础(五)–解码器(下)

注意力机制其实最大的作用就是对词嵌入也就是embedding的优化,下面我们来看下是怎么做到的

视频链接

白话transformer(一)

1、 词嵌入

我们人类最擅长的就是自然语言的表达,而计算机擅长的事数字的计算,如何将人类的表达方式让计算机能够理解呢,就需要一个桥梁连接起来。

这个桥梁就是embedding,embedding 即词嵌入,是NLP领域最重要部分;embedding就是将文本变成数字,让每个或者每段文本都有很好的与之对应的数字表示,那么需要解决的问题就会变得容易很多,embeddings 越好模型就会越好
在这里插入图片描述

2、 例子

在这里插入图片描述
我们这里有一堆文本单词,在一个二维的坐标系中,每个单词都有一个水平和垂直的坐标,比如香蕉是6,5,

那么现在出现了一个新的单词,apple(🍎),如果让我们给苹果安排一个位置,应该在哪里最合适呢?

很明显是右上角,因为这里全部是水果,embedding的作用就是相似的单词会被赋予相似的数字
在这里插入图片描述

当然,对于一个单词其实不会只有两个维度,可以使很多,分别来表示其中一个属性,比如大小、颜色、形状等,如下
在这里插入图片描述

3、 问题

现在我们重新定义一个坐标系
在这里插入图片描述
右上角是草莓和橘子,左下角是苹果和window系统;根据我们的正常理解,右上角是水果类,左下角是计算机类;

OK,下面我们又有几个新的单词出现了,需要我们预测他们的坐标。

在这里插入图片描述

我们其实很容易的可以区分,车厘子和香蕉是水果,应该在右上角;安卓和电脑应该属于计算机那个类别,放在右下角。
在这里插入图片描述

到现在为止,事情看上去还是很简单的,但是现在来了一个单词苹果(apple)

这个单词应该放在哪里呢???

苹果如果表示吃的水果应该在右上角,如果是手机的话应该在左下角。而对于embedding而言,不管是自己创建Vocabulary单词表还是使用word2vec,都不能解决歧义。

我们先把单词苹果(apple)放在中间的位置,那么我们该如何解决这个问题的,下面注意力就要出场了。

4、 注意力机制

注意力机制就是来解决单词歧义问题的
在这里插入图片描述

论文中提到的注意力就是使用了查询、键、值三个矩阵,我们在介绍中不是为了解释论文架构,而是说清楚注意力到底是怎么实现的。

在这里插入图片描述
现在我们来看两个文本,根据第一句话我们应该明白,这里面提到了橘子,我们人类是知道橙子属于水果,提到苹果这个词语时,那么苹果应该是可以吃的苹果;同样在第二个句子中提到了手机,那么我们应该明白这里指的是苹果手机。
在这里插入图片描述

我们人类可以根据经验进行判断,但是计算机是不知道的

下面我们来看看注意力机制是如何做到的?

在前面我们提到了,我们先把苹果这个单词初始化,放在中间的位置;当输入是第一句话时,提到了orange,那么这个地方出现的apple应该向右上角移动。
在这里插入图片描述

而,第二句话出现时,apple这个单词应该向左下角移动
在这里插入图片描述
其相应的坐标如下
在这里插入图片描述

5、 原理

要想实现上述过程,计算机就必须要计算所有单词来查看或者评估苹果这个词,通过程序不断的训练会发现,苹果和橘子这两个词比较接近,而与其他的词关系不是很大,那么orang就与apple这个单词相关性更大,我们这里绘制了更粗的连线,我们可以把他们想象成单词之间是有相互吸引力的,连线越粗其吸引力越大,最后距离就会越近。
在这里插入图片描述

其实,所有的单词之间都有相互的吸引力,但是随着不断的训练,单词之间会趋于一个平衡,比如buy这个单词,与他相关的单词会相互吸引聚成一簇,比如sell等,而苹果、橘子等水果相关的词会聚集在一起,可以想象成Kmeans聚类算法。

或者想象一下我们的宇宙空间的星球,他们之间都是有作用力的,因为地球和月球比较近,相互吸引力越大,所以相关性越大;而月球与其他的相求也有吸引力,但是比起与地球之间的相互吸引力就太弱了,也就是月球的大部分注意力都在地球上。

在这里插入图片描述

所以如果上下文一直在讨论香蕉、橘子等水果,那么接下来出现的apple这个单词大概率就是我们吃的苹果,那么聚集在一起的水果这个簇就会把apple这个单词拉到水果簇中心的方向。

其实这就模型跟踪内容的方式,也就是注意力机制的可视化的步骤。

6、 多头注意力

当我们建立好了一个注意力机制后,那么我们怎么确定这是一个非常好的embedding呢?
理想情况下可以有很多的词嵌入,把他们结合起来形成一个更强大的词嵌入矩阵
我们看一下现在我们有三个初始化的embedding矩阵,自己想一下,哪一个词嵌入是最好的
在这里插入图片描述

当然是第一个,因为他可以把两个不同簇分得更开,更加容易辨别。当我们对apple进行训练时,不管结果是拉向橘子还是手机,他们在拉近一个的同时会远离另外一个,这样就类似于聚类时可以很确定的将这个点进行归类,消除歧义。

在这里插入图片描述

所以我们初始化一个词嵌入时,有可能是第一种好的,也有可能是第二个比较差的,所以我们多使用几个,获取得到好的embedding的概率就会越大。

7、 线性变换

当然如果嵌入多了也会有问题,如果我们从不同的方式或者维度进行创建词嵌入矩阵,那么结果会变的不可控制,所以我们不能仅仅采用一大堆的嵌入进行组合
我们要做的是建立一个词嵌入矩阵,在此基础上进行修改和转换,就是我们要讲的线性变换

在这里插入图片描述

比如我们对原始embedding进行了两种变换,那么大家可以考虑下那种变换是变得更好呢

很明显是第三种,那么现在我们为了能够选出更好的词嵌入,我们可以给出评分,好的词嵌入给高的分数,不好的给予低的分数

在这里插入图片描述

最终的得分就是查询矩阵、键矩阵和值矩阵要做的事情

在这里插入图片描述

  • 首先我们根据文本创建一初始的词嵌入,现在我们使用Q、K来创建变换
  • V矩阵帮助我们进行评分,好的变化给予高的权重,不好的赋值较低的权重
  • 根据得分我们将所有的矩阵进行加权求和得到最终的词嵌入

以上就是注意力机制的全部内容,下一篇会讲一下Q、K、V矩阵相关知识。。。

  • 33
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andy_shenzl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值