资讯详情

什么是注意力机制

  • 注意力机制是深度学习网络的载体,可以应用于注意力计算规则, 同时一些必要的全连接层和相关张量处理, 与应用网络融为一体. 使用自注意力计算规则的注意力机制称为自注意力机制.

  • 说明: NLP领域中, 目前的注意机制大多用于seq2seq架构, 即编码器和解码器模型.

注意机制的作用

  • 解码器端注意机制: 编码器的输出结果可以根据模型目标有效聚焦, 作为解码器输入时,提高效果. 改进以往的编码器输出是单一的长张量, 不能存储太多的信息.
  • 编码器端的注意机制: 主要解决表征问题, 相当于特征提取过程, 输入的注意力表示. 一般采用自注意力(self-attention).

实现注意机制步骤

  • 第一步: 根据注意力计算规则, 对Q,K,V相应的计算.
  • 第二步: 根据第一步采用的计算方法, 如果是拼接方法,则需要拼接Q和第二步的计算结果, 若为转移点积, 一般是自注, Q与V相同, 不需要与Q拼接.
  • 第三步: 最后,让整个attention按指定尺寸输出机制, 在第二步结果中使用线性层进行线性变换, 得到Q的最终注意表示.

  • 代码分析常见的注意机制:
import torch import torch.nn as nn import torch.nn.functional as F  class Attn(nn.Module):     def __init__(self, query_size, key_size, value_size1, value_size2, output_size):         """初始化函数中有5个参数, query_size代表query最后一维大小            key_size代表key最后一维大小, value_size1代表value导数的二维大小,             value = (1, value_size1, value_size2)            value_size2代表value倒数第一维大小, output_size输出的最后一维尺寸"""         super(Attn, self).__init__()         # 将以下参数传入类别         self.query_size = query_size         self.key_size = key_size         self.value_size1 = value_size1         self.value_size2 = value_size2         self.output_size = output_size          # 初始化注意力机制在第一步实现所需的线性层.         self.attn = nn.Linear(self.query_size   self.key_size, value_size1)          # 实现第三步所需的线性层.         self.attn_combine = nn.Linear(self.query_size   value_size2, output_size)       def forward(self, Q, K, V):         """forward函数有三个输入参数, 分别是Q, K, V, 根据模型训练常识, 输入给Attion机制的            张量一般为三维张量, 所以这里也假设Q, K, V都是三维张量"""          # 第一步, 按计算规则计算,          # 我们使用常见的第一个计算规则         # 将Q,K纵轴拼接, 线性变化, 最后使用softmax处理结果         attn_weights = F.softmax(             self.attn(torch.cat((Q[0], K[0]), 1)), dim=1)          # 然后进行第一步的后半部分, 将获得的权重矩阵和V作为矩阵乘法计算,          # 当两者都是三维张量,第一维代表batch条数时, 则做bmm运算         attn_applied = torch.bmm(attn_weights.unsqueeze(0), V)          # 第二步之后, 取[0]用于降维, 根据第一步采用的计算方法,          # Q和第一步的计算结果需要拼接         output = torch.cat((Q[0], attn_applied[0]), 1)          # 最后是第三步, 在第三步的结果上使用线性层进行线性变换和扩展维度,以获得输出         # 因为要保证输出也是三维张量, 因此使用unsqueeze(0)扩展维度         output = self.attn_combine(output).unsqueeze(0)         return output, attn_weights 
  • 调用:
query_size = 32 key_size = 32 value_size1 = 32 value_size2 = 64 output_size = 64 attn = Attn(query_size, key_size, value_size1, value_size2, output_size) Q = torch.randn(1,1,32) K = torch.randn(1,1,32) V = torch.randn(1,32,64) out = attn(Q, K ,V) print(out[0]) print(out[1]) 

  • 输出效果:
tensor([[[ 0.4477, -0.0500, -0.2277, -0.3168, -0.4096, -0.5982,  0.1548,           -0.0771, -0.0951,  0.1833,  0.3128,  0.1260,  0.4420,  0.0495,           -0.7774, -0.0995,  0.2629,  0.4957,  1.0922,  0.1428,  0.3024,           -0.2646, -0.0265,  0.0632,  0.3951,  0.1583,  0.1130,  0.5500,           -0.1887, -0.2816, -0.3800, -0.5741,  0.1342,  0.0244, -0.2217,            0.1544,  0.1865, -0.2019,  0.4090, -0.4762,  0.3677, -0.2553,           -0.5199,  0.2290, -0.4407,  0.0663, -0.0182, -0.2168,  0.0913,           -0.2340,  0.1924, -0.3687,  0.1508,  0.3618, -0.0113,  0.2864,           -0.1929, -0.6821,  0.0951,  0.1335,  0.3560, -0.3215,  0.6461,            0.1532]]], grad_fn=<UnsqueezeBackward0>)   tensor([[0.0395, 0.0342, 0.0200, 0.0471, 0.0177, 0.0209, 0.0244, 0.0465, 0.0346,          0.0378, 0.0282, 0.0214, 0.0135, 0.0419, 0.0926, 0.0123, 0.0177, 0.0187,          0.0166, 0.0225, 0.0234, 0.0284, 0.0151, 0.0239, 0.0132, 0.0439, 0.0507,          0.0419, 0.0352, 0.0392, 0.0546, 0.0224]], grad_fn=<SoftmaxBackward>) 

  • 我们将在案例中详细了解和分析更多关注意力机制的应用.

小节总结

  • 注意力计算规则是什么?

    • 它需要三个指定的输入Q(query), K(key), V(value), 然后通过计算公式获得注意结果, 结果代表query在key和value作用下的注意力表达. 当输入的Q=K=V时, 称作自注意力计算规则.

  • 常见的注意力计算规则:

    • 将Q,K纵轴拼接, 线性变化, 再使用softmax处理结果最终与V进行张量乘法.
    • 将Q,K纵轴拼接, 线性变化后再使用tanh函数激活, 然后进行内部求和, 最后使用softmax处理结果,然后用V做张量乘法.
    • 将Q与K的转置做点积运算, 然后除以缩放系数, 再使用softmax处理结果最终与V进行张量乘法.

  • 什么是注意是什么?

    • 注意力机制是深度学习网络的载体,可以应用于注意力计算规则, 同时一些必要的全连接层和相关张量处理, 使其与应用网络融为一体. 自注意力计算规则的注意力机制称为自注意力机制.

  • 注意机制的作用:

    • 解码器端注意机制: 编码器的输出结果可以根据模型目标有效聚焦, 作为解码器输入时,提高效果. 改善以往编器输出是单一定长张量, 无法存储过多信息的情况.
    • 在编码器端的注意力机制: 主要解决表征问题, 相当于特征提取过程, 得到输入的注意力表示. 一般使用自注意力(self-attention).

  • 注意力机制实现步骤:

    • 第一步: 根据注意力计算规则, 对Q,K,V进行相应的计算.
    • 第二步: 根据第一步采用的计算方法, 如果是拼接方法,则需要将Q与第二步的计算结果再进行拼接, 如果是转置点积, 一般是自注意力, Q与V相同, 则不需要进行与Q的拼接.
    • 第三步: 最后为了使整个attention机制按照指定尺寸输出, 使用线性层作用在第二步的结果上做一个线性变换, 得到最终对Q的注意力表示.

  • 学习并实现了一种常见的注意力机制的类Attn.

标签: 2290连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台