Arganzheng's Blog

stay hungry, stay foolish

算法工程师的工具箱(01):Python 使用层——读懂训练代码的语法、流式过一遍语料、把实验写成脚本

Python in Use for Algorithm Engineers: The Syntax Behind Training Code, Streaming a Corpus, and Scripting an Experiment

算法工程师每天写的 Python 不多,读的很多:transformers 的 Trainer、别人的数据脚本、论文附带的训练代码。这些代码里反复出现同一小撮语法——__getitem__、yield、@torch.no_grad()、with torch.autocast(...)、**kwargs、@dataclass——它们不是 PyTorch 发明的,是 Python 的协议:PyTorch 只是约定”你按这个形状写,我就能用”。本篇从要做的四件事出发——过一遍语料、写配置、读懂训练代码、把预处理跑快——把这一小撮语法带出来,讲到会读会用为止。Python 的机制(这些语法在解释器里怎么实现、GIL 是什么、装饰器怎么改函数)是 Infra 地图 01 系列...

算法工程师的工具箱:从一个想法到一次能跑的实验(总纲)

Tooling for AI Algorithm Engineers: NumPy, PyTorch, Hugging Face and the GPU in Your Head

内容简介 《算法工程师的工具箱:从一个想法到一次能跑的实验》是一组共六篇的系列文章,对应《AI 算法工程师学习地图》的第 L1 层(编程与工具)。它面向读完 L0 数学、会一门编程语言、准备第一次亲手训一个模型的读者,讲的是把一个想法变成一次能跑、能复现、能与 baseline 对比的实验,要经过哪些工具、每个工具用到什么程度。 它回答的问题是: 能不能在一天之内,把一篇论文里的方法变成一次能跑、能复现、能与 baseline 对比的实验?1 算法工程师的日常是把一个想法变成一次实验:读到一篇论文说”把 DPO 的 sigmoid 换成 hinge 会更稳”,当天下午就要在一个 1B 模型、一万条偏好对上跑出对比曲线。这条路上要经过的东西很固定——N...

算法工程师的数学(09):系列总结与通关自测

Mathematics for AI Algorithm Engineers: Series Recap and Final Self-Test

八篇正文回答了一个问题:拿到一篇 LLM 论文能不能读懂它的每一个公式,给一个建模假设能不能推出它的训练 loss,给一个评测结果能不能判断差异是真的还是噪声。前三篇是线性代数(形状与成本、向量的比较、正交与低秩),第四、五篇是概率(语言模型是一个条件分布、从最大似然推出交叉熵),第六篇是信息论(熵、交叉熵、KL 到 DPO),第七篇是微积分与优化(链式法则、\(p - y\)、策略梯度),第八篇是统计推断(置信区间与 scaling law 的拟合)。八篇合起来,是《AI 算法工程师学习地图》的 L0 层——后面每一层的公式都建在这一小块数学上。 本文不讲新内容,做三件事:把八篇压成一张表与八段回顾,把贯穿八篇的几条线拎出来,然后给一套三段式的通关自测——判断与...

算法工程师的数学(08):统计推断与拟合——评测的置信区间与 scaling law

Statistical Inference and Curve Fitting: Confidence Intervals for Benchmarks and How Scaling Laws Are Fit

“我们的模型在 HumanEval 上比基线高 3 个点。”这句话是不是一个结论?这一篇给出判断它的工具:置信区间与显著性。它们来自第四篇的两条性质——样本均值的标准差是 \(\sigma / \sqrt{n}\)、大量独立量之和近似高斯——加上一个数字 1.96。然后讲另一件”从一组数字里找规律”的事:拟合。scaling law 那些漂亮的曲线是怎么从几十个实验点拟出来的、为什么画在双对数坐标上、以及 Chinchilla 的”每个参数配 20 个 token”是怎么算出来的。 这一篇的每个概念都用模拟来看:统计里”标准误”、”95%”、”p 值”这些词说的都是”如果把同一件事重复做一万次会怎样”——那就真的重复一万次,画出来。全部数字与图由 math-for...

算法工程师的数学(07):导数、梯度与链式法则——softmax 的梯度与策略梯度

Derivatives, Gradients and the Chain Rule: The Softmax Gradient and the Policy Gradient

前两篇给了目标:交叉熵、KL、DPO 的 loss。这一篇讲怎么让参数朝着目标变好——求导,然后往导数的反方向走一小步。全部工具只有三件:导数(一个数变一点,函数变多少)、梯度(很多个数一起变时的导数)、链式法则(复合函数的导数是局部导数的乘积)。用它们推两个后面反复出现的结果:softmax + 交叉熵的梯度是 \(p - y\)(简洁到令人怀疑),以及目标是期望时的梯度——策略梯度,RL 的全部算法都建立在它上面。最后讲用梯度更新参数的最简单方法与学习率。 这一篇是机器学习的发动机:没有梯度就没有训练。所以每个概念都配一张图、一个能手算的数字例子和一段能跑的代码——文中的全部数字与图由 math-for-ai/07_gradients_and_policy_g...

算法工程师的数学(06):熵、交叉熵与 KL——从困惑度到 DPO

Entropy, Cross-Entropy and KL Divergence: From Perplexity to the DPO Loss

信息论在这张地图上看起来最”理论”,却是后训练的主语言:SFT 的 loss 是交叉熵,RLHF 与 DPO 的约束项是 KL,蒸馏的目标是 KL,投机解码的接受率是两个分布的总变差。它们全部建立在三个量上——熵、交叉熵、KL 散度——以及一条把三者连起来的等式。这一篇从定义讲起,讲清 KL 的两个方向为什么行为完全不同,然后走完一条完整的推导链:从”最大化奖励且不偏离参考模型”的目标,推出它的闭式最优解,再推出 DPO 的 loss。 全篇的核心问题是: 能不能分清熵、交叉熵、KL 各是什么?1 能不能从 KL 约束的最优策略推出 DPO 的 loss?2 一、总览 1. 三个量一条等式 熵、交叉熵与 KL 的定义、含义与 LLM 里的角色 ...

算法工程师的数学(05):从最大似然到交叉熵——第一个要会推的 loss

From Maximum Likelihood to Cross-Entropy: The First Loss You Should Be Able to Derive

训练日志里跳动的那个数字——loss 从 11 降到 2 点几——是什么?它从哪来?为什么是那个公式?这一篇给出完整的答案:从上一篇”语言模型是条件分布”的定义出发,用一个自然的原则(让训练数据出现的概率最大),三步推出它。这三步是后面所有 loss 的模板:SFT、奖励模型、DPO 都是同一个式子换一个概率。然后讲模型是怎么把一堆实数变成概率的(softmax),以及温度、top-k、top-p 在这个分布上做了什么。 这一篇是全系列最重要的一篇之一:loss 是训练的全部驱动力——模型的每一次参数更新,都是朝着”让这个数变小”的方向走的。不理解它,就看不懂训练曲线、看不懂 SFT 为什么要 mask、看不懂奖励模型和 DPO 的公式为什么长那样。所以本文不吝篇...

算法工程师的数学(04):概率入门——语言模型是一个条件分布

Probability Basics: A Language Model Is a Conditional Distribution

前三篇讲的是模型怎么算——一堆矩阵乘法。这一篇讲模型是什么。答案只有一句话:语言模型是一个条件分布 \(p(x_t \mid x_{<t})\)——给定前面的文字,输出下一个 token 的概率。这句话里每个词都需要概率的语言来定义;而一旦定义清楚,训练目标(第五篇)、采样方式、KV cache 为什么能增量、attention 为什么除以 \(\sqrt{d_k}\),都是它的直接推论。 本篇从零建立这套语言。全篇的核心问题是: “语言模型是一个条件分布”这句话的每个词是什么意思?1 它决定了哪些事?2 一、总览 1. 本文的对象 本文只讲五组概念,每一组在语言模型里都有一个对应物: 本文的五组概念与它们在语言模型里的对应物 ...

算法工程师的数学(03):正交与旋转、特征值与 SVD——从 RoPE 到 LoRA

Orthogonal Matrices, Rotations, Eigenvalues and SVD: Why RoPE Encodes Relative Position and Why LoRA Works

前两篇把矩阵当作”一堆数”,讨论它的形状、成本和向量之间的比较。这一篇看矩阵的两种结构:一种是正交——矩阵只旋转、不拉伸,内积在它作用下不变;另一种是低秩——一个巨大的矩阵其实只由少数几个方向撑起来。前者解释了现代 LLM 的位置编码 RoPE 为什么只用一个旋转就让 attention 只依赖相对位置;后者解释了 LoRA 为什么能用半个百分点的参数微调一个 8B 模型。 全篇的核心问题是: RoPE 为什么能编码相对位置?1 LoRA 的 \(r = 16\) 在 Llama-3-8B 上加了多少参数、为什么够用?2 一、总览 1. 两条线 本文只讲两件事,各是一条五步的推理链,终点分别是开头那两个问题: 正交线(二、三、四章):正...

算法工程师的数学(02):内积、范数与余弦相似度

Inner Product, Norms and Cosine Similarity: One Language for Attention, Retrieval, Regularization and Quantization Error

上一篇说一个 token 是一个向量。这一篇回答一个自然的问题:两个向量怎么比较?1“这个 token 该看那个 token 多少”(attention)、”这段文本和查询有多相关”(检索)、”这两张图和这两句话配不配”(CLIP)、”量化后的权重离原来差多远”(压缩)、”参数是不是太大了”(正则化)——五个看起来不同的问题,用的是同一套只有三个词的语言:内积、范数、余弦相似度。 全篇的核心问题是: 两个向量”像不像”有几种算法?2 各在哪里用?3 为什么 attention 用内积、检索用余弦、量化误差用 Frobenius 范数?4 一、总览 1. 三个词一张图 先把符号认全(后面各章逐个展开): 三个词的公式、读法与各自保留的信息 ...

×