神经网络学习-神经网络简介【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=1∑nwixi+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=η⋅xi⋅yj

二、常见网络结构

1. 多层感知机(MLP)

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

2. 卷积神经网络(CNN)

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

三、激活函数比较

函数 表达式 特点
Sigmoid 1 1 + e − x \frac{1}{1+e^{-x}} 1+e−x1 梯度消失,不适合深层网络
tanh e x − e − x e x + e − x \frac{e^x - e^{-x}}{e^x + e^{-x}} ex+e−xex−e−x 居中,仍有梯度消失
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 死亡问题
GELU Transformer 中常用 更平滑的激活函数

四、优化器对比

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

结构图:

左图Encoder和右图Decoder


六、PyTorch 实践模板

python 复制代码
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:你分得清吗?|代码+解析

💡 简要区分

项目 Transformer PyTorch
类型 模型架构(如 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

python 复制代码
import torch
import torch.nn as nn

class 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 nn

class 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 Attention
        attn_out, _ = self.attn(x, x, x)
        x = self.ln1(x + attn_out)
        # Feedforward
        ff_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

python 复制代码
import torch
import torch.nn as nn

class 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 Attention
        attn_out, _ = self.attn(x, x, x)
        x = self.ln1(x + attn_out)
        # Feedforward
        ff_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 小时前
读论文:STARS 是什么结构?一个统一的歌声自动标注框架
python
我命由我123452 小时前
复利极简理解
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
光测实验室3 小时前
3种Python降噪算法实测:我把处理速度提升了20倍
python
AOwhisky3 小时前
Python 学习笔记(第三期)——流程控制核心知识点自测与详解
开发语言·笔记·python·学习·云原生·运维开发·流程控制
tyqtyq223 小时前
药品说明书解读 —— AI 安全用药助手,鸿蒙原生应用深度解析
人工智能·学习·华为·生活·harmonyos
小心亦新4 小时前
STM32学习13 定时器1中断
stm32·嵌入式硬件·学习
花花无缺4 小时前
Windows 定时执行 Python 脚本方案
python·操作系统·命令行
我命由我123454 小时前
72 法则极简理解
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
qq_263_tohua5 小时前
第112期 CNN学习,不错的文章
学习
我想我不够好。5 小时前
满级的惩戒在范围
学习