当前位置: 首页 > news >正文

神经网络学习-神经网络简介【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])

相关文章:

  • pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
  • 网页后端开发(基础1--maven)
  • 初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)
  • 如何在 PyTorch 中自定义卷积核参数(亲测,已解决)
  • [免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • 设计模式-抽象工厂模式
  • C/Python/Go示例 | Socket Programing与RPC
  • 云原生时代的系统设计:架构转型的战略支点
  • GO语言---init函数
  • Go 语言底层(四) : 深入 Context 上下文
  • 鸿蒙 Stege模型 多模块应用
  • GO 基础语法和数据类型面试题及参考答案(下)
  • 解密鸿蒙系统的隐私护城河:从权限动态管控到生物数据加密的全链路防护
  • FreeRTOS任务基础知识
  • VLLM : RuntimeError: NCCL error: invalid usage
  • RT_Thread——线程管理(下)
  • 高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。
  • window 显示驱动开发-如何查询视频处理功能(三)
  • 从零手写Java版本的LSM Tree (八):LSM Tree 主程序实现
  • 华为云Flexus+DeepSeek征文 | MaaS平台避坑指南:DeepSeek商用服务开通与成本控制
  • 网站开发语言统计/百度官方入口
  • 佛山最好的网站建设/百度网站收录提交入口
  • html网站更新/重庆seo顾问服务
  • 找网站建设客户/常用的网络推广手段有哪些
  • 高端网站建设 j磐石网络/seo哪家公司好
  • 做网站排名赚钱吗/电商运营培训班多少钱