神经网络入门:节点、隐藏层与前向传播
文章目录
- 神经网络入门:节点、隐藏层与前向传播
-
- [1. 为什么还要神经网络](#1. 为什么还要神经网络)
- [2. 从线性模型画成一张「网」](#2. 从线性模型画成一张「网」)
- [3. 隐藏层:夹在中间的神经元](#3. 隐藏层:夹在中间的神经元)
-
- [3.1 参数个数怎么数](#3.1 参数个数怎么数)
- [4. 前向传播:从输入算到输出](#4. 前向传播:从输入算到输出)
-
- [4.1 手算一个微型网络](#4.1 手算一个微型网络)
- [4.2 矩阵写法](#4.2 矩阵写法)
- [5. 关键结论:只有线性层,学不会非线性](#5. 关键结论:只有线性层,学不会非线性)
- [6. 和专栏前文怎么关系](#6. 和专栏前文怎么关系)
- [7. 动手:NumPy 前向传播](#7. 动手:NumPy 前向传播)
- [8. 能力边界与常见误区](#8. 能力边界与常见误区)
-
- [8.1 适用边界](#8.1 适用边界)
- [8.2 常见误区](#8.2 常见误区)
- [9. 关键术语速查](#9. 关键术语速查)
- [10. 延伸阅读](#10. 延伸阅读)
- [11. 小结](#11. 小结)
摘要 :线性回归与逻辑回归很强,但遇到「弯弯曲曲」的关系时,往往要靠人手做特征交叉、多项式。神经网络(Neural Network) 的动机,是让模型在训练中自动学出有用的特征组合。本文从你已熟悉的线性模型出发,讲清节点、输入层、隐藏层、输出层 ,以及一次前向传播怎么算;并指出:若没有非线性激活,多层叠在一起仍等价于一层线性模型。适合读完第 22 篇复盘、准备进入深度学习的读者。
1. 为什么还要神经网络
专栏前半段,非线性靠人来造:
- 第 14 篇:加 x 2 x^2 x2、 x 3 x^3 x3
- 第 17 篇:品牌 × 车身等特征交叉
这些有效,但费试错:交叉维数爆炸,多项式阶数一高就过拟合(第 18、21 篇)。
神经网络换了一种思路:在输入与输出之间加隐藏层 ,用大量可学习权重把输入重新组合。训练目标仍是降损失,但「该交叉哪些东西」很大一部分交给优化器去找。

| 线性 / 逻辑回归 | 神经网络 | |
|---|---|---|
| 非线性 | 常靠手工特征 | 靠隐藏层 + 激活(下篇) |
| 参数 | 相对少 | 随层宽加深快速变多 |
| 风险 | 表达力不够 | 更易过拟合,更需第 18~21 篇纪律 |
一句话:神经网络是为找非线性模式而生的一类模型架构。
本单元建议拆法(与课程结构对齐):
| 篇次 | 聚焦 |
|---|---|
| 本篇(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_3 y′=b+w1x1+w2x2+w3x3
可以画成:左边三个输入节点 ,右边一个输出节点,边上挂着权重。

| 术语 | 含义 | 本例 |
|---|---|---|
| 输入层 Input layer | 放原始特征 | x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3 |
| 输出层 Output layer | 给出预测 | y ′ y' y′ |
| 权重 / 偏置 | 可学习参数 | w 1 , w 2 , w 3 , b w_1,w_2,w_3,b w1,w2,w3,b |
汽车例子: x 1 = x_1= x1= 重量, x 2 = x_2= x2= 排量, x 3 = x_3= x3= 马力, y ′ y' y′ 预测 MPG 或高效概率的 logit。这和第一篇、第五篇是同一件事,只是画成了图。
重要 :只调这些 w , b w,b w,b,数学关系仍是线性的------改权重不会突然变成「弯的」决策面。
3. 隐藏层:夹在中间的神经元
若在输入与输出之间再加一层,中间层叫隐藏层(Hidden layer) ,其中的节点常叫神经元(Neuron)。

每个隐藏神经元的计算,和线性模型输出同构:
h j = b j + ∑ i w i j x i h_j = b_j + \sum_{i} w_{ij}\, x_i hj=bj+i∑wijxi
输出层再把 h 1 , h 2 , ... h_1,h_2,\ldots h1,h2,... 当作「新特征」做一次加权求和。隐藏层提供了另一组参数,用来重组输入。
3.1 参数个数怎么数
设:3 个输入,隐藏层 4 个神经元,1 个输出。
| 连接 | 参数 |
|---|---|
| 输入 → 每个隐藏神经元 | 3 个权重 + 1 个偏置 = 4 |
| 4 个隐藏神经元合计 | 4 × 4 = 16 4 \times 4 = 16 4×4=16 |
| 隐藏 → 输出 | 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_1 h1 | 到 h 2 h_2 h2 | |
|---|---|---|
| w w w 来自 x 1 x_1 x1 | 0.5 | -0.4 |
| w w w 来自 x 2 x_2 x2 | 0.1 | 0.3 |
| 偏置 b b b | 0.0 | 0.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} h1h2=0.0+0.5×1.0+0.1×2.0=0.7=0.2+(−0.4)×1.0+0.3×2.0=0.4
若输出 y ′ = − 1.0 + 0.8 h 1 + 0.5 h 2 y' = -1.0 + 0.8 h_1 + 0.5 h_2 y′=−1.0+0.8h1+0.5h2:
y ′ = − 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.24 y′=−1.0+0.8×0.7+0.5×0.4=−0.24
若任务是回归 MPG,这个 y ′ y' y′ 就是预测值;若是逻辑回归式分类,还可再对 y ′ y' y′ 做 Sigmoid 得到概率------那是输出激活,与隐藏层激活不是同一层讨论重点(隐藏层激活见下篇)。
这就是一次前向传播:没有「魔法」,全是乘加。训练时(下几篇)会用反向传播根据损失改这些 w , b w,b w,b;本篇先把「算预测」走通。
4.2 矩阵写法
把隐藏层写成:
h = W ( 1 ) x + b ( 1 ) \mathbf{h} = W^{(1)}\mathbf{x} + \mathbf{b}^{(1)} h=W(1)x+b(1)
y ′ = W ( 2 ) h + b ( 2 ) y' = W^{(2)}\mathbf{h} + b^{(2)} y′=W(2)h+b(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)x+b(1))+b(2)=(W(2)W(1))x+某偏置

也就是说:再多隐藏层,没有非线性,整体仍等价于一个大线性模型。 它重组参数的方式变了,但表达力并不比「直接线性」更强。
这正是神经网络单元下一篇要解决的问题:在神经元输出上施加激活函数(Activation)------例如 ReLU、Sigmoid------插入非线性,多层才能真正堆出复杂决策面。第 17 篇靠人手交叉;有了激活的网络,才谈得上「自动学交叉」。
本篇先把结构与前向算清,避免一上来被激活、反向传播同时淹没。
6. 和专栏前文怎么关系
| 前文 | 神经网络视角 |
|---|---|
| 第 01 篇线性回归 | 无隐藏层的网络 |
| 第 05 篇逻辑回归 | 输出可再接 Sigmoid;隐藏层暂无 |
| 第 17 篇特征交叉 | 动机之一:让网络自己学组合 |
| 第 18~21 篇泛化 | 参数多 → 更要三分法、L2、早停 |
实践建议:新任务仍可先上线性 / 逻辑回归基线;确认数据与评估无误后,再上浅层网络。神经网络不是「默认更强」,而是在非线性且数据够时更有潜力。
也可以这样记分工:第 17 篇的交叉是「你告诉模型去看哪些组合」;神经网络是「留一层白板,让损失告诉模型哪些组合有用」。白板太宽(神经元太多)时,第 21 篇的正则与早停就要上场。
7. 动手:NumPy 前向传播
python
import numpy as np
# 输入:两辆车的 (weight_scaled, disp_scaled)
X = np.array([
[1.0, 2.0], # 车 A
[0.5, 1.0], # 车 B
])
# 3 输入? 这里用 2 输入、2 隐藏、1 输出,便于打印
W1 = np.array([
[0.5, -0.4], # 列对应 h1, h2 对 x1 的权重
[0.1, 0.3],
], dtype=float) # shape (2, 2): 行=输入维, 列=隐藏元
b1 = np.array([0.0, 0.2])
W2 = np.array([0.8, 0.5]) # 1 x 2
b2 = -1.0
def forward(x, W1, b1, W2, b2):
# 本篇故意不加激活,演示「仍线性」
h = x @ W1 + b1
y = h @ W2 + b2
return h, y
for i, x in enumerate(X):
h, y = forward(x, W1, b1, W2, b2)
print(f"car{i}: h={h}, y'={y:.4f}")
# 证明可合并为单层线性:y = x @ W_eff + b_eff
W_eff = W1 @ W2
b_eff = b1 @ W2 + b2
print("W_eff=", W_eff, "b_eff=", b_eff)
print("y via effective linear:", X @ W_eff + b_eff)
运行后会看到:经隐藏层算出的 y ′ y' y′,与合并后的等效线性公式一致------验证第 5 节的结论。下一篇给 h 加上 np.maximum(h, 0)(ReLU)后,这种合并就不再成立,非线性才真正出现。
8. 能力边界与常见误区
8.1 适用边界
- 本篇只覆盖结构 + 前向;训练(反向传播)、激活、多分类 softmax 在后续篇。
- 「像大脑」只是历史比喻;工程上把它当成可微的多层函数拟合器即可。
- 表格小数据上,精心特征的线性模型常已够用;图像、语音、大规模交互模式更吃网络。
8.2 常见误区
| 误区 | 正解 |
|---|---|
| 层数越多一定越强 | 无激活时层数无本质增益;有激活也要防过拟合 |
| 隐藏层已经能学非线性 | 必须有非线性激活 |
| 神经网络不需要特征工程 | 仍要清洗、编码、划分(第 14~22 篇) |
| 参数越多越好 | 样本不够时更容易背训练集 |
| 前向传播就是训练 | 前向只是算预测;训练还要反向更新 |
| 输入层也有权重要学 | 输入节点通常是数据本身;权重在连接上 |
「画成网」容易让人以为信息在节点里「存储智慧」。更准确的说法是:智慧在权重里;节点只是当前输入流经权重后的激活值。换一批汽车特征,节点数值变了,权重(若已训练好)才携带「怎么看车」的知识。
9. 关键术语速查
| 术语 | 一句话解释 |
|---|---|
| 神经网络 | 含隐藏层、用节点与权重连接的模型族 |
| 节点 / 神经元 | 层中的计算单元,通常做加权和(+激活) |
| 输入层 | 接收特征向量的一层 |
| 隐藏层 | 输入与输出之间的中间层 |
| 输出层 | 给出预测的一层 |
| 前向传播 | 从输入算到输出的一次计算 |
| 深度模型 | 含多个隐藏层的网络(deep model) |
10. 延伸阅读
| 资源 | 适合看什么 |
|---|---|
| NumPy 矩阵乘法 | @ 与前向实现 |
| 专栏第 17 篇 | 手工交叉的动机 |
| 专栏第 21 篇 | 参数变多后如何控过拟合 |
| 专栏第 22 篇 | 上网络前的数据要求 |
11. 小结
神经网络并不神秘:在你熟悉的线性公式外面,加了可以学习的隐藏层,用前向传播一层层做加权求和。参数量随宽度与深度上升,表达潜力变大,过拟合风险也变大。
本篇可以落在两点上:线性模型就是没有隐藏层的网络;隐藏层如果只做加权求和,叠多少层都还是线性,下一篇要用激活函数补上非线性。
加层本身不会自动变强,真正拉开差距的是非线性;动手前先能把前向传播手算顺。
下一篇讲激活函数:ReLU、Sigmoid、tanh 如何把非线性注入网络,让多层真正有用。
系列导航:
- 上一篇:【机器学习】(22)------ 数据集与泛化复盘
- 下一篇(预告):神经网络激活函数------ReLU、Sigmoid 与非线性
如果本篇对你有帮助,欢迎点赞、收藏、关注博主,机器学习专栏持续更新中,下次更新不迷路。