跳转到内容

神经网络基础

机器学习 · 机器学习 · P1
本章目录

学完后,你应能独立完成

  • 推导两层MLP反向传播并检查9维参数
  • 解释初始化、train/eval与权重衰减
  • 按同一研究政策比较网络与简单基线

前置建议:损失、泛化与优化 · 时间验证与模型选择

改变一个条件,观察发生什么

浏览器内即时教学计算;Python 实验结果另列于代码区。图形与数值一起核对。

01

前向传播先画维度表

X是n×p,W₁是p×h,b₁是h;隐藏A=φ(XW₁+b₁)是n×h,W₂是h×1,输出ŷ=AW₂+b₂。损失用SSE/(2n)。页面代码用p=h=2的tanh网络,参数一共9个,便于逐项检查。

网络自动学平滑交互不意味着应先选深网络。股票日期依赖、信噪比、状态变化和搜索预算同样限制它。先让少量样本损失能下降,再接合法未来验证。

\[Z_1=XW_1+b_1,\quad A=\tanh(Z_1),\quad \hat y=AW_2+b_2\]
02

反传就是复用链式法则

残差对输出的梯度D₂=(ŷ−y)/n,n×1。tanh导数1−A²,把输出梯度传回隐藏层,再左乘Xᵀ得到W₁梯度。偏置沿样本维求和,形状必须与参数一致。

\[\nabla_{W_2}J=A^TD_2,\quad D_1=(D_2W_2^T)\odot(1-A^2),\quad \nabla_{W_1}J=X^TD_1\]
  1. D₂已经包含1/n,后面不要重复平均。
  2. b₂梯度为D₂求和,b₁梯度按列求和。
  3. 展平顺序与参数解包顺序完全一致。
  4. 做有限差分,同时用零输入的手算例核对损失含义。
03

初始化与梯度问题

全零隐藏初始化会维持单元对称;随机尺度要与激活和fan-in匹配。Sigmoid导数至多.25且会饱和,多层Jacobian连乘可能消失或爆炸。ReLU正区导数1,也会出现死亡单元。

梯度裁剪限制过大更新,不修复消失、错标签或错归一化。出现NaN先查输入非有限值、损失稳定性、尺度与学习率,再决定是不是网络容量问题。

04

训练与推断的状态不能混

Inverted Dropout保留概率q时训练用m⊙a/q,均值保持a,推断通常不屏蔽;非线性下不能简单称精确模型平均。BatchNorm训练用batch统计,推断通常用训练累计统计;LayerNorm按样本特征维归一化,机制不同。

测试时更新训练统计或让未来留出混进batch会改变政策。eval关闭训练行为,不等同于禁用梯度计算;二者是不同控制。这里的NumPy小网络没有Dropout或BN,用于专注链式导数。

05

优化与正则的实现差异

普通GD加L2时更新为(1−ηλ)w−ηg,与相应权重衰减同形式;Adam自适应缩放下耦合L2与decoupled decay不同,AdamW明确分离。偏置与归一化参数是否衰减也要声明。

早停、优化器、初始化、学习率和宽度都是选择。用相同日期、信息集、评价集合与事先预算比较Ridge、树和小MLP。一个种子领先不应成为扩大网络的唯一依据。

06

序列架构作为岗位扩展

CNN利用局部卷积与共享权重,RNN/LSTM递推状态,Attention计算softmax(QKᵀ/√d)V。QKᵀ为L×L,输入窗口的时点和mask决定信息是否可用。

只含当前及之前已知数据的整段过去窗口,可以合法使用窗口内双向注意力;若对每个历史时刻分别作预测,则要按该时刻遮未来。不是所有金融任务都机械需要同一causal mask。

从算法到一次真实运行

代码在本地 Python 中执行,HTML 内展示参考实现和本轮运行结果。请先独立完成练习,再展开完整参考文件。

neural.py / 核心函数
def mlp_loss_grad(X, y, theta):
    """2 inputs -> 2 tanh hidden units -> 1 output; flattened 9 parameters."""
    W1,b1,W2,b2 = theta[:4].reshape(2,2),theta[4:6],theta[6:8].reshape(2,1),theta[8]
    hidden = np.tanh(X@W1+b1)
    residual = hidden@W2+b2-y
    loss = float(np.sum(residual**2)/(2*len(X)))
    output_grad = residual/len(X)
    hidden_grad = (output_grad@W2.T)*(1-hidden**2)
    gradient = np.r_[(X.T@hidden_grad).ravel(),hidden_grad.sum(0),
                     (hidden.T@output_grad).ravel(),output_grad.sum()]
    return loss,gradient
下载本节 .pypython neural.py依赖版本见首页,示例只使用合成数据。
查看本轮本地运行记录 · 2026-10-12
{
  "gradient_max_error": 4.617861648625876e-11,
  "initial_training_loss": 0.38257753883408396,
  "final_training_loss": 0.004296316344796026,
  "scope": "training demonstration, not financial OOS evidence"
}

先回答,再看提示和答案

Q01

X(n,10)、隐藏4个单元,W₁梯度形状是什么?

一级提示

写出矩阵乘法维度。

参考答案与条件

(10,4),与W₁一致。Xᵀ是10×n,D₁是n×4。

Q02

梯度消失可以靠global norm clipping修复吗?

一级提示

先写出目标、信息集和所需条件。

参考答案与条件

通常不可以。裁剪主要限制过大的梯度,不能使消失梯度恢复。

Q03

MLP训练误差更低,能宣布因子合成更好吗?

一级提示

先写出目标、信息集和所需条件。

参考答案与条件

不能。需同条件未来验证、选择压力与稳定性分析,并检查最终交易约束。

把知识迁移到一个新任务

独立写9参数tanh网络的损失与梯度,按参数逐项中央差分;记录固定初始化下训练loss。再解释它为什么尚未证明股票未来预测增量。

这里保存学习笔记,不在浏览器执行 Python。A/B/C 由你按独立完成程度填写。

参考与进一步阅读

在线文档可能比本地固定版本更新;API 行为以已验证代码和版本记录为准。

掌握状态与复习

关掉资料独立完成后记 A;提示后完成记 B;需要重学记 C。

记录尽量保存在当前浏览器,建议定期导出备份。