阅读之前

手写小模型,看懂大模型

把文字发给模型,再拿回一段回答,你大概已经见过这个过程。

真正让人犯难的,常常是回答不如预期的时候:明明说得很流畅,事实却错了;换一句问法,原本会答的题又不会了。你可以继续改提示词、换模型,但心里可能始终没有把握:这次究竟改到了哪一层,下一次还会不会出问题?

学习底层原理,就是为这些判断找到依据。

没有学过 Python 或深度学习,也可以先从图解、视频和网页实验开始。从一个神经元出发,用20讲搭建并训练同一个小语言模型,让你能沿着具体输入,看到计算、学习与生成究竟怎样发生。

已经会用,为什么还要学底层原理

先看三个会实际影响开发的问题。

模型说得很像真的,为什么还会答错?

文字生成时,模型会根据前文计算后续文字的候选分数,再从中选择,接着重复这个过程。句子接得顺,与句子里的事实是否可靠,需要分别检查。

等你亲手看过这些分数、试过不同的生成选择,就更容易理解为什么流畅的回答还需要核验,也会开始追问:它这次读到了哪些材料,哪些条件没有给到,结果该用什么办法验证。

效果不好,应该先改输入,还是重新训练?

把一份产品手册放进本次输入,和把一批问答拿去微调,发生的是两件不同的事。前者改变模型这次能读取的材料,后者通过训练改变参数。检索增强通常帮助找到并提供相关材料;微调则用训练目标引导参数更新。

补充输入改变本次能读取的材料;微调通过训练更新参数,二者需要不同的排查方法

这些区别会影响你的排查顺序。模型没有读到必要资料,先检查输入与检索;样本、评分目标或训练过程有问题,就需要回到数据和训练记录。理解它们,不等于已经会设计所有应用,但你能更清楚地说明自己要改变什么、准备怎样验证。

训练过了,怎样知道它真的学会了?

你会在书中看到一个具体反差:模型对训练题越来越熟,换成留出的题目,表现却可能变差。微调后答对了几道题,也可能损伤原来的续写。

所以我们会保留训练与留出结果,重新加载权重,用不同输入再测一次。在跑通训练的过程中,你也会练习怎样检查学习结果。

这三件事有一个共同点:你开始能把问题追到输入、计算、参数、训练目标或生成步骤,逐项检查。以后读模型文档、看训练代码,或者和算法同事讨论方案,也就有了可以落地的共同语言。

为什么从手写一个小模型开始

完整的大模型训练涉及大量数据、算力与工程细节。第一次学习时,这些东西很容易盖住你真正想看清的计算。

我们把规模缩小,保留一条完整链路:文字变成数字,数字经过网络得到候选分数,用错误计算梯度,再更新参数;训练结束后,加载这些参数逐步生成文字。每个关键环节都能暂停,拿一组小数字手算,再去代码里找到对应步骤。

小规模也让实验变得便宜:只改一个输入、屏蔽一条连接、调整一个训练目标,就能观察结果。沿着“遇到什么问题,增加什么部件,结果怎样改变”,你可以逐步核对架构和计算,把模型搭起来。

小模型的能力有限,但它足以让你亲手走通计算、预训练、生成与监督微调。这条过程,是后续理解更大模型的起点。

你会做出什么

最终项目是一个有 92,352个参数的文字生成模型。它从随机初值开始,学习几百条短句,接着生成文字,再用问答样本做监督微调。普通电脑用CPU就能运行这个教学规模的实验。

教学模型的实际成果:预训练后续写红色的苹果,问答微调后生成对应答案

上面保留的是实际输出。模型也有失败:换一组问法仍可能答错,微调还可能损伤原来的续写。本书会带你一起查输入、评分目标和参数,判断变化究竟从哪里来。

学完后,你应当能够:

  • 从一段文字追到下一字的候选分数,解释每个组件为什么需要。
  • 区分输入、可训练参数、临时结果和梯度,手算一条简单的反向路径。
  • 从随机参数完成预训练,保存并重新加载权重来生成文字。
  • 用问答样本继续微调,核对哪些位置评分、哪些参数更新。
  • 对比训练与留出结果,追查一次微调退化,判断改善伴随的代价。
  • 独立接入含新字符的数据,检查词表、标签、模型与重载结果,写出有证据的实验说明。

适合怎样的读者

不要求先学过 Python、机器学习、神经网络或微积分。可以先看图解、运行网页里的现成例子,再改一个数观察结果。想独立修改完整模型时,需要逐步熟悉函数、循环、数组和基本的类;配套代码和注释可以边读边学。

课程使用Python和PyTorch。必要的语法与数学记号会在第一次使用时解释:先看把一个参数挪动一点,错误怎样变化,再认识导数;先把三个位置按比例汇总,再认识注意力里的符号。

前五讲先手写乘加、网络与梯度,之后用PyTorch执行张量运算和自动求导。模型结构、训练步骤与生成循环仍由我们写出来。

20讲完整目录

20讲分成四个阶段,每一步都接上前一步的代码:先让数值网络学起来,再把文字接进来,补齐读取前文的组件,最后训练、生成和微调同一个模型。

20讲完整目录:01—06让数值网络学起来,07—09把文字接进来,10—16读取前文并组装模型,17—20完成训练、生成、微调与独立迁移

展开20讲完整标题

第一阶段:让数值网络学起来

  • 01|神经元:模型接着写字,底下先算什么?
  • 02|向量与矩阵:算两个数,要复制两遍代码吗?
  • 03|非线性:四行规则,为什么乘加函数做不到?
  • 04|梯度:方向对了,为什么也会越改越差?
  • 05|反向传播:9个参数,难道要逐个试?
  • 06|训练循环:更新500次,四条预测会怎样?

第二阶段:把文字接进来

  • 07|Embedding:文字怎样变成网络的输入?
  • 08|Softmax:分数怎样变成下一字的概率?
  • 09|训练目标:一句话怎样变成可学习的题?

第三阶段:读取前文,组装模型

  • 10|注意力:预测下一字,怎样读到前文?
  • 11|因果掩码:并行训练为什么不算偷看答案?
  • 12|多头注意力:各个头分别读向哪里?
  • 13|RoPE:模型怎样知道先后顺序?
  • 14|SwiGLU:读完前文以后,还要怎么算?
  • 15|残差与RMSNorm:为什么留一条原路?
  • 16|完整模型:跟着“欢”这个字走一遍

第四阶段:训练、生成与微调

  • 17|预训练:训练题熟了,新题为什么更差?
  • 18|生成:一句话究竟做了几次选择?
  • 19|监督微调:会续写,为何还不会回答?
  • 20|全流程:把预训练、微调和生成串起来

开篇词带你先看成品、跑通第一个算例;结束语归拢学习成果,给出继续研究真实语料、任务微调与公开模型的路线。它们不占20讲技术正文。

配套材料怎么用

每讲先用小数字讲清一个问题,再对应带注释的核心代码,最后改条件验证。已经讲清的部分会封装成组件,后面直接组合。逐讲入口服务当前实验,最终共用同一套模型、数据、训练、保存和生成代码。

机制图用来看连接、形状和数值;动图用来看连续变化;交互演示可以停在某一步核对。训练日志、成功与失败输出也都保留,能回到原记录查证。

第一次只运行一个神经元,无需安装第三方包。到第06讲使用PyTorch时,再按环境说明安装依赖。

学习终点是文字生成模型的核心机制和一条能复现的训练流程。小模型只学习有限短句;真实语料、大规模训练、部署与其他微调方法,可以在这条基础上继续探索。

从开篇词《先给成品出两道题,再从零把它造出来》开始。

观看配套视频2:14

输入关键词,搜索全部 23 篇文章。

交互实验
独立打开
查看配图
100%