4. 神经网络基础
在进入金融时间序列的RNN与LSTM实战之前,必须先打牢神经网络的地基。本节从最原始的感知机出发,逐步推导到多层前馈网络(MLP),并系统梳理激活函数、损失函数、反向传播与梯度下降这四大支柱。理解这些内容,才能在后续调试LSTM时判断问题究竟出在结构、激活还是优化环节。
一、从感知机到多层前馈网络
感知机(Perceptron)是最简单的线性二分类模型:它接收若干输入,做加权求和后经过一个阶跃函数输出0或1。其数学形式为 y = step(w·x + b)。感知机的致命局限在于只能处理线性可分问题,连异或(XOR)都无法拟合。这一局限曾导致神经网络研究陷入低谷。
突破点在于两点改造:一是把阶跃函数换成可导的激活函数,二是把多个神经元堆叠成“层”。当输入层与输出层之间加入至少一个隐藏层,就得到了多层前馈网络。所谓“前馈”,指信息从输入单向流向输出,没有回路。一个典型结构如下:
输入层(特征) → 隐藏层1(加权+激活) → 隐藏层2(加权+激活) → 输出层(预测值)
x1,x2,... h = σ(W1·x + b1) h2 = σ(W2·h + b2) ŷ = W3·h2 + b3
隐藏层的存在使网络具备了非线性表达能力。理论上,只要隐藏层足够宽,单隐层网络就能以任意精度逼近任意连续函数,这就是通用近似定理。但“能表示”不等于“能训练”,这取决于激活函数与优化方法。
二、激活函数:非线性的来源
如果没有激活函数,多层网络等价于单层线性变换,堆叠毫无意义。激活函数引入非线性,是网络表达能力的核心。常见选择如下:
| 激活函数 | 表达式 | 输出范围 | 优点 | 缺点 |
|---|---|---|---|---|
| Sigmoid | 1/(1+e⁻ˣ) | (0,1) | 输出可解释为概率 | 易梯度消失,非零中心 |
| Tanh | (eˣ-e⁻ˣ)/(eˣ+e⁻ˣ) | (-1,1) | 零中心,收敛较快 | 仍存在梯度消失 |
| ReLU | max(0,x) | [0,+∞) | 计算快,缓解梯度消失 | 存在神经元死亡 |
| Leaky ReLU | max(αx,x) | (-∞,+∞) | 缓解死亡问题 | 需调α |
在金融序列任务中,隐藏层通常优先使用Tanh或ReLU;而LSTM内部的门控单元默认使用Sigmoid,因为它需要输出0到1之间的“门开合程度”。输出层则根据任务选择:回归预测用线性激活,涨跌分类用Sigmoid。
三、损失函数与反向传播
损失函数衡量预测值与真实值的差距,是网络学习的“指挥棒”。回归任务常用均方误差(MSE):L = (1/n)Σ(yᵢ - ŷᵢ)²;二分类常用二元交叉熵(BCE):L = -[y·log(ŷ) + (1-y)·log(1-ŷ)]。金融收益率预测多为回归,方向预测则为分类。
反向传播(Backpropagation)是高效计算梯度的算法。它利用链式法则,从输出层向输入层逐层求偏导,复用中间结果,避免重复计算。核心流程为:
- 前向传播:逐层计算加权和与激活值,得到预测输出。
- 计算损失:比较预测与真实标签,得到标量损失。
- 反向求导:从损失出发,逐层计算损失对各权重和偏置的偏导。
- 参数更新:用梯度下降按学习率调整权重。
下面是一个最小化的反向传播示意代码:
# 单隐层网络前向与反向(伪代码)
z1 = W1 @ x + b1
a1 = tanh(z1)
z2 = W2 @ a1 + b2
y_hat = z2
loss = np.mean((y_hat - y) ** 2)
# 反向
dL_dyhat = 2 * (y_hat - y) / n
dL_dW2 = dL_dyhat @ a1.T
dL_db2 = np.sum(dL_dyhat, axis=1, keepdims=True)
dL_da1 = W2.T @ dL_dyhat
dL_dz1 = dL_da1 * (1 - a1 ** 2) # tanh导数
dL_dW1 = dL_dz1 @ x.T
dL_db1 = np.sum(dL_dz1, axis=1, keepdims=True)
四、梯度下降与优化实践
梯度下降是参数更新的基本方法:W ← W - η·∂L/∂W,其中η为学习率。根据每次使用的样本量,分为批量梯度下降(BGD)、随机梯度下降(SGD)和小批量梯度下降(Mini-batch)。金融数据噪声大、样本有限,实践中几乎都采用Mini-batch,兼顾稳定性与效率。
学习率是最关键的超参数:过大导致震荡不收敛,过小则收敛缓慢。常用改进策略包括动量法(Momentum)、RMSProp和Adam。Adam结合动量与自适应学习率,是金融序列建模的常用默认选择。
五、案例场景与复盘
假设我们要用MLP预测某股票未来一日收益率,输入为过去10日的收益率、成交量变化和波动率,共12维特征。网络结构设为12→32→16→1,隐藏层用Tanh,输出层线性,损失用MSE,优化器用Adam,学习率0.001,批量大小32。训练中若发现验证损失在第20轮后回升,应启用早停并加入L2正则。
复盘要点:一是确认激活函数与输出任务匹配;二是检查梯度是否消失或爆炸,可通过打印各层梯度范数判断;三是学习率是否合适,可绘制损失曲线观察。掌握这些基础,才能在后续RNN与LSTM中快速定位问题,而不是盲目调参。