【深度学习】Self-Attention机制详解:Transformer的焦点引擎

[复制链接]
发表于 2025-10-9 23:30:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Self-Attention机制详解:Transformer的焦点引擎



弁言

在深度学习范畴,Transformer架构的出现彻底改变了天然语言处理处罚(NLP)的格局,而Self-Attention(自注意力)机制则是Transformer的焦点组件。本文将深入浅出地先容Self-Attention的原理、数学表达、实现方式以及应用场景,资助读者全面明白这一告急机制。
Self-Attention的根本概念

Self-Attention,顾名思义,是序列中的元素关注(attend to)序列中其他元素(包罗自身)的机制。与传统的RNN或CNN差别,Self-Attention答应模子直接创建序列中恣意位置元素之间的依赖关系,无需通过递归或卷积操纵徐徐通报信息。
为什么须要Self-Attention?

传统序列模子存在以下题目:


  • 循环神经网络RNN难以捕获长间隔依赖
  • 卷积神经网络CNN的感受野有限
  • 序列盘算难以并行化
Self-Attention正是为办理这些题目而生,它具有以下上风:


  • 可以直接建模长间隔依赖
  • 盘算复杂度相对可控
  • 高度可并行化
  • 具有良好的可表明性

作者本人以为,Self-Attention可以明白为一种更广义的卷积层(Conv),却又是一种特别的全毗连层(FC)。
作为广义的卷积层

  • 动态感受野:卷积层有固定的感受野(如3×3),而Self-Attention可以看作具有动态感受野的卷积,可以或许根据内容自顺应地关注整个序列中的任何位置。
  • 权重共享与差异:卷积层在差别位置共享雷同的权重,而Self-Attention的权重是根据输入内容动态天生的。
  • 全局信息获取:传统卷积须要叠加多层才气获取长间隔依赖,而Self-Attention一步就能捕获全局信息。

作为特别的全毗连层

  • 输入元素间的毗连:全毗连层毗连全部神经元,Self-Attention也毗连序列中的全部位置。
  • 权重天生方式:全毗连层的权重是固定学习的参数,而Self-Attention的权重是通过Query和Key的点积动态盘算的。
  • 参数服从:全毗连层参数量随输入巨细平方增长,而Self-Attention固然盘算复杂度是O(n²),但参数量与序列长度无关。
总结来说,Self-Attention确实兼具了卷积的局部处理处罚本领和全毗连层的全局毗连特性,但它通过动态天生权重的方式实现了更机动的表现学习,这也是Transformer架构乐成的关键因素之一。‘’

Self-Attention的数学原理

Self-Attention的焦点头脑是盘算序列中每个位置与全部位置的关联度,然后基于这些关联度举行加权求和。具体步调如下:
1. 盘算查询(Query)、键(Key)和值(Value)

对于输入序列中的每个元素,我们通过线性变更得到三个向量:


  • 查询向量(Query):                                    Q                         =                         X                                   W                            Q                                       Q = X W^Q                  Q=XWQ
  • 键向量(Key):                                    K                         =                         X                                   W                            K                                       K = X W^K                  K=XWK
  • 值向量(Value):                                    V                         =                         X                                   W                            V                                       V = X W^V                  V=XWV
此中,                              X                          X               X是输入序列,                                       W                         Q                                  W^Q               WQ、                                       W                         K                                  W^K               WK、                                       W                         V                                  W^V               WV是可学习的权重矩阵。
2. 盘算注意力分数

通过Query和Key的点积盘算注意力分数:
                               S                      =                      Q                               K                         T                                  S = Q K^T               S=QKT
3. 缩放并应用Softmax

为了稳固训练,对注意力分数举行缩放,然后应用Softmax函数:
                               A                      =                      softmax                      (                               S                                              d                               k                                                 )                          A = \text{softmax}(\frac{S}{\sqrt{d_k}})               A=softmax(dk​                   ​S​)
此中,                                       d                         k                                  d_k               dk​是Key向量的维度。
4. 加权求和

末了,用注意力权重对Value举行加权求和:
                               O                      =                      A                      V                          O = A V               O=AV
输出                              O                          O               O就是Self-Attention的效果。
多头注意力(Multi-Head Attention)

为了加强模子的表达本领,Transformer使用了多头注意力机制,即并行盘算多组差别的Self-Attention,然后将效果拼接起来:
                               MultiHead                      (                      Q                      ,                      K                      ,                      V                      )                      =                      Concat                      (                               head                         1                              ,                               head                         2                              ,                      .                      .                      .                      ,                               head                         h                              )                               W                         O                                  \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \text{head}_2, ..., \text{head}_h) W^O               MultiHead(Q,K,V)=Concat(head1​,head2​,...,headh​)WO
此中:
                                        head                         i                              =                      Attention                      (                      Q                               W                         i                         Q                              ,                      K                               W                         i                         K                              ,                      V                               W                         i                         V                              )                          \text{head}_i = \text{Attention}(Q W_i^Q, K W_i^K, V W_i^V)               headi​=Attention(QWiQ​,KWiK​,VWiV​)
多头注意力答应模子同时关注差别子空间的信息,加强了表达本领。
代码实现

下面是一个简化的PyTorch实现:
  1. import torch
  2. import torch.nn as nn
  3. import torch.nn.functional as F
  4. class SelfAttention(nn.Module):
  5.     def __init__(self, embed_size, heads):
  6.         super(SelfAttention, self).__init__()
  7.         self.embed_size = embed_size
  8.         self.heads = heads
  9.         self.head_dim = embed_size // heads
  10.         
  11.         assert (self.head_dim * heads == embed_size), "Embed size needs to be divisible by heads"
  12.         
  13.         self.values = nn.Linear(self.head_dim, self.head_dim, bias=False)
  14.         self.keys = nn.Linear(self.head_dim, self.head_dim, bias=False)
  15.         self.queries = nn.Linear(self.head_dim, self.head_dim, bias=False)
  16.         self.fc_out = nn.Linear(heads * self.head_dim, embed_size)
  17.    
  18.     def forward(self, values, keys, queries, mask=None):
  19.         N = queries.shape[0]
  20.         value_len, key_len, query_len = values.shape[1], keys.shape[1], queries.shape[1]
  21.         
  22.         # Split embedding into self.heads pieces
  23.         values = values.reshape(N, value_len, self.heads, self.head_dim)
  24.         keys = keys.reshape(N, key_len, self.heads, self.head_dim)
  25.         queries = queries.reshape(N, query_len, self.heads, self.head_dim)
  26.         
  27.         values = self.values(values)
  28.         keys = self.keys(keys)
  29.         queries = self.queries(queries)
  30.         
  31.         # Scaled dot-product attention
  32.         energy = torch.einsum("nqhd,nkhd->nhqk", [queries, keys])
  33.         
  34.         if mask is not None:
  35.             energy = energy.masked_fill(mask == 0, float("-1e20"))
  36.         
  37.         attention = torch.softmax(energy / (self.head_dim ** (1/2)), dim=3)
  38.         
  39.         out = torch.einsum("nhql,nlhd->nqhd", [attention, values]).reshape(
  40.             N, query_len, self.heads * self.head_dim
  41.         )
  42.         
  43.         out = self.fc_out(out)
  44.         return out
复制代码
Self-Attention的应用

Self-Attention机制已在多个范畴取得突破性渴望:
1. 天然语言处理处罚



  • 呆板翻译:Transformer模子
  • 语言模子:GPT系列、BERT等
  • 文本择要、问答体系等
2. 盘算机视觉



  • Vision Transformer (ViT)
  • DETR (DEtection TRansformer)
  • 图像天生:DALL-E、Stable Diffusion等
3. 多模态学习



  • CLIP (Contrastive Language-Image Pre-training)
  • 视频明白
  • 语音辨认
Self-Attention的范围性

只管功能强大,Self-Attention也存在一些范围:

  • 盘算复杂度:标准Self-Attention的盘算复杂度为O(n²),此中n是序列长度,这在处理处罚长序列时会成为瓶颈。
  • 位置信息缺失:Self-Attention本身不包罗位置信息,须要额外的位置编码。
  • 内存斲丧:对于长序列,注意力矩阵会占用大量内存。
改进方向

为办理上述题目,研究者提出了多种改进方案:

  • 希罕注意力:Sparse Transformer、Longformer等通过希罕化注意力矩阵低落盘算复杂度。
  • 线性注意力:Performer、Linear Transformer等将注意力盘算近似为线性复杂度。
  • 局部注意力:连合局部窗口和全局注意力,如Swin Transformer。、
P.S. 有一种Self-Attention的变体:Cross-Attention(交织注意力),可以参考我的这篇文章:Cross-Attention(交织注意力)机制详解与应用
结论

Self-Attention作为Transformer的焦点机制,彻底改变了深度学习模子处理处罚序列数据的方式。它不但在NLP范畴取得了巨大乐成,还徐徐扩展到盘算机视觉、多模态学习等多个范畴。随着研究的深入,Self-Attention的服从和实用性还将进一步提升,为人工智能的发展提供更强大的工具。
参考资料


  • Vaswani, A., et al. (2017). Attention is all you need. Advances in neural information processing systems.
  • Devlin, J., et al. (2018). BERT: Pre-training of deep bidirectional transformers for language understanding.
  • Dosovitskiy, A., et al. (2020). An image is worth 16x16 words: Transformers for image recognition at scale.

渴望这篇文章对您相识Self-Attention机制有所资助!如有题目,欢迎在品评区留言讨论。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表