4. 注意力机制介绍_2
1. 注意力机制规则它需要三个指定的输入Q(query), K(key), V(value)然后通过计算公式得到注意力的结果这个结果代表 query在 key和 value作用下的注意力表示当输入的 QKV时称作自注意力计算规则当 Q、K、V不相等时称为一般注意力计算规则。1.1 常见的注意力计算规则常见的注意力计算规则计算公式有三种最常用的第三种第一种用得少第二种基本不用1️⃣ 将QK进行纵轴拼接,做一次线性变化再使用 softmax处理获得结果最后与 V做张量乘法即假设Q、k的纵轴都是4维则拼接后的纵轴是8维然后经过Linear目的是进行形状变换再经过Softmax得到一个注意力权重在乘以V得到注意力2️⃣ 将QK进行纵轴拼接做一次线性变化后再使用tanh函数激活然后再进行内部求和最后使用softmax处理获得结果再与V做张量乘法现将QK拼接在经过linear线性变化然后使用tanh激活函数在进行sum内部求和然后进行softmax最后乘以V。此种方式基本不用3️⃣ 将Q与K的转置做点积运算然后除以一个缩放系数,再使用softmax处理获得结果最后与V做张量乘法Q与K的转置即K相乘除以缩放系数(根号dk)dk即为词嵌入维度(词嵌入几维则dk几维)(括号内)原因是① 使其结果符合标准正太分布均值为0方差为1② 除以根号dk目的是防止梯度消失在经过softmax得到注意力权重最后乘以V得到Attention最常用1.2 Seq2Seq架构加入Attention在上述机器翻译架构中加入Attention的方式有两种1.2.1 第一种tensorflow版本(传统方式)上图翻译应用中的Q、K、V解释查询张量Q解码器上一时间步的隐藏层输出结果键张量K编码部分每个时间步的结果组合而成值张量V编码部分每个时间步的结果组合而成。有三部分Query、Key、Value若想在Seq2Seq架构或者说Encoder-Decoder架构中加入Attention要分别找到QKV图中由下往上最下部分是编码器、中间叫注意力也叫中间语义张量C(每一个时间步的C都不一样)、最上面是解码器。详细步骤“欢迎”“来”“北京”三个单词都要送入GRU模型然后得到三个隐藏层张量(假设都为图中的1行3列 3黑点)此时编码器任务结束假如目的是拿三个中文单词预测 ‘to’这个单词, Q是Decoder部分的红线箭头指向部分预测”to”时拿到上一时间步的隐藏层张量‘welcome’(右向箭头)中间绿色部分表示将红色部分的Q复制3次当第一个时间步“欢迎”的词向量(黑色三点)过来后认为是Key复制的Q和Key作用得到3个分数再分别进行Softmax归一化得到对应的权重权重分别再和对应的 V相乘再求和得到一个中间语义张量C(中间上面的三黑点)Q是来自解码器的上一层的隐藏层输出结果拿到Q‘welcome’的词向量 与 中间语义张量C进行拼接经过linear层再和上一时间步隐藏层的输出结果融合共同预测“to”在预测“北京”时要拿着前一个Q“to”和K运算得到中间语义张量C预测“welcome”拿的Q是“GO”一个初始化的张量h0每次预测时中间语义张量C都改变了。只要是做文本生成式任务分别给他一个开始、结束的说明1.2.2 第二种Pytorch版本(改进版)上图翻译应用中的Q、K、V解释查询张量Q解码器每一步的输出(预测结果)或者是当前输入的x键张量K解码器上一步的隐藏层输出值张量V编码部分每个时间步输出结果组合而成由下往上“欢迎”“来”“北京”3个词经过编码器得到3个隐藏层张量输出结果下部分三黑点但是一开始送到解码器中的GRU翻译’welcome‘时会有一个上一时间步隐藏层输出结果对于第一种传统方式在预测第一个值“welcome”时传入的是一个初始化的值GOh0但这里第二种方式把编码器最后一个单词“北京”这个词的隐藏层张量的输出结果它包含了整个编码器的语义直接送给解码器中的第一个时间步翻译出第一个单词“welcome”同时有一个当前时间步的隐藏层输出结果就是 k-Key(图中红点)、q-Query即为翻译出来的‘welcome’的词向量都是1行3列拼接得到 —》1行6列经过linear可以改变形状再次变成 1行3列中间score得到权重值再将权重值与原来的V每个时间步的隐藏层输出结果组合而成中间的 3*3部分相乘得到中间语义张量C 即为注意力。再将得到的中间语义张量C与 ‘welcome’拼接(向上箭头)经过linear再与上一时间步隐藏层输出结果q共同作用预测出单词‘to’q是上一时间步预测出的真实的结果 ‘Welcome’(向上output的)、k是上一时间步的隐藏层输出结果两者进行向量的拼接通过linear再经过softmax得到权重分数中间权重分数再分别乘以对应的V每个编码器中每个单词的隐藏层输出结果得到中间语义张量C再和‘welcome’拼接linear后得到当前时间步的真实输入加上上一时间步的隐藏层输出结果共同作用预测出单词‘to’这是第二种计算注意力的方式为什么k、q两者作用的这种方式有效因为上一时间步的隐藏层输出结果k包含了编码器中所有单词的信息预测第一个单词‘welcome’时如何得知那个单词的权重最大呢此时 q指的是GO第一个灰色块k是编码器过来的k两者作用第一种传统方式是点乘运算第二种是拼接运算2. 什么是深度神经网络注意力机制3. 注意力机制的作用4. 注意力机制实现步骤4.1 步骤4.2 代码实现5. 小结