第四章:深度学习基础——神经网络的核心机制
说实话,很多朋友一听到「神经网络」就觉得高深莫测。我当年刚入行时也这么想,总觉得这玩意儿跟人脑一样复杂。后来做多了金融风控模型才发现,说白了,它就是个数学函数——输入一堆数据,经过层层计算,输出一个结果。
这一章,我会带你拆解神经网络的四个核心部件:网络结构、前向传播、反向传播、激活函数和损失函数。搞懂这些,你就能理解深度学习为什么能「学习」了。
核心观点:神经网络本质上是一个「万能函数逼近器」。只要层数够深、神经元够多,它就能拟合任意复杂的映射关系。金融领域里,从信用评分到量化交易,底层都是这个逻辑。
4.1 神经网络长什么样?
先看一个最简单的结构。一个神经网络由三部分组成:
- 输入层:接收原始特征,比如用户的年龄、收入、历史违约次数
- 隐藏层:中间的计算层,可以有一层或多层
- 输出层:给出最终结果,比如违约概率
每个圆圈代表一个「神经元」,每条线代表一个「权重」。权重就是模型要学习的参数。
我习惯把隐藏层想象成一个「特征加工厂」。原始数据进来后,经过加权求和、非线性变换,再传给下一层。层数越多,加工越精细,但也越容易过拟合——这个坑我后面会讲。
4.2 前向传播:数据怎么流过去?
前向传播就是数据从输入层一路算到输出层的过程。每一步就两件事:加权求和 + 激活函数。
举个例子。假设隐藏层有一个神经元,它接收三个输入 x₁、x₂、x₃,对应的权重是 w₁、w₂、w₃,还有一个偏置 b。那么它的输出就是:
z = w₁·x₁ + w₂·x₂ + w₃·x₃ + b
a = σ(z) // σ 是激活函数
这个 a 会作为下一层的输入,一层层传下去,直到输出层给出最终预测 ŷ。
我在做信用卡逾期预测时,输入特征有30多个,隐藏层设了3层。前向传播算一次很快,但关键是——怎么让预测结果越来越准?这就轮到反向传播登场了。
4.3 反向传播:模型是怎么「学习」的?
反向传播的核心思想很简单:算误差,往回传,调权重。
具体来说:
- 先算输出层的预测值 ŷ 和真实值 y 之间的差距(损失)
- 然后从输出层开始,逐层计算每个权重对损失的「贡献度」(梯度)
- 最后沿着梯度下降的方向,微调每个权重
你想想看,这就像你在黑暗中下山。你每走一步,感觉一下脚底坡度(梯度),然后往坡度最陡的方向迈一步。走多了,自然就到山底了。
我的经验:反向传播最怕梯度消失或梯度爆炸。尤其是用 Sigmoid 做激活函数时,层数一深,梯度就趋近于0,模型根本学不动。后来我改用 ReLU,这个问题缓解了很多。
4.4 激活函数:为什么需要它?
如果没有激活函数,神经网络就退化成线性模型。你堆再多层,本质上还是一层线性变换——那还学个啥?
激活函数的作用就是引入非线性。下面两个最常用:
| 函数 | 公式 | 输出范围 | 优点 | 缺点 |
|---|---|---|---|---|
| Sigmoid | σ(x) = 1 / (1 + e⁻ˣ) | (0, 1) | 平滑,适合输出概率 | 梯度易饱和,计算慢 |
| ReLU | f(x) = max(0, x) | [0, +∞) | 计算快,缓解梯度消失 | 神经元可能「死掉」 |
我个人的习惯是:隐藏层优先用 ReLU,输出层看任务。二分类用 Sigmoid,多分类用 Softmax,回归任务直接线性输出。
避坑指南:我曾经在一个信用评分模型里,隐藏层全用了 Sigmoid。结果训练了50轮,损失几乎没降。后来换成 ReLU,10轮就收敛了。记住——深层网络里,ReLU 是默认选项。
4.5 损失函数:怎么衡量模型好坏?
损失函数就是模型的「打分器」。它告诉你当前预测和真实值差多远。
金融场景里最常用的两个:
- 均方误差(MSE):适合回归任务,比如预测股票价格
- 交叉熵损失(Cross-Entropy):适合分类任务,比如判断用户是否违约
交叉熵的公式长这样:
L = -[y·log(ŷ) + (1-y)·log(1-ŷ)]
为什么用交叉熵?因为当预测值 ŷ 离真实值 y 越远,损失增长得越快。模型会拼命把 ŷ 往 y 的方向拉——这就是学习的动力。
嗯,这里要注意:损失函数的选择要和输出层的激活函数匹配。比如二分类输出层用 Sigmoid,损失函数就用交叉熵。如果用 MSE,梯度更新会非常慢。
4.6 一个完整的训练流程
把上面所有东西串起来,一次训练迭代就是:
- 前向传播:输入数据 → 逐层计算 → 得到预测值 ŷ
- 计算损失:用损失函数比较 ŷ 和 y
- 反向传播:从输出层往回算梯度
- 更新权重:沿梯度反方向微调每个 w 和 b
- 重复 1-4,直到损失收敛
这个过程在金融风控里,我一般跑 100-200 轮。轮数太少欠拟合,太多过拟合。怎么判断?看验证集损失——它开始回升的那一刻,就该停了。
一句话总结:神经网络就是「前向传播算结果,反向传播调参数」。激活函数负责引入非线性,损失函数负责提供优化方向。搞懂这四样,深度学习的大门就算推开了。