Transformer实战:用Python手写Cross-Attention机制(附完整代码)

手写Transformer注意力机制:从QKV计算到梯度稳定实战 Transformer的注意力机制是现代大语言模型的核心组件,其本质是基于查询(Query)、键(Key)、值(Value)的相似性建模与加权聚合。理解其原理需深入缩放点积、位置编码、masking策略及梯度传播路径等关键技术环节。缩放因子√dₖ源于中心极限定理对点积方差的归一化需求,而位置编码则决定模型对绝对/相对位置的感知能力——sinusoidal编码提供外推保障,learnable embedding提升短序列收敛效率。在工程实践中,QKV权重初始化、dropout插入位置、attention ma 阅读详情

Transformer实战:用Python手写Cross-Attention机制(附完整代码)

当我们在处理序列数据时,如何让模型学会关注不同序列之间的相关性?Cross-Attention机制正是解决这一问题的关键。与Self-Attention不同,Cross-Attention允许一个序列(如翻译中的目标语言)动态关注另一个序列(如源语言)中的重要部分。这种机制在机器翻译、文本摘要等任务中表现出色。

本文将带你从零实现Cross-Attention的核心逻辑,通过PyTorch代码展示Q/K/V矩阵计算、注意力分数归一化等关键步骤。我们不仅会剖析数学原理,还会提供可直接运行的Colab示例,帮助你快速将这一技术应用到自己的NLP项目中。

1. Cross-Attention核心原理拆解

Cross-Attention的核心思想是建立两个不同序列之间的动态关联。想象你正在翻译一句话:当生成目标语言的每个词时,模型需要知道源语言中哪些部分最值得关注。这种"跨序列关注"正是Cross-Attention的魔力所在。

1.1 三个关键矩阵:Q, K, V

在Cross-Attention中,三个矩阵扮演着核心角色:

  • 查询矩阵(Query): 来自目标序列,表示"我想知道什么"
  • 键矩阵(Key): 来自源序列,表示"我能提供什么信息"
  • 值矩阵(Value): 来自源序列,包含实际的特征表示

它们的计算过程可以表示为:

Q = target_sequence @ W_q  # [batch_size, tgt_len, d_k]
K = source_sequence @ W_k  # [batch_size, src_len, d_k] 
V = source_sequence @ W_v  # [batch_size, src_len, d_v]

其中W_q, W_k, W_v是可学习的参数矩阵,d_k和d_v是维度大小。

1.2 注意力分数计算

模型通过计算Q和K的点积来评估目标序列每个位置与源序列所有位置的相关性:

scores = Q @ K.transpose(-2, -1) / sqrt(d_k)  # [batch_size, tgt_len, src_len]

这里除以√d_k是为了防止点积结果过大导致梯度消失问题。接着用softmax将分数转换为概率分布:

attn_weights = torch.softmax(scores, dim=-1)

1.3 加权求和输出

最后,用注意力权重对Value矩阵加权求和,得到融合了两个序列信息的输出:

output = attn_weights @ V  # [batch_size, tgt_len, d_v]

这个过程可以用一个简单的表格来总结:

步骤操作输入维度输出维度
QKV投影线性变换(batch, seq_len, d_model)(batch, seq_len, d_k/d_v)
分数计算QK^T/√d_k(batch, tgt_len, d_k), (batch, src_len, d_k)(batch, tgt_len, src_len)
权重归一化softmax(batch, tgt_len, src_len)(batch, tgt_len, src_len)
输出计算加权求和(batch, tgt_len, src_len), (batch, src_len, d_v)(batch, tgt_len, d_v)

2. PyTorch完整实现

现在让我们用PyTorch实现一个完整的Cross-Attention层。这个实现包含多头注意力机制,这是Transformer中的标准配置。

2.1 基础实现

import torch
import torch.nn as nn
import torch.nn.functional as F

class CrossAttention(nn.Module):
    def __init__(self, d_model, num_heads):
        super().__init__()
        assert d_model % num_heads == 0
        self.d_model = d_model
        self.num_heads = num_heads
        self.d_k = d_model // num_heads
        
        # 定义Q,K,V的投影矩阵
        self.W_q = nn.Linear(d_model, d_model)
        self.W_k = nn.Linear(d_model, d_model)
        self.W_v = nn.Linear(d_model, d_model)
        self.W_o = nn.Linear(d_model, d_model)
        
    def forward(self, query, key, value, mask=None):
        batch_size = query.size(0)
        
        # 1. 投影到Q,K,V空间
        Q = self.W_q(query)  # [batch_size, tgt_len, d_model]
        K = self.W_k(key)    # [batch_size, src_len, d_model]
        V = self.W_v(value)  # [batch_size, src_len, d_model]
        
        # 2. 分割多头
        Q = Q.view(batch_size, -1, self.num_heads, self.d_k).transpose(1, 2)
        K = K.view(batch_size, -1, self.num_heads, self.d_k).transpose(1, 2)
        V = V.view(batch_size, -1, self.num_heads, self.d_k).transpose(1, 2)
        
        # 3. 计算注意力分数
        scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(self.d_k, dtype=torch.float32))
        
        # 4. 应用mask(可选)
        if mask is not None:
            scores = scores.masked_fill(mask == 0, -1e9)
        
        # 5. softmax归一化
        attn_weights = F.softmax(scores, dim=-1)
        
        # 6. 加权求和
        output = torch.matmul(attn_weights, V)
        
        # 7. 合并多头
        output = output.transpose(1, 2).contiguous().view(batch_size, -1, self.d_model)
        
        # 8. 最终投影
        output = self.W_o(output)
        
        return output, attn_weights

2.2 使用示例

让我们看一个简单的使用例子,模拟机器翻译中的编码器-解码器交互:

# 假设编码器输出(源语言表示)
encoder_output = torch.randn(2, 10, 512)  # [batch_size, src_len, d_model]

# 解码器输入(目标语言表示)
decoder_input = torch.randn(2, 8, 512)    # [batch_size, tgt_len, d_model]

# 创建Cross-Attention层
cross_attn = CrossAttention(d_model=512, num_heads=8)

# 前向计算
output, attn_weights = cross_attn(
    query=decoder_input,  # Q来自解码器
    key=encoder_output,   # K来自编码器
    value=encoder_output  # V来自编码器
)

print(f"输出维度: {output.shape}")      # [2, 8, 512]
print(f"注意力权重维度: {attn_weights.shape}")  # [2, 8, 10, 10]

3. 注意力可视化技巧

理解模型关注什么是调试和解释模型行为的重要手段。下面我们实现一个简单的注意力可视化函数:

import matplotlib.pyplot as plt
import seaborn as sns

def plot_attention(attention_weights, source_tokens=None, target_tokens=None):
    """
    绘制注意力权重热力图
    :param attention_weights: [tgt_len, src_len]的注意力权重矩阵
    :param source_tokens: 源语言token列表(可选)
    :param target_tokens: 目标语言token列表(可选)
    """
    plt.figure(figsize=(10, 8))
    ax = sns.heatmap(attention_weights, cmap="YlGnBu")
    
    if source_tokens is not None:
        ax.set_xticks(range(len(source_tokens)))
        ax.set_xticklabels(source_tokens, rotation=45)
    
    if target_tokens is not None:
        ax.set_yticks(range(len(target_tokens)))
        ax.set_yticklabels(target_tokens, rotation=0)
    
    plt.xlabel("Source Sequence")
    plt.ylabel("Target Sequence")
    plt.title("Cross-Attention Weights")
    plt.show()

使用示例:

# 模拟的注意力权重(假设batch中第一个样本)
sample_attn = attn_weights[0].mean(dim=0)  # 平均多头注意力

# 模拟的token(实际使用时替换为真实token)
src_tokens = ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]
tgt_tokens = ["Le", "rapide", "renard", "marron", "saute", "par-dessus", "le", "chien"]

plot_attention(sample_attn.detach().numpy(), src_tokens, tgt_tokens)

这将生成一个热力图,显示目标语言每个词(纵轴)与源语言词(横轴)之间的注意力强度。

4. 性能优化技巧

在实际应用中,Cross-Attention可能会成为计算瓶颈,特别是处理长序列时。以下是几个优化建议:

4.1 内存高效的注意力计算

原始实现需要存储中间注意力矩阵(大小为batch×heads×tgt_len×src_len),对于长序列这会消耗大量内存。我们可以使用以下技巧:

# 内存高效的注意力计算
with torch.backends.cuda.sdp_kernel(enable_flash=True):
    output = F.scaled_dot_product_attention(
        Q, K, V, 
        attn_mask=mask,
        dropout_p=0.1 if self.training else 0
    )

提示:PyTorch 2.0+提供了优化的scaled_dot_product_attention实现,自动选择最快的可用内核(flash attention、memory-efficient attention等)。

4.2 关键参数选择

参数推荐值说明
d_model512-1024模型隐藏层维度
num_heads8-16注意力头数,通常d_model应能被num_heads整除
d_kd_model/num_heads每个头的维度,通常64-128
dropout0.1-0.3注意力权重dropout率,防止过拟合

4.3 批处理优化

当处理不同长度的序列时,使用pad_sequence和attention_mask:

from torch.nn.utils.rnn import pad_sequence

# 假设我们有不同长度的源序列
src_sequences = [torch.randn(5, 512), torch.randn(7, 512), torch.randn(4, 512)]
padded_src = pad_sequence(src_sequences, batch_first=True)  # [3, 7, 512]

# 创建attention mask
src_lengths = torch.tensor([5, 7, 4])
src_mask = torch.arange(padded_src.size(1))[None, :] < src_lengths[:, None]  # [3, 7]
src_mask = src_mask.unsqueeze(1).unsqueeze(2)  # [3, 1, 1, 7]

# 在计算注意力分数时应用mask
scores = scores.masked_fill(src_mask == 0, -1e9)

5. 实际应用案例

让我们看一个简化的机器翻译任务中如何使用Cross-Attention的例子。假设我们已经有了编码器和解码器的基本框架:

class TransformerDecoderLayer(nn.Module):
    def __init__(self, d_model, num_heads, ff_dim, dropout=0.1):
        super().__init__()
        self.self_attn = MultiHeadAttention(d_model, num_heads)  # 自注意力
        self.cross_attn = CrossAttention(d_model, num_heads)     # 交叉注意力
        self.ffn = nn.Sequential(
            nn.Linear(d_model, ff_dim),
            nn.ReLU(),
            nn.Linear(ff_dim, d_model)
        )
        self.norm1 = nn.LayerNorm(d_model)
        self.norm2 = nn.LayerNorm(d_model)
        self.norm3 = nn.LayerNorm(d_model)
        self.dropout = nn.Dropout(dropout)
        
    def forward(self, x, encoder_output, src_mask, tgt_mask):
        # 自注意力
        attn_output, _ = self.self_attn(x, x, x, tgt_mask)
        x = self.norm1(x + self.dropout(attn_output))
        
        # 交叉注意力
        cross_output, attn_weights = self.cross_attn(
            query=x,
            key=encoder_output,
            value=encoder_output,
            mask=src_mask
        )
        x = self.norm2(x + self.dropout(cross_output))
        
        # 前馈网络
        ffn_output = self.ffn(x)
        x = self.norm3(x + self.dropout(ffn_output))
        
        return x, attn_weights

在这个实现中,每个解码器层依次执行:

  1. 自注意力:关注已生成的目标序列部分
  2. 交叉注意力:关注编码器输出的源序列
  3. 前馈网络:进一步变换特征

实际训练时,我们会观察到随着模型学习,注意力权重会逐渐变得更加集中和有意义。例如在翻译任务中,模型会学会将目标语言的形容词与源语言对应的形容词对齐。

手写Transformer实战:从原理推演到工业级调试 Transformer是一种基于自注意力机制的序列建模架构,其核心在于Query-Key匹配、位置编码与残差归一化等可解释性组件。理解其内部张量流动、梯度路径与内存行为,是实现定制化训练、低延迟推理和稳定部署的前提。本文聚焦PyTorch底层实现细节,覆盖MultiHeadAttention的手动拆解、PositionalEncoding的数学本质、LayerNorm位置对梯度稳定性的影响,以及CUDA显存优化等高频工程问题。内容特别适配需应对法律文书摘要、长文本生成等真实业务场景的NLP工程师,强调‘可调 阅读详情

相关推荐

Transformer实战手记:从Self-Attention到可运行代码的全链路拆解

Transformer是一种基于自注意力机制的序列建模架构,其核心原理是通过Query-Key-Value计算实现任意位置间的直接依赖建模,摆脱RNN的时序串行瓶颈与CNN的感受野限制。技术价值在于高度并行化训练、长程依赖建模稳定、模块化设计易于扩展。广泛应用于机器翻译、文本生成、视觉识别(ViT)、语音识别(Speech Transformer)及代码理解等场景。本文聚焦实际工程落地,深入解析Scaled Dot-Product Attention、Multi-Head Attention、Positio

anque1234的博客 398

NYU-DLSP20 第 12 周笔记精讲:Attention 机制与 Transformer 架构从原理到 PyTorch 实现

本文基于 NYU Deep Learning Spring 2020([pytorch-Deep-Learning](https://link.gitcode.com/i/d28c122a1d0436722a03864a38505cfc))第 12 周第 3 讲([docs/ja/week12/12-3.md](https://link.gitcode.com/i/8166395b88b26958

gitblog_00067的博客 1197

从零手写AI核心算法:深入理解梯度下降、反向传播与Transformer实现

在人工智能和机器学习领域,理解底层原理是构建扎实技术能力的关键。从基础的线性代数、概率论出发,掌握矩阵运算、梯度下降等核心数学概念,是深入AI算法本质的第一步。这些基础原理支撑着现代深度学习中的关键技术,如反向传播算法和注意力机制,它们共同构成了模型训练和优化的理论基础。通过手写实现这些核心组件,开发者能够突破“调包侠”的局限,真正理解模型从数学公式到代码实现的完整链条。这种深度实践方法特别适用于希望夯实AI底层知识的开发者,能有效提升解决复杂问题的能力,并为学习Transformer等前沿架构打下坚实基础

weixin_30562507的博客 334

第15节——手搓Cross-Attention代码

【代码】第15节——手搓Cross-Attention代码。

qq_43037591的博客 810

TransGAN:纯Transformer架构的生成对抗网络原理与实战

生成对抗网络(GAN)是深度学习中图像生成的核心范式,其性能高度依赖特征提取器的归纳偏置。传统CNN-GAN虽效果稳定,但受限于局部感受野,难以建模长程空间关系;而纯Transformer生成模型则面临训练不稳定、小数据易坍塌等挑战。TransGAN提出一种结构对称的双Transformer设计——Generator与Discriminator均摒弃卷积,通过patch embedding、可学习位置编码、Pre-LN归一化及特征空间梯度惩罚等关键技术,在无局部先验前提下实现稳定对抗训练。该方案不仅验证了T

weixin_30800987的博客 405

从零手写AI:深入理解Transformer、反向传播与注意力机制

在人工智能领域,理解核心算法原理是构建扎实技术能力的基础。从数学公式推导到代码实现,掌握模型背后的运作机制,能有效解决实际工程中的调试与优化难题。反向传播作为深度学习的引擎,其梯度计算过程决定了模型的学习效率;而注意力机制则是Transformer架构的核心,它通过自注意力计算实现了对序列数据的高效建模。通过亲手实现这些基础组件,开发者能够深入理解自动微分、优化器工作方式以及模型架构设计,从而在自然语言处理、计算机视觉等应用场景中,具备更强的模型定制、问题定位和性能优化能力。本技术专栏聚焦于从零手写AI核心

weixin_30631587的博客 322

第14节——Cross-Attention(交叉注意力机制)

2.Decoder 生成 “喜欢”3.Decoder 生成 “机器”4.Decoder 生成 “学习”1.Decoder 生成 “我”

qq_43037591的博客 491

用PyTorch从零构建GPT:Transformer核心原理与实战

语言模型的核心任务可以归结为根据已知文本预测下一个词,而Transformer架构凭借自注意力机制彻底改变了序列建模方式,使并行计算和长距离依赖成为可能。GPT作为Transformer的Decoder分支,通过掩码自回归结构逐字生成文本,其知识背后是一系列张量运算与参数更新。理解从词元嵌入、位置编码到多头注意力、层归一化、残差连接及语言模型头等组件的原理,是深入大模型源码和自定义实验的关键。文章从基础概念出发,逐步拆解GPT内部结构,并结合工程实践展示如何用PyTorch搭建一个可在本地训练和推理的min

weixin_33938733的博客 379

从RNN到Attention:序列模型演进与Transformer核心机制解析

深度学习中的序列建模是自然语言处理的核心问题。循环神经网络(RNN)因其递归结构难以避免梯度消失,LSTM通过门控机制缓解了长距离遗忘,却仍受制于串行计算。注意力机制(Attention)用查询-键-值软性寻址取代固定向量传递,突破了信息瓶颈;自注意力(Self-Attention)进一步让每个位置直接关联全局,催生了并行高效的Transformer架构,成为大语言模型的基础。然而,O(n²)的计算复杂度催生了Flash Attention等工程优化,使长上下文推理成为可能。从RNN到Attention再到

weixin_33910759的博客 343

手写Transformer教程:从张量操作理解注意力机制与位置编码

Transformer是现代大语言模型的核心架构,其本质是基于自注意力机制的序列建模方法。该机制通过Query-Key-Value计算实现动态权重分配,而LayerNorm、残差连接与正弦位置编码共同保障训练稳定性与长程依赖建模能力。技术价值在于解耦模型结构与工程实现——例如√d_k缩放防止softmax饱和,10000.0在位置编码中控制波长分布,mask填充-1e9适配FP16数值精度。典型应用场景包括机器翻译、文本生成与代码补全;本文聚焦可调试的手写PyTorch实现,覆盖MultiHeadAtten

weixin_34377919的博客 416

CNN-Transformer混合模型实战:解决局部细节与全局语义割裂

卷积神经网络(CNN)擅长捕捉图像局部纹理与边缘,而Transformer依赖自注意力建模长程语义依赖——二者本质互补却存在结构性张力。理解其协同原理,关键在于把握‘局部归纳偏置’与‘全局关系建模’的技术平衡点。CNN-Transformer混合架构并非简单拼接,而是通过Patch Embedding对齐空间语义、Cross-Attention实现特征交互、分阶段训练缓解优化冲突,从而在医学影像分割、工业质检、遥感解译等需像素级定位+上下文判别双重能力的场景中显著提升精度与鲁棒性。本文聚焦可落地的工程实现路

weixin_34341229的博客 408

Transformer核心机制与工程实践:从Attention到大模型

在深度学习处理序列数据时,如何让模型关注关键信息并高效并行计算,一直是核心挑战。注意力机制(Attention)通过动态加权的方式让模型聚焦重要特征,但早期多依附于RNN框架。Transformer架构的提出,将自注意力(Self-Attention)作为唯一主力,打破了长距离依赖与并行瓶颈,成为BERT、GPT等大模型的基石。理解其QKV计算、多头设计、位置编码及训练中的关键参数,对于NLP及多模态任务落地至关重要。本文从工程实践视角,系统梳理Transformer的核心机制、PyTorch实现要点与常见

weixin_30516243的博客 704

STM32串口DMA双缓冲机制实战:提升数据传输效率的终极方案

本文深入解析了STM32串口DMA双缓冲机制的核心原理与实战配置。通过对比传统中断方式,阐述了双缓冲如何实现数据接收与处理的“无缝接力”,从而在工业传感器数据采集等高负载场景下,将CPU占用率降至极低水平并彻底避免数据丢失。文章提供了基于标准外设库的详细配置步骤、中断处理逻辑及性能实测数据,是提升嵌入式系统串口通信效率和可靠性的终极方案。

weixin_29192365的博客 74

从零理解Transformer:动画拆解Self-Attention与PyTorch实战

注意力机制是深度学习中的核心概念,它模拟了人类在处理信息时对不同部分的关注度分配。其基本原理是通过计算查询(Query)、键(Key)和值(Value)之间的相关性,动态地为序列中的每个元素分配权重,从而捕捉长距离依赖关系。这一机制的技术价值在于突破了传统循环神经网络(RNN)的序列处理瓶颈,实现了高效的并行计算,成为处理序列数据的强大工具。在自然语言处理(NLP)、计算机视觉和多模态学习等应用场景中,注意力机制已成为模型理解上下文的关键。本文以Transformer架构为载体,通过直观的动画演示和从零开始

weixin_34122810的博客 431

机器人学习-matlab四足机器人控制仿真

《机器人学,机器视觉与控制》学习笔记 使用工具箱版本9.10 题目与解决思路: 【1】. 通过减少复位期间的抬腿高度来缩短复位的轨迹 Z轴向下,为了减小复位器件的抬腿高度,应当缩小△Z,故可以将示例程序中zu值调大。 【2】. 增加腿的步幅 腿的步幅可由改变x方向上腿前进和后退运动的极限来达到,令xf = 7; xb = -xf;即可。 ...

weixin_44609769的博客 5532

记二开金蝶云星空动态表单艰辛历程

整个过程,开发接近一周,期间也有做其他事,遇到不会的第一时间也是找金蝶社区,搜索有无相关的解决问题经历。再就是问同事,最终还不能解决就提工单给供应商。响应一般都要大半天(我们公司是有vip,相对大半天能够响应是算好了),虽然有时候有响应,但是会转到其他研发老师,期间可能会是几天!如果是经常开发云星空的二开功能,熟练了速度回很快,但是对于接触不多的,或者刚入门的,会是个漫长的折磨过程。1、重新生产模块的dll.2、退出客户端3、重启iis4、等待五六分钟5、附加到进程6、登录客户端进去操作。

修炼中 3931

Transformer

想象一个专家委员会在分析一篇文章。

KerasCat的博客 368

ThingsBoard 3.1.1版本在window本地运行之TB-Gateway服务搭建(三)

TB-gateway服务是TB不可或缺的部分,很多的协议都需要TB-gateway来做分类处理,今天我们就来做TB-Gateway服务搭建。

晚点遇见你,余生都是你! 2466

超越传统方法:HVI-CIDNet的Lighten Cross-Attention模块如何突破性能瓶颈?

HVI-CIDNet是CVPR2025和NTIRE2025收录的低光图像增强技术,其创新的Lighten Cross-Attention(LCA)模块通过跨分支特征交互机制,解决了传统方法在色彩失真和噪声抑制方面的性能瓶颈。该技术基于全新的HVI颜色空间,实现了亮度与色彩信息的高效解耦与增强。 ## 传统低光增强技术的三大痛点 传统低光图像增强方法普遍面临三大挑战:色彩敏感度高导致的偏色问题、

gitblog_00044的博客 972

VIIRS-NPP夜间灯光遥感数据下载和预处理

右侧搜索框搜索“按掩膜提取”,提取出夜光影像中国区域。将其转换为Albers积投影和重采样到400m。点击右上角Export,选择shp格式。最后点export导出就行。点击复制按钮,来到这个。,ctrl + v粘贴。将小于0.3的值置为0。下载好月合成产品后,

热爱分享,热爱记录 1万+

【4. BSP开发指南 - [4.6. 安全启动使用说明]】

【4. BSP开发指南 - [4.6. 安全启动使用说明]】

Sugar_wolf的博客 267

从零用PyTorch手写LLM:Transformer、RoPE与因果语言建模实战

语言模型(LLM)的本质是基于token序列的自回归概率建模,其核心原理在于Transformer架构中的多头注意力机制、位置编码与前馈网络协同完成上下文感知的预测。技术价值体现在对计算图、内存布局和梯度流动的底层掌控力,支撑高效推理优化、KV Cache调试与训练稳定性提升。典型应用场景包括教学验证、轻量级领域适配及大模型原理研究。本文聚焦纯PyTorch实现路径,不依赖transformers库,完整覆盖SimpleTokenizer、Rotary Position Embedding(RoPE)、因果

weixin_34235457的博客 468

STM32芯片解锁读写保护:更改Option Byte [Error已解决]

解锁读保护:STLink更改Option Byte 变Level从1变为0,点击Apply即可。(程序执行读保护,其实是将Level从0变为1) 默认情况下该保护功能是不开启的,若要开启该功能,需要改写内部FLASH选项字节(Option Bytes)中的配置。 RDP读保护级别 级别0,无保护, 级别1,使能读保护, 这种保护下,若使用调试功能(使用下载器、仿真器)或者从内部SRAM自举时都不能对内部FLASH及备份SRAM作任何访问(读写、擦除都被禁止); 当芯片处于级别1的时候,可以把选项字节

HowieXue 薛永浩的博客 2万+

Attention Is All You Need论文精读与PyTorch从零复现Transformer

Self-Attention机制是Transformer架构的核心,通过Query、Key、Value计算序列内所有位置的关联权重,实现常数级操作和并行计算。其原理基于缩放点积注意力,除以√d_k防止softmax饱和,Multi-Head设计让模型在不同子空间捕捉语法与语义特征。技术价值在于彻底替代RNN和CNN,解决长距离依赖与并行化难题,成为GPT、LLaMA等大模型的底层骨架。应用场景覆盖机器翻译、文本生成、语言理解等序列建模任务。本文深入拆解论文公式与设计细节,并手把手用PyTorch实现可训练的

weixin_34354173的博客 396

保姆级教程!Python爬虫爬取知乎回答,保存为Markdown文件

本教程实现了知乎公开回答的完整爬取与Markdown保存,核心流程为「请求页面→解析作者/时间/正文/图片→下载图片→保存MD文件」,步骤清晰,代码可直接复用关键特性:支持合并/单文件两种保存模式、自动下载图片并引用、中文乱码防护、非法文件名过滤,满足日常整理知乎回答的需求新手友好:无需复杂配置,仅需修改知乎问题URL即可运行,全程无坑,5分钟内可看到运行结果灵活扩展:支持进阶优化(登录、分页、格式完善),可根据个人需求调整功能。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1230

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Transformer架构深度解析:从注意力机制到实战应用

注意力机制是深度学习的核心概念之一,它通过模拟人类认知过程中的聚焦能力,使神经网络能够动态地关注输入数据的不同部分。其原理基于查询、键和值的计算,通过Softmax函数将注意力权重分配给不同的输入元素,从而实现信息的有效整合。这一技术价值在于突破了传统序列模型(如RNN)在处理长距离依赖时的瓶颈,显著提升了模型在并行计算和全局信息捕捉方面的性能。在应用场景上,注意力机制已成为自然语言处理、计算机视觉和多模态任务的基础范式,尤其在Transformer架构中得到了充分体现。本文聚焦于Transformer模型

weixin_34292402的博客 487

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: LLC变换器实战:如何通过欠谐振状态优化ZVS和ZCS(附波形分析)
下一篇: Linux服务器性能调优:如何用numastat命令精准定位NUMA内存瓶颈
Star
博客等级 码龄27年 59粉丝 1216原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值