第二十五 人工智能
人工智能(Artificial Intelligence,AI)是当今科技领域最热门的话题之一。从智能语音助手到自动驾驶,从图像识别到机器翻译,AI 正在深刻改变我们的生活和工作方式。作为系统级编程语言,Rust 凭借其高性能和内存安全特性,在 AI 基础设施领域也逐渐崭露头角。本章将带领读者了解人工智能的核心概念,并探索 Rust 在 AI 生态中的位置。
一、什么是人工智能
1.1 人工智能的定义
人工智能是指由计算机系统所表现出的、通常需要人类智能才能完成的复杂行为,包括学习、推理、感知、理解语言、解决问题等能力。
从广义上看,AI 可分为三个层次:
| 层次 | 名称 | 说明 |
|---|---|---|
| 弱人工智能 | Artificial Narrow Intelligence (ANI) | 专注于特定任务,如语音识别、图像分类 |
| 强人工智能 | Artificial General Intelligence (AGI) | 具备人类水平的通用智能,目前尚未实现 |
| 超人工智能 | Artificial Super Intelligence (ASI) | 超越人类智能的理论阶段 |
当前我们接触到的所有 AI 应用都属于弱人工智能范畴。
1.2 人工智能发展简史
| 时间 | 事件 |
|---|---|
| 1956 | 达特茅斯会议,“人工智能“概念正式提出 |
| 1966 | ELIZA 聊天机器人诞生 |
| 1997 | IBM 深蓝击败国际象棋世界冠军卡斯帕罗夫 |
| 2012 | AlexNet 在 ImageNet 竞赛中大胜,深度学习崛起 |
| 2016 | AlphaGo 击败围棋世界冠军李世石 |
| 2022 | ChatGPT 发布,大语言模型进入大众视野 |
| 2024 | Sora、GPT-4o 等多模态大模型爆发 |
二、人工智能的三大支柱
现代人工智能的飞速发展离不开三大核心支柱的支撑。
2.1 大数据
数据是 AI 的“燃料“。深度学习模型需要海量数据进行训练,数据量越大、质量越高,模型的表现通常越好。互联网、物联网和各类数字化系统每天产生数以 EB 计的数据,为 AI 发展提供了充足的原材料。
2.2 大算力
训练现代大模型需要巨大的计算资源。GPT-3 拥有 1750 亿参数,其训练消耗了数千 GPU 年的计算量。GPU(图形处理器)和 TPU(张量处理器)等专用硬件的发展,使得大规模并行计算成为可能。
2.3 大模型
大模型(Foundation Model)是指在海量数据上预训练、具有大量参数的神经网络模型。这些模型展现出强大的涌现能力(Emergent Abilities),即模型规模达到某个临界点后,会突然具备某些小模型不具备的能力,如上下文学习、逻辑推理等。
三、机器学习基础
机器学习(Machine Learning,ML)是人工智能的核心分支,它让计算机能够从数据中自动学习规律,而无需显式编程。
3.1 机器学习的三大范式
| 范式 | 说明 | 示例 |
|---|---|---|
| 监督学习 | 使用带标签的数据训练模型 | 图像分类、房价预测 |
| 无监督学习 | 从无标签数据中发现隐藏结构 | 聚类、降维、异常检测 |
| 强化学习 | 智能体通过与环境交互学习最优策略 | AlphaGo、自动驾驶 |
3.2 数据集划分
在机器学习中,数据通常划分为三个集合:
| 集合 | 用途 | 比例 |
|---|---|---|
| 训练集 | 用于训练模型参数 | 约 70%-80% |
| 验证集 | 用于调整超参数、选择模型 | 约 10%-15% |
| 测试集 | 用于最终评估模型性能 | 约 10%-15% |
3.3 过拟合与欠拟合
过拟合(Overfitting):模型在训练集上表现很好,但在新数据上表现差,说明模型“记住“了训练数据而非学到通用规律。解决方法包括增加数据量、正则化、Dropout、早停等。
欠拟合(Underfitting):模型在训练集和测试集上都表现不佳,说明模型复杂度不足,未能捕捉数据中的规律。解决方法包括增加模型复杂度、增加特征、减少正则化等。
四、深度学习入门
深度学习(Deep Learning)是机器学习的子领域,基于多层神经网络(Neural Network)进行表示学习。
4.1 神经网络基础
神经网络由大量相互连接的神经元(节点)组成,分为输入层、隐藏层和输出层。每个连接都有权重,神经元接收输入、加权求和、通过激活函数产生输出。
#![allow(unused)]
fn main() {
// 简单的神经元计算模拟
fn neuron(inputs: &[f64], weights: &[f64], bias: f64) -> f64 {
let sum: f64 = inputs.iter()
.zip(weights.iter())
.map(|(x, w)| x * w)
.sum();
relu(sum + bias)
}
fn relu(x: f64) -> f64 {
x.max(0.0)
}
}
4.2 激活函数
激活函数为神经网络引入非线性,使其能够学习复杂的模式。
| 激活函数 | 公式 | 特点 |
|---|---|---|
| Sigmoid | $\sigma(x) = \frac{1}{1 + e^{-x}}$ | 输出范围 (0,1),适合二分类,但存在梯度消失问题 |
| Tanh | $\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$ | 输出范围 (-1,1),零中心化,但仍可能梯度消失 |
| ReLU | $f(x) = \max(0, x)$ | 计算简单,缓解梯度消失,但可能导致神经元“死亡“ |
| Softmax | $\sigma(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}$ | 将输出转换为概率分布,多用于多分类输出层 |
4.3 损失函数与梯度下降
损失函数(Loss Function) 衡量模型预测与真实值之间的差距。常见的损失函数包括:
- 均方误差(MSE):用于回归任务
- 交叉熵损失(Cross-Entropy):用于分类任务
梯度下降(Gradient Descent) 是训练神经网络的核心优化算法。它通过计算损失函数对参数的梯度,沿着梯度反方向更新参数,逐步降低损失。
#![allow(unused)]
fn main() {
// 模拟单步梯度下降
fn gradient_descent_step(
params: &mut [f64],
gradients: &[f64],
learning_rate: f64,
) {
for (p, g) in params.iter_mut().zip(gradients.iter()) {
*p -= learning_rate * g;
}
}
}
4.4 反向传播
反向传播(Backpropagation)是计算神经网络中所有参数梯度的有效算法。它利用链式法则,从输出层向输入层逐层计算梯度,使得梯度下降能够应用于深层网络。
训练流程:前向传播计算输出 → 计算损失 → 反向传播计算梯度 → 更新参数。重复此过程直到收敛。
五、大语言模型
大语言模型(Large Language Model,LLM)是近年来 AI 领域最重大的突破之一。
5.1 什么是 LLM
LLM 是基于深度学习的大规模预训练语言模型,通常包含数十亿到数千亿参数。它们通过在海量文本数据上进行自监督学习,掌握了丰富的语言知识和世界知识,能够完成文本生成、翻译、摘要、问答、代码编写等多种任务。
代表模型包括 GPT 系列、Claude、LLaMA、通义千问、文心一言等。
5.2 Transformer 架构与自注意力机制
Transformer 是 LLM 的核心架构,于 2017 年在论文《Attention Is All You Need》中提出。它完全基于注意力机制(Attention Mechanism),摒弃了传统的循环结构。
自注意力(Self-Attention) 机制允许模型在处理每个词时,同时关注输入序列中的所有位置,并自动学习不同位置之间的关联强度。
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$
其中 Q(Query)、K(Key)、V(Value)是输入的三个线性变换,$d_k$ 是 Key 的维度。
Transformer 的核心组件包括:
| 组件 | 功能 |
|---|---|
| 多头自注意力 | 并行计算多组注意力,捕捉不同子空间的信息 |
| 前馈神经网络 | 对每个位置独立进行非线性变换 |
| 位置编码 | 为模型注入序列位置信息 |
| 层归一化 | 稳定训练过程 |
5.3 Token 与词嵌入
Token 是 LLM 处理文本的基本单位,可以是一个字、一个词或一个词片段。例如,“Hello world” 可能被切分为 ["Hello", " world"] 两个 Token。
词嵌入(Word Embedding) 将离散的 Token 映射为连续的向量表示,使得语义相近的词在向量空间中距离较近。Embedding 是模型理解语言的基础。
#![allow(unused)]
fn main() {
// 用 Rust 模拟简单的词嵌入查找
fn embedding_lookup(token_id: usize, embedding_matrix: &[Vec<f64>]) -> &[f64] {
&embedding_matrix[token_id]
}
}
5.4 AI Agent
AI Agent(智能体)是指能够感知环境、进行决策并执行动作以实现特定目标的自主系统。基于 LLM 的 Agent 通常具备以下能力:
| 能力 | 说明 |
|---|---|
| 规划(Planning) | 将复杂任务分解为可执行的子任务 |
| 记忆(Memory) | 维护短期和长期记忆,支持上下文理解 |
| 工具使用(Tool Use) | 调用外部 API、搜索引擎、计算器等工具 |
| 反思(Reflection) | 评估自身行为并改进策略 |
六、Rust 中的 AI 生态
Rust 虽然不如 Python 在 AI 领域普及,但凭借其高性能和安全性,正在 AI 基础设施和推理部署方面发挥越来越重要的作用。
6.1 Candle
Candle 是 Hugging Face 推出的 Rust 机器学习框架,主打轻量和高效。
use candle_core::{Device, Tensor};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let device = Device::Cpu;
let a = Tensor::new(&[[1.0f32, 2.0], [3.0, 4.0]], &device)?;
let b = Tensor::new(&[[5.0f32, 6.0], [7.0, 8.0]], &device)?;
let c = a.matmul(&b)?;
println!("{}", c);
Ok(())
}
Candle 支持在 CPU 和 GPU 上运行,无需 Python 环境即可部署大模型,非常适合边缘计算和嵌入式场景。
6.2 Burn
Burn 是一个用纯 Rust 编写的深度学习框架,设计目标是灵活、高效且易于使用。
#![allow(unused)]
fn main() {
use burn::tensor::{Tensor, Backend};
fn compute<B: Backend>() {
let device = B::Device::default();
let tensor1 = Tensor::<B, 2>::from_floats([[1.0, 2.0], [3.0, 4.0]], &device);
let tensor2 = Tensor::<B, 2>::from_floats([[5.0, 6.0], [7.0, 8.0]], &device);
let result = tensor1 + tensor2;
}
}
Burn 支持多种后端(NdArray、WGPU、Candle),允许同一套代码在不同硬件上运行。
6.3 用 Rust 调用 ONNX 模型
ONNX(Open Neural Network Exchange)是开放的神经网络交换格式,允许模型在不同框架间互操作。Rust 可以通过 ort crate 运行 ONNX 模型。
use ort::{Environment, Session, Value};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let env = Environment::builder().build()?;
let session = Session::builder(&env)?
.with_model_from_file("model.onnx")?;
let input = Value::from_array(
ndarray::array![[1.0f32, 2.0, 3.0, 4.0]]
)?;
let outputs = session.run(vec![input])?;
println!("输出: {:?}", outputs);
Ok(())
}
这种方式让 Rust 应用能够直接加载和运行由 PyTorch、TensorFlow 等框架训练并导出的模型,是 Rust 接入 AI 能力最实用的途径之一。
七、总结与练习
本章小结
| 知识点 | 要点 |
|---|---|
| 机器学习三大范式 | 监督学习、无监督学习、强化学习 |
| 数据集划分 | 训练集、验证集、测试集各司其职 |
| 过拟合与欠拟合 | 模型复杂度和数据量的平衡 |
| 深度学习核心 | 神经网络、激活函数、损失函数、梯度下降、反向传播 |
| Transformer | 自注意力机制是 LLM 的核心 |
| Rust AI 生态 | Candle(轻量推理)、Burn(深度学习框架)、ONNX(跨框架部署) |
练习建议
- 手动实现感知机:用 Rust 实现一个最简单的单层神经网络,完成 AND 或 OR 逻辑门的训练。
- 梯度下降可视化:编写程序记录梯度下降过程中损失值的变化,观察学习率对收敛的影响。
- Candle 体验:安装 Candle,运行官方示例中的简单线性回归或文本生成模型。
- ONNX 推理:将一个预训练的图像分类模型(如 MNIST)导出为 ONNX 格式,用 Rust 编写推理程序。
- 注意力机制模拟:用 Rust 实现一个简化的自注意力计算,输入一个小序列,观察注意力权重的分布。
- AI 应用思考:结合 Rust 的高性能特性,思考在哪些 AI 场景下使用 Rust 比 Python 更有优势(如实时推理、嵌入式部署)。