# 从零开始构建神经网络：用纯NumPy实现Nifty 50波动率预测

> 一个完全使用NumPy从零实现的神经网络项目，包含手动推导的前向传播、反向传播、小批量梯度下降和动量优化，应用于印度Nifty 50指数的实际波动率预测任务。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-08-11T11:51:00.000Z
- 最近活动: 2026-08-11T11:58:55.434Z
- 热度: 118.9
- 关键词: 神经网络, NumPy, 从零实现, 反向传播, 梯度下降, 动量优化, 波动率预测, Nifty 50, 时间序列, 金融机器学习
- 页面链接: https://www.zingnex.cn/forum/thread/numpynifty-50
- Canonical: https://www.zingnex.cn/forum/thread/numpynifty-50
- Markdown 来源: ingested_event

---

## 原作者与来源

- 原作者/维护者：omar-dev6002
- 来源平台：github
- 原始标题：neural-net-from-scratch
- 原始链接：https://github.com/omar-dev6002/neural-net-from-scratch
- 来源发布时间/更新时间：2026-08-11T11:51:00Z

## 原作者与来源\n\n- **原作者/维护者**: omar-dev6002\n- **来源平台**: GitHub\n- **原项目标题**: neural-net-from-scratch\n- **项目链接**: https://github.com/omar-dev6002/neural-net-from-scratch\n- **发布时间**: 2026年8月11日\n\n## 项目背景与动机\n\n在深度学习框架（如TensorFlow、PyTorch）大行其道的今天，大多数开发者已经习惯了调用高级API来构建神经网络。然而，这种便利性也带来了一定的代价：许多从业者对神经网络底层的数学原理和实现细节缺乏深入理解。\n\n本项目作者选择了一条更具挑战性的道路——完全从零开始，仅使用NumPy实现一个功能完整的神经网络。与大多数"从零实现"项目停留在MNIST手写数字识别这类玩具数据集不同，本项目将神经网络应用于真实的金融市场预测任务：印度Nifty 50指数的已实现波动率预测。这是一个回归问题，而非分类问题，更具实际应用价值。\n\n## 核心架构设计\n\n项目采用模块化的设计思路，从最基本的神经元开始逐步构建：\n\n### 1. 单层神经元实现\n\n项目首先实现了单个神经元的前向传播和反向传播逻辑，这是理解神经网络最基础的单元。通过手动实现权重更新和偏置调整，开发者可以直观感受梯度下降的工作机制。\n\n### 2. 可配置的全连接层（Dense Layer）\n\n在单神经元基础上，项目扩展为支持任意输入/输出维度的全连接层。这一层可以处理批量输入数据，为构建深层网络奠定基础。\n\n### 3. 可链式组合的NeuralNetwork类\n\n最终的NeuralNetwork类支持将多个Dense层串联起来，形成深度网络结构。这种设计允许灵活地调整网络深度和宽度，以适应不同复杂度的任务。\n\n## 手动推导的反向传播算法\n\n本项目的核心亮点在于所有数学推导都是手工完成的。作者在`derivations/derivations.md`中详细记录了每一天的推导过程，并附有手写的照片。这种"白盒"实现方式让学习者能够：\n\n- 理解损失函数对每一层权重的梯度是如何计算的\n- 掌握链式法则在神经网络中的应用\n- 验证反向传播算法的正确性（通过XOR问题测试）\n\n## 优化算法实现\n\n除了基础的梯度下降，项目还实现了更高级的优化技术：\n\n### 小批量梯度下降（Mini-batch Gradient Descent）\n\n相比全批量梯度下降，小批量方法在计算效率和收敛稳定性之间取得了平衡。项目实现了灵活的小批量采样逻辑，支持自定义批量大小。\n\n### 动量优化（Momentum）\n\n动量机制通过积累历史梯度信息来加速收敛，并有助于逃离局部最优。项目中手动实现了动量更新规则，进一步提升了训练效果。\n\n## 实际应用：Nifty 50波动率预测\n\n### 数据获取与处理\n\n项目使用`yfinance`库获取Nifty 50指数的真实历史数据。数据预处理环节体现了严谨的金融建模原则：\n\n- **滞后特征工程**：构建特征时严格避免前瞻偏差（look-ahead bias），确保模型只使用过去的信息预测未来\n- **时间序列分割**：训练集和测试集按时间顺序划分，不进行随机打乱，符合金融时间序列建模的最佳实践\n- **目标变量归一化**：使用min-max归一化将波动率映射到sigmoid的输出范围[0,1]\n\n### 模型性能对比\n\n项目在测试集上对比了三种方法的性能（以归一化MSE为指标）：\n\n| 模型 | 测试损失（归一化MSE） |\n|------|---------------------|\n| 朴素基准（预测昨日波动率） | 0.344222 |\n| 从零实现的神经网络 | 0.000777 |\n| sklearn MLPRegressor（默认参数） | 0.006189 |\n\n从零实现的神经网络显著优于朴素基准，相比sklearn的MLPRegressor也有更好的表现（尽管超参数设置不完全相同，不宜直接比较优化器）。\n\n### 模型行为分析\n\n作者注意到一个有趣的现象：模型在波动率飙升期间表现良好，但在市场平静期存在系统性高估。这可能是因为训练数据中包含更多与波动率峰值相关的样本，导致模型对"平静期"的学习不足。这种深入的分析体现了作者对模型行为的细致观察。\n\n## 项目结构与使用\n\n```\nsrc/          - 所有可运行代码（层实现、网络类、训练脚本）\ndata/         - 原始和处理后的Nifty 50数据集\nderivations/  - 手工推导的数学公式，按天记录\nnotebooks/    - 可视化图表和探索性分析\n```\n\n### 快速开始\n\n```bash\ncd src\npip install -r requirements.txt\npython data_pipeline.py      # 获取并处理Nifty 50数据\npython train_volatility.py   # 训练并评估网络\n```\n\n## 学习价值与启示\n\n这个项目为深度学习学习者提供了宝贵的实践经验：\n\n1. **理论联系实际**：手工推导公式后立即用代码实现，加深理解\n2. **真实数据应用**：使用金融市场数据而非玩具数据集，体验实际建模挑战\n3. **工程实践**：完整的端到端流程，从数据获取到模型评估\n4. **性能基准**：与成熟库（sklearn）的对比，验证实现正确性\n\n对于希望深入理解神经网络内部机制的学习者，本项目是一个极佳的参考案例。它不仅展示了"如何实现"，更重要的是展示了"为什么这样实现"。
