当前位置: 首页 > 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])
http://www.xdnf.cn/news/948925.html

相关文章:

  • 盲盒一番赏小程序:引领盲盒新潮流
  • [免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • 分布式光纤声振传感技术原理与瑞利散射机制解析
  • 学习 Hooks【Plan - June - Week 2】
  • 华为云上的K8S怎么使用对象存储配置pod文件持久化。
  • Ubuntu 20.04 联网设置指南
  • python读取SQLite表个并生成pdf文件
  • mac 安装homebrew (nvm 及git)
  • 机器学习×第五卷:线性回归入门——她不再模仿,而开始试着理解你
  • 阿里云服务状态监控:实时掌握云服务健康状况
  • 八股文——JVM
  • LabVIEW超声频率跟踪
  • 积分商城小程序分销裂变系统框架设计
  • LLM - LlamaFactory 的大模型推理 踩坑记录
  • 算法思想之广度优先搜索(BFS)及示例(亲子游戏)
  • 云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
  • 安卓贝利自动点击器高级版下载安装教程
  • Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目
  • SSRF由浅入深
  • 【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
  • SAP Fiori UI5 开发环境搭建和部署(含增强开发)
  • 从零手写Java版本的LSM Tree (一):LSM Tree 概述
  • XXL-JOB——源码分析解读(2)
  • 什么是VR全景技术
  • 【JMeter】接口断言
  • 在WSL2的Ubuntu镜像中安装Docker
  • claude3.7高阶玩法,生成系统架构图,国内直接使用
  • CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?
  • Linux信号保存与处理机制详解
  • 自然语言处理——循环神经网络