【机器学习】(23)—— 神经网络入门
神经网络入门节点、隐藏层与前向传播文章目录神经网络入门节点、隐藏层与前向传播1. 为什么还要神经网络2. 从线性模型画成一张「网」3. 隐藏层夹在中间的神经元3.1 参数个数怎么数4. 前向传播从输入算到输出4.1 手算一个微型网络4.2 矩阵写法5. 关键结论只有线性层学不会非线性6. 和专栏前文怎么关系7. 动手NumPy 前向传播8. 能力边界与常见误区8.1 适用边界8.2 常见误区9. 关键术语速查10. 延伸阅读11. 小结摘要线性回归与逻辑回归很强但遇到「弯弯曲曲」的关系时往往要靠人手做特征交叉、多项式。神经网络Neural Network的动机是让模型在训练中自动学出有用的特征组合。本文从你已熟悉的线性模型出发讲清节点、输入层、隐藏层、输出层以及一次前向传播怎么算并指出若没有非线性激活多层叠在一起仍等价于一层线性模型。适合读完第 22 篇复盘、准备进入深度学习的读者。1. 为什么还要神经网络专栏前半段非线性靠人来造第 14 篇加x 2 x^2x2、x 3 x^3x3第 17 篇品牌 × 车身等特征交叉这些有效但费试错交叉维数爆炸多项式阶数一高就过拟合第 18、21 篇。神经网络换了一种思路在输入与输出之间加隐藏层用大量可学习权重把输入重新组合。训练目标仍是降损失但「该交叉哪些东西」很大一部分交给优化器去找。线性 / 逻辑回归神经网络非线性常靠手工特征靠隐藏层 激活下篇参数相对少随层宽加深快速变多风险表达力不够更易过拟合更需第 1821 篇纪律一句话神经网络是为找非线性模式而生的一类模型架构。本单元建议拆法与课程结构对齐篇次聚焦本篇23节点、隐藏层、前向传播无激活时仍线性下一篇激活函数ReLU / Sigmoid / tanh再后续反向传播训练多分类扩展2. 从线性模型画成一张「网」先别管「神经」二字。单特征或多特征线性模型y ′ b w 1 x 1 w 2 x 2 w 3 x 3 y b w_1 x_1 w_2 x_2 w_3 x_3y′bw1x1w2x2w3x3可以画成左边三个输入节点右边一个输出节点边上挂着权重。术语含义本例输入层 Input layer放原始特征x 1 , x 2 , x 3 x_1,x_2,x_3x1,x2,x3输出层 Output layer给出预测y ′ yy′权重 / 偏置可学习参数w 1 , w 2 , w 3 , b w_1,w_2,w_3,bw1,w2,w3,b汽车例子x 1 x_1x1重量x 2 x_2x2排量x 3 x_3x3马力y ′ yy′预测 MPG 或高效概率的 logit。这和第一篇、第五篇是同一件事只是画成了图。重要只调这些w , b w,bw,b数学关系仍是线性的——改权重不会突然变成「弯的」决策面。3. 隐藏层夹在中间的神经元若在输入与输出之间再加一层中间层叫隐藏层Hidden layer其中的节点常叫神经元Neuron。每个隐藏神经元的计算和线性模型输出同构h j b j ∑ i w i j x i h_j b_j \sum_{i} w_{ij}\, x_ihjbji∑wijxi输出层再把h 1 , h 2 , … h_1,h_2,\ldotsh1,h2,…当作「新特征」做一次加权求和。隐藏层提供了另一组参数用来重组输入。3.1 参数个数怎么数设3 个输入隐藏层 4 个神经元1 个输出。连接参数输入 → 每个隐藏神经元3 个权重 1 个偏置 44 个隐藏神经元合计4 × 4 16 4 \times 4 164×416隐藏 → 输出4 个权重 1 个偏置 5总计21没有隐藏层时只要 4 个参数加一层 4 神经元就到 21。层再宽、再深参数量会涨得很快——这正是第 21 篇「复杂度」在神经网络里的具体形态也是必须配合验证集、正则、早停的原因。4. 前向传播从输入算到输出前向传播Forward pass / Forward propagation指给定当前权重从输入层一层层算到输出得到预测值以及后面的损失。4.1 手算一个微型网络设输入已缩放便于手算x ( x 1 , x 2 ) ( 1.0 , 2.0 ) \mathbf{x} (x_1, x_2) (1.0,\ 2.0)x(x1,x2)(1.0,2.0)隐藏层 2 个神经元权重随意给定到h 1 h_1h1到h 2 h_2h2w ww来自x 1 x_1x10.5-0.4w ww来自x 2 x_2x20.10.3偏置b bb0.00.2则h 1 0.0 0.5 × 1.0 0.1 × 2.0 0.7 h 2 0.2 ( − 0.4 ) × 1.0 0.3 × 2.0 0.4 \begin{aligned} h_1 0.0 0.5\times 1.0 0.1\times 2.0 0.7 \\ h_2 0.2 (-0.4)\times 1.0 0.3\times 2.0 0.4 \end{aligned}h1h20.00.5×1.00.1×2.00.70.2(−0.4)×1.00.3×2.00.4若输出y ′ − 1.0 0.8 h 1 0.5 h 2 y -1.0 0.8 h_1 0.5 h_2y′−1.00.8h10.5h2y ′ − 1.0 0.8 × 0.7 0.5 × 0.4 − 0.24 y -1.0 0.8\times 0.7 0.5\times 0.4 -0.24y′−1.00.8×0.70.5×0.4−0.24若任务是回归 MPG这个y ′ yy′就是预测值若是逻辑回归式分类还可再对y ′ yy′做 Sigmoid 得到概率——那是输出激活与隐藏层激活不是同一层讨论重点隐藏层激活见下篇。这就是一次前向传播没有「魔法」全是乘加。训练时下几篇会用反向传播根据损失改这些w , b w,bw,b本篇先把「算预测」走通。4.2 矩阵写法把隐藏层写成h W ( 1 ) x b ( 1 ) \mathbf{h} W^{(1)}\mathbf{x} \mathbf{b}^{(1)}hW(1)xb(1)y ′ W ( 2 ) h b ( 2 ) y W^{(2)}\mathbf{h} b^{(2)}y′W(2)hb(2)代码里就是矩阵乘和手算同一件事。批量样本时X \mathbf{X}X是形状(batch, features)的矩阵一次算出整个 batch 的隐藏表示——这和第 15 篇「特征矩阵」的行样本约定一致。5. 关键结论只有线性层学不会非线性隐藏层看起来「更深了」若每层都只是加权求和则y ′ W ( 2 ) ( W ( 1 ) x b ( 1 ) ) b ( 2 ) ( W ( 2 ) W ( 1 ) ) x 某偏置 y W^{(2)}(W^{(1)}\mathbf{x} \mathbf{b}^{(1)}) b^{(2)} (W^{(2)}W^{(1)})\mathbf{x} \text{某偏置}y′W(2)(W(1)xb(1))b(2)(W(2)W(1))x某偏置也就是说再多隐藏层没有非线性整体仍等价于一个大线性模型。它重组参数的方式变了但表达力并不比「直接线性」更强。这正是神经网络单元下一篇要解决的问题在神经元输出上施加激活函数Activation——例如 ReLU、Sigmoid——插入非线性多层才能真正堆出复杂决策面。第 17 篇靠人手交叉有了激活的网络才谈得上「自动学交叉」。本篇先把结构与前向算清避免一上来被激活、反向传播同时淹没。6. 和专栏前文怎么关系前文神经网络视角第 01 篇线性回归无隐藏层的网络第 05 篇逻辑回归输出可再接 Sigmoid隐藏层暂无第 17 篇特征交叉动机之一让网络自己学组合第 1821 篇泛化参数多 → 更要三分法、L2、早停实践建议新任务仍可先上线性 / 逻辑回归基线确认数据与评估无误后再上浅层网络。神经网络不是「默认更强」而是在非线性且数据够时更有潜力。也可以这样记分工第 17 篇的交叉是「你告诉模型去看哪些组合」神经网络是「留一层白板让损失告诉模型哪些组合有用」。白板太宽神经元太多时第 21 篇的正则与早停就要上场。7. 动手NumPy 前向传播importnumpyasnp# 输入两辆车的 (weight_scaled, disp_scaled)Xnp.array([[1.0,2.0],# 车 A[0.5,1.0],# 车 B])# 3 输入? 这里用 2 输入、2 隐藏、1 输出便于打印W1np.array([[0.5,-0.4],# 列对应 h1, h2 对 x1 的权重[0.1,0.3],],dtypefloat)# shape (2, 2): 行输入维, 列隐藏元b1np.array([0.0,0.2])W2np.array([0.8,0.5])# 1 x 2b2-1.0defforward(x,W1,b1,W2,b2):# 本篇故意不加激活演示「仍线性」hx W1b1 yh W2b2returnh,yfori,xinenumerate(X):h,yforward(x,W1,b1,W2,b2)print(fcar{i}: h{h}, y{y:.4f})# 证明可合并为单层线性y x W_eff b_effW_effW1 W2 b_effb1 W2b2print(W_eff,W_eff,b_eff,b_eff)print(y via effective linear:,X W_effb_eff)运行后会看到经隐藏层算出的y ′ yy′与合并后的等效线性公式一致——验证第 5 节的结论。下一篇给h加上np.maximum(h, 0)ReLU后这种合并就不再成立非线性才真正出现。8. 能力边界与常见误区8.1 适用边界本篇只覆盖结构 前向训练反向传播、激活、多分类 softmax 在后续篇。「像大脑」只是历史比喻工程上把它当成可微的多层函数拟合器即可。表格小数据上精心特征的线性模型常已够用图像、语音、大规模交互模式更吃网络。8.2 常见误区误区正解层数越多一定越强无激活时层数无本质增益有激活也要防过拟合隐藏层已经能学非线性必须有非线性激活神经网络不需要特征工程仍要清洗、编码、划分第 1422 篇参数越多越好样本不够时更容易背训练集前向传播就是训练前向只是算预测训练还要反向更新输入层也有权重要学输入节点通常是数据本身权重在连接上「画成网」容易让人以为信息在节点里「存储智慧」。更准确的说法是智慧在权重里节点只是当前输入流经权重后的激活值。换一批汽车特征节点数值变了权重若已训练好才携带「怎么看车」的知识。9. 关键术语速查术语一句话解释神经网络含隐藏层、用节点与权重连接的模型族节点 / 神经元层中的计算单元通常做加权和激活输入层接收特征向量的一层隐藏层输入与输出之间的中间层输出层给出预测的一层前向传播从输入算到输出的一次计算深度模型含多个隐藏层的网络deep model10. 延伸阅读资源适合看什么NumPy 矩阵乘法与前向实现专栏第 17 篇手工交叉的动机专栏第 21 篇参数变多后如何控过拟合专栏第 22 篇上网络前的数据要求11. 小结神经网络并不神秘在你熟悉的线性公式外面加了可以学习的隐藏层用前向传播一层层做加权求和。参数量随宽度与深度上升表达潜力变大过拟合风险也变大。本篇可以落在两点上线性模型就是没有隐藏层的网络隐藏层如果只做加权求和叠多少层都还是线性下一篇要用激活函数补上非线性。加层本身不会自动变强真正拉开差距的是非线性动手前先能把前向传播手算顺。下一篇讲激活函数ReLU、Sigmoid、tanh 如何把非线性注入网络让多层真正有用。系列导航上一篇【机器学习】22—— 数据集与泛化复盘下一篇预告神经网络激活函数——ReLU、Sigmoid 与非线性如果本篇对你有帮助欢迎点赞、收藏、关注博主机器学习专栏持续更新中下次更新不迷路。