代码定义结构,权重存储知识:一个例子看懂大模型如何推理
下载一个开源模型时,经常会看到一种奇怪现象:模型代码只有几十 KB,权重文件却有几个 GB,甚至几十 GB。
为什么差距这么大?模型的知识到底存放在哪里?当我们输入一句话时,代码和权重又是如何配合,最终生成结果的?
要理解这些问题,不需要先研究 Transformer 或注意力机制。我们从一个只有 3 个参数的小模型开始,一步步走完整个推理过程。
先搭一个最小模型
假设我要做一个判断天气的小模型。
输入两个数:
温度
湿度
输出一个数:
适合出门的分数
分数越高,越适合出门。
模型结构写出来只有几行:
class WeatherModel:
def init(self):
self.w1 = None
self.w2 = None
self.b = None
def forward(self, temp, humidity):
return temp * self.w1 + humidity * self.w2 + self.b
代码定义了这样一个公式:
分数 = 温度 × w1 + 湿度 × w2 + b
这里有一个很重要的事实:
代码只规定了:
这里需要三个数字。
但它并没有规定:
这三个数字具体是多少。