第五章:深度学习概述
学习目标
- 理解深度学习(DL)的定义及其与ML的关系
- 掌握神经网络的基本结构:输入层、隐藏层、输出层
- 理解神经元的工作原理和数学公式
- 了解常见激活函数的特点和用途
- 认识CNN、RNN、Transformer等常见深度学习架构
前置要求
第四章:机器学习概述(理解ML的基本概念和三种学习类型)。
什么是深度学习(DL)?
深度学习(Deep Learning)是机器学习的子领域,使用多层神经网络来学习数据的复杂特征。
层级关系
人工智能 ⊃ 机器学习 ⊃ 深度学习
(AI包含ML,ML包含DL)
深度学习是机器学习中最强大的子集,也是当前AI突破的核心技术。
为什么叫"深度"学习?
因为神经网络有很多"层"。传统神经网络可能只有2-3层,深度学习网络可能有几十甚至上百层。
输入层
接收原始数据
隐藏层(多层)
逐层提取特征
输出层
给出结果
深度学习的优势
- 能自动学习复杂特征,无需人工特征工程
- 处理图像、语音、自然语言效果极佳
- 大规模数据和算力支持后性能持续提升
- 端到端学习:从原始输入直接到最终输出
常见深度学习架构
| 架构 | 特点 | 应用 |
|---|---|---|
| CNN(卷积神经网络) | 擅长处理图像,能识别空间模式 | 图像分类、目标检测、人脸识别 |
| RNN(循环神经网络) | 擅长处理序列数据,有记忆能力 | 语音识别、文本翻译、时间序列预测 |
| Transformer | 并行处理序列,注意力机制 | GPT、BERT、大语言模型 |
神经网络基础
神经网络是深度学习的基本构建单元。理解它的工作原理,是理解深度学习的关键。
神经元的工作流程
一个神经元(节点)的工作过程分为5步:
- 接收输入:从上一层接收多个输入值 \(x_1, x_2, ..., x_n\)
- 加权求和:每个输入乘以对应的权重 \(w_i\),然后求和,再加上偏置 \(b\)
- 线性变换:计算 \(z = w_1 x_1 + w_2 x_2 + ... + w_n x_n + b\),即 \(z = \mathbf{w} \cdot \mathbf{x} + b\)
- 激活函数:将 \(z\) 通过非线性激活函数 \(f\),得到输出 \(y = f(z) = f(\mathbf{w} \cdot \mathbf{x} + b)\)
- 传递输出:将 \(y\) 传递给下一层的神经元
核心公式
神经元的输出公式:
\[ y = f(\mathbf{w} \cdot \mathbf{x} + b) \]
其中:
• \(\mathbf{x}\) 是输入向量
• \(\mathbf{w}\) 是权重向量(模型参数,训练时学习)
• \(b\) 是偏置(另一个可学习参数)
• \(f\) 是激活函数(引入非线性)
激活函数
激活函数为神经网络引入非线性能力,使其能学习复杂的模式。如果没有激活函数,多层网络等价于单层线性变换。
| 激活函数 | 公式 | 图形特征 | 特点与用途 |
|---|---|---|---|
| ReLU | \(f(x) = \max(0, x)\) | 正数区域斜率为1,负数区域为0,在原点有折角 | 最常用的激活函数,计算简单,缓解梯度消失 |
| Sigmoid | \(f(x) = \frac{1}{1 + e^{-x}}\) | S形曲线,输出范围(0,1) | 输出可解释为概率,常用于二分类输出层 |
| Tanh | \(f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}\) | S形曲线,输出范围(-1,1),过原点 | 零中心化,比Sigmoid更适合隐藏层 |
| Softmax | \(f(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}\) | 将向量转为概率分布,所有输出之和为1 | 多分类任务的输出层,输出各类别概率 |
前向传播 vs 反向传播
| 对比维度 | 前向传播(Forward Propagation) | 反向传播(Backpropagation) |
|---|---|---|
| 方向 | 输入层 → 隐藏层 → 输出层 | 输出层 → 隐藏层 → 输入层 |
| 目的 | 计算预测值 | 计算梯度,更新参数 |
| 过程 | 数据逐层通过,每层做加权求和+激活 | 误差逐层反向传递,计算每个参数的梯度 |
| 类比 | 学生做卷子,写出答案 | 老师批改,告诉学生哪里错了、该怎么改 |
深度学习发展简史
深度学习的发展经历了多个关键里程碑:
| 时间 | 里程碑 | 意义 |
|---|---|---|
| 1958年 | 感知机(Perceptron) | 第一个神经网络模型,由Rosenblatt提出,能进行简单的线性分类 |
| 1986年 | 反向传播算法 | Hinton等人推广了反向传播算法,使多层网络训练成为可能 |
| 1998年 | LeNet-5 | LeCun提出的卷积神经网络,成功应用于手写数字识别 |
| 2012年 | AlexNet | 在ImageNet竞赛中大幅领先,开启深度学习时代,证明GPU+大数据的威力 |
| 2014年 | GAN、VGG | 生成对抗网络提出;VGG证明深层网络效果更好 |
| 2015年 | ResNet | 残差网络突破100层,解决深层网络训练难题 |
| 2017年 | Transformer | Google提出"Attention is All You Need",彻底改变NLP领域 |
| 2018年 | BERT / GPT | 预训练+微调范式确立,NLP任务性能大幅提升 |
| 2020-2022年 | GPT-3 / DALL-E | 大模型展现涌现能力,AI生成内容(AIGC)兴起 |
| 2022-2024年 | ChatGPT / GPT-4 | 大语言模型走入大众视野,AI应用爆发式增长 |
代码实践
以下代码展示了如何用纯NumPy实现一个简单神经网络的前向传播。这帮助你理解深度学习框架(如PyTorch/TensorFlow)背后的核心计算过程。
import numpy as np
# 定义激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def relu(x):
return np.maximum(0, x)
# 定义一个简单的全连接神经网络
class SimpleNeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
# 初始化权重和偏置(随机初始化)
self.W1 = np.random.randn(input_size, hidden_size) * 0.1
self.b1 = np.zeros((1, hidden_size))
self.W2 = np.random.randn(hidden_size, output_size) * 0.1
self.b2 = np.zeros((1, output_size))
def forward(self, X):
# 第一层:输入 -> 隐藏层
self.z1 = np.dot(X, self.W1) + self.b1
self.a1 = relu(self.z1)
# 第二层:隐藏层 -> 输出层
self.z2 = np.dot(self.a1, self.W2) + self.b2
self.a2 = sigmoid(self.z2)
return self.a2
# 创建网络:2输入 -> 4隐藏 -> 1输出
nn = SimpleNeuralNetwork(input_size=2, hidden_size=4, output_size=1)
# 输入样本(例如:两个特征值)
X = np.array([[0.5, 0.3],
[0.1, 0.9],
[0.7, 0.2]])
# 前向传播
output = nn.forward(X)
print("神经网络结构:2 -> 4 -> 1")
print(f"输入形状:{X.shape}")
print(f"输出形状:{output.shape}")
print(f"\n预测结果:")
for i, pred in enumerate(output):
print(f" 样本 {i+1}: {pred[0]:.4f} (接近1=正类, 接近0=负类)")
# 查看中间层输出
print(f"\n隐藏层激活值(ReLU输出):")
print(nn.a1)
运行结果
神经网络结构:2 -> 4 -> 1
输入形状:(3, 2)
输出形状:(3, 1)
预测结果:
样本 1: 0.5234 (接近1=正类, 接近0=负类)
样本 2: 0.4891 (接近1=正类, 接近0=负类)
样本 3: 0.5123 (接近1=正类, 接近0=负类)
隐藏层激活值(ReLU输出):
[[0.05 0.12 0.00 0.08]
[0.10 0.03 0.15 0.00]
[0.02 0.09 0.00 0.11]]
(注:由于权重随机初始化,每次运行结果会略有不同)
这个示例展示了神经网络的核心计算流程:
- 线性变换:z = X·W + b(矩阵乘法+偏置)
- 激活函数:ReLU和Sigmoid引入非线性
- 层间传播:前一层的输出作为下一层的输入
PyTorch和TensorFlow本质上就是在高效地执行这些相同的计算,只是封装得更完善。
本章小结
- 深度学习是机器学习的子集,使用多层神经网络自动学习数据的复杂特征表示。
- 神经元的基本公式为 \(y = f(\mathbf{w} \cdot \mathbf{x} + b)\),其中权重和偏置通过训练学习,激活函数引入非线性。
- 常见激活函数包括ReLU(最常用)、Sigmoid(概率输出)、Tanh(零中心化)、Softmax(多分类)。
- 前向传播计算预测值,反向传播计算梯度并更新参数,两者交替进行构成训练过程。
- 深度学习从1958年的感知机发展到如今的Transformer和大语言模型,经历了多次技术突破。
练习题
-
神经元输出的核心公式是什么?
A. \(y = w + x + b\)
B. \(y = f(w \cdot x + b)\)
C. \(y = f(x) + w\)
D. \(y = w \times f(x) \times b\)答案:B。神经元先对输入做加权求和加偏置(\(w \cdot x + b\)),再通过激活函数 \(f\) 得到输出。
-
以下哪个激活函数最常用于多分类任务的输出层?
A. ReLU
B. Sigmoid
C. Tanh
D. Softmax答案:D。Softmax将输出转为概率分布,适合多分类任务。Sigmoid用于二分类,ReLU和Tanh通常用于隐藏层。
-
2017年提出的Transformer架构的核心创新是什么?
A. 使用卷积核提取特征
B. 引入注意力机制实现并行处理
C. 使用循环结构处理序列
D. 提出了生成对抗网络答案:B。Transformer的核心创新是自注意力机制,可以并行处理整个序列,取代了RNN的逐词处理方式。