欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 神经网络学习-神经网络简介【Transformer、pytorch、Attention介绍与区别】

神经网络学习-神经网络简介【Transformer、pytorch、Attention介绍与区别】

2025/6/14 15:43:02 来源:https://blog.csdn.net/Crabfishhhhh/article/details/148536492  浏览:    关键词:神经网络学习-神经网络简介【Transformer、pytorch、Attention介绍与区别】

神经网络学习笔记

本笔记总结了神经网络基础理论、常见模型结构、优化方法以及 PyTorch 实践,适用于初学者和进阶者查阅学习。


一、神经网络基础

1. 神经元模型

神经元通过输入加权求和后激活:

y = f ( ∑ i = 1 n w i x i + b ) y = f\left(\sum_{i=1}^{n} w_i x_i + b\right) y=f(i=1nwixi+b)

  • x i x_i xi:输入
  • w i w_i wi:权重
  • b b b:偏置
  • f f f:激活函数,如 ReLU、Sigmoid 等

2. Hebbian 学习规则

  • 原则:共同激活 → 增强连接
  • 表达式(无监督):
    Δ w i j = η ⋅ x i ⋅ y j \Delta w_{ij} = \eta \cdot x_i \cdot y_j Δwij=ηxiyj

二、常见网络结构

1. 多层感知机(MLP)

  • 构成:输入层 → 多个隐藏层 → 输出层
  • 特点:适用于结构化数据,学习能力强但对图像序列效果有限

2. 卷积神经网络(CNN)

  • 核心模块:
    • 卷积层:提取局部特征
    • 池化层:降维、去噪
    • 激活层:非线性(ReLU)
    • 全连接层:输出分类/回归结果
  • 适用场景:图像分类、目标检测、图像分割等

三、激活函数比较

函数表达式特点
Sigmoid 1 1 + e − x \frac{1}{1+e^{-x}} 1+ex1梯度消失,不适合深层网络
tanh e x − e − x e x + e − x \frac{e^x - e^{-x}}{e^x + e^{-x}} ex+exexex居中,仍有梯度消失
ReLU max ⁡ ( 0 , x ) \max(0, x) max(0,x)简单高效,主流选择
Leaky ReLU max ⁡ ( 0.01 x , x ) \max(0.01x, x) max(0.01x,x)缓解 ReLU 死亡问题
GELUTransformer 中常用更平滑的激活函数

四、优化器对比

优化器特点适用场景
SGD经典随机梯度下降,稳定但收敛慢小模型、调参精细
Momentum引入动量项,加速收敛深层网络
RMSProp自适应学习率,解决震荡问题RNN、时间序列等
Adam结合 Momentum 和 RMSProp推荐默认选择
AdamWAdam 改进版,分离权重衰减项Transformer 优选

五、注意力机制与 Transformer

1. 注意力机制(Attention)

核心思想:给不同位置分配不同权重,捕捉长距离依赖。

Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V

  • Q Q Q(Query)、 K K K(Key)、 V V V(Value)来自输入
  • 权重通过 Q K T QK^T QKT 的相似性计算获得

2. Transformer 架构

  • 自注意力机制(Self-Attention)支持并行计算
  • 组成模块:
    • 多头注意力(Multi-head Attention)
    • 残差连接 + 层归一化(Residual + LayerNorm)
    • 前馈神经网络(FFN)

结构图:
ransformer 的整体结构,左图Encoder和右图Decoder
左图Encoder和右图Decoder


六、PyTorch 实践模板

import torch
import torch.nn as nn
import torch.optim as optim# 简单 MLP 示例
class MLP(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(MLP, self).__init__()self.net = nn.Sequential(nn.Linear(input_size, hidden_size),nn.ReLU(),nn.Linear(hidden_size, output_size))def forward(self, x):return self.net(x)# 初始化模型、损失、优化器
model = MLP(100, 64, 10)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练过程示例
for epoch in range(10):outputs = model(inputs)loss = criterion(outputs, labels)optimizer.zero_grad()loss.backward()optimizer.step()

Transformer vs PyTorch:你分得清吗?|代码+解析

💡 简要区分

项目TransformerPyTorch
类型模型架构(如 BERT、GPT 的核心)深度学习框架(支持构建 Transformer)
功能处理序列建模,捕捉全局依赖关系提供构建、训练神经网络的工具链
角色关系是用 PyTorch(或 TensorFlow)实现的PyTorch 可以实现 Transformer
应用NLP、CV、多模态等领域的主力模型学术、工业界主流深度学习平台

Transformer 是什么?

Transformer 是 2017 年 Google 提出的神经网络架构,摒弃了 RNN/CNN,完全基于「注意力机制」,用于建模序列之间的关系。

架构结构:

  • 多头注意力机制(Multi-Head Attention)
  • 残差连接 + LayerNorm
  • 前馈网络(FFN)
  • 编码器(Encoder)和解码器(Decoder)

PyTorch 是什么?

PyTorch 是 Facebook 开发的深度学习框架,支持:

  • 自动微分(autograd)
  • 自定义网络结构(通过 nn.Module
  • GPU 加速
  • 动态计算图

代码对比:PyTorch 实现 MLP vs Transformer Block

示例 1:用 PyTorch 写个简单的 MLP

import torch
import torch.nn as nnclass SimpleMLP(nn.Module):def __init__(self):super().__init__()self.net = nn.Sequential(nn.Linear(100, 64),nn.ReLU(),nn.Linear(64, 10))def forward(self, x):return self.net(x)x = torch.randn(16, 100)
model = SimpleMLP()
out = model(x)
print(out.shape)  # torch.Size([16, 10])import torch
import torch.nn as nnclass TransformerBlock(nn.Module):def __init__(self, embed_dim, heads, ff_hidden):super().__init__()self.attn = nn.MultiheadAttention(embed_dim, heads, batch_first=True)self.ln1 = nn.LayerNorm(embed_dim)self.ff = nn.Sequential(nn.Linear(embed_dim, ff_hidden),nn.ReLU(),nn.Linear(ff_hidden, embed_dim))self.ln2 = nn.LayerNorm(embed_dim)def forward(self, x):# Multi-Head Attentionattn_out, _ = self.attn(x, x, x)x = self.ln1(x + attn_out)# Feedforwardff_out = self.ff(x)x = self.ln2(x + ff_out)return x# 示例输入
x = torch.randn(16, 50, 128)  # batch_size=16, seq_len=50, embedding_dim=128
block = TransformerBlock(embed_dim=128, heads=4, ff_hidden=256)
out = block(x)
print(out.shape)  # torch.Size([16, 50, 128])

示例 2:用 PyTorch 写一个简化版 Transformer Block

import torch
import torch.nn as nnclass TransformerBlock(nn.Module):def __init__(self, embed_dim, heads, ff_hidden):super().__init__()self.attn = nn.MultiheadAttention(embed_dim, heads, batch_first=True)self.ln1 = nn.LayerNorm(embed_dim)self.ff = nn.Sequential(nn.Linear(embed_dim, ff_hidden),nn.ReLU(),nn.Linear(ff_hidden, embed_dim))self.ln2 = nn.LayerNorm(embed_dim)def forward(self, x):# Multi-Head Attentionattn_out, _ = self.attn(x, x, x)x = self.ln1(x + attn_out)# Feedforwardff_out = self.ff(x)x = self.ln2(x + ff_out)return x# 示例输入
x = torch.randn(16, 50, 128)  # batch_size=16, seq_len=50, embedding_dim=128
block = TransformerBlock(embed_dim=128, heads=4, ff_hidden=256)
out = block(x)
print(out.shape)  # torch.Size([16, 50, 128])

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词