【深度学习】注意力机制详细流程

文章介绍了自注意力机制的计算流程,包括使用Q、K、V矩阵进行变换并应用softmax函数。接着,详细阐述了多头自注意力机制,其中输入向量被分成多个head进行处理,每个head内部执行自注意力计算,最后将所有head的结果合并。这个过程允许模型并行处理信息,提高效率和表达能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自注意力机制

  • 计算公式

    \operatorname{Attention}(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right) V

  • 计算流程

  • 相关代码

    import torch
    
    a = torch.tensor([1, 2], dtype=torch.float)
    b = torch.tensor([1, 0], dtype=torch.float)
    c = torch.tensor([2, 1], dtype=torch.float)
    # input
    input_tensor = torch.stack((a, b, c), dim=0)
    
    w_q = torch.tensor([[1, 2], [0, 1]], dtype=torch.float)
    w_k = torch.tensor([[2, 1], [2, 0]], dtype=torch.float)
    w_v = torch.tensor([[1, 1], [0, 2]], dtype=torch.float)
    
    q = torch.matmul(input_tensor, w_q)
    k = torch.matmul(input_tensor, w_q)
    v = torch.matmul(input_tensor, w_q)
    
    # 自注意力公式
    # $$
    # \\operatorname{Attention}(Q, K, V)=\\operatorname{softmax}\\left(\\frac{Q K^T}{\\sqrt{d_k}}\\right) V
    # $$
    # output
    output_tensor = torch.softmax((q @ k.T) / 2 ** 0.5, dim=1) @ v
    print(output_tensor)
    

多头自注意力机制

  • 计算流程

    下图中为三个输入,分成两个head的情况,第一步根$W^q$,$W^k$,$W^v$求$q$、$k$、$v$跟自注意力机制中一致,不同处在于对于求取的$q$、$k$、$v$三个矩阵需要按照head个数均分后再组合,得到其中一个head结果$head_1^q$、$head_1^k$、$head_1^v$,在该head内部使用自注意力公式计算结果,由于这里给定的输入向量长度比较特殊,是一个1*2的向量,在head内部根据自注意力公式,softmax部分直接为1,其输出就是$head_1^v$。

    最后,根据划分的head个数,将每个head输出的结果进行组合,得到每个输入对应的输出结果。

    归纳一下,其计算步骤分为步。

    1. 根据$W^q$,$W^k$,$W^v$三个矩阵分别计算出$q$、$k$、$v$。
    2. 根据head个数对$q$、$k$、$v$进行均分操作。这里其实就算不能完全均分也是可以计算的。
    3. 将刚刚均分的结果以head为单位进行重新组合。
    4. 在每个head内使用自注意力公式,计算出每个head的结果。
    5. 根据head个数,将每个head计算结果进行重新组合,得倒每个输入对应的输出。

### 带有注意力机制的深度强化学习模型 在深度强化学习领域,引入注意力机制能够显著提升模型的表现力和可解释性。通过借鉴Squeeze-and-Excitation Networks的设计理念[^2],可以构建一种新型的深度强化学习框架,在该框架内实现更高效的特征提取与决策制定过程。 #### 注意力机制的作用原理 具体而言,注意力机制允许网络动态调整不同输入通道的重要性权重。这一特性对于处理复杂环境下的状态表示尤为重要。当应用于深度强化学习时,这种自适应加权策略有助于突出那些对当前任务至关重要的观测数据,从而提高算法的整体性能。 #### 结合SE-blocks改进Q-learning架构 为了更好地理解这一点,考虑将Squeeze-and-Excitation blocks融入到传统的基于Q函数的学习方法中去。这里的关键在于如何设计squeeze操作来汇总全局信息,并利用excitation阶段计算局部响应系数;最后再通过scale步骤施加这些系数于原始特征图之上。如此一来,不仅增强了原有结构的空间感知能力,同时也赋予了其更强的时间维度上的记忆功能。 ```python import torch.nn as nn class SEBlock(nn.Module): def __init__(self, channel, reduction=16): super(SEBlock, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.fc = nn.Sequential( nn.Linear(channel, channel // reduction), nn.ReLU(inplace=True), nn.Linear(channel // reduction, channel), nn.Sigmoid() ) def forward(self, x): b, c, _, _ = x.size() y = self.avg_pool(x).view(b, c) y = self.fc(y).view(b, c, 1, 1) return x * y.expand_as(x) # 将SEBlock集成至DQN或其他DRN变体之中... ``` #### 多样化探索策略促进泛化能力 值得注意的是,在多模态增强型学习(MMRL)[^3]的研究背景下,研究者们还发现采用多样化的专家组合方式同样能有效改善系统的稳定性和鲁棒性。这意味着除了单纯依赖内部注意力调节外,外部协作式的搜索路径亦值得深入探讨——即让多个独立运作却相互关联的小规模子网共同参与最终动作的选择流程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值