基础篇

F10|神经网络最小模型:参数、层、前向与隐藏状态

基础篇约 2.5 千字1 组分步图解

从具体对象与小例子开始,理解计算过程与适用条件。

本章目录
动态图解 · F10

网络层是在重组数值,不是在生成隐藏句子

为什么多层之间还要放一个非线性函数?

第一层把输入组合成一排中间数,再经过规则改变它,最后第二层继续组合。若所有层都只是线性变换,多层可以合并为一次线性变换;非线性使它不再等同于一张更大的线性表。这里的“过滤”仅指ReLU数值规则,不能解释成模型理解了哪些词重要。

ReLU负数变0,非负数保持原值。
隐藏状态两层之间为本次输入算出的向量。
参数W、偏置等控制运算的固定系数。

输入与适用条件:沿用F10两层向量例:x=[1,2],W1=[[1,−1],[1,1]],b1=[0,−2],W2=[2,1]。最后一帧是明确的去ReLU对照。

1 / 6 · 固定输入与参数

第1步,共6步

窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。

网络层是在重组数值,不是在生成隐藏句子:固定输入与参数固定输入与参数x=[1,2];W1与偏置保持固定线性组合xW1+b1 = [3,−1]非线性过滤ReLU([3,−1]) = [3,0]第二层组合[3,0]·[2,1] = 6明确中间对象[3,0]是临时表示,不是参数独立反例去掉ReLU会得到5,不是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说明。好比先理解一个已有计算器怎样算结果,再理解它如何被设计出来。

小模型数值例子能证明你理解了运算,但它没有经过语言数据训练,不能生成有意义的回答。不要把手算网络称为“复现大模型智能”。

运行示例 · F10

固定参数做前向,与学习参数是两件事

输入与条件。一个小网络:输入x,第一层 h=max(0,2x−3),第二层 y=4h+1。参数2、−3、4、1预先给定。

步骤与对象内部动作中间结果 / 新状态
1输入x=1算 2×1−3=−1ReLU把负数变为0,因此h=0。
2走到输出算 4×0+1y=1。
3另一次输入x=2算 2×2−3=1h=1,输出y=5。
4观察共享参数两次使用同一组2、−3、4、1结果改变来自输入改变,不是网络刚刚更新了权重。
5假设训练目标x=2时希望y接近4还要计算损失和梯度,才能决定参数往哪边更新。

把过程连起来。前向是在已有规则下算结果;训练是在目标和误差指导下改规则。中间的h是数值,不是一段隐藏中文解释。

边界与反例。ReLU示例只是两层标量网络,不是完整Transformer;选择小网络是为了把每一步都算清。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

课后自检

自检 1

输入x变化时,w一定跟着变化吗?

查看参考答案收起参考答案
推理中通常不会。w是已有参数,变化的是中间状态和输出。训练才会根据损失更新参数。
自检 2

在正文二维网络x=[1,2]、第一层未激活值[3,-1]、第二层W2=[[2],[1]]中,去掉ReLU后输出是多少?(不是标量运行示例。)

查看参考答案收起参考答案
隐藏值为[3,-1],第二层得到3×2+(-1)×1=5。这说明激活函数实际改变了运算。

机制依据:[F-LINALG][F-AUTOGRAD][TR]。本节数值与情景除另注外均为原创教学示例;来源不代替中文讲解。

记录保存在本机浏览器。

输入关键词即可检索。

↑ ↓ 选择 Enter 打开Esc 关闭 · 仅本地搜索

阅读设置

阅读设置仅保存在本机浏览器,不上传任何数据。