机器之心从word2vec开始,说下GPT庞大的家族系谱( 三 )


An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the query with the corresponding key.
——Attention is all you need
这段话的意思就是说 , attention 机制里主要有三个向量 - key, query 和 value , 其实可以将 Attention 机制看作一种软寻址(Soft Addressing):Source 可以看作一个中药铺子的储物箱 , 储物箱里的药品由地址 Key(药品名)和值 Value(药品)组成 , 当前有个 Key=Query(药方)的查询 , 目的是取出储物箱里对应的 Value 值(药品) , 即 Attention 数值 。 通过 Query 和储物箱内元素 Key 的地址进行相似性比较来寻址 , 之所以说是软寻址 , 指的是我们不只从储物箱里面找出一中药物 , 而是可能从每个 Key 地址都会取出内容 , 取出内容的重要性(量的多少)根据 Query 和 Key 的相似性来决定 , 之后对 Value 进行加权求和 , 这样就可以取出最终的 Value 值(一副中药) , 也即 Attention 值 。 所以不少研究人员将 Attention 机制看作软寻址的一种特例 , 这也是非常有道理的[12] 。 只说理论没有细节就是耍流氓 , 所以下面看一下作为外包公司的 Attention 的甲方们到底是谁 。
RNN & LSTM
本节我们以机器翻译任务为例 , 以介绍甲方 RNN 提出的问题以及 Attention 给出的解决方案 。 首先看一下 RNN 原创的解决方案(图 4) 。
机器之心从word2vec开始,说下GPT庞大的家族系谱
本文插图
图 4:RNN 原始方案 (图源:[12])
在原始的方案中 , 待翻译的序列(X)的信息被总结在最后一个 hidden state(hm)中 , 身负重任(带着原始句子的所有信息)的 hm 最终被用来生成被翻译的语言(Y) , 这个方案的问题很明显 , h_3 的能力有限 , 当句子很长的时候 , 很容易丢失重要信息 。 问题提出来了 , Attention 给出了怎样的解决方案呢?
机器之心从word2vec开始,说下GPT庞大的家族系谱
本文插图
图 5:Attention 给出的最终方案 (图源:[13])
在正式介绍 Attention 给出的方案之前 , 还是简单回顾一下 Attention 的计算过程(这里提到的 Attention 在 Transformer 中被称为 Scaled Dot-Product Attention) 。
机器之心从word2vec开始,说下GPT庞大的家族系谱
本文插图
图 6:Attention 计算过程 (图源:[4])
如图 6 所示 , Q 和 K 首先会计算联系程度(这里用的是 dot-product) , 然后通过 scale 和 softmax 得到最后的 attention 值 , 这些 attention 值跟 V 相乘 , 然后得到最后的矩阵 。
回顾了 Attention 的计算过程后 , 图 5 所示的方案就好理解多了 , 它还是一个 encoder-decoder 结构 , 上半部分是 decoder , 下半部分是 encoder(双向 RNN) 。 开始的流程跟原始版本的 RNN 一样 , 首先 Encoder 获得了输入序列 X 的 hidden state (h) , 然后 docoder 就可以开始工作了 。 从这里开始 , docoder 的工作因为 Attention 的加入开始发生了变化 , 在生成 s_t 和 y_t 时 , decoder 要先利用 s_{t-1}和各个 hidden state 的联系度(利用加权点乘等方式获得)来获得 attention (a) , 这些 attention 最终作为权重对各个 h 进行加权求和从而得到背景向量 (context) , 后面就没什么变化了 , y_t 基于 s_{t-1}, y_{t-1} 和 context 来生成 。