数学与机器学习基础
AI 入门第一步:Python、NumPy 与开发环境(虚拟环境、Git、Jupyter)
入门 25 分钟 适合: 初学者 / 开发者 / 研究者
本课要点
- ▸AI 代码里最常用的 Python 只占语言的一小部分:列表、字典、函数、类、循环和模块导入,先把这些练熟。
- ▸NumPy 的核心是 ndarray:一块同类型的多维数组。把“对每个元素循环”改写成“对整个数组运算”(向量化),代码更短、通常也快得多。
- ▸广播(broadcasting)从最后一维往前比较形状,两维相等或其中一个是 1 就能运算;搞懂它,就能读懂大部分模型代码。
- ▸每个项目一个虚拟环境(python -m venv 或 uv),依赖互不干扰;代码交给 Git 管理。
- ▸做实验用 Jupyter 或 Colab,写成可复用的工具再移到 .py 文件里。
一句话回答
学 AI 的编程基本功只有三样:会写 Python、会用 NumPy 做数组计算、有一个干净可复现的开发环境。这三样在“数学与编程”阶段的 本单元 里大约需要 12 小时,之后学 PyTorch、调模型 API、做 RAG 都建立在它上面。
第一步:够用的 Python
Python 官方教程 是最权威的入门材料。读 AI 代码时最常遇到的是这几样:
| 语法 | 在 AI 代码里常见的样子 |
|---|---|
| 列表 list | 一批样本、一串 token:batch = [x1, x2, x3] |
| 字典 dict | 配置、API 请求体:{"model": "...", "messages": [...]} |
| 函数与默认参数 | def train(lr=1e-3, epochs=10): ... |
| 类 class | 模型定义:class MyNet(nn.Module): ... |
| 列表推导式 | lengths = [len(t) for t in texts] |
| 模块导入 | import numpy as np |
建议的学法:先读官方教程第 3–9 章(流程控制、数据结构、模块、类),然后直接做 Kaggle Learn 的 Python 课,在浏览器里边学边练。
第二步:NumPy 与向量化
NumPy 是 Python 数值计算的地基。它的核心对象 ndarray 是一块同类型的多维数组,每个数组都有形状 shape 和数据类型 dtype(NumPy 入门)。NumPy 论文把它称为整个科学 Python 生态的基础,其他数组库(包括深度学习框架的张量)都在模仿它的接口(Harris 等,2020)。
向量化的意思是:不要在 Python 里逐个元素循环,而是对整个数组下一条指令。
import numpy as np
x = np.random.rand(1_000_000)
# 循环版:逐元素在 Python 解释器里执行
y_loop = [v * 2 + 1 for v in x]
# 向量化版:一条语句,在 NumPy 的编译代码里批量完成
y_vec = x * 2 + 1
两种写法结果一样,但向量化版本把循环交给了 NumPy 内部的编译代码,省掉了解释器逐个元素的开销。你可以在 Jupyter 里用 %timeit 自己比一比。
广播(broadcasting)
形状不同的数组怎么相加?NumPy 的规则是:从最后一维(最右边)开始往左逐维比较,两维相等或其中一个是 1,就算兼容;不兼容就报错(官方文档)。
images = np.random.rand(32, 28, 28) # 32 张 28×28 的图
mean = images.mean(axis=0) # 形状 (28, 28)
centered = images - mean # (32,28,28) 与 (28,28):从右往左比,兼容
模型代码里随处可见这种写法:一批数据减去均值、加上偏置向量、按行做 softmax。
一个小例子:只用 NumPy 做线性回归
把前面的内容串起来,用 梯度下降 拟合一条直线(线性回归)。原理见 机器是怎么学习的。
import numpy as np
rng = np.random.default_rng(0)
X = rng.random((200, 1))
y = 3 * X[:, 0] + 2 + 0.1 * rng.standard_normal(200)
w, b, lr = 0.0, 0.0, 0.5
for step in range(500):
pred = X[:, 0] * w + b # 向量化预测
err = pred - y
grad_w = 2 * (err * X[:, 0]).mean()
grad_b = 2 * err.mean()
w -= lr * grad_w
b -= lr * grad_b
print(round(w, 2), round(b, 2)) # 接近 3 和 2
注意这里只有“训练步数”这一层循环,每一步内部对 200 个样本的计算全部是向量化的。下一课 PyTorch 与自动求导 会把手写的 grad_w、grad_b 交给框架自动计算。
第三步:开发环境
虚拟环境
不同项目依赖的库版本经常冲突。Python 自带的 venv 会为每个项目建一个独立目录,装进去的包默认和系统环境、其他虚拟环境隔离(venv 文档):
python -m venv .venv
source .venv/bin/activate # Windows:.venv\Scripts\activate
pip install numpy jupyter
也可以用 uv,它把建环境、装包和锁定版本放在一个工具里,速度更快。
Git
代码、实验配置和小数据集都应该放进 Git。入门读 Pro Git 前三章就够:init、add、commit、branch、push。MIT 的 Missing Semester 课程把命令行、Shell 脚本、Git 和调试工具一起讲了,很适合补课。
Jupyter 与 Colab
Jupyter Notebook 把代码、输出和说明文字放在一页里,适合探索数据和做实验。没有合适的电脑,就用 Google Colab,浏览器打开即可运行(FAQ)。经验做法是:在 Notebook 里试出来,再把稳定的函数挪到 .py 文件里,方便复用和用 Git 比对改动。
常见误区
- “先把 Python 全学完再学 AI”:没必要。掌握上面表格里的语法,就可以边做项目边补。
- 在 NumPy 里写三层 for 循环:几乎总能改写成矩阵运算或广播,改写本身就是最好的练习。
- 所有项目共用一个全局环境:迟早遇到版本冲突,而且别人无法复现你的结果。
- 形状不对就乱加
reshape:先print(a.shape),按广播规则从右往左对齐,弄清楚每一维的含义。
动手试试
- 在 Kaggle Learn Python 完成全部练习。
- 做 numpy-100 的前 50 题。
- 本单元项目:不用循环,只用 NumPy 对一批图片做归一化、做一次矩阵乘法、按行算 softmax,并用
%timeit和循环版比较速度。 - 把项目放进一个新的虚拟环境和 Git 仓库,写一份
requirements.txt(或用 uv 生成锁文件),让别人能一键复现。
想系统地过一遍,可以读 Stanford CS231n 的 Python Numpy Tutorial,它用一页纸讲完了深度学习课程需要的 Python 和 NumPy。
常见问题
学 AI 一定要学 Python 吗?
如果只是用 AI 产品,不需要。但只要你想调用模型 API、做 RAG 或微调,主流框架(PyTorch、Hugging Face、scikit-learn)和几乎所有官方示例都是 Python,学它最省事。
NumPy 和 PyTorch 是什么关系?
两者都是多维数组库,写法很像。NumPy 主要跑在 CPU 上;PyTorch 的张量(tensor)还能放到 GPU 上,并能自动求导。先学 NumPy 再学 PyTorch,过渡几乎无缝。
venv、conda、uv 选哪个?
venv 是 Python 自带的,最简单;uv 是更快的包和项目管理工具,本站软件库也有收录;conda 适合需要非 Python 依赖的科学计算环境。新手选一个坚持用即可,关键是每个项目分开。
没有好电脑怎么办?
用 Google Colab,在浏览器里就能运行 Python 和 Notebook,还能使用免费的 GPU 运行环境(有使用限额)。