transformer

attention(注意力机制)

最近看了一下有关这方面的东西就记录一下吧

这个attention注意力机制这个概念很广泛,这个啥意思呢,例如一张图当我们人眼去看的时候总有一些地方是我们非常关注的,用图像分类来说我们对图片中的信息进行判断的时候通常只关注一些特征而不是其他背景啥的,对比说传统的这个卷积之后特征图提取,这个他毕竟是扫描的整个图,这个不可避免有一些信息是没用的但是他确实是被体现出来了,所以如果我们只关注有代表性的特征图提取那这个就识别就会快很多,精准度也会高。

ok上述就是讲述了这个注意力机制到底是用来干嘛的,说白了就是关注我需要的东西忽略我不需要的东西。

现在来说这个该咋做,拿这个机器翻译来举例子吧,首先定义三个参数,k,q,v,v代表这个原句子信息,q是查询的单词,啥意思呢,就是我们要得到句子里面什么是重要的什么是不重要的,这里就是要得到一个重要程度,重要程度怎么做呢,这要说到k是什么,k一般和v是相同的当然也可以是不同的但是这俩一定要是相关联的,计算时候第一步是k和q的内积,啥意思呢,就是看我搜索的这个词和句子里面这个东西的相似度说白了就是关联程度,这里一开始看我也挺困惑但是如果了解lstm和rnn这俩网络结构的话就能明白这是什么意思,说一下吧。

rnn循环神经网络,他这个在进行翻译的时候是一层一层向下传递信息的,比如第一层输入的是,‘你好我是张三’,他到最后一层可能就只是有一个‘三’,他前面的可能就是个‘张’,这个做翻译总要根据前面信息来进行判断,说白了就是他在传播的过程中会有信息丢失,导致无法翻译,这个rnn可以处理短的数据比如5个单词这样。再多了就不行了,不准确了。影响这个的问题很显然看出来就是有效信息不能够保存导致。那这个自注意力机制怎么解决了这个问题呢,返回去看,k*q,举一个例子一句话叫‘你好我是张三’比如q是你、k会是这句话里面的所有单词,这样k*q的值就是代表‘你’对对于这句话来说哪个是跟你这个词比较重要的,之后v是干什么呢,v就是这句话,让他这个kq拿到的概率值,和这个v做内积拿到v1这个v1相比较原来的v多了一些信息就是对于q来说这句话里面哪些东西是重要的。这就是一个attention机制。

从上面的描述当中可以看出来这个东西很厉害,首先这个计算机是不知道你输入的是什么东西的,他只是识别0,1。也就是说这个关注的提取可以应用在任何东西上,比如图片,视频,文字,等等,很厉害。

 补充一点这个k呢他学名叫做词向量这个输入词向量咋来的,说白了这玩意就是特征你就可以理解他是通过一些别的网络提取到的一些特征之后再输入进这个attention网络中,他对于训练结果的影响就是对速度又影响,这个训练过程再这个attention机制当中就是改变这个kq的值,来准确的输出哪个是重要的,不断地调整这个值,还有为什么说k和v可以不相同但是必须要有联系,还是这个原因,注意力机制输入的是词向量输出也是词向量,k要和v有关系这个kq得出来的重要度才会有意义对于v。

还有一点,我之前说这个注意力机制很宽泛为啥呢,原因就是在这个kqv上,如果kqv同源那么这就是一个自注意力机制,啥意思呢,就是自己找自己,那如果q和kv不同源就是交叉注意力机制,别人找自己,等等很多,可以自己命名在kqv上做改动就是,比如可以把q,k,v这仨任意一个改成定值然后你就可以叫。。。机制。

接下来就是重头戏transformer,下面是一个整体框架图右边是编码器,左边是解码器

编码器就是把输入的东西搞成一个词向量,解码器就是把词向量给翻译成一个词,这个用的是机器翻译所以编码器是生成式的,对于不同的任务那就是对这个解码器和编码器有一些更改就可以拿到不同的结果。图里面N的意思就是编码器有n个,解码器有n个,说白了就是对词向量增强。

多头注意力机制,这玩意就是对k做了分割,比如k是512 一般搞成8头这样子这个每一个新的k就是64维度,之后再进行这个kqv操作得到新的词向量,这里每一个小的编码器,可以看到除了经过这个mutil-attention 之后还有一些操作就是经过残差网络和这个标准化和非线性激活然后再残差网络加标准化,这些操作就是为了防止梯度消失和梯度爆炸。解码器那边他对这个输出经过了一层maskattention这就是为了让测试和训练统一,在解码器那边有一个输入,这个输入是

这里举一个例子,这里简单解释就是对于每一步在他进行下一步预测的时候他依据的不是上几层生成的预测值而是真实输入序列的输入值,为了解决这个问题让他生成下一层的时候依靠的是前面的预测值,如果不使用预测值使用这个真实值那这个预测结果之间关系就会差,依赖性就小,最终效果会差,另一个原因就是当进行测试的时候是不知道目标序列是什么,给到解码器的一开始就是一个标记。这里就恰好对上了。这样写不管是test还是train都是可以用这个方法去解决。解码那边实际上就是对已经解码出来的结果找到这个kv矩阵当中跟这个结果的下一个值关注的是什么,就这样子。最后生成结果。这就是一个大概流程。前馈神经网络,这个东西就是对特征的放大。他就是两个线性层一个激活函数组成加入非线性变换来增强这个模型的泛化学习能力。

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值