机器之心从word2vec开始,说下GPT庞大的家族系谱( 五 )
还是用机器翻译做例子 , 假设要从英语 (knowledge is powerful) 翻译成中文(知识就是力量) , 在前文中没有 self-attention 的方案中 , Knowledge is powerful 首先被转化为 hidden state , 这些 hidden state 作为 key 和 value , query 则来源于 decoder 中的 s 。 加入了 self-attention 后 , hidden state 就不需要学了 , query 直接来源于 Knowledge is powerful , 最终 self-attention 得到的东西其实可以类比于图 5 方案中 RNN 中的 hidden state , 也就是说 self-attention 仅仅使用 attention 完成了 RNN 的做的事情 。
本文插图
图 7:self-attention 可视化(图源:http://jalammar.github.io/illustrated-transformer/)
图 7 可视化了某一层的 self-attention 的结果 , Attention 值都是相对于这个句子本身的(包括这个词本身) , 这个图很生动的表现了 self 的含义 。 同时我们可以看到相较于传统的时间序列模型 , self-attention 的优势还是很明显的——可以很好地注意到该注意的部分 , 不会受文章长度的影响 。 原论文 [4] 中的第四章有具体的抛掉外力之后的好处(总不能只是为了自立门户而自立门户 , 自立门户的时候一定是有自己的优势的) , 但是这里的原因与主线关系不太大 , 这里就不做搬运工了 。
总的来说 , self-attention 的引入让 Attention 机制与 CNN、RNN 等网络具有了一样的地位(都开了公司) , 但是可以看到的是 , 这样做的限制还是很大的 , 所以 Transformer 的儿子们几乎都没有完整的引入 Transformer , 都是有选择的保留一部分 。
Self-attention 计算细节
但是 , 对于 self-attention 理解在后面理解这些兄弟们企业核心的区别很重要 , 所以这里我们占用篇幅搬运一个具体的计算例子(来自 Jalammar 的多篇文章 , 如果已经理解了可以跳过):第一步 , 先是通过 X_i 和各个 W(可训练的权重矩阵)的相乘得到 query, key 和 value 矩阵(如图 8 所示):
本文插图
图 8:self-attention 原始矩阵(图源:http://jalammar.github.io/illustrated-transformer/)
然后就是按照图 9 所示的步骤一步一步先计算 score , 再 normalize(divide 那一步) , 最后用 softmax 得到 attention score , 然后用这个 attetion 作为权重求 v1 和 v2 的加权和 , 就得到最终的 self-attention 在这个位置(thinking 这个词)的输出值了 。
本文插图
图 9:self-attention 计算流程(图源:http://jalammar.github.io/illustrated-transformer/)
图 10 是一个具体的 self-attention 的例子 , 可以看到 it 这个词对自己的 attention 其实很小 , 更多的注意力放在了 a robot 上 , 因为 it 本身没有意思 , 它主要是指代前面的 a robot 。 所以一个词的 query 和 key 是不同的(相同的话相似度肯定是最大的 , 这样百分百的注意力都在自己身上) , 在做计算的时候是一视同仁的 , 虽然都是来自于 it 这个词 , 但是这里 it 的 key 告诉我们的信息就是它并不重要 。
本文插图
图 10:self-attention 矩阵细节(图源:http://jalammar.github.io/)
绝不微不足道的区别
前面介绍了那么多 , 甚至贴上了论文的原文 , 一个很重要的目的是为了强调 self-attention 层在 encoder 和 decoder 中是不一样的!encoder 在做 self-attention 的时候可以“attend to all positions” , 而 decoder 只能“attend to all positions in the decoder up to and including that position”(划重点 , 涉及到 BERT 和 GPT 的一个重要区别) 。 简单来说 , 就是 decoder 跟过去的 Language model 一样 , 只能看到前面的信息 , 但是 encoder 可以看到完整的信息(双向信息) 。 具体细节在介绍到 BERT 和 GPT 的时候会详细介绍 。
- 狼|日本居民区摆出红眼机器“魔鬼狼”,为防熊出没
- 葡萄|到底要不要去葡萄皮?果酒机器:酿葡萄酒
- 穿越火线|CF:除2018圣诞和水晶之心,这些稀有的尼泊尔军刀期待也能送永久!
- 机器之心旷视物流,一个AI独角兽的B面
- 人工智能领军企业达观数据推出新一代RPA智能办公机器人集群
- 当人工智能遇上服务机器人 机器人被赋予了人类的“灵魂”
- 王国之心|switch游戏日报:怪猎崛起新情报!NS版王国之心有望了?
- 智能机器人和机器人对战乒乓球,你玩过吗?要不来试试?
- 海外网|为防熊出没,日本居民区摆出红眼机器“魔鬼狼”[图]
- 读芯术七个关键因素:如何选择出最佳机器学习算法?