mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
3874 字
10 分钟
机器学习实战入门
2025-06-22

一、什么是机器学习#

机器学习(Machine Learning)是人工智能的一个核心分支,它让计算机从数据中自动学习规律和模式,而无需显式编写规则。简单说,传统编程是”人写规则,计算机执行”,机器学习则是”人给数据,计算机自己找规则”。

Tom Mitchell 在 1997 年给出了一个经典定义:如果一个程序的任务 T 在性能指标 P 上,通过经验 E 的积累得到了改善,那么这个程序就是在针对 T 从 E 中学习。

1.1 从感知机到深度学习#

机器学习的发展经历了几个关键阶段:

timeline title 机器学习发展简史 1957 : 感知机(Perceptron) : 第一个神经网络模型 1960s-70s : 符号主义与知识工程 : 专家系统主导 1980s : 反向传播算法 : 多层神经网络复兴 1990s : 统计学习黄金期 : SVM、随机森林、Boosting 2006 : 深度学习元年 : Hinton 提出深度信念网络 2012 : AlexNet 赢得 ImageNet : 深度学习革命爆发 2017 : Transformer 架构提出 : Attention Is All You Need 2022 : ChatGPT 发布 : 大语言模型时代到来 2025 : DeepSeek R1 开源 : 推理模型走向开放

1957 年,Frank Rosenblatt 提出了感知机(Perceptron),这是最早的神经网络模型。虽然它只能处理线性可分问题,但奠定了神经网络的基础。

1986 年,Hinton 等人发表了反向传播算法的里程碑论文,让多层神经网络的训练变得可行。但受限于计算能力和数据规模,神经网络在 90 年代被支持向量机(SVM)等统计学习方法超越。

真正的转折点发生在 2012 年。Alex Krizhevsky 的 AlexNet 在 ImageNet 图像识别竞赛中以压倒性优势获胜,将错误率从 26% 降到了 15%。从此,深度学习成为 AI 研究的主流。

2017 年,Google 团队发表论文《Attention Is All You Need》,提出了 Transformer 架构。这个最初为机器翻译设计的模型,后来成为了 GPT、BERT、LLaMA 等大语言模型的基石。

二、机器学习的三大范式#

机器学习按照学习方式的不同,可以分为三大类:监督学习、无监督学习和强化学习。

graph TB ML["机器学习"] --> SL["监督学习 Supervised"] ML --> UL["无监督学习 Unsupervised"] ML --> RL["强化学习 Reinforcement"] SL --> SL1["分类 Classification"] SL --> SL2["回归 Regression"] SL1 --> SL1E["垃圾邮件检测<br/>图像识别<br/>情感分析"] SL2 --> SL2E["房价预测<br/>股票走势<br/>温度预报"] UL --> UL1["聚类 Clustering"] UL --> UL2["降维 Dimensionality Reduction"] UL --> UL3["生成 Generation"] UL1 --> UL1E["用户分层<br/>异常检测<br/>市场细分"] UL2 --> UL2E["PCA<br/>t-SNE<br/>自编码器"] UL3 --> UL3E["GAN<br/>VAE<br/>扩散模型"] RL --> RL1["策略优化"] RL --> RL2["Q-Learning"] RL1 --> RL1E["AlphaGo<br/>机器人控制<br/>自动驾驶"]

2.1 监督学习#

监督学习是最常见的机器学习方式。它使用带有标签的训练数据,模型学习输入到输出的映射关系。

分类问题:预测离散的类别标签。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.2, random_state=42
)
# 训练随机森林分类器
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)
# 预测并评估
predictions = clf.predict(X_test)
print(f"准确率: {accuracy_score(y_test, predictions):.2%}")
# 输出: 准确率: 100.00%

回归问题:预测连续的数值。

from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import numpy as np
# 加载加州房价数据集
housing = fetch_california_housing()
X_train, X_test, y_train, y_test = train_test_split(
housing.data, housing.target, test_size=0.2, random_state=42
)
# 训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)
# 预测并评估
predictions = model.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test, predictions))
print(f"RMSE: {rmse:.4f}")

2.2 无监督学习#

无监督学习处理没有标签的数据,目标是发现数据中隐藏的结构和模式。

聚类是最典型的无监督学习任务:

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, random_state=42)
# K-Means 聚类
kmeans = KMeans(n_clusters=4, random_state=42)
labels = kmeans.fit_predict(X)
# 聚类中心
print(f"聚类中心:\n{kmeans.cluster_centers_}")

除了聚类,无监督学习还包括降维(PCA、t-SNE)、异常检测和生成模型(GAN、扩散模型)等。

2.3 强化学习#

强化学习通过”试错”来学习最优策略。智能体(Agent)在环境中采取行动,获得奖励或惩罚,目标是最大化长期累积奖励。

经典应用包括 AlphaGo 下围棋、机器人运动控制、自动驾驶决策等。近年来,强化学习在大语言模型的对齐训练(RLHF)中扮演了关键角色,ChatGPT 就使用了 RLHF 技术来让模型的回答更符合人类偏好。

三、深度学习基础#

深度学习是机器学习的一个子领域,使用多层神经网络来学习数据的层次化表示。

3.1 神经网络的基本结构#

一个神经网络由输入层、若干隐藏层和输出层组成。每一层包含若干神经元,相邻层的神经元通过权重连接。

graph LR subgraph 输入层 X1["x₁"] X2["x₂"] X3["x₃"] end subgraph 隐藏层1 H1["h₁"] H2["h₂"] H3["h₃"] H4["h₄"] end subgraph 隐藏层2 G1["g₁"] G2["g₂"] G3["g₃"] end subgraph 输出层 Y["ŷ"] end X1 --> H1 X1 --> H2 X1 --> H3 X1 --> H4 X2 --> H1 X2 --> H2 X2 --> H3 X2 --> H4 X3 --> H1 X3 --> H2 X3 --> H3 X3 --> H4 H1 --> G1 H1 --> G2 H1 --> G3 H2 --> G1 H2 --> G2 H2 --> G3 H3 --> G1 H3 --> G2 H3 --> G3 H4 --> G1 H4 --> G2 H4 --> G3 G1 --> Y G2 --> Y G3 --> Y

每个神经元执行的计算很简单:

# 单个神经元的前向计算
def neuron(x, weights, bias, activation):
z = sum(xi * wi for xi, wi in zip(x, weights)) + bias
return activation(z)
# 常用激活函数
import numpy as np
def relu(z):
"""ReLU: 最常用的激活函数,计算快,缓解梯度消失"""
return max(0, z)
def sigmoid(z):
"""Sigmoid: 输出 0-1 之间的概率值"""
return 1 / (1 + np.exp(-z))

3.2 反向传播与梯度下降#

训练神经网络的核心是反向传播算法(Backpropagation)。它的思路是:

  1. 前向传播:输入数据,逐层计算得到预测输出
  2. 计算损失:用损失函数衡量预测值与真实值的差距
  3. 反向传播:从输出层往回,计算损失对每个参数的梯度
  4. 更新参数:沿着梯度反方向调整参数,减小损失
import torch
import torch.nn as nn
# 用 PyTorch 展示训练循环的核心逻辑
model = nn.Sequential(
nn.Linear(10, 64),
nn.ReLU(),
nn.Linear(64, 32),
nn.ReLU(),
nn.Linear(32, 1)
)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
loss_fn = nn.MSELoss()
# 一个训练步骤
for batch_x, batch_y in dataloader:
# 前向传播
predictions = model(batch_x)
loss = loss_fn(predictions, batch_y)
# 反向传播
optimizer.zero_grad() # 清空上一步的梯度
loss.backward() # 计算梯度
optimizer.step() # 更新参数

梯度下降有几种常见变体:

变体特点适用场景
SGD每次用一个样本更新,噪声大但快大规模数据集
Mini-batch SGD折中方案,每次用一小批样本最常用的方式
Adam自适应学习率,收敛快深度学习默认选择
Adagrad对稀疏特征自适应NLP 任务

3.3 用 PyTorch 训练一个完整模型#

import torch
import torch.nn as nn
from torch.utils.data import DataLoader, TensorDataset
# 准备数据
X = torch.randn(1000, 10)
y = torch.sum(X[:, :3], dim=1, keepdim=True) + torch.randn(1000, 1) * 0.1
dataset = TensorDataset(X, y)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
# 定义模型
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(10, 64),
nn.ReLU(),
nn.Linear(64, 32),
nn.ReLU(),
nn.Linear(32, 1)
)
def forward(self, x):
return self.net(x)
model = SimpleNet()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
loss_fn = nn.MSELoss()
# 训练 20 个 epoch
for epoch in range(20):
total_loss = 0
for batch_x, batch_y in dataloader:
predictions = model(batch_x)
loss = loss_fn(predictions, batch_y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
total_loss += loss.item()
if (epoch + 1) % 5 == 0:
print(f"Epoch {epoch+1}, Loss: {total_loss/len(dataloader):.4f}")

四、关键神经网络架构#

随着深度学习的发展,研究者设计了多种专用架构来处理不同类型的数据。

4.1 CNN:图像识别的基石#

卷积神经网络(CNN)通过卷积操作提取图像的局部特征。它的核心思想是:图像中相邻的像素往往相互关联,不需要每个像素都和所有像素建立连接。

import torch.nn as nn
class SimpleCNN(nn.Module):
def __init__(self):
super().__init__()
self.features = nn.Sequential(
# 卷积层:提取局部特征
nn.Conv2d(1, 32, kernel_size=3, padding=1), # 28x28 -> 28x28
nn.ReLU(),
nn.MaxPool2d(2), # 28x28 -> 14x14
nn.Conv2d(32, 64, kernel_size=3, padding=1), # 14x14 -> 14x14
nn.ReLU(),
nn.MaxPool2d(2), # 14x14 -> 7x7
)
self.classifier = nn.Sequential(
nn.Flatten(),
nn.Linear(64 * 7 * 7, 128),
nn.ReLU(),
nn.Dropout(0.5),
nn.Linear(128, 10), # 10 个数字类别
)
def forward(self, x):
x = self.features(x)
return self.classifier(x)

经典的 CNN 架构演进:LeNet(1998)→ AlexNet(2012)→ VGG(2014)→ ResNet(2015)。ResNet 引入的残差连接(Skip Connection)解决了深层网络的梯度消失问题,让训练上百层的网络成为可能。

4.2 RNN:处理序列数据#

循环神经网络(RNN)专门处理序列数据(文本、语音、时间序列)。它通过隐藏状态在时间步之间传递信息,天然适合处理变长输入。

但标准 RNN 存在”长期依赖”问题,难以记住序列开头的远距离信息。LSTM(长短期记忆网络)和 GRU(门控循环单元)通过门控机制解决了这个问题。

class LSTMClassifier(nn.Module):
def __init__(self, vocab_size, embed_dim, hidden_dim, num_classes):
super().__init__()
self.embedding = nn.Embedding(vocab_size, embed_dim)
self.lstm = nn.LSTM(embed_dim, hidden_dim, batch_first=True)
self.fc = nn.Linear(hidden_dim, num_classes)
def forward(self, x):
# x: [batch, seq_len]
embedded = self.embedding(x) # [batch, seq_len, embed_dim]
output, (hidden, _) = self.lstm(embedded)
return self.fc(hidden.squeeze(0)) # 用最后一个隐藏状态做分类

4.3 Transformer:改变一切的架构#

2017 年,Transformer 架构用注意力机制(Attention)取代了 RNN 的循环结构,实现了完全并行的序列建模。

自注意力机制的核心公式:

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

其中 Q(查询)、K(键)、V(值)是输入的线性变换。这个机制让模型在处理序列中的每个位置时,都能”看到”整个序列的信息。

Transformer 的优势在于:

  • 并行计算:不像 RNN 那样必须逐步处理,Transformer 可以同时处理整个序列
  • 长距离依赖:注意力机制天然支持远距离的信息交互
  • 可扩展性:模型规模可以从百万参数扩展到万亿参数
# 用 PyTorch 实现简化版 Self-Attention
class SelfAttention(nn.Module):
def __init__(self, embed_dim, num_heads):
super().__init__()
self.attention = nn.MultiheadAttention(embed_dim, num_heads, batch_first=True)
self.norm = nn.LayerNorm(embed_dim)
def forward(self, x):
# x: [batch, seq_len, embed_dim]
attn_output, _ = self.attention(x, x, x)
return self.norm(x + attn_output) # 残差连接 + LayerNorm

五、大语言模型时代#

Transformer 架构催生了大语言模型(LLM)的爆发。GPT、BERT、LLaMA 等模型展示了”规模法则”(Scaling Law):模型越大、数据越多,能力越强。

5.1 GPT 系列:生成式预训练#

OpenAI 的 GPT 系列采用”自回归”方式,逐个预测下一个词。从 GPT-1 到 GPT-4,模型规模从 1.17 亿参数增长到估计的万亿级参数。

GPT 系列的核心理念是”预训练 + 微调”(后来演变为”预训练 + 提示”)。先在海量文本上进行无监督预训练,再通过指令微调和 RLHF 对齐人类偏好。

5.2 BERT:双向理解的突破#

Google 的 BERT 采用”掩码语言模型”(MLM)进行预训练,随机遮盖输入中的部分词,让模型根据上下文预测被遮盖的词。这种双向理解的方式在阅读理解、情感分析等任务上取得了显著突破。

5.3 LLaMA:开源的力量#

Meta 的 LLaMA 系列证明了开源模型的巨大价值。LLaMA 2(2023 年)和 LLaMA 3(2024 年)的开源发布,让整个社区都能在高质量的基础模型上进行创新。

2025 年 DeepSeek R1 的开源更是里程碑事件,它展示了开源推理模型可以媲美甚至超越闭源模型的推理能力。

graph LR subgraph "LLM 技术演进" A["Transformer<br/>2017"] --> B["GPT-1<br/>2018"] B --> C["BERT<br/>2018"] C --> D["GPT-2<br/>2019"] D --> E["GPT-3<br/>2020"] E --> F["InstructGPT<br/>RLHF 2022"] F --> G["ChatGPT<br/>2022"] G --> H["GPT-4<br/>2023"] H --> I["LLaMA 2<br/>2023"] I --> J["LLaMA 3<br/>2024"] J --> K["DeepSeek R1<br/>2025"] end

六、应用场景#

机器学习已经渗透到各行各业。按任务类型,主要应用场景包括:

  • 分类:将数据划分到各个类别中。比如垃圾邮件过滤、图像识别、疾病诊断。
  • 回归:预测连续型数值。比如房价预测、销售预测、天气温度预报。
  • 聚类:将相似数据自动分组。比如用户画像、市场细分、异常检测。
  • 推荐系统:根据用户行为推荐内容。比如电商商品推荐、短视频推荐、新闻推送。
  • 自然语言处理:理解和生成人类语言。比如机器翻译、情感分析、问答系统。
  • 语音识别:将语音转为文本。比如智能语音助手、实时字幕生成。
  • 计算机视觉:让机器”看懂”图像和视频。比如人脸识别、自动驾驶、医学影像分析。
  • 生成式 AI:创造新的内容。比如文本生成(ChatGPT)、图像生成(Stable Diffusion)、音乐生成(Suno)。

七、经典实践项目#

学习机器学习最好的方式是动手做项目。下面按难度递进列出适合入门的实践项目。

7.1 初级项目#

这些项目使用经典数据集,帮助你理解 ML 的基本流程。

1. 鸢尾花分类

使用 scikit-learn 内置的鸢尾花数据集,通过花萼和花瓣的尺寸预测花的品种。这是机器学习的”Hello World”,适合入门。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.2
)
clf = RandomForestClassifier(n_estimators=100)
clf.fit(X_train, y_train)
print(f"准确率: {clf.score(X_test, y_test):.2%}")

2. MNIST 手写数字识别

识别 28x28 像素的手写数字(0-9),入门深度学习的标准项目。可以用全连接网络或 CNN 实现。

3. 面部表情识别

使用 FER2013 数据集,识别图片中人物的表情(快乐、悲伤、愤怒等)。涉及图像预处理和 CNN 模型设计。

4. 贷款违约预测

使用结构化数据(收入、年龄、信用记录等特征)预测贷款申请人是否会违约。涉及特征工程和类别不平衡处理。

7.2 中级项目#

1. 音乐流派分类

从音频文件中提取 MFCC、频谱特征,使用分类算法识别音乐流派。涉及音频信号处理。

2. 泰坦尼克号生存预测

经典 Kaggle 竞赛项目。从乘客信息(年龄、性别、舱位等级等)预测是否生还。涉及数据清洗、缺失值处理和特征交叉。

7.3 高级项目#

1. 情感分析

对电影评论或商品评论进行正负面情感分类。可以使用传统方法(TF-IDF + SVM)或深度学习方法(LSTM、BERT 微调)。

2. 语音情感识别

从语音信号中识别说话人的情感状态。需要处理音频特征提取、数据增强和时序建模。

3. 电影推荐系统

基于 MovieLens 数据集构建推荐系统。可以实现协同过滤、矩阵分解或基于深度学习的推荐方法。

4. 车牌号自动识别

端到端的车牌检测与识别系统。涉及目标检测(定位车牌位置)和 OCR(识别车牌字符)两个子任务。

八、实用工具与框架#

8.1 PyTorch#

PyTorch 由 Meta AI 开发,以动态计算图和 Python 风格的 API 闻名,是学术界最流行的深度学习框架。

import torch
import torch.nn as nn
# PyTorch 的核心优势:灵活的动态图
x = torch.randn(2, 3)
linear = nn.Linear(3, 1)
y = linear(x)
print(y.shape) # torch.Size([2, 1])

GitHub 仓库:pytorch/pytorch

8.2 TensorFlow / Keras#

TensorFlow 由 Google 开发,拥有完善的部署生态(TF Serving、TF Lite、TF.js)。Keras 作为其高级 API,上手非常简单。

import tensorflow as tf
# Keras 风格:简洁的模型定义
model = tf.keras.Sequential([
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')

GitHub 仓库:tensorflow/tensorflow

8.3 Hugging Face Transformers#

Hugging Face 提供了统一的模型库和 API,让你能轻松使用数千个预训练模型。它同时支持 PyTorch 和 TensorFlow 后端。

from transformers import pipeline
# 三行代码搞定情感分析
classifier = pipeline("sentiment-analysis")
result = classifier("这部电影太好看了!")
print(result)
# [{'label': 'POSITIVE', 'score': 0.9998}]

GitHub 仓库:huggingface/transformers

8.4 其他重要工具#

工具用途仓库
scikit-learn传统 ML 算法、数据预处理scikit-learn/scikit-learn
pandas数据分析和处理pandas-dev/pandas
NumPy数值计算基础库numpy/numpy
Matplotlib数据可视化matplotlib/matplotlib
JAX高性能数值计算google/jax
LangChainLLM 应用开发框架langchain-ai/langchain
ONNX模型格式转换与部署onnx/onnx

九、学习路径建议#

机器学习的知识体系很广,建议按以下路径循序渐进。

9.1 数学基础#

不需要成为数学家,但需要理解以下核心概念:

  • 线性代数:矩阵运算、特征值分解、SVD。推荐 3Blue1Brown 的《线性代数的本质》视频系列。
  • 概率与统计:概率分布、贝叶斯定理、最大似然估计。
  • 微积分:偏导数、链式法则(理解反向传播的基础)。
  • 优化理论:梯度下降、凸优化基础。

9.2 编程能力#

Python 是机器学习的首选语言。需要掌握:

# NumPy:数值计算
import numpy as np
a = np.array([1, 2, 3])
b = np.dot(a, a) # 内积
# pandas:数据处理
import pandas as pd
df = pd.read_csv("data.csv")
df.describe() # 快速查看统计信息
# Matplotlib:可视化
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [4, 5, 6])
plt.show()

9.3 机器学习算法#

从 scikit-learn 入手,理解经典算法的原理:

  1. 线性回归和逻辑回归
  2. 决策树和随机森林
  3. 支持向量机(SVM)
  4. K-Means 聚类
  5. 主成分分析(PCA)

9.4 深度学习#

选择 PyTorch 或 TensorFlow,从简单网络开始,逐步挑战更复杂的架构:

  1. 全连接网络(MNIST 分类)
  2. 卷积神经网络(图像分类)
  3. 循环神经网络(文本分类)
  4. Transformer(阅读原论文并实现)

9.5 项目实战#

做完整的项目比看十篇教程更有效。建议从 Kaggle 竞赛入手,然后尝试复现经典论文。

数学基础 → Python 编程 → scikit-learn → PyTorch → 项目实战
(2-4周) (2-4周) (4-6周) (6-8周) (持续)

参考资料#

9.1 经典教材#

教材作者特点
《机器学习》(西瓜书)周志华中文经典,理论扎实,适合系统学习
《统计学习方法》李航数学推导详尽,适合理解算法本质
《Hands-On ML with Scikit-Learn, Keras & TF》Aurélien Géron实战导向,代码丰富,适合入门
《Deep Learning》(花书)Ian Goodfellow 等深度学习圣经,适合进阶研究
《Pattern Recognition and Machine Learning》Christopher Bishop贝叶斯视角的经典,数学要求较高

9.2 在线课程#

9.3 开源项目#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

机器学习实战入门
https://blog.souloss.com/posts/machine-learning/machine-learning-101/
作者
Souloss
发布于
2025-06-22
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时