深度学习本质:加权求和与分段开关 很多人学深度学习一上来就被一堆词劝退神经元 权重 偏置 Linear ReLU Loss 梯度下降 反向传播 优化器这些词看起来很高级但真正拆到底其实没有那么玄。我现在更愿意把神经网络理解成一句话神经网络就是用很多组多元一次方程做加权求和再通过 ReLU 这种开关制造分段最后根据 loss 不断调整参数。如果再抽象一点它是在学习一个从输入向量到输出向量的关系函数。一、先从最简单的拟合开始假设我们有一组数据x 1, y 3 x 2, y 5 x 3, y 7 x 4, y 9 x 5, y 11人一眼能看出来y 2x 1但机器一开始不知道。于是我们先规定一个函数形式y_pred wx b这里的w和b就是模型参数。这件事的本质不是“瞎猜 w 和 b”而是我先规定一个函数族所有形如y wx b的直线。然后让模型在这个函数族里找一条最贴近数据集的线。不同的w和b对应不同的线w 1, b 0 y x w 2, b 1 y 2x 1 w 0.5, b 3 y 0.5x 3所以每一组(w,b)其实就是一条候选直线。二、训练不是在求 x而是在求参数这里有个关键认知训练阶段真正要求的不是 y而是 w 和 b。数据集里的x和y是固定的。真正可以动的是w b所以 loss 可以写成L(w,b) 1/N * Σ(wx_i b - y_i)^2这里的x_i、y_i都是数据集里的已知点。变化的是w和b。所以训练的本质是找到一组 w 和 b让 L(w,b) 最小也就是(w*, b*) argmin L(w,b)翻译成人话在所有可能的线里面找到整体误差最小的那一条。三、参数平面如何被 loss 撑成曲面如果只有一个w和一个b那它们组成一个二维参数平面横轴w 纵轴b这个平面上的每一个点(w,b)都代表一条直线y wx b这条线放到数据集上就会产生误差。误差平方和就是 loss。于是每一个(w,b)又有了一个高度(w, b, loss)这就等于loss 把原本的 w-b 参数平面撑成了一张三维曲面。也就是说数据集固定 ↓ w、b 任意变化 ↓ 每一组 w、b 决定一条线 ↓ 这条线和数据集产生误差 ↓ 误差变成 loss 高度 ↓ 参数平面被撑成 loss 曲面训练就是在这张曲面上找最低点。四、最低点怎么找对于简单线性回归可以直接求导解方程。但神经网络参数太多可能有几千、几百万、几百亿个参数无法直接画出曲面也很难直接求解析解。所以深度学习通常用梯度下降它的逻辑非常朴素先随机站在 loss 曲面上的某个点 ↓ 计算当前位置的坡度 ↓ 梯度告诉你 loss 上升最快的方向 ↓ 反方向就是下降方向 ↓ 往下降方向走一小步 ↓ 重复更新公式就是w w - lr * ∂L/∂w b b - lr * ∂L/∂b其中lr是学习率控制每一步走多远。所以训练不是一眼看见最低点而是通过当前位置的梯度一步步往 loss 更低的方向挪。五、Linear 层到底是什么理解了拟合之后再看神经网络里的Linear层其实就没那么神秘了。比如nn.Linear(3,8)意思是输入 3 个数 输出 8 个数假设输入是x [x1, x2, x3]输出是h [h1, h2, h3, h4, h5, h6, h7, h8]那么它展开后就是h1 w11*x1 w12*x2 w13*x3 b1 h2 w21*x1 w22*x2 w23*x3 b2 h3 w31*x1 w32*x2 w33*x3 b3 ... h8 w81*x1 w82*x2 w83*x3 b8也就是说Linear 层本质上就是一组多元一次方程。一个输出维度对应一组权重。多个输出维度对应多组权重。所以Linear(3, 8)本质就是用 8 组不同的权重对同一个 3 维输入做 8 次加权求和。六、二维到八维不是凭空创造信息很多人会卡在这里2 维怎么突然变成 8 维了其实这不是数据自己发生了变化而是网络结构规定的。比如nn.Linear(2,8)就是人为规定我要把 2 个输入数变成 8 个中间数。这 8 个中间数不是现实世界里天然存在的新东西。它们更像是模型自己构造出来的 8 个观察角度。比如输入是x [技术能力, 沟通能力]模型可能会组合出h1偏技术角度 h2偏沟通角度 h3技术强但沟通弱 h4技术一般但表达强 h5综合匹配度 h6风险特征 ...当然模型不会用人类语言给这些维度命名。但数学上它就是在做旧向量 → 新向量也就是用多组权重从不同角度重新观察同一个输入。七、那 ReLU 到底是什么Linear 层只是加权求和。如果只有 LinearLinear ↓ Linear ↓ Linear那无论叠多少层本质上还是一个大的线性变换。因为线性变换叠加后仍然可以合并成线性变换。所以如果没有 ReLU多层网络其实是假深度。ReLU 的作用是ReLU(x) max(0, x)也就是如果 x 0保留 如果 x 0变成 0它本质上是一个开关。Linear 先算一个分数z w1*x1 w2*x2 ... wn*xn bReLU 再判断z 0 吗如果成立这个观察角度激活输出 z如果不成立这个观察角度关闭输出 0所以一个神经元可以理解成一组加权求和 一个是否激活的开关八、ReLU 的判断值怎么确定ReLU 自己的判断标准是固定的大于 0 就保留 小于等于 0 就归零也就是说ReLU 的门槛永远是 0。但是它判断的那个值z是前面的 Linear 算出来的z w1*x1 w2*x2 ... wn*xn b所以真正被训练的是w b不是 ReLU 的 0。可以这样理解Linear先从某个角度给输入打分 ReLU判断这个分数有没有超过 0虽然 ReLU 的判断线是 0但什么样的输入能超过 0是由w和b决定的。比如z x - 3那么ReLU(z) ReLU(x - 3)就等价于x 3 时关闭 x 3 时激活所以从原始输入角度看触发点是x 3。这个触发点是由 Linear 里的参数决定的。九、Linear ReLU 为什么变强如果只有 Linear模型只能表达整体线性关系。加了 ReLU 之后模型开始拥有“分段”的能力。比如ReLU(x - 3)它在x 3这个地方产生一个折点x 3输出 0 x 3输出 x - 3这就不是一整条直线了而是一条折线。多个 ReLU 可以制造多个折点。下一层 Linear 再把这些折点组合起来就可以拼出复杂函数。所以Linear加权求和 ReLU截断、开关、制造分段 Linear重新组合 ReLU再次截断最后整个网络不再是一条简单直线而是很多局部线性片段拼出来的复杂函数。一句话Linear 负责算ReLU 负责切。十、神经网络整体是什么现在可以把神经网络拆成非常朴素的结构输入向量 ↓ Linear多元一次方程组加权求和改变维度 ↓ ReLU大于 0 保留小于等于 0 归零 ↓ Linear再次加权求和 ↓ ReLU再次开关 ↓ Linear输出结果它的本质不是玄学。它就是大量加权求和 大量条件开关 通过 loss 不断调权重也可以说神经网络就是一个参数化的向量映射函数。写成数学形式y_pred f(x; θ)其中x输入向量 y_pred输出向量 θ所有参数包括各层 W 和 b训练就是调整 θ让 y_pred 尽量接近真实 y十一、最终理解现在整个逻辑可以串起来了。第一层理解拟合给定数据集 选择一个函数形式 调整参数 让 loss 最小第二层理解LinearLinear 本质是多元一次方程组 输入向量经过多组权重加权求和 变成新的输出向量第三层理解ReLUReLU 不改变维度 只判断每个值是否大于 0 大于 0 保留 小于等于 0 归零 它让线性关系变成分段线性关系第四层理解神经网络神经网络 多层 Linear ReLU 的复合函数第五层理解训练所有参数共同决定模型函数的形状 loss 衡量当前函数有多差 梯度下降不断调整参数 让 loss 变低十二、最后一句话总结如果用最简单的话说神经网络并不神秘。它底层就是很多多元一次方程在做加权求和ReLU 负责把结果按 0 截断成开关loss 负责衡量错得多离谱梯度下降负责一点点调参数。再压缩一点Linear加权求和 ReLU开关截断 Loss衡量错误 Gradient Descent调整参数 Training寻找更好的向量关系函数所以深度学习的底层骨架其实很简单用一堆可调的加权求和关系经过一堆开关组合去逼近输入向量和输出向量之间的复杂关系。