Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第二十五 人工智能

人工智能(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达特茅斯会议,“人工智能“概念正式提出
1966ELIZA 聊天机器人诞生
1997IBM 深蓝击败国际象棋世界冠军卡斯帕罗夫
2012AlexNet 在 ImageNet 竞赛中大胜,深度学习崛起
2016AlphaGo 击败围棋世界冠军李世石
2022ChatGPT 发布,大语言模型进入大众视野
2024Sora、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(跨框架部署)

练习建议

  1. 手动实现感知机:用 Rust 实现一个最简单的单层神经网络,完成 AND 或 OR 逻辑门的训练。
  2. 梯度下降可视化:编写程序记录梯度下降过程中损失值的变化,观察学习率对收敛的影响。
  3. Candle 体验:安装 Candle,运行官方示例中的简单线性回归或文本生成模型。
  4. ONNX 推理:将一个预训练的图像分类模型(如 MNIST)导出为 ONNX 格式,用 Rust 编写推理程序。
  5. 注意力机制模拟:用 Rust 实现一个简化的自注意力计算,输入一个小序列,观察注意力权重的分布。
  6. AI 应用思考:结合 Rust 的高性能特性,思考在哪些 AI 场景下使用 Rust 比 Python 更有优势(如实时推理、嵌入式部署)。