机器学习、深度学习与神经网络的概念解析
最近几年,人工智能(AI)、机器学习(Machine Learning)和深度学习(Deep Learning)成为了技术圈最热门的话题。从 Google DeepMind 的 AlphaGo 战胜围棋大师李世乭,到各种智能应用的普及,这些概念频繁出现在媒体和日常讨论中。但很多人并不清楚它们之间的区别和联系。
人工智能、机器学习与深度学习的关系
用一个简单的同心圆来描述三者的关系:
┌─────────────────────────────────┐
│ │
│ 人工智能 (AI) │
│ ┌─────────────────────────┐ │
│ │ │ │
│ │ 机器学习 (ML) │ │
│ │ ┌──────────────────┐ │ │
│ │ │ │ │ │
│ │ │ 深度学习 (DL) │ │ │
│ │ │ │ │ │
│ │ └──────────────────┘ │ │
│ │ │ │
│ └─────────────────────────┘ │
│ │
└─────────────────────────────────┘
人工智能是最早出现的,也是涵盖范围最广的概念;机器学习是人工智能的子集;深度学习则是机器学习的进一步细分,是当前 AI 技术爆发的核心驱动力。
基本概念解析
神经网络
神经网络模型的灵感来自动物的中枢神经系统,通常呈现为相互连接的”神经元”。它通过对输入值的反馈机制来适应对应的输出。人工神经网络具有离散的层、连接和数据传播的方向,每个神经元都为输入分配权重,最终的输出由这些权重加总决定。
神经网络基本结构
┌─────────────────────────────────────────────────────────┐
│ 神经网络基本架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ 输入层 隐藏层 输出层 │
│ ┌───┐ ┌───────────────────┐ ┌─────┐ │
│ │ x₁├─────→│ ┌───┬───┬───┐ │───→│ ŷ │ │
│ ├───┤ │ │w₁ │w₂ │w₃ │ │ └─────┘ │
│ │ x₂├─────→│ ├───┼───┼───┤ │ │
│ ├───┤ │ │ │ │ │ │ 激活函数 │
│ │ x₃├─────→│ └───┴───┴───┘ │ (Sigmoid/ReLU) │
│ └───┘ └───────────────────┘ │
│ │ │ │ │
│ └────────────┴───────┴───→ 损失函数 (Loss) │
│ ↓ │
│ 反向传播 (Backprop) │
│ ↓ │
│ 权重更新 (Weight Update) │
│ │
└─────────────────────────────────────────────────────────┘
核心组成要素:
| 组成部分 | 功能 | 常见选择 |
|---|---|---|
| 输入层 | 接收原始数据 | 特征向量、图像像素、文本编码 |
| 隐藏层 | 特征提取与变换 | 全连接层、卷积层、循环层 |
| 输出层 | 生成预测结果 | Softmax(分类)、Linear(回归) |
| 激活函数 | 引入非线性 | ReLU、Sigmoid、Tanh、Leaky ReLU |
| 损失函数 | 衡量预测误差 | MSE(回归)、Cross-Entropy(分类) |
| 优化器 | 更新网络权重 | SGD、Adam、RMSprop |
前向传播与反向传播
# 伪代码:神经网络训练过程
# 前向传播 (Forward Propagation)
def forward_propagation(X, weights, biases):
"""
X: 输入数据
weights: 各层权重矩阵
biases: 各层偏置
"""
# 输入层 → 第一隐藏层
z1 = np.dot(X, weights['W1']) + biases['b1']
a1 = relu(z1) # ReLU 激活函数
# 第一隐藏层 → 第二隐藏层
z2 = np.dot(a1, weights['W2']) + biases['b2']
a2 = relu(z2)
# 第二隐藏层 → 输出层
z3 = np.dot(a2, weights['W3']) + biases['b3']
output = softmax(z3) # Softmax 用于多分类
return output, (z1, a1, z2, a2, z3)
# 反向传播 (Backward Propagation)
def backward_propagation(X, y, output, cache, weights):
"""
计算梯度并更新权重
"""
m = X.shape[0] # 样本数量
# 输出层误差
dz3 = output - y
dW3 = (1/m) * np.dot(cache['a2'].T, dz3)
db3 = (1/m) * np.sum(dz3, axis=0)
# 第二隐藏层误差
da2 = np.dot(dz3, weights['W3'].T)
dz2 = da2 * relu_derivative(cache['z2'])
dW2 = (1/m) * np.dot(cache['a1'].T, dz2)
db2 = (1/m) * np.sum(dz2, axis=0)
# 第一隐藏层误差
da1 = np.dot(dz2, weights['W2'].T)
dz1 = da1 * relu_derivative(cache['z1'])
dW1 = (1/m) * np.dot(X.T, dz1)
db1 = (1/m) * np.sum(dz1, axis=0)
gradients = {'dW1': dW1, 'db1': db1, 'dW2': dW2, 'db2': db2, 'dW3': dW3, 'db3': db3}
return gradients
深度学习
深度学习是神经网络的进阶版,基本思路与神经网络类似,但往往有着更复杂的结构和优化算法,是神经网络的纵向延伸。所谓的”深度”指的就是神经网络中众多的层数。
常见深度学习模型架构
| 模型类型 | 全称 | 适用场景 | 核心特点 |
|---|---|---|---|
| DNN | Deep Neural Network | 结构化数据分类/回归 | 全连接层,基础深度网络 |
| CNN | Convolutional Neural Network | 图像处理、计算机视觉 | 卷积层、池化层、空间特征提取 |
| RNN | Recurrent Neural Network | 序列数据、时间序列 | 循环连接、记忆功能 |
| LSTM | Long Short-Term Memory | 长序列建模 | 门控机制、解决梯度消失 |
| GRU | Gated Recurrent Unit | 序列建模 | LSTM 的简化版本 |
| Transformer | - | NLP、注意力机制 | 自注意力机制、并行计算 |
CNN 架构详解
┌─────────────────────────────────────────────────────────────┐
│ CNN 卷积神经网络架构 (以 LeNet 为例) │
├─────────────────────────────────────────────────────────────┤
│ │
│ 输入图像 (32×32×3) │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Conv2D + ReLU │ 卷积层:提取局部特征 │
│ │ (32 filters) │ 参数:filter数量、kernel大小、步长 │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ MaxPooling2D │ 池化层:降维、减少计算量 │
│ │ (2×2) │ 参数:pool大小、步长 │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Conv2D + ReLU │ → │ MaxPooling2D │ (重复多次) │
│ │ (64 filters) │ │ (2×2) │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ └──────────┬───────────┘ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ Flatten │ 展平:多维 → 一维 │
│ └────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ Dense (ReLU) │ 全连接层:特征整合 │
│ └────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ Dense (Softmax) │ 输出层:分类概率 │
│ └──────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
卷积运算原理:
输入图像 (5×5) 卷积核 (3×3) 特征图 (3×3)
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┐
│ 1 │ 2 │ 3 │ 4 │ 5 │ │ 1 │ 0 │-1 │ │ ? │ ? │ ? │
├───┼───┼───┼───┼───┤ ├───┼───┼───┤ ├───┼───┼───┤
│ 2 │ 3 │ 4 │ 5 │ 6 │ │ 1 │ 0 │-1 │ │ ? │ ? │ ? │
├───┼───┼───┼───┼───┤ └───┴───┴───┘ ├───┼───┼───┤
│ 3 │ 4 │ 5 │ 6 │ 7 │ ↓ │ ? │ ? │ ? │
├───┼───┼───┼───┼───┤ 滑动窗口卷积 └───┴───┴───┘
│ 4 │ 5 │ 6 │ 7 │ 8 │ (stride=1, padding=0)
├───┼───┼───┼───┼───┤
│ 5 │ 6 │ 7 │ 8 │ 9 │
└───┴───┴───┴───┴───┘
计算示例(左上角):
(1×1) + (2×0) + (3×-1) +
(2×1) + (3×0) + (4×-1) +
(3×1) + (4×0) + (5×-1) = -3
RNN 与 LSTM 架构
┌─────────────────────────────────────────────────────────────┐
│ RNN vs LSTM 架构对比 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 传统 RNN(难以处理长序列): │
│ │
│ xₜ ──→ [ hₜ₋₁ ] ──→ hₜ ──→ yₜ │
│ │ ↓ │ │
│ └─────────────────┘ │
│ (简单循环,梯度消失) │
│ │
├─────────────────────────────────────────────────────────────┤
│ │
│ LSTM(长短期记忆网络): │
│ │
│ ┌─────────────────────────────────────┐ │
│ xₜ ──→ │ 遗忘门 输入门 输出门 记忆单元 │ ──→ hₜ │
│ │ (fₜ) (iₜ) (oₜ) (Cₜ) │ ──→ yₜ │
│ hₜ₋₁ ─→ │ ↓ ↓ ↓ ↓ │ │
│ │ [σ] [σ] [σ] [tanh] │ │
│ └─────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ Cₜ = fₜ ⊙ Cₜ₋₁ + iₜ ⊙ C̃ₜ │
│ hₜ = oₜ ⊙ tanh(Cₜ) │
│ │
│ 门控机制: │
│ • 遗忘门 fₜ:决定丢弃哪些旧信息 │
│ • 输入门 iₜ:决定存储哪些新信息 │
│ • 输出门 oₜ:决定输出哪些信息 │
│ │
└─────────────────────────────────────────────────────────────┘
机器学习
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
机器学习算法分类
┌─────────────────────┐
│ 机器学习算法 │
└──────────┬──────────┘
│
┌──────────────────────┼──────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ 监督学习 │ │ 无监督学习 │ │ 强化学习 │
│ Supervised │ │ Unsupervised │ │ Reinforcement │
├───────────────┤ ├──────────────────┤ ├─────────────────┤
│ • 分类 │ │ • 聚类 │ │ • Q-Learning │
│ • 回归 │ │ • 降维 │ │ • Policy Gradient│
│ • 序列预测 │ │ • 关联规则 │ │ • Actor-Critic │
│ │ │ • 生成模型 │ │ │
│ 算法: │ │ 算法: │ │ 应用: │
│ • LR │ │ • K-Means │ │ • 游戏 AI │
│ • SVM │ │ • DBSCAN │ │ • 机器人控制 │
│ • Decision Tree│ │ • PCA │ │ • 自动驾驶 │
│ • Random Forest│ │ • GMM │ │ • 推荐系统 │
│ • XGBoost │ │ • Autoencoder │ │ │
│ • Neural Net │ │ • GAN │ │ │
└───────────────┘ └──────────────────┘ └─────────────────┘
监督学习算法对比
| 算法 | 类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 线性回归 | 回归 | 简单、可解释性强 | 只能处理线性关系 | 房价预测、销售预测 |
| 逻辑回归 | 分类 | 实现简单、输出概率 | 线性决策边界 | 二分类问题 |
| SVM | 分类 | 高维空间效果好 | 大样本训练慢 | 文本分类、图像识别 |
| 决策树 | 分类/回归 | 可解释性强、无需特征缩放 | 容易过拟合 | 风险评估、信用评分 |
| 随机森林 | 分类/回归 | 抗过拟合、精度高 | 模型大、预测慢 | 金融风控、推荐系统 |
| XGBoost | 分类/回归 | 性能优异、可并行 | 参数调优复杂 | Kaggle 竞赛、工业应用 |
| KNN | 分类/回归 | 简单有效 | 计算量大、需存储数据 | 推荐系统、异常检测 |
深度学习 vs 传统机器学习
1. 特征提取方面
| 特性 | 传统机器学习 | 深度学习 |
|---|---|---|
| 特征工程 | 手动设计特征,依赖领域知识 | 自动学习特征表示 |
| 特征层次 | 通常为浅层特征 | 学习多层次的抽象特征 |
| 特征提取 | 人工选择特征(如 HOG、SIFT) | 卷积层自动提取特征 |
| 端到端 | 需要分步骤处理 | 支持端到端训练 |
传统机器学习特征工程流程:
原始数据 → 手动特征提取 → 特征选择 → 模型训练 → 预测
深度学习端到端流程:
原始数据 ──────────────────────────→ 深度神经网络 ──→ 预测
(自动特征学习 + 模型训练)
2. 数据量和计算性能
| 维度 | 传统机器学习 | 深度学习 |
|---|---|---|
| 数据需求 | 小样本即可训练 | 需要大量标注数据 |
| 计算资源 | CPU 即可满足 | 需要 GPU/TPU 加速 |
| 训练时间 | 分钟到小时级别 | 天到周级别 |
| 可扩展性 | 受限 | 分布式训练支持 |
深度学习需要大量的训练数据集和强大的计算能力。训练一个深度神经网络通常需要:
- 强大的 GPU 服务器(NVIDIA Tesla/RTX 系列)
- 分布式训练框架(TensorFlow、PyTorch Distributed)
- 海量的数据支撑(ImageNet:1400 万张图片)
相比之下,传统机器学习算法在数据量较小的情况下表现更好,且对硬件要求较低。
3. 问题解决方式
| 方式 | 传统机器学习 | 深度学习 |
|---|---|---|
| 问题分解 | 分步骤处理,模块化 | 端到端学习 |
| 特征组合 | 手动组合特征 | 自动学习特征组合 |
| 中间表示 | 需要设计中间层表示 | 自动学习中间表示 |
案例:目标检测
传统方法(分步骤):
输入图像 → 特征提取(SIFT/HOG)→ 区域建议 → 分类器 → 非极大值抑制 → 结果
深度学习方法(端到端):
输入图像 ──────────────────────────→ YOLO/Mask R-CNN ──→ 结果
4. 可解释性
| 算法类型 | 可解释性 | 典型代表 |
|---|---|---|
| 高可解释性 | 决策规则清晰 | 决策树、线性回归、逻辑回归 |
| 中等可解释性 | 可提取特征重要性 | 随机森林、XGBoost |
| 低可解释性 | 黑盒模型 | 神经网络、深度学习 |
可解释性技术(针对深度学习):
- LIME:局部可解释模型
- SHAP:Shapley 值解释
- Grad-CAM:梯度加权类激活映射
- Attention 可视化:注意力权重可视化
应用领域与技术栈
计算机视觉 (Computer Vision)
| 应用场景 | 技术方案 | 典型模型 |
|---|---|---|
| 图像分类 | 单标签/多标签分类 | ResNet、EfficientNet、Vision Transformer |
| 目标检测 | 边界框回归 | YOLO、Faster R-CNN、SSD |
| 语义分割 | 像素级分类 | U-Net、DeepLab、Mask R-CNN |
| 人脸识别 | 特征提取 + 相似度匹配 | FaceNet、ArcFace |
| 风格迁移 | 图像生成 | GAN、CycleGAN、Neural Style |
自然语言处理 (NLP)
| 应用场景 | 技术方案 | 典型模型 |
|---|---|---|
| 文本分类 | 序列建模 | TextCNN、BERT、RoBERTa |
| 机器翻译 | Seq2Seq 学习 | Transformer、T5、mBART |
| 命名实体识别 | 序列标注 | BiLSTM-CRF、BERT-CRF |
| 问答系统 | 阅读理解 | BERT、GPT、T5 |
| 文本生成 | 语言建模 | GPT-3、T5、BERT |
Transformer 架构核心:
┌─────────────────────────────────────────────────────────────┐
│ Transformer 架构简化图 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 输入嵌入 │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 位置编码 (Positional Encoding) │ │
│ └────────────────────┬────────────────────────────┘ │
│ │ │
│ ┌─────────────────┼─────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ Encoder│ │ Encoder│ │ Encoder│ (×N) │
│ │ #1 │ → ... →│ #N │ → ... →│ #N │ │
│ └───┬──┘ └───┬──┘ └───┬──┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────┐ │
│ │ 多头注意力机制 (Multi-Head Attention) │ │
│ │ Q × Kᵀ → Attention Weights × V │ │
│ └────────────────────┬────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────┐ │
│ │ 前馈神经网络 (Feed-Forward) │ │
│ └────────────────────┬────────────────────────┘ │
│ │ │
│ ▼ │
│ Encoder 输出 → Decoder 输入 │
│ │
└─────────────────────────────────────────────────────────────┘
推荐系统
| 推荐策略 | 技术方案 | 代表算法 |
|---|---|---|
| 协同过滤 | 用户-物品交互矩阵 | User-based CF、Item-based CF |
| 矩阵分解 | 潜在因子模型 | SVD、NMF、ALS |
| 深度学习 | 神经网络建模 | DeepFM、NCF、YouTube DNN |
| 序列推荐 | 时序建模 | GRU4Rec、SASRec、BERT4Rec |
常用深度学习框架
框架对比(2020 年视角)
| 框架 | 开发者 | 主要特点 | 适用场景 |
|---|---|---|---|
| TensorFlow 2.x | Keras 集成、部署生态完善 | 生产环境、移动端部署 | |
| PyTorch | 动态图、调试友好 | 学术研究、快速原型 | |
| Keras | Independent | 简洁易用、高层 API | 入门学习、快速实验 |
| MXNet | Apache | 高效、多语言支持 | AWS 云服务 |
代码示例:使用 Keras 构建 CNN
from tensorflow.keras import layers, models
def build_cnn_model(input_shape, num_classes):
"""
构建卷积神经网络模型
"""
model = models.Sequential([
# 第一卷积块
layers.Conv2D(32, (3, 3), activation='relu',
input_shape=input_shape),
layers.MaxPooling2D((2, 2)),
layers.Dropout(0.25),
# 第二卷积块
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Dropout(0.25),
# 第三卷积块
layers.Conv2D(128, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Dropout(0.25),
# 全连接层
layers.Flatten(),
layers.Dense(512, activation='relu'),
layers.Dropout(0.5),
layers.Dense(num_classes, activation='softmax')
])
# 编译模型
model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy']
)
return model
# 使用示例
model = build_cnn_model(input_shape=(28, 28, 1), num_classes=10)
model.summary()
# 训练模型
# history = model.fit(x_train, y_train,
# epochs=10,
# batch_size=128,
# validation_data=(x_val, y_val))
参考资料
ShowMeAI 知识社区教程:
- 图解机器学习算法:从入门到精通系列教程
-
[深度学习与CV教程(4) 神经网络与反向传播](https://www.showmeai.tech/article-detail/263) - NLP教程(3) - 神经网络与反向传播
- 浅层神经网络 - 深度学习教程
其他学习资源: