在人工智能领域,预测金融市场价格一直是一个热门话题。本文将介绍一种新颖的方法——贝叶斯神经网络,用于预测市场动态,以虚拟货币“以太币”为例进行说明。
### 贝叶斯神经网络:一种新视角
对于希望深入了解贝叶斯神经网络的读者,以下是一些推荐的资源:
- [PyMC3](https://github.com/pymc-devs/pymc3):一个Python库,用于贝叶斯统计建模和概率机器学习。
- [Edward](http://edwardlib.org/):一个用于概率建模、推断和深度学习的库。
- [Pyro](http://pyro.ai/):一个灵活的通用概率编程框架。
pypro 镜像
GitCode - 全球开发者的开源社区,开源代码托管平
gitcode.com/gh_mirrors/py/pyro/tree/dev/pyro/contrib/bnn
入门|文档|社区|贡献
Pyro是基于PyTorch构建的一个灵活、可伸缩的深层概率编程库。值得注意的是,它的设计考虑了以下原则:
- 通用:Pyro是一个通用的PPL-它可以表示任何可计算的概率分布。
- 可伸缩性:与hand-written代码相比,Pyro可以以很少的开销扩展到大型数据集。
- 最小:Pyro是敏捷的,可维护的。它是用一个强大的、可组合的抽象的小核心实现的。
- 灵活:Pyro的目标是在需要时实现自动化,在需要时进行控制。这是通过high-level抽象来表达生成和推理模型的,同时允许专家easy-access定制推理。
Pyro由Uber人工智能实验室和社区贡献者开发和维护。更多信息,请查看我们的博客文章。
Installing
安装稳定的Pyro释放装置
使用pip安装:
Pyro支持python3.4+。
pip install pyro-ppl
从源安装:
git clone git@github.com:pyro-ppl/pyro.git
cd pyro
git checkout master # master is pinned to the latest release
pip install .
使用额外的软件包安装:
要安装运行examples
/tutorials
目录中包含的概率模型所需的依赖项,请使用以下命令:
pip install pyro-ppl[extras]
请确保这些模型与您安装的Pyro源代码版本相同。
安装Pyro dev分支
对于最近的特性,您可以从源代码安装Pyro。
使用pip安装:
pip install git+https://github.com/pyro-ppl/pyro.git
或者,使用extras
依赖关系来运行examples
/tutorials
目录中包含的概率模型:
pip install git+https://github.com/pyro-ppl/pyro.git#egg=project[extras]
从源安装:
git clone https://github.com/pyro-ppl/pyro
cd pyro
pip install . # pip install .[extras] for running models in examples/tutorials
从Docker容器运行Pyro
请参阅此处的说明。
Citation
如果您使用Pyro,请考虑引用:
@article{bingham2019pyro,
author = {Eli Bingham and
Jonathan P. Chen and
Martin Jankowiak and
Fritz Obermeyer and
Neeraj Pradhan and
Theofanis Karaletsos and
Rohit Singh and
Paul A. Szerlip and
Paul Horsfall and
Noah D. Goodman},
title = {Pyro: Deep Universal Probabilistic Programming},
journal = {J. Mach. Learn. Res.},
volume = {20},
pages = {28:1--28:6},
year = {2019},
url = {http://jmlr.org/papers/v20/18-403.html}
}
传统的神经网络通过确定性的权重来学习模式,但这种方法在面对金融市场这种高度随机和动态的环境时可能会遇到过拟合的问题。贝叶斯神经网络通过引入概率分布来定义权重,从而为模型提供了一种内在的正则化机制。
#### 概率编程基础
概率编程是一种定义和操作概率模型的方法。它允许我们将模型中的参数视为随机变量,而不是固定的数值。这样,模型的输出就不再是单一的确定性值,而是一个概率分布,我们可以从中抽取样本来估计预测的不确定性。
#### 贝叶斯线性回归:一个简单示例
以太币价格预测的初步尝试是使用贝叶斯线性回归模型。这种模型将权重视为服从正态分布的随机变量,并通过变分推断来估计这些权重的后验分布。
#### 贝叶斯神经网络的构建
进一步,我们构建了一个包含隐藏层的贝叶斯神经网络。这个网络使用PyTorch框架,并通过Pyro库来定义概率模型。网络的每个层都有其对应的先验分布,这些分布定义了权重的初始状态。
#### 训练与预测
训练过程中,我们不仅更新网络的权重,还更新了权重的分布参数。预测时,我们可以从这些分布中抽取多个样本,计算预测结果的均值和标准差,从而得到预测的不确定性估计。
#### 结果分析
与传统的确定性神经网络相比,贝叶斯神经网络在预测以太币价格时显示出了更好的性能。更重要的是,它提供了对预测不确定性的量化,这对于金融决策至关重要。
#### 权重的稀疏性和正则化
贝叶斯方法的一个有趣特性是它能够在训练过程中自然地导致权重的稀疏性,这类似于L1正则化的效果。此外,权重的分布参数(如均值和方差)也为我们提供了对模型复杂度的控制。
#### 结论
贝叶斯神经网络为金融市场预测提供了一种强大的工具。它不仅能够处理数据的不确定性,还能够通过概率分布来自然地实现正则化,从而提高模型的泛化能力。随着人工智能技术的不断进步,这种方法有望在金融领域发挥更大的作用。
### 进一步探索
对于希望深入了解贝叶斯神经网络的读者,以下是一些推荐的资源:
- [PyMC3](https://github.com/pymc-devs/pymc3):一个Python库,用于贝叶斯统计建模和概率机器学习。
- [Edward](http://edwardlib.org/):一个用于概率建模、推断和深度学习的库。
- [Pyro](http://pyro.ai/):一个灵活的通用概率编程框架。
此外,对于想要实践贝叶斯神经网络的读者,可以在[这个GitHub仓库](https://github.com/Rachnog/Deep-Trading/tree/master/bayesian)找到相关的代码示例和教程。通过这些资源,读者可以更深入地理解贝叶斯方法,并将其应用于自己的项目中。
教程
http://pyro.ai/examples/bayesian_regression.html
Bayesian Regression - Introduction (Part 1) — Pyro Tutorials 1.9.1 documentation
入门教程
- Pyro简介
- Pyro模型的自动渲染
- 呈现确定性变量
- SVI第一部分:Pyro中随机变分推理的介绍
- SVI第二部分:条件独立、二次抽样和摊销
- SVI第三部分:ELBO梯度估值器
- SVI第四部分:提示和技巧
实用烟火和PYTORCH
- 贝叶斯回归-简介(第一部分)
- 教程大纲
- 设置
- 线性回归
- 基于Pyro随机变分推理的贝叶斯回归(SVI)
- 模型评估
- 通过TorchScript提供模型服务
- 贝叶斯回归推理算法(下)
- Pyro中的张量形状
- Pyro中的模块
- 高维贝叶斯工作流及其在新型冠状病毒菌株中的应用
- 交互式后验预测检查
- 使用PyTorch JIT编译器和Pyro
- 示例:在SVI使用vanilla PyTorch执行优化
- 示例:通过Horovod进行分布式培训
- 示例:通过PyTorch Lightning进行分布式培训
- 具有标准化流动引导件的SVI
深度生成模型
- 可变自动编码器
- 半监督的VAE
- 条件变分自动编码器
- 标准化流程-简介
- 具有归一化流先验的变分自动编码器
- 深度马尔可夫模型
- 参加推断复读
- 例子:因果效应VAE
- 示例:稀疏伽马深指数族
- 概率主题建模
- scANVI:基于Pyro的单细胞数据深度生成建模
离散潜在变量
- 离散潜变量推理
- 高斯混合模型
- Pyro中的Dirichlet过程混合模型
- 示例:具有离散枚举的玩具混合模型
- 示例:隐马尔可夫模型
- 示例:捕获-再捕获模型(CJS模型)
- 示例:分层混合效果隐马尔可夫模型
- 示例:使用电镀总和的离散因子图推断
- 示例:摊销潜在狄利克雷分配
定制推理
- 最大似然估计和MAP估计
- 用自动制导做同样的事情
- 使用EasyGuide编写指南
- 定制SVI目标和培训循环
- 推进黑盒变分推理
- 示例:具有NeuTraReparam的神经MCMC
- 示例:稀疏贝叶斯线性回归
- 示例:减少样板文件pyro.contrib.autoname
应用:时间序列
- 预测I:单变量,重尾
- 预测II:状态空间模型
- 预测三:层次模型
- 动态线性模型预测(DLM)
- 随机波动的Levy稳定模型
- 多元预测
- 示例:高斯过程时间序列模型
应用:高斯过程
- 高斯过程
- 高斯过程潜变量模型
- 贝叶斯优化
- 示例:深度内核学习
应用:流行病学
- 流行病学模型:简介
- 示例:单变量流行病学模型
- 示例:区域流行病学模型
- 例如:通过HMC进行流行病学推断
- 新型冠状病毒血统比例的逻辑增长模型
应用:生物序列
- 示例:常量+ MuE(配置文件HMM)
- 示例:概率PCA + MuE (FactorMuE)
应用:实验设计
- 设计适应性实验研究工作记忆
- 用贝叶斯最优实验设计预测美国总统选举的结果
应用:对象跟踪
- 跟踪未知数量的对象
- 卡尔曼滤波器
其他推理算法
- 示例:使用MCMC分析棒球统计数据
- 示例:使用马尔可夫链蒙特卡罗进行推断
- 例如:协方差上具有LKJ先验的MCMC
- 编译顺序重要性抽样
- 示例:顺序蒙特卡罗滤波
- 示例:重要性抽样
- 理性言语行为框架
- 使用RSA理解夸张
- 示例:将预测性和确定性与MCMC和SVI结合使用
了解PYRO的内部结构
- 迷你烟火
- poutine:Pyro中效果处理程序的编程指南
- pyro.contrib.funsor,Pyro - New原语的新后端(第1部分)
- pyro.contrib.funsor,一个新的烟火建筑推理算法后端(第2部分)
- 示例:隐马尔可夫模型pyro.contrib.funsor和pyroapi
反对
- (不推荐使用)Pyro中的模型介绍
- (不赞成使用)Pyro中的推理介绍