Arganzheng's Blog

stay hungry, stay foolish

AI 应用工程师学习地图:在非确定性组件之上做可靠产品

A Learning Roadmap for AI Application Engineers

内容简介 这是三张 AI 学习地图中的第三张(三张的总览与分工见《AI 全栈学习地图》)。第一张《AI 算法工程师学习地图》面向造模型的人,第二张《AI-Infra 工程师学习地图》面向跑模型的人,这一张面向用模型做产品的人——AI 应用工程师。它假设读者有后端工程的基础(服务、数据库、API、部署),同时关心产品:什么场景值得做、用户怎么用、效果怎么衡量。 “AI 应用”在这里取宽的定义:用模型改变现有的流程与体验。模型可以是 LLM,也可以是自动驾驶里的感知模型、VLA 与世界模型;动作可以是调用一个 API,也可以是控制一台车;输入可以是用户敲的字,也可以是传感器的每一帧。这张地图以 LLM 应用为主要案例展开,因为它当前的工程实践最成体系,但每一层的问题...

AI-Infra 工程师学习地图:从后端工程师到基础设施贡献者

A Learning Roadmap for AI Infrastructure Engineers

内容简介 这是一张给后端工程师——尤其是 Java、Go 等托管语言背景的工程师——转向 AI-Infra 方向的学习地图。它把这个方向需要的知识组织成十二个系列,说明每个系列解决什么问题、为什么放在那个位置、彼此之间如何依赖,以及按不同目标应该走哪条路径。 它是三张 AI 学习地图中的第二张(三张的总览与分工见《AI 全栈学习地图》):第一张《AI 算法工程师学习地图》面向造模型的人,这一张面向跑模型的人(AI-Infra 工程师),第三张《AI 应用工程师学习地图》面向用模型的人。本地图的 01 Python、03 PyTorch、04 Transformer 与 LLM 三个系列与算法地图共享。三张地图有重叠的名词,分工在本文末尾的《与算法工程师地图的关系...

AI 算法工程师学习地图:从数学基础到大模型训练

A Learning Roadmap for AI Algorithm Engineers in the LLM Era

内容简介 这是三张 AI 学习地图中的第一张(三张的总览与分工见《AI 全栈学习地图》)。这一张面向造模型的人——AI 算法工程师,也是从零开始的读者的入口:L0 数学、L1 工具箱、L2 经典机器学习三个系列假设读者没有 AI 基础。第二张《AI-Infra 工程师学习地图》面向为模型搭建训练与推理系统的工程师,它的 01 Python、03 PyTorch、04 Transformer 三个系列与本地图共享;第三张《AI 应用工程师学习地图》面向在模型之上做产品的 AI 应用工程师。三张地图各自独立,边界与重叠部分在每张地图的末尾说明。 “算法工程师”这个词在大模型时代的含义已经变了。十年前它指的是会推导 SVM 对偶、会调 XGBoost 参数的人;今天它...

面试手撕代码(20):系列总结与通关自测

Coding Interviews: Series Recap and Final Self-Test

十九篇正文回答了一个问题:面试官给一道没见过的中等题、四十分钟,怎样在前五分钟认出它属于哪一类、用哪个模板、复杂度是多少,然后把时间用来写对代码、想清边界、接住追问。前十三篇按解题模式而不是数据结构的名字组织 LeetCode 中等题——哈希、双指针、单调栈、链表、树、图、二分、堆与贪心、回溯、字符串、两篇 DP、设计题,每篇一个可以默写的骨架、三到七道主讲题、一张两种语言的坑表;后六篇是 AI 岗特有的”手撕模型组件”——attention、Transformer block 与反向传播、tokenizer 与解码、损失与训练算法、经典 ML 与指标、Infra 岗的并发与系统,每个组件从零写出来并与 PyTorch 参考实现对拍。 本文不讲新内容,做三件事:把...

面试手撕代码(19):Infra 岗手撕——并发与系统

Infra Interviews: Thread-Safe LRU, Bounded Queues, Thread Pools, Memory Pools, Blocked GEMM, Ring Allreduce, Paged KV and Token Buckets

AI-Infra 岗的手撕题和算法岗不同:不考 DP,考系统——一把锁保护什么、条件变量为什么要 while、线程池的异常怎么传回、内存池的空闲链表放在哪、矩阵乘为什么换个循环顺序快十倍、ring allreduce 每个 rank 发多少字节、paged KV cache 的引用计数和 copy-on-write、令牌桶怎样用一个时间戳懒补充。这些题的代码都不长,但每一道背后都有一个”为什么这样设计”的追问,答得出来才算过。这一篇 Python 与 C++ 各自负责擅长的部分:并发原语、模拟与协议用 Python 讲清逻辑,内存池、GEMM、线程安全容器用 C++ 落到底。 系统层面的原理在 Infra 地图:并发见 Python 在 AI-Infra(03),...

面试手撕代码(18):手撕经典 ML 与评测指标

Classical ML and Metrics by Hand: k-means, Logistic Regression, KNN, PCA, AUC, NDCG, conv2d, NMS

LLM 时代的面试仍然会让你手写 k-means、逻辑回归、PCA——不是因为工作里要用它们,而是它们十行代码就能暴露一个人对”模型 = 目标函数 + 优化”的理解是否到位。评测指标是另一类高频手撕:AUC 怎么在 \(O(n \log n)\) 内算、NDCG 的折扣是什么、F1 在类别极不平衡时为什么比准确率靠谱。CV 相关岗位再加两道:用 im2col 把卷积写成矩阵乘、NMS。这一篇每个组件给出面试够用的实现和一个能说清的”为什么”。 原理在算法地图 L2 经典机器学习与后训练(08)评测;卷积见深度学习基础(05)。 本篇要回答的核心问题是: k-means 的两步各在优化什么、为什么一定收敛?1 AUC 为什么等于”随机一对正负样本排对的概率...

面试手撕代码(17):手撕损失函数与训练算法

Losses and Training Algorithms by Hand: CE, KL, InfoNCE, DPO, PPO/GAE, GRPO, AdamW, Schedules and LoRA

“写出 DPO 的损失函数”“PPO 的 clipped objective 是什么”“AdamW 一步更新怎么算”——这些题是算法岗面试的第二梯队手撕题,考的是能不能把论文里的公式落成十行正确的代码。它们的共同难点是细节:label smoothing 平滑的是哪个分布、KL 的两个参数谁是 target、DPO 的四个 log 概率怎么组合、GAE 的递推从哪一端开始、AdamW 的 weight decay 为什么不进动量、LoRA 的 B 为什么初始化为零。这一篇每个组件给出实现、与 PyTorch(或 trl 的公式)对拍、以及面试官会追的一两个”为什么”。 推导与动机在算法地图:损失与优化器见深度学习基础(03),PPO / GRPO 见后训练(03)...

面试手撕代码(16):手撕 tokenizer 与解码

Tokenizer and Decoding by Hand: BPE, Sampling, Beam Search, Reservoir Sampling and Speculative Acceptance

模型的两端——文本进去之前的 tokenizer、logits 出来之后的解码——是面试里”看起来简单、写起来处处是坑”的手撕题。BPE 的训练循环十几行,但”合并的优先级怎么定”“编码时按什么顺序应用 merge”两个细节决定了写出来的东西对不对;top-p 采样的截断位置差一个元素就是另一个算法;beam search 里”完成的序列怎么处理”“长度归一化”是必问;投机解码的接受-拒绝规则一行公式,但要能证明”最终分布等于目标分布”。这一篇把这五组东西从零写出来,每个都有数值验证。 原理与取舍在算法地图里:分词见预训练(01),解码策略见高效推理(01),投机解码见(02)。 本篇要回答的核心问题是: BPE 训练时”合并最频繁的相邻对”如何做到确定...

面试手撕代码(15):手撕 Transformer block 与反向传播

Transformer Block and Backprop by Hand: LayerNorm, SwiGLU, Parameter Counting, Gradients and Micrograd

上一篇写完 attention,这一篇把它装进一个完整的 Transformer block,再往下挖一层:反向传播。面试里这两块常常连着问——”写一个 GPT block”之后是”LayerNorm 的反向怎么算”“交叉熵对 logits 的梯度是什么”“不用框架写一个两层网络的训练”,最后可能到”实现一个最小的自动求导”。这些题考的是对链式法则的操作性理解:每个算子的局部导数是什么、怎么和上游梯度相乘、形状怎么对上。参数量与 FLOPs 的口算也在这里——它们是面试里最容易拿分的”算术题”。 原理与推导在算法地图里:反向传播见深度学习基础(01),归一化与残差见(02),参数量与算量见 Transformer 与 LLM(01)、(02)。 本篇要回答的核心...

面试手撕代码(14):手撕 attention 家族

Attention from Scratch: Softmax, SDPA, Multi-Head, GQA, RoPE, KV Cache and Online Softmax

“手写一个 multi-head attention”是 AI 岗面试的第一道手撕题,几乎每家都考。它筛的不是”会不会调 nn.MultiheadAttention“,而是四件事:形状(reshape 和 transpose 的顺序为什么是那样)、数值(softmax 为什么减最大值、mask 为什么用 \(-\infty\) 而不是 0)、变体(GQA 在哪一步复制、RoPE 旋转的是哪两个维度)、推理(KV cache 缓存的是什么、增量解码为什么不用 mask)。追问会一直深入到 online softmax——FlashAttention 一趟分块的核心。这一篇把这条链从零写完,每一步都和 PyTorch 的参考实现对拍。 原理与设计动机不在这里展开:at...

×