科普 | 哇哦!AI界也有“变形金刚”!

编者按

9e25691e8778aa6e25709e7cc2c00ce2.png

06b0b7df968f64461af11f4d2b5bff2e.png

82b500be7c7c00b433c72a24159b46b1.png

99e4030bc86864f5e9ef433b15c0d6b3.png

谈到Transformer,你或许会想起《变形金刚》里随意切换形态的炫酷汽车人。

其实,人工智能领域也有著名的Transformer,它在机器翻译任务上的表现异常出色。

2017年谷歌在arxiv发表了论文《Attention Is All You Need》,摒弃RNN和CNN等网络结构,而仅仅使用Attention机制来处理序列模型相关的问题,比如机器翻译。基于Attention的Transformer模型不但提高了翻译性能也提升了效率。因此,注意力机制和Transformer模型成为了大家近期的研究热点。

Attention机制和Transformer模型的优越性到底表现在哪里?

本文带你认识这位有超强“战斗力“的”“变形金刚”,看看它是如何高效处理NLP(Natural Language Processing)领域的任务。

fa1352346850dec83dc10f7b959820df.gif

6e3feda6316bba49a96cd4238853816b.png

Transformer是什么?

d2a9ab84b6b9850da60c7a777605b064.png

69d6431a500a43fef97fd84fe9785e65.gif

一句话来讲,就是完全利用Attention机制来解决自然语言翻译问题

当然这说了跟没说一样,Attention机制也许大家知道,但Attention何德何能,能干掉良好运行多年的RNN/LSTM呢?也许我们可以通过内窥Transformer的架构来解释这个问题。

7ea6c53a0d0bae4a457109057f26a7be.gif

79f34a5e9afd701ad44b8f9ab21fb5f3.png

1.Transformer的结构

96d5e73d7265b1053acdfd9fc96a5f21.png

4beea6ca5383870cf575a25e2e783c9f.gif

先来看结构,Transformer总体分为encoder和decoder部分,每块各有多个层。

22d16d61a23f46d8845c7dd81c2e18ab.png

encoder里的每层有self attention和feed forward两层。其中encoder输入是n个词向量,n是输入最长的句子里单词数量。

decoder的输出则是类似传统的seq2seq结构,是一个一个目标语言的单词。

824ac92fde65a5ceab933840a2a6b1c4.gif

431813abd80cdd4504436280528edcbe.png

2.Self Attention

a5c13798469c17fa6d043dc67b8b5747.png

a9c1da9cb9b7d586590cf53170c7f06e.gif‍‍

Self Attention究竟什么意思?

很简单,Self Attention假设:一个句子中每个单词的含义,都部分取决于该句子里其他词。

86675dcaff77e9fa653e43e95737ec09.png

这听着像是废话,但如果我们想用词向量来表示一个词,那很直观我们可以得出,一个句子中的一个词向量,他的计算是依赖于该句子的其他词向量的。

那具体怎么计算每个词向量呢?

这个计算过程就是Self Attention Encoding的目的,即,将句子中每个原始词向量按照Attention加权相加,求出新的词向量

b278d3bdaa634702ab784cee31b265e9.gif

b7a95a5acd7a7b0822f55f4ee0f3a695.png

3.Attention加权相加

122e991a8aaf8c0125a8826aca3e8a1e.png

738d1f8527ee9e48cbfa6e889140058a.gif

Attention加权相加又是什么意思?句子里每个词(包括目标词自己)都对目标词有一个Attention(这是个标量,即权重a),同时每个词都有自己的一个词向量表示(这个向量我们用V表示)。

每个V是靠着这个简单的word embedding过程得来的。那么每个a怎么来的?

因为这个a是表示当前Attention的词对目标词权重,那很直观的,这个a值应该只凭当前词和目标词关系算出来。

怎么算呢?我们假设目标词本身有个向量(即下图中的q),而句子中每个词有个专门用来算别的词的向量(即下图中的k),这俩都是word embedding得到的。

它俩(q和k)一乘,就得到当前词对目标词的权重a(即下图中的q x k,它是一个向量,不同的值对应不同颜色的竖线,蓝色表示整数,蓝色越深则值越大,橘色表示复数,颜色越深则值越小)。

ec06f1a2b108f79a07485cf6252b138b.png

得到了所有词对目标词的权重之后,还有个问题,这些权重加起来应该等于1。于是我们在权重计算之后套一个softmax,解决问题。

eddbc7b285fc8e3618512cace77a950b.gif

ca3fd65abdf25e1efcdf5f5312a77174.png

4.Multi-heading

4c926dfc42185f89a526ae3d22e40902.png

f1c01c8992e3690d45195efb95186ccf.gif

那什么是multi-heading?

multi-heading就是同样这个取新词向量Z的事儿,咱们干8遍,得到Z1 ~ Z8。

得到这8个值之后,将每个词的所有Z连在一起,粘成一个巨大的词向量。这个词向量作为后续feed forward层的输入。可以说是相当简单粗暴了。

11fb507605b01362bf28c99204422286.gif

a6a1768b9d80040608ace68a61587c18.png

5.Position Encoding

7ee4f258c1e42e1caaae8caa467ffebf.png

90a9b010e5b1d736d97a5d7ba8a7b80f.gif

咱们刚才聊了这么多,有个问题一直忽略了——这个模型只知道词和词之间的影响力,但它根本没考虑这些词的顺序。顺序多么重要,怎么可能不在考虑范围内!

Transformer解决的方法也是很直白,你不是不知道位置信息吗?

好,我给你每个词都加上一个位置信息。这就是Position Encoding!

cf39f853892a123836e99ba2f87d39f0.png

注意,这个加是在原有词向量上叠加一个同维度表示位置的向量,不是粘在后边。

这个位置向量怎么生成?

论文里写了算法,这里不展开,感兴趣同学可以去看。关于这个方法的直观理解是什么呢?文章里这句话有意思了,大家仔细读读:

The intuition here is that adding these values to the embeddings provides meaningful distances between the embedding vectors once they’re projected into Q/K/V vectors and during dot-product attention.

什么意思呢?

就是说原本在高维空间里,词向量之间都是以原点为起点的向量,现在通过这种方法,让词向量之间产生了距离。

也就是,一句话里的各个词向量通过这种方法,实际上组成了一个高维的像蛇一样的线段,而这条高维空间的“蛇”就表示这句话本身。

fdbfbb1173fbf155418bdf19c2b5dc65.png

是不是挺有创意的?

33cd992aeb05bcc40f40b5462a9b1fbc.png

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值