主题
NumPy 教程大纲
总体设计思路
NumPy 是 Python 科学计算的基石——PyTorch 的 Tensor 底层就是 NumPy 的 ndarray,HuggingFace 的数据处理离不开 NumPy 数组,LangChain 的 Embedding 向量本质就是 NumPy 数组。不理解 NumPy,你永远只是在"调包",遇到性能问题只能干瞪眼。
本教程不仅讲解 NumPy 的核心 API,更通过大量 LLM 相关实战(词嵌入、自注意力、LoRA、评估指标等),让你真正理解 NumPy 在大模型开发中的价值。教程的设计遵循以下原则:
- 从第一天就面向大模型:所有示例围绕 Transformer、注意力机制、语言建模展开
- 从 API 到原理到实战:先学会用,再理解为什么,最后用 NumPy 手写 LLM 核心组件
- 22 章覆盖全链路:基础概念 → 数组操作 → 数学运算 → 线性代数 → 内存优化 → 8 个 LLM 实战项目
- 面试深度:每节都讲清楚底层原理,面试官最爱问的广播机制、视图vs副本、内存布局都有覆盖
第1章:基础概念(5节)
定位
建立对 NumPy 的整体认知。理解 ndarray 为什么比 Python 列表快,以及 NumPy 在 LLM 开发中的位置。
01-00 NumPy是什么
- NumPy 的历史与定位
- ndarray vs Python list 的本质区别
01-01 NumPy优势对比
- 性能对比:为什么 NumPy 快 100 倍
- 向量化运算 vs 循环
- 底层 C/Fortran 实现原理
01-02 安装与配置
- pip / conda 安装
- 版本验证与常见问题
01-03 导入与约定
import numpy as np的约定- 命名空间与常用别名
01-04 NumPy与LLM开发
- NumPy 在 PyTorch / Transformers / LangChain 中的角色
- 学习路线图:NumPy → PyTorch → Transformers → LangChain
第2章:ndarray属性(4节)
定位
ndarray 是 NumPy 的核心数据结构。理解它的属性,是正确使用 NumPy 的前提。
02-01 ndarray属性
- shape / ndim / size / dtype / itemsize
- 属性之间的数学关系
02-02 dtype深入理解
- NumPy 的数据类型体系
- 类型转换与溢出风险
- LLM 场景:float16 vs float32 vs bfloat16
02-03 从列表创建
- np.array() 的参数详解
- 嵌套列表到多维数组
- 常见陷阱:列表中混合类型
02-04 AI中的应用
- ndarray 在 AI 数据流中的位置
- 批量数据的表示方式
第3章:数组创建(6节)
定位
掌握各种创建数组的方法,为后续操作打基础。
03-01 zeros与ones
- np.zeros / np.ones / np.full / np.empty
- 形状参数与 dtype 指定
03-02 eye与identity
- 单位矩阵的创建
- 对角矩阵与带状矩阵
03-03 arange与linspace
- 等差数列 vs 等间距数列
- 浮点数序列的精度问题
03-04 tile与meshgrid
- 数组重复与网格生成
- 坐标矩阵在可视化中的应用
03-05 随机数组
- np.random 模块概览
- 均匀分布 / 正态分布 / 整数随机
- 随机种子与可复现性
03-06 从数据创建
- 从文件 / 字符串 / Pandas 创建数组
- 数据类型推断与显式指定
第4章:形状操作(6节)
定位
形状操作是 NumPy 最常用的功能之一——数据预处理、模型输入、批量处理都离不开 reshape 和转置。
04-01 shape与reshape
- reshape 的原理与用法
- -1 自动推断维度
- 常见陷阱:reshape 不改变数据
04-02 flatten与ravel
- 展平的两种方式
- copy vs view 的区别
04-03 转置操作
- .T / np.transpose / np.swapaxes
- 多维转置的轴顺序
04-04 expand与squeeze
- 增加维度与删除维度
- 广播前的维度对齐
04-05 concatenate与stack
- 水平/垂直拼接
- np.stack vs np.concatenate 的区别
04-06 split分割
- np.split / np.hsplit / np.vsplit
- 不等分分割
第5章:索引与切片(5节)
定位
索引是数据访问的基础。NumPy 的高级索引功能远超 Python 列表,是高效数据处理的关键。
05-01 基本索引
- 一维/多维索引与切片
- 步长与负索引
05-02 整数数组索引
- 花式索引的原理
- 多维整数索引
05-03 布尔掩码
- 条件筛选与布尔索引
- 多条件组合
- LLM 场景:过滤低质量数据
05-04 花式索引
- 高级索引模式
- 索引的组合使用
05-05 LLM嵌入查找
- 词嵌入矩阵的索引操作
- batch 查找的向量化实现
第6章:运算与性能(4节)
定位
NumPy 的核心优势——向量化运算。理解它,才能写出高效的数值计算代码。
06-01 元素级运算
- 算术运算 / 比较运算 / 逻辑运算
- 逐元素操作的向量化
06-02 向量化性能
- 向量化 vs 循环的性能对比
- 何时用向量化,何时用循环
06-03 矩阵乘法
- np.dot / np.matmul / @ 运算符
- 批量矩阵乘法
06-04 LLM自注意力
- 用纯 NumPy 实现自注意力计算
- Q·K^T → Softmax → ·V 的完整流程
第7章:广播机制(3节)
定位
广播是 NumPy 最强大也最容易出错的特性。理解广播规则,是避免 Bug 的关键。
07-01 广播规则
- 三条广播规则详解
- 形状兼容性判断
07-02 数组扩张
- 广播的内部机制
- 维度对齐的过程
07-03 LLM位置编码
- 用广播实现正弦位置编码
- 位置编码矩阵的向量化计算
第8章:数学函数(3节)
定位
NumPy 提供了丰富的数学函数,覆盖了深度学习中常用的激活函数和数值运算。
08-01 指数与对数
- np.exp / np.log / np.log10 / np.log2
- 数值稳定性:log-sum-exp 技巧
08-02 激活函数
- ReLU / Sigmoid / Tanh / GELU 的 NumPy 实现
- 梯度计算
08-03 clip截断
- np.clip 的用法
- 梯度裁剪与数值范围控制
第9章:统计与损失(4节)
定位
统计函数是评估模型性能的基础——损失函数、评估指标都离不开统计计算。
09-01 基础统计
- mean / std / var / min / max / median
09-02 axis统计
- axis 参数的深入理解
- 按行/按列/按通道统计
09-03 cumsum累加
- 累加/累乘操作
- 前缀和在 LLM 中的应用
09-04 LLM困惑度
- 用 NumPy 计算困惑度(PPL)
- 交叉熵损失的实现
第10章:线性代数(5节)
定位
线性代数是深度学习的数学基础。NumPy 的 linalg 模块提供了完整的线性代数工具。
10-01 点积
- 向量点积与矩阵乘法
- 内积的几何意义
10-02 特征值与特征向量
- np.linalg.eig / eigh
- PCA 降维的原理
10-03 奇异值分解
- SVD 的原理与 NumPy 实现
- SVD 在 LoRA 中的应用
10-04 矩阵求逆与伪逆
- np.linalg.inv / pinv
- 正规方程求解
10-05 范数计算
- L1 / L2 / Frobenius 范数
- 正则化与梯度裁剪
第11章:随机数生成(5节)
定位
随机数在深度学习中无处不在——权重初始化、数据增强、Dropout、采样。掌握 NumPy 的随机数生成是必备技能。
11-01 随机种子与可复现性
- np.random.seed 的原理
- 可复现实验的设置方法
11-02 常见分布
- 均匀分布 / 正态分布 / 二项分布 / 泊松分布
- 权重初始化中的分布选择
11-03 随机采样
- np.random.choice 的用法
- 词汇表采样与 Top-K/Top-P
11-04 随机排列
- shuffle vs permutation
- 数据集打乱与交叉验证
11-05 随机初始化权重
- Xavier / He 初始化的 NumPy 实现
- 不同初始化方法对训练的影响
第12章:内存布局(4节)
定位
理解内存布局是优化 NumPy 性能的关键——C 顺序 vs Fortran 顺序、视图 vs 副本,直接影响计算效率。
12-01 C顺序与Fortran顺序
- 行优先 vs 列优先
- 内存布局对遍历性能的影响
12-02 视图与副本
- view vs copy 的区别
- 什么时候会触发数据复制
12-03 ndarray.view
- view 的创建与使用
- 共享内存的注意事项
12-04 原地操作
- += / -= / *= 等原地运算
- out 参数的用法
- 内存优化技巧
第13章:结构化数组(3节)
定位
结构化数组让你在一个数组中存储异构数据——类似数据库的表结构,在处理 LLM 批次数据时非常有用。
13-01 创建结构化数组
- dtype 的结构化定义
- 字段名与类型
13-02 字段访问与操作
- 按字段名访问
- 字段的增删改
13-03 HuggingFace导出
- 将 HuggingFace Dataset 导出为结构化数组
- 与 PyTorch Tensor 的互转
第14章:文件IO(3节)
定位
数据的持久化存储——训练好的嵌入矩阵、预处理后的数据集,都需要高效的 IO 操作。
14-01 文本文件IO
- np.loadtxt / np.savetxt
- CSV 格式的读写
14-02 二进制文件IO
- np.save / np.savez / np.load
- .npy / .npz 格式的优势
14-03 内存映射
- np.memmap 的原理与用法
- 超大数组的处理方案
实战一:词嵌入矩阵(4节)
定位
第一个 LLM 实战项目。用纯 NumPy 实现词嵌入的完整流程:词汇表 → 嵌入矩阵 → 查找 → 相似度计算。
15-01 词汇表与索引映射
- 构建 token → index 的双向映射
- 特殊 token 的处理
15-02 嵌入矩阵创建
- 随机初始化与预训练加载
- 嵌入矩阵的形状与存储
15-03 嵌入查找实现
- 索引查找的向量化实现
- batch 查找
15-04 词向量相似度可视化
- 余弦相似度计算
- t-SNE 降维可视化
实战二:多头自注意力(4节)
定位
用纯 NumPy 手写 Transformer 的核心——多头自注意力机制。理解 Q/K/V 投影、缩放点积注意力、因果掩码。
16-01 QKV投影矩阵
- 线性变换的 NumPy 实现
- 多头并行的 QKV 计算
16-02 缩放点积注意力
- Scaled Dot-Product Attention 的完整实现
- Softmax 的数值稳定性
16-03 因果掩码
- Causal Mask 的原理与实现
- 自回归生成的关键约束
16-04 前向传播模拟
- 完整的简化 Transformer 块前向传播
- 各组件的协同工作
实战三:LayerNorm与残差(3节)
定位
实现 Transformer 的另外两个关键组件——LayerNorm 和残差连接。
17-01 LayerNorm实现
- LayerNorm 的原理与 NumPy 实现
- 与 BatchNorm 的对比
17-02 残差连接模拟
- 残差连接的原理
- 梯度流分析
17-03 NumPy vs PyTorch对比
- 同一功能两种实现的代码对比
- 性能与 API 差异分析
实战四:GPT文本生成(4节)
定位
综合前面的知识,构建一个简化但完整的 GPT-like 文本生成系统。
18-01 预训练嵌入概述
- GPT 架构的整体流程
- 从嵌入到输出的数据流
18-02 Transformer解码器
- 解码器的前向传播实现
- 因果掩码的应用
18-03 温度采样
- Temperature / Top-K / Top-P 采样策略
- NumPy 实现
18-04 简单文本序列生成
- 完整的自回归生成循环
- 生成质量的初步评估
实战五:LoRA低秩适配(3节)
定位
用 NumPy 理解 LoRA 的数学原理——低秩矩阵分解如何大幅减少微调参数量。
19-01 LoRA原理
- LoRA 的核心思想:W = W₀ + BA
- 低秩分解的数学基础
19-02 LoRA前向传播
- 冻结权重 + LoRA 适配器的 NumPy 实现
- 前向传播的计算流程
19-03 参数量节省
- 不同秩 r 下的参数量对比
- 压缩比计算
实战六:HuggingFace集成(3节)
定位
NumPy 与 HuggingFace 生态的互操作——将 Tokenizer 和 Datasets 的输出转换为 NumPy 数组。
20-01 tokenizer转NumPy
- HuggingFace Tokenizer 输出转 NumPy
- input_ids / attention_mask 的数组操作
20-02 数据集转NumPy
- HuggingFace Datasets 转 NumPy
- 批量数据处理
20-03 NumPy DataLoader
- 基于 NumPy 的自定义 DataLoader
- mini-batch 生成
实战七:框架互操作(3节)
定位
NumPy 与 PyTorch / TensorFlow 之间的数据互转——理解框架底层的共享内存机制。
21-01 PyTorch互操作
- torch.from_numpy() / tensor.numpy()
- 共享内存机制
21-02 TensorFlow互操作
- tf.convert_to_tensor / tensor.numpy()
- 与 TF 的数据交换
21-03 预处理与训练
- NumPy 预处理 + PyTorch 训练的混合工作流
- 最佳实践
实战八:LLM评估(3节)
定位
用 NumPy 实现 LLM 的常用评估指标——困惑度、BLEU、ROUGE。
22-01 困惑度计算
- 困惑度的数学定义与 NumPy 实现
- 不同模型的 PPL 对比
22-02 BLEU与ROUGE指标
- BLEU / ROUGE 的计算原理
- NumPy 实现中的统计操作
22-03 文本多样性评估
- Distinct / Entropy 等多样性指标
- 生成质量的综合评估