
上一篇理清了 AI → 机器学习 → 深度学习的关系。这篇我们拆到最小单元深度学习里一个神经元到底在算什么以及把这些神经元拼起来以后发生了什么。从一道算术题开始一个神经元做的事情写成代码yw1*x1w2*x2w3*x3bx1、x2、x3 是输入。比如你要预测房价x1 面积平方米x2 楼层x3 距离地铁站米w1、w2、w3 是权重表示每个因素有多重要。面积可能比楼层重要那 w1 大一些。b 是偏置可以理解成起步价——面积为零的时候也有个基础价格。这个式子就在做一件事加权求和。跟你高考算总分没两样——语文 150 分、数学 150 分、英语 150 分、物理 100 分权重不一样。工作以后的绩效打分也是同理产出占 60%、协作占 20%、考勤占 20%。加权完了加个基础分得一个最终分。这就叫线性回归是机器学习里最简单的模型。也是神经网络的起点。手算一遍搞几个虚构的数据感受一下过程。假设房价跟面积和距地铁站距离有关忽略楼层了两个输入好算房价的公式是 y 0.8 × 面积 (-0.3) × 距地铁距离 50。如果你有一套 100 平、距地铁 200 米的房子y 0.8 × 100 (-0.3) × 200 50 80 (-60) 50 70模型预测 70 万。实际成交价是 85 万差了 15 万。模型不准因为权重 (0.8, -0.3) 和偏置 (50) 是瞎猜的。下一篇我们会讲怎么调这些参数让预测越来越准。现在先记住神经网络的所有参数w 和 b都是数字训练就是在不断调整这些数字。光加权求和不够叠多少层加权求和都不够。因为 wxb 这种线性变换叠一万层展开还是个线性变换。w2(w1·x b1) b2 (w2·w1)·x (w2·b1 b2) 新w·x 新b还是一次的。现实世界的问题没有几个是线性的。人脸识别不是一条直线能分出来的语音识别也不是。所以每个神经元在加权求和之后还要多做一步激活函数。yactivation(w1*x1w2*x2...b)这个 activation 函数必须是非线性的。不是直线才能把多个神经元的输出弯曲组合出复杂的决策边界。三个常用的激活函数Sigmoid把任意实数压缩到 0~1 之间。输入越大越接近 1越小越接近 0。形状像拉长的 S。最早很流行现在输出层做二分类还在用——因为输出正好可以解释成概率。最大的毛病输入过大或过小的时候梯度趋近于 0曲线两端接近平了。反向传播是链式法则中间有一个接近 0 的梯度前面的层就几乎收不到更新信号了。这叫梯度消失直接导致深网络训不动。这也是为什么 sigmoid 现在不怎么出现在隐藏层了。Tanh把输入压缩到 -1~1 之间。形状跟 sigmoid 类似也是 S 形不过是零中心的——对称。比 sigmoid 好一点但同样有梯度消失问题。实际使用中也不如 ReLU 常见。ReLUdefrelu(x):returnmax(0,x)没了。负数直接变 0正数原样输出。ReLU 看着简单到让人怀疑这玩意能有用 答案是太有用了。优点梯度不会消失x0 的时候导数是 1不变小计算极快就是一个 if 判断缺点x0 的神经元永远沉默再也不会被激活叫神经元死亡学习率太大容易触发这个带点攻LeakyReLU、ELU就是为了解决死亡问题的思路是负数侧给一个很小的斜率而不是直接 0。现阶段记住 ReLU 就行。你要搭一个全连接网络隐藏层无脑用 ReLU90% 的场景是对的。输出层看情况——分类用 Softmax回归直接用线性输出不加激活。拼起来前向传播单个神经元能力有限叠起来就不一样了。输入层 ──→ 隐藏层 1 ──→ 隐藏层 2 ──→ 输出层 3 个输入 4 个神经元 3 个神经元 1 个输出每一层的每个神经元都接收上一层的全部输出经过加权求和 ReLU传给下一层。这种叫全连接层Fully Connected Layer是最基础的结构。我们走一遍前向传播的完整流程。假设输入层 3 个数[2, -1, 3]隐藏层 2 个神经元为了简洁权重和偏置已经学好了输出层 1 个神经元隐藏层神经元 A 的计算z_A w1_A × 2 w2_A × (-1) w3_A × 3 b_A 0.5 × 2 (-0.3) × (-1) 0.8 × 3 0.1 1.0 0.3 2.4 0.1 3.8 输出_A relu(3.8) 3.8 (正数保持不变)隐藏层神经元 B 的计算z_B 0.1 × 2 0.7 × (-1) (-0.4) × 3 (-0.2) 0.2 (-0.7) (-1.2) (-0.2) -1.9 输出_B relu(-1.9) 0 (负数直接变 0)输出层z_out 1.2 × 3.8 (-0.6) × 0 0.3 4.56 0 0.3 4.86 输出_out 4.86这就是一次完整的前向传播。从原始输入 [2, -1, 3]经过两层网络算出最终结果 4.86。一个 GPT-4 做推理的时候就是在做这件事——只不过规模是上千亿次这样的运算。每一层在学什么2015 年有研究者把训练好的深度卷积网络每一层的权重可视化出来发现了一个非常符合直觉的层级结构第 1 层学的全是边缘横线、竖线、左斜线、右斜线、拐角第 2 层把边缘拼成纹理和简单形状圆圈、条纹、方格第 3 层拼出部件眼睛的轮廓、鼻子的大概形状、耳朵的弧线更深层组合出完整的语义模式一张脸的正面 vs 侧面、一只猫 vs 一只狗没人告诉网络你先找边缘再找眼睛它自己是这么学的。前端层学到的是通用的低层特征越往后越跟具体任务相关。这也是为什么你拿一个在 ImageNet 上训练好的网络把最后几层扔掉接上自己的分类器少量数据就能在自己的任务上取得不错的效果——这项操作叫迁移学习工业界极其常用。为什么深度比宽度重要刚学的时候我想一层搞宽点不就行了10000 个像素直接怼 10000 个神经元凭啥不行。问题在于——表达能力的天差地别。一层很宽的全连接层本质上只做了一次非线性变换。它能学会的是一个复杂的单步函数。多层网络每层都在前一层的基础上做抽象。第一层学到边缘第二层把边缘拼成形状第三层把形状拼成物体。这种逐层抽象的能力单层再宽也给不了。而且还有数学上的支撑。有些函数用深层网络只需要 20 个神经元就能表达但用浅层网络可能需要指数级2 的 n 次方的神经元才能近似。这跟数字电路的原理挺像——多层逻辑门能高效表达复杂函数单层逻辑阵列表会迅速膨胀。深度学习里深度这两个字讲的就是这个。但有个问题上面所有计算都假设权重 w 和偏置 b 已经学好了。但实际刚开始训练的时候w 和 b 全是随机初始化的网络输出基本是瞎蒙。怎么从瞎蒙变成能分辨猫和狗关键就在下一篇要讲的两件事损失函数和梯度下降。