F10|神经网络最小模型:参数、层、前向与隐藏状态
从具体对象与小例子开始,理解计算过程与适用条件。
本章目录
网络层是在重组数值,不是在生成隐藏句子
为什么多层之间还要放一个非线性函数?
第一层把输入组合成一排中间数,再经过规则改变它,最后第二层继续组合。若所有层都只是线性变换,多层可以合并为一次线性变换;非线性使它不再等同于一张更大的线性表。这里的“过滤”仅指ReLU数值规则,不能解释成模型理解了哪些词重要。
输入与适用条件:沿用F10两层向量例:x=[1,2],W1=[[1,−1],[1,1]],b1=[0,−2],W2=[2,1]。最后一帧是明确的去ReLU对照。
1 / 6 · 固定输入与参数
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
先标出输入和系数表的身份。一次推理里的W不是根据x现写出来的。
本步状态由图形与说明共同给出。默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
多层和非线性提高表达能力,但不能凭层数预测质量。
怎样实现
看每个算子的输入、输出和参数,逐层记录中间值。
可能的代价与误解
混淆激活值与参数,容易误以为每次提问都训练模型。
如何判断是否做对
正常前向的输出6;去ReLU独立对照输出5。
从一条可调的规则认识“模型”
考虑y=w×x+b。x是每次变化的输入,w与b是决定计算规则的数。若w=2、b=1,输入3得到7。把w改为4,相同输入变成13。
参数是像w、b这样可以通过训练调整的数;超参数是训练或结构的设置,例如一层宽度、学习率、批大小,通常不通过同一梯度步骤自动学出;激活值或中间表示是某次前向算出来的临时数,如这次得到的7。
用户新输入改变的是x;正常推理并不因此自动改变w。
从一个系数w到一张参数表W
上面的w=2只有一个数;当输入和输出各有多个特征时,要存下许多个系数,把它们排成矩阵W。小写w常表示单个参数,大写W常表示整张参数表。 写W1、W2是在区分第1段和第2段变换,不是把W乘1或乘2。
偏置b也是一组参数,不过它在矩阵乘法后执行逐格相加。X和隐藏状态h是每次输入计算产生的数;W和b决定这些数怎样变换。正常推理从权重文件加载W、b后使用它们,不会因为某个用户输入变化就自动执行训练更新。
接下来先使用同一组给定参数算前向。等F17—F18建立“损失、梯度、优化器”的概念后,再解释参数如何被调整。理解参数是系数表,并不要求先把训练算法全部学完。
一个有两层的完整数值例子
输入x=[1,2],第一层矩阵W1和偏置b1为:
W1 = [[1,-1],[1,1]] b1 = [0,-2]
xW1 = [1×1+2×1, 1×(-1)+2×1] = [3,1]
xW1+b1 = [3,-1]
然后应用ReLU激活函数:每个数若小于0就换成0,否则保留。于是得到隐藏表示h=[3,0]。
第二层用W2=[[2],[1]],结果hW2=3×2+0×1=6。这一次从输入到输出的计算叫前向传播(forward pass),也可简称前向。
所谓“层”,不是屏幕上一个抽象方框,而是一组按规则变换数据的运算。一个复杂模型将许多层串起来,上一步结果成为下一步输入。
为什么中间需要非线性函数
如果一直只乘矩阵、加偏置,多个线性或仿射变换可以合并成一个,层数增加并不自动带来不同类型的表达能力。ReLU这类不能用单一线性变换表示的操作提供非线性,让网络能表示更复杂的关系。
实际Transformer常用GELU、SiLU或带门的前馈结构。先懂“为什么要有非线性”,再去读具体函数,不必在第一次遇到名字时就背全部公式。
隐藏状态不是隐藏的中文草稿
上例h=[3,0]是一次计算结果,不是一句被藏起来的“我想到了答案”。语言模型里,一个Token通过某层后得到的一排数也叫隐藏状态。它会携带对后续计算有用的信息,但不能直接把每个坐标翻译成一句中文解释。
d表示每个位置的隐藏宽度;L常表示层数;参数总量与所有矩阵的尺寸和共享方式有关。d=4096不代表只有4096个参数。仅一个4096×4096矩阵就有16,777,216个格子。
权重共享和参数冻结
同一个W可以作用于同批每条输入、每个Token位置,叫共享权重。它不意味着共享各位置的计算结果。输入不同,中间状态仍不同。
“冻结参数”表示训练时不更新某些参数;“推理使用固定权重”表示本次计算不执行更新。某些模型服务会在别的时间训练新版本,但不能把普通对话中纠错等同在线训练。
为什么教材可以先给权重再讲训练
为了看懂内部运行,先拿已知权重走完前向。权重如何从大量例子中得到,放在F17—F19说明。好比先理解一个已有计算器怎样算结果,再理解它如何被设计出来。
小模型数值例子能证明你理解了运算,但它没有经过语言数据训练,不能生成有意义的回答。不要把手算网络称为“复现大模型智能”。
固定参数做前向,与学习参数是两件事
输入与条件。一个小网络:输入x,第一层 h=max(0,2x−3),第二层 y=4h+1。参数2、−3、4、1预先给定。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1输入x=1 | 算 2×1−3=−1 | ReLU把负数变为0,因此h=0。 |
| 2走到输出 | 算 4×0+1 | y=1。 |
| 3另一次输入x=2 | 算 2×2−3=1 | h=1,输出y=5。 |
| 4观察共享参数 | 两次使用同一组2、−3、4、1 | 结果改变来自输入改变,不是网络刚刚更新了权重。 |
| 5假设训练目标 | x=2时希望y接近4 | 还要计算损失和梯度,才能决定参数往哪边更新。 |
把过程连起来。前向是在已有规则下算结果;训练是在目标和误差指导下改规则。中间的h是数值,不是一段隐藏中文解释。
边界与反例。ReLU示例只是两层标量网络,不是完整Transformer;选择小网络是为了把每一步都算清。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
课后自检
输入x变化时,w一定跟着变化吗?
查看参考答案收起参考答案
在正文二维网络x=[1,2]、第一层未激活值[3,-1]、第二层W2=[[2],[1]]中,去掉ReLU后输出是多少?(不是标量运行示例。)
查看参考答案收起参考答案
机制依据:[F-LINALG][F-AUTOGRAD][TR]。本节数值与情景除另注外均为原创教学示例;来源不代替中文讲解。