从一个神经元出发,一个一个地加,一层一层地叠。搭到第二层时你会看到:第二层的参数不是什么新东西,就是第二层神经元自己的 w 和 b。为了分清属于哪一层,本页在参数右上角标层号:第 1 层是 w⁽¹⁾、b⁽¹⁾,第 2 层是 w⁽²⁾、b⁽²⁾。
有的教材把第 2 层的 w⁽²⁾、b⁽²⁾ 另起名字叫 v、c,指的是同一样东西。
接着《神经网络如何逼近任何函数》第二步看。
每位评委(隐藏神经元)只盯着一件事,只能举 0~1 分的牌子。他看什么、多敏感,由他自己的 w、b 决定。
主持人(输出神经元)把所有牌子汇总成最终得分。每位评委说话的分量不一样:A 的分 ×2,B 的分 ×(−0.5)……这些“分量”就是主持人的 w⁽²⁾。主持人本身也是一个神经元,只不过在第 2 层,所以他的 w 标 ⁽²⁾。
点「下一步」往下看,或者「自动播放」。每一步的动画会循环播放。
左边是隐藏层里的一个神经元,右边是输出神经元。逐行对比:参数都叫 w 和 b,结构一模一样,只有层号不同。唯一的区别在最后一行。
所以更准确的说法是:每个神经元都有“w 和 b”,只不过输入有几条,w 就有几个。输出神经元有 3 条输入线,所以有 3 个 w。右上角的层号只是告诉你它属于哪一层。
全部的 w 和 b,仅此而已。它们是一个个可以拧的旋钮,训练就是在找这些旋钮的位置;下载一个模型的“权重文件”,里面存的也就是这些数(严格说 w 叫权重、b 叫偏置,合称参数)。
激活函数 σ 不在其中。sigmoid、tanh、ReLU、GPT 用的 GELU,都是事先选好、写死的公式,没有要学的数,训练时一直不变。它像流水线上一台固定的机器:负责把直线“掰弯”,但本身不需要调。
sigmoid:σ(z) = 1 / (1 + e⁻ᶻ)
tanh:tanh(z) = (eᶻ − e⁻ᶻ) / (eᶻ + e⁻ᶻ)
ReLU:ReLU(z) = max(0, z)
GELU:GELU(z) ≈ 0.5·z·(1 + tanh(√(2/π)·(z + 0.044715·z³)))
公式里只有 z 和写死的常数。每种激活函数的图像、w 和 b 在图上各管什么,见《w、b 和激活函数,在图上长什么样》。
(少数变体例外,比如 PReLU 的负半轴斜率可以学。它会被当作额外的参数来训练,但主流大模型基本不用。)
橙色是目标曲线。三个隐藏神经元的 w⁽¹⁾、b⁽¹⁾ 决定各自的台阶放在哪、有多陡;第 2 层的 w⁽²⁾ 决定每级台阶多高、朝上还是朝下。先勾上「锁定 w⁽²⁾ = 1」,只用第 1 层的参数试试,再放开 w⁽²⁾。
w⁽²⁾ 被锁成 1:每个神经元只能贡献一级“往上跳 1”的台阶。w⁽¹⁾、b⁽¹⁾ 再怎么调,也只是把台阶左右挪、变陡变缓,高度和方向变不了。
输出神经元和隐藏神经元一样:每条输入线一个权重 w,再加一个偏置 b。w⁽²⁾、b⁽²⁾ 和 w⁽¹⁾、b⁽¹⁾ 是同一种东西,只是属于不同的层。
σ(2·z) 只是让曲线更陡,最高还是 1;2·σ(z) 才能把高度变成 2,乘负数还能翻过来。w⁽²⁾ 乘在第 1 层的 σ 之后,起的正是后一种作用。
不管多少层,每层都只有两种参数:权重矩阵 W 和偏置 b。层号写在右上角:W⁽¹⁾、W⁽²⁾、W⁽³⁾……每一格就是某条连线上的一个 w。
一句话:多层网络就是“下一层把上一层的输出当输入”。每层的神经元都有自己的 w 和 b,右上角的层号只说明属于哪层。第 2 层的 w⁽²⁾ 非有不可,是因为 σ 把每个 h 锁在 0~1 之间,只有在 σ 之后再乘一次权重,才能定下每级台阶的高度和方向。
每题作答后马上看到解析;点「重做练习」清空重来。