动手学深度学习03-线性神经网络

动手学深度学习pytorch

参考地址:https://zh.d2l.ai/

文章目录

  • 动手学深度学习pytorch
    • 1-第03章-线性神经网络
      • [1. 线性回归](#1. 线性回归)
        • [1.1 什么是线性回归?](#1.1 什么是线性回归?)
        • [1.2 如何表示线性回归的预测公式?](#1.2 如何表示线性回归的预测公式?)
      • [2. 损失函数](#2. 损失函数)
        • [2.1 什么是损失函数?](#2.1 什么是损失函数?)
        • [2.2 如何表示整个训练集的平均损失?](#2.2 如何表示整个训练集的平均损失?)
      • [3. 解析解](#3. 解析解)
        • [3.1 什么是解析解?](#3.1 什么是解析解?)
        • [3.2 解析解的局限性是什么?](#3.2 解析解的局限性是什么?)
      • [4. 小批量随机梯度下降(SGD)](#4. 小批量随机梯度下降(SGD))
        • [4.1 SGD一次更新步骤的伪代码?](#4.1 SGD一次更新步骤的伪代码?)
        • [4.2 超参数有哪些?](#4.2 超参数有哪些?)
      • [5. 从线性回归到单层神经网络](#5. 从线性回归到单层神经网络)
        • [5.1 如何把线性回归视为神经网络?](#5.1 如何把线性回归视为神经网络?)
        • [5.2 全连接层的定义?](#5.2 全连接层的定义?)
      • [6. Softmax 回归(多类分类)](#6. Softmax 回归(多类分类))
        • [6.1 什么是 Softmax 函数?](#6.1 什么是 Softmax 函数?)
        • [6.2 交叉熵损失如何定义?](#6.2 交叉熵损失如何定义?)
      • [7. 从零实现 vs 简洁实现(PyTorch)](#7. 从零实现 vs 简洁实现(PyTorch))
        • [7.1 从零实现的关键步骤?](#7.1 从零实现的关键步骤?)
        • [7.2 简洁实现用到的 PyTorch 高级 API?](#7.2 简洁实现用到的 PyTorch 高级 API?)
      • [8. 矢量化加速](#8. 矢量化加速)
        • [8.1 为什么矢量化重要?](#8.1 为什么矢量化重要?)
        • [8.2 示例:向量相加](#8.2 示例:向量相加)
      • [9. 信息论视角的交叉熵](#9. 信息论视角的交叉熵)
        • [9.1 熵 H(P) 的公式?](#9.1 熵 H(P) 的公式?)
        • [9.2 交叉熵 H(P,Q) 的公式?](#9.2 交叉熵 H(P,Q) 的公式?)
      • [10. Fashion-MNIST 数据集](#10. Fashion-MNIST 数据集)
        • [10.1 数据集规模?](#10.1 数据集规模?)
        • [10.2 如何用 PyTorch 加载?](#10.2 如何用 PyTorch 加载?)

1-第03章-线性神经网络

1. 线性回归

1.1 什么是线性回归?

线性回归(linear regression)是一种经典的统计学习方法,用于建立自变量 x 和因变量 y 之间的线性关系模型,即假设 y 可以表示为 x 中元素的加权和,再加上一个偏置项 b。

1.2 如何表示线性回归的预测公式?

对于单样本特征向量 x∈ℝᵈ,预测值 ŷ 的向量化公式为
y ^ = w ⊤ x + b \hat y = w^\top x + b y^=w⊤x+b

其中 w 为权重向量,b 为偏置标量。


2. 损失函数

2.1 什么是损失函数?

损失函数(loss function)用来量化模型预测值与真实值之间的差距。在线性回归中,最常用的损失函数是平方误差(均方误差):

l ( i ) ( w , b ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 l^{(i)}(w,b)=\frac12\bigl(\hat y^{(i)}-y^{(i)}\bigr)^2 l(i)(w,b)=21(y^(i)−y(i))2

2.2 如何表示整个训练集的平均损失?

L ( w , b ) = 1 n ∑ i = 1 n l ( i ) ( w , b ) = 1 2 n ∑ i = 1 n ( w ⊤ x ( i ) + b − y ( i ) ) 2 L(w,b)=\frac1n\sum_{i=1}^n l^{(i)}(w,b)=\frac1{2n}\sum_{i=1}^n\bigl(w^\top x^{(i)}+b-y^{(i)}\bigr)^2 L(w,b)=n1i=1∑nl(i)(w,b)=2n1i=1∑n(w⊤x(i)+b−y(i))2


3. 解析解

3.1 什么是解析解?

解析解(analytical solution)指通过数学公式一次性求得的参数最优值,无需迭代优化。

线性回归的解析解为
w ∗ = ( X ⊤ X ) − 1 X ⊤ y w^*=(X^\top X)^{-1}X^\top y w∗=(X⊤X)−1X⊤y

其中 X 为 n×d 的设计矩阵,y 为 n×1 的标签向量。

3.2 解析解的局限性是什么?

仅适用于能写成闭合形式的问题;对大规模数据或复杂模型(如深度网络)难以直接应用。


4. 小批量随机梯度下降(SGD)

4.1 SGD一次更新步骤的伪代码?
  1. 随机采样小批量 B(大小 |B|)。
  2. 计算平均梯度:
    g ← 1 ∣ B ∣ ∑ i ∈ B ∇ w , b   l ( i ) ( w , b ) g \leftarrow \frac1{|B|}\sum_{i\in B}\nabla_{w,b}\,l^{(i)}(w,b) g←∣B∣1i∈B∑∇w,bl(i)(w,b)
  3. 更新参数:
    w ← w − η   g w , b ← b − η   g b w \leftarrow w - \eta\,g_w,\quad b \leftarrow b - \eta\,g_b w←w−ηgw,b←b−ηgb
4.2 超参数有哪些?
  • 学习率 η
  • 批量大小 |B|(batch size)

5. 从线性回归到单层神经网络

5.1 如何把线性回归视为神经网络?

把输入视为输入层(d 个神经元),计算层为单个全连接(Dense)层,权重矩阵 W∈ℝ^{1×d},偏置 b∈ℝ,因此网络层数为 1。

5.2 全连接层的定义?

每个输入特征都与每个输出单元相连,计算为
o j = ∑ i x i w i j + b j o_j = \sum_i x_i w_{ij} + b_j oj=i∑xiwij+bj


6. Softmax 回归(多类分类)

6.1 什么是 Softmax 函数?

把未规范化的 logit 向量 o∈ℝ^q 映射为概率分布:

y ^ j = e o j ∑ k = 1 q e o k \hat y_j = \frac{e^{o_j}}{\sum_{k=1}^q e^{o_k}} y^j=∑k=1qeokeoj

保证 0 ≤ ŷ_j ≤ 1 且 Σ_j ŷ_j = 1。

6.2 交叉熵损失如何定义?

对于独热标签 y 和预测概率 ŷ:

l ( y , y ^ ) = − ∑ j = 1 q y j log ⁡ y ^ j l(y,\hat y)=-\sum_{j=1}^q y_j\log\hat y_j l(y,y^)=−j=1∑qyjlogy^j


7. 从零实现 vs 简洁实现(PyTorch)

7.1 从零实现的关键步骤?
  1. 生成/加载数据
  2. 初始化参数
  3. 定义模型 linreg(X,w,b)net(X)
  4. 定义损失 squared_loss / cross_entropy
  5. 定义优化器 sgd
  6. 循环 for epoch / for batch 训练
7.2 简洁实现用到的 PyTorch 高级 API?
  • nn.Sequential(nn.Linear(...)) 定义模型
  • nn.MSELoss() / nn.CrossEntropyLoss() 定义损失
  • torch.optim.SGD 定义优化器
  • data.DataLoader 构建高效数据迭代器

8. 矢量化加速

8.1 为什么矢量化重要?

利用 GPU/CPU 的并行矩阵运算,避免 Python for-loop,可带来数量级加速。

8.2 示例:向量相加
python 复制代码
# 慢
c = torch.zeros(n)
for i in range(n):
    c[i] = a[i] + b[i]

# 快
d = a + b

9. 信息论视角的交叉熵

9.1 熵 H§ 的公式?

H ( P ) = − ∑ j P ( j ) log ⁡ P ( j ) H(P)=-\sum_j P(j)\log P(j) H(P)=−j∑P(j)logP(j)

表示真实分布 P 的不确定性。

9.2 交叉熵 H(P,Q) 的公式?

H ( P , Q ) = − ∑ j P ( j ) log ⁡ Q ( j ) H(P,Q)=-\sum_j P(j)\log Q(j) H(P,Q)=−j∑P(j)logQ(j)

衡量用模型分布 Q 编码真实分布 P 所需的平均比特数。模型越准,H(P,Q) 越接近 H§。


10. Fashion-MNIST 数据集

10.1 数据集规模?
  • 训练集:60 000 张 28×28 灰度图
  • 测试集:10 000 张
  • 10 个类别:T-shirt、Trouser、Pullover、Dress、Coat、Sandal、Shirt、Sneaker、Bag、Ankle boot
10.2 如何用 PyTorch 加载?
python 复制代码
trans = transforms.ToTensor()
train_ds = torchvision.datasets.FashionMNIST(root='../data', train=True, transform=trans, download=True)
train_iter = torch.utils.data.DataLoader(train_ds, batch_size=256, shuffle=True)

相关推荐
W-GEO11 分钟前
GEO优化策略:AI搜索引擎的“动态响应”与GEO优化公司的实时优化能力
大数据·人工智能·chatgpt
GEO_JYB12 分钟前
2025生成式引擎优化(GEO)技术研究报告:技术演进、行业应用与服务商能力选择指南
人工智能·chatgpt
轻松Ai享生活13 分钟前
从0-1学CUDA | Week 3 – 内存层级 (Memory Hierarchy)
人工智能
秋秋棠19 分钟前
AI 应用开发:从 Prompt 工程到实战应用开发
java·人工智能
飞哥数智坊28 分钟前
AI编程实战:谁说AI改代码乱套?SOLO 20分钟补全图片上传功能
人工智能·trae·solo
前端双越老师29 分钟前
【干货】Nodejs + Deepseek 开发 MCP Server 和 Client 踩坑记录
人工智能·node.js·deepseek
生医转码,四海为家35 分钟前
零基础-动手学深度学习-13.1. 图像增广
人工智能·深度学习
Caaacy_YU1 小时前
多模态大模型研究每日简报【2025-08-25】
论文阅读·人工智能·深度学习·计算机视觉
大模型真好玩1 小时前
深入浅出LangChain AI Agent智能体开发教程(十)—LangChain搭建数据分析智能助手
人工智能·python·mcp
2202_756749693 小时前
自然处理语言NLP:One-Hot编码、TF-IDF、词向量、NLP特征输入、EmbeddingLayer实现、word2vec
人工智能·深度学习·自然语言处理·tf-idf·word2vec