第二章 深度学习基础回顾:神经网络原理、激活函数、损失函数、优化器、过拟合与正则化
各位同学好,我是老张。在反洗钱领域摸爬滚打了十几年,从规则引擎时代一路干到深度学习时代。今天咱们聊聊深度学习的基础,这些东西看着基础,但我在项目中吃过不少亏,希望能帮你们少走弯路。
2.1 神经网络原理:从感知机到多层网络
神经网络这东西,说白了就是模仿人脑的神经元结构。但别想得太玄乎,本质上就是个数学函数。
感知机:最简单的神经网络单元。输入乘以权重,加上偏置,过个激活函数,输出结果。公式长这样:
y = f(w1*x1 + w2*x2 + ... + wn*xn + b)
我在做反洗钱特征工程时,一开始就用单层感知机试过。结果呢?连异或问题都搞不定。后来才明白,单层感知机只能处理线性可分问题。
多层感知机(MLP):把多个感知机堆叠起来,就有了隐藏层。隐藏层越多,网络越深,能学到的特征就越抽象。
核心思想:每一层都在做特征变换。浅层学边缘、纹理,深层学语义、模式。在反洗钱场景里,浅层可能学交易金额、频率,深层就能学出洗钱团伙的关联模式。
我习惯把神经网络看作一个「万能函数逼近器」。只要层数够深、神经元够多,理论上能拟合任何复杂函数。但要注意,不是越深越好,后面会讲。
2.2 激活函数:给网络注入非线性
如果没有激活函数,多层网络就退化成单层线性变换,那跟线性回归有啥区别?激活函数就是给网络注入「非线性」的关键。
| 激活函数 | 公式 | 特点 | 反洗钱场景建议 |
|---|---|---|---|
| Sigmoid | σ(x) = 1/(1+e^(-x)) | 输出0-1,适合二分类;但容易梯度消失 | 输出层用,隐藏层慎用 |
| Tanh | tanh(x) = (e^x-e^(-x))/(e^x+e^(-x)) | 输出-1到1,零中心化;仍有梯度消失 | 比Sigmoid好点,但也不推荐隐藏层 |
| ReLU | f(x) = max(0, x) | 计算快,缓解梯度消失;但神经元可能「死掉」 | 隐藏层首选,我基本都用它 |
| Leaky ReLU | f(x) = max(αx, x) | 解决ReLU死亡问题 | 如果ReLU效果不好,试试这个 |
⚠️ 我曾经在反洗钱模型里用了Sigmoid做隐藏层,结果训练到一半梯度就消失了,模型死活不收敛。后来换成ReLU,问题立马解决。记住:隐藏层优先用ReLU及其变体。
为什么会梯度消失?你想想看,Sigmoid在两端导数接近0,反向传播时梯度连乘,越传越小。深层网络基本学不动。
2.3 损失函数:衡量模型好坏的标准
损失函数就是告诉模型「你错得有多离谱」。不同的任务用不同的损失函数。
回归任务:
- 均方误差(MSE):L = (y_pred - y_true)²。对异常值敏感,适合误差服从高斯分布的场景。
- 平均绝对误差(MAE):L = |y_pred - y_true|。对异常值更鲁棒,但梯度恒定,收敛慢。
分类任务:
- 交叉熵损失:L = -[y*log(p) + (1-y)*log(1-p)]。二分类用这个,多分类用多类别交叉熵。
💡 在反洗钱场景中,正负样本极度不平衡(正常交易占99.9%)。我建议用加权交叉熵或Focal Loss,给少数类(洗钱交易)更高的权重。这个后面章节会细讲。
我个人习惯:分类问题无脑用交叉熵,回归问题看数据分布。如果数据有大量异常值,MAE比MSE靠谱。
2.4 优化器:让模型学会参数
有了损失函数,怎么让参数往正确的方向更新?优化器就是干这个的。
梯度下降(GD):最原始的方法,每次用全部数据计算梯度。太慢了,大数据集根本跑不动。
随机梯度下降(SGD):每次用一个样本更新参数。快是快了,但震荡严重,收敛不稳定。
小批量梯度下降(Mini-batch GD):折中方案,每次用一小批数据(比如32、64个样本)。实际中最常用。
自适应优化器:
- Adam:结合了Momentum和RMSprop的优点,自适应学习率。我90%的场景都用它。
- AdamW:Adam的改进版,加了权重衰减解耦,正则化效果更好。
核心经验:Adam是「万金油」,基本不用调参就能用。但如果你追求极致精度,可以先用Adam快速找到最优区域,再换SGD精调。
我曾经在反洗钱模型里用SGD,调学习率调了一周都没调好。换成Adam,默认参数直接收敛。嗯,这里要注意:Adam虽然好用,但有时会泛化性差一点,需要配合正则化。
2.5 过拟合与正则化:防止模型「死记硬背」
过拟合是深度学习最大的坑。模型在训练集上表现完美,一到测试集就拉胯。说白了,模型把噪声也学进去了。
怎么判断过拟合?
- 训练损失持续下降,验证损失先降后升
- 训练精度接近100%,验证精度差一大截
正则化方法:
| 方法 | 原理 | 我的使用建议 |
|---|---|---|
| L1正则化 | 在损失函数上加权重绝对值之和 | 适合特征选择,让不重要权重变0 |
| L2正则化 | 在损失函数上加权重平方和 | 最常用,让权重变小但不为0 |
| Dropout | 训练时随机丢弃一部分神经元 | 我习惯设0.5,效果不错 |
| 早停法 | 验证损失不再下降时停止训练 | 必须用,省时省力 |
| 数据增强 | 对输入数据做变换,增加多样性 | 反洗钱场景可以加噪声、时间偏移 |
⚠️ 我曾经在反洗钱模型里没加正则化,训练了200个epoch,训练精度99.9%,验证精度只有60%。后来加了L2和Dropout,验证精度直接提到85%。别偷懒,正则化一定要加。
你想想看,反洗钱数据里正常交易和异常交易的比例可能是10000:1。如果不做正则化,模型很容易学成「把所有交易都判为正常」,因为这样准确率也有99.99%。但我们要抓的是那0.01%的异常啊!
2.6 本章知识体系总览
下面这张图是我自己画的,把本章的核心知识点串起来了。建议保存下来,后面学具体模型时回来对照。
💡 这张图我建议你打印出来贴墙上。每次调参时看一眼,能帮你快速定位问题出在哪个环节。
好了,深度学习基础就讲到这里。这些概念看着简单,但真正用好需要大量实践。我在反洗钱项目里踩过的坑,后面章节会一个一个给你们拆解。记住:理论是地图,实践才是走路。
公众号:蓝海资料掘金营,微信deep3321