从零开始动手实现 LLM 第4章读书心得

힘센캥거루
2025년 11월 26일
6
challenge

今天是11月26日,如果每天读一章并看完的话,这次挑战就算成功。

在老大和老二的各种干扰下,不知道能不能做到。

1. Dummy Transformer

从零开始动手实现 LLM 第4章读书心得-1

在实现 GPT 模型的过程中,看到是从 PyTorch 里拿来一个 Transformer 的 dummy 模块用的。

一查才发现,在 PyTorch 的 nn 里已经实现了好几种 Transformer 模型。

把这些 Transformer 模型叫作 dummy(虚拟、空模)是因为它们虽然结构相同,但还没有经过训练。

2. 正规化(归一化)

进入 Transformer Block 的这些值中,如果某一个维度特别大,数据就会朝那个方向倾斜。

因此要把数值转换成均值为 0、方差为 1 的分布。

然后在 Feed Forward Network 里,先用 Linear 把维度扩展,再做非线性变换。

这时候会用到 ReLU 或 GELU 这样的非线性激活函数。

从零开始动手实现 LLM 第4章读书心得-2

据说相比 ReLU,GELU 更“平滑/近似线性”,因此参数会更容易调整。

而且在每个 Block 里,都会通过 Linear 函数先把维度拉高,再缩回来。

把维度拉高之后,就能进行更丰富的非线性探索。

比如有苹果、橙子和胡萝卜,就好像对这些食材进行汆烫、烧烤、剁碎、混合等各种不同方式的烹饪。

然后把做好的各种料理再集中起来,把精华重新压缩回原来的维度里。

从零开始动手实现 LLM 第4章读书心得-3

3. Shortcut(残差捷径)

训练是从发生损失的地方开始往前传,所以会反向一路追溯回去。

比如说,假设二楼在漏水。

那就往上到三楼、四楼、五楼,反向去查到底是哪里开始漏的。

这就是所谓的反向传播(backpropagation)。

从零开始动手实现 LLM 第4章读书心得-4

但像上图那样构建的模型,每经过一个线性层,梯度都会衰减(消失)。

梯度消失的意思是,在反向传播过程中,越深的层几乎得不到训练,这样一来堆很多层就失去意义。

所以会在每个线性层里,把输入值和输出值相加,提供一条防止梯度消失的“旁路”。

这一点用数学来理解会更直观。

Residual 과정 : y = x + F(x)
backward 과정 : dL/dx = dL/dy * (1 + dF/dx)
최종 gradient : dL/dy * (1 + dF/dx)

在反向传播的过程中,由于在每一层的梯度中都会额外加上一个 1,这个 1 总是被保证存在,因此每一层的梯度都不会完全消失。

从而可以更有效地辅助训练过程。

4. 构建 GPT 模型

接下来,把这样构建好的 dummy 模型与 Attention 模块连接起来。 

最后再让这个 Attention 模块可以重复多次,然后对输出的 token 进行重新解码就可以了。

从零开始动手实现 LLM 第4章读书心得-5

5. 后记

一开始内容还挺轻松,越往后看越吃力。

从代码角度看会觉得难,但如果通过比喻和象征来学,其实也没有那么可怕。

现在时代变了,比起死记硬背,更重要的是“理解”。

只会背是创造不出新的东西的,但只要理解了,就能在人工智能的帮助下完成自己的 GPT。

虽然剩下的时间不多了,但还是打算尽量去理解透。

댓글을 불러오는 중...