🎯 概述
Transformer是一种基于注意力机制的神经网络架构,由Vaswani等人在2017年提出,彻底改变了自然语言处理领域。
🏗️ 核心组件
1️⃣ 编码器-解码器架构
●编码器:将输入序列转换为隐藏表示
●解码器:基于编码器输出生成目标序列
2️⃣ 关键创新
●自注意力机制:并行处理序列,捕获长距离依赖
●位置编码:为模型提供序列位置信息
●残差连接:缓解深层网络训练问题
●层归一化:稳定训练过程
📋 架构详解
编码器结构
每个编码器层包含:
1多头自注意力:计算输入序列内部关系
2前馈神经网络:非线性变换
3残差连接和层归一化
解码器结构
每个解码器层包含:
1掩码多头自注意力:防止信息泄露
2编码器-解码器注意力:关注输入序列
3前馈神经网络
4残差连接和层归一化
🔍 数学原理
缩放点积注意力
Attention(Q,K,V)=softmax(dkQKT)V
多头注意力
MultiHead(Q,K,V)=Concat(head1,...,headh)WO
其中
headi=Attention(QWiQ,KWiK,VWiV)
🚀 代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import torch
import torch.nn as nn
class TransformerBlock(nn.Module):
def __init__(self, d_model, n_heads, d_ff, dropout=0.1):
super().__init__()
self.attention = nn.MultiheadAttention(d_model, n_heads)
self.feed_forward = nn.Sequential(
nn.Linear(d_model, d_ff),
nn.ReLU(),
nn.Linear(d_ff, d_model)
)
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
self.dropout = nn.Dropout(dropout)
def forward(self, x, mask=None):
# 自注意力 + 残差连接
attn_output, _ = self.attention(x, x, x, attn_mask=mask)
x = self.norm1(x + self.dropout(attn_output))
# 前馈网络 + 残差连接
ff_output = self.feed_forward(x)
x = self.norm2(x + self.dropout(ff_output))
return x
📚 深入阅读
●原始论文:Attention Is All You Need
●分词器详解
●注意力机制详解
🎯 面试重点
1为什么使用多头注意力?
2位置编码的作用是什么?
3残差连接和层归一化的作用?
4Transformer相比RNN的优势?
若有收获,就点个赞吧