13个概率分布一网打尽:深度学习研究者必备的Python实现指南

13个概率分布一网打尽:深度学习研究者必备的Python实现指南

【免费下载链接】distribution-is-all-you-need The basic distribution probability Tutorial for Deep Learning Researchers 【免费下载链接】distribution-is-all-you-need 项目地址: https://gitcode.com/gh_mirrors/di/distribution-is-all-you-need

引言:为什么每个AI研究者都需要精通概率分布?

你是否还在为选择合适的概率分布模型而烦恼?在训练神经网络时,如何用贝叶斯方法优化先验参数?面对分类问题,伯努利分布与多项分布该如何选择?本文将通过13个核心概率分布的Python实现,带你构建深度学习的概率基础,解决从数据建模到模型评估的全流程问题。

读完本文你将获得:

  • 掌握8种离散分布+5种连续分布的数学原理与代码实现
  • 理解分布间的共轭关系(如Beta-二项分布、Dirichlet-多项分布)
  • 学会用matplotlib可视化分布特征与参数影响
  • 获取可直接复用的概率计算工具库(13个即用函数)

项目概述:distribution-is-all-you-need

distribution-is-all-you-need是一个专注于深度学习领域常用概率分布的Python实现库,包含13种基础分布的数学计算与可视化代码。项目采用极简API设计,每个分布对应独立模块,支持参数调优与结果可视化,适合作为概率建模的基础设施。

mermaid

安装指南

# 克隆仓库
git clone https://gitcode.com/gh_mirrors/di/distribution-is-all-you-need
cd distribution-is-all-you-need

# 安装依赖
pip install numpy matplotlib

核心概率分布实现详解

1. 伯努利分布(Bernoulli Distribution)

数学定义:描述二值随机变量的概率分布,取值为1的概率为p,0的概率为1-p。

def bernoulli(p, k):
    """
    计算伯努利分布概率
    :param p: 成功概率 (0 < p < 1)
    :param k: 结果 (0或1)
    :return: 概率值
    """
    return p if k else 1 - p

# 使用示例
p = 0.6  # 正面朝上概率
print(bernoulli(p, k=1))  # 输出:0.6
print(bernoulli(p, k=0))  # 输出:0.4

应用场景:二分类问题标签建模、dropout层随机失活概率

2. 正态分布(Normal Distribution)

数学定义:又称高斯分布,是连续型概率分布,由均值μ和标准差σ决定,概率密度函数为: $$N(x|\mu,\sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$$

import numpy as np
def normal(x, n):
    u = x.mean()  # 均值
    s = x.std()   # 标准差
    x = (x - u) / s  # 标准化
    x = np.linspace(x.min(), x.max(), n)
    a = ((x - 0) ** 2) / (2 * (1 ** 2))
    y = 1 / (s * np.sqrt(2 * np.pi)) * np.exp(-a)
    return x, y, u, s

# 使用示例
x = np.arange(-100, 100)
x_vals, y_vals, mu, sigma = normal(x, 10000)

可视化结果mermaid

3. Beta分布(Beta Distribution)

数学定义:定义在[0,1]区间的连续概率分布,是二项分布的共轭先验,概率密度函数为: $$Beta(x|a,b) = \frac{x^{a-1}(1-x)^{b-1}}{B(a,b)}$$ 其中B(a,b)是Beta函数,通过Gamma函数计算:$B(a,b) = \frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)}$

def gamma_function(n):
    """Gamma函数实现"""
    cal = 1
    for i in range(2, n):
        cal *= i
    return cal

def beta(x, a, b):
    gamma = gamma_function(a + b) / (gamma_function(a) * gamma_function(b))
    y = gamma * (x ** (a - 1)) * ((1 - x) ** (b - 1))
    return x, y, np.mean(y), np.std(y)

# 参数影响示例
params = [(1, 3), (5, 1), (2, 2), (2, 5)]  # (α, β)组合

参数影响对比表

参数组合分布形状应用场景均值方差
(1,3)左偏分布罕见事件概率估计0.250.0375
(5,1)右偏分布常见事件概率估计0.8330.0208
(2,2)对称钟形中等不确定性估计0.50.05
(2,5)轻微左偏类不平衡数据先验0.2860.0255

4. Dirichlet分布(Dirichlet Distribution)

数学定义:Beta分布在高维空间的推广,是多项分布的共轭先验,概率密度函数为: $$Dir(x|\alpha) = \frac{1}{B(\alpha)} \prod_{i=1}^k x_i^{\alpha_i-1}$$ 其中$\alpha=(\alpha_1,...,\alpha_k)$为浓度参数,$B(\alpha)$是多元Beta函数。

def dirichlet(x, a, n):
    """
    Dirichlet分布计算
    :param x: 样本点集合 (n_trial, K)
    :param a: 浓度参数列表
    :param n: 试验次数
    """
    c = (1 / beta_function(a))  # 归一化常数
    y = [c * (xn[0] ** (a[0] - 1)) * (xn[1] ** (a[1] - 1)) 
         * (xn[2] ** (a[2] - 1)) for xn in x]
    return np.arange(n), y, np.mean(y), np.std(y)

三维Dirichlet分布可视化mermaid

分布间的层次关系与共轭家族

离散分布体系

mermaid

关键关系

  • 伯努利分布是二项分布在n=1时的特例
  • 分类分布是伯努利分布的多类别扩展
  • Beta分布是二项分布的共轭先验(后验仍为Beta分布)
  • Dirichlet分布是多项分布的共轭先验

连续分布体系

mermaid

实战应用:分布选择决策树

mermaid

完整API速查表

离散分布函数

函数名参数返回值应用场景
bernoulli(p, k)p:成功概率,k:结果(0/1)概率值二分类问题
binomial(n, p)n:试验次数,p:成功概率概率质量函数多次二分类
categorical(p, k)p:概率向量,k:类别概率值多分类问题
multinomial(n)n:试验次数概率质量函数多次多分类

连续分布函数

函数名参数返回值应用场景
normal(x, n)x:数据,n:点数x,y,均值,标准差数据标准化
beta(x, a, b)x:变量,a,b:形状参数x,y,均值,标准差概率估计
dirichlet(x, a, n)x:样本,a:浓度参数x,y,均值,标准差多类别概率
gamma(x, a, b)x:变量,a:形状,b:率参数x,y,均值,标准差等待时间建模

高级应用:贝叶斯神经网络中的先验选择

在贝叶斯深度学习中,概率分布的选择直接影响模型性能:

  1. 权重先验:通常选择正态分布$N(0,\sigma^2)$,当数据稀缺时可改用学生t分布增强鲁棒性
  2. ** dropout概率**:使用Beta分布$Beta(\alpha,\beta)$建模,通过数据自适应调整失活概率
  3. 类别不平衡:对少数类赋予更高的先验概率,如Dirichlet分布$\alpha_{minor} > \alpha_{major}$
# 贝叶斯线性回归中的先验设置示例
def bayesian_linear_regression(X, y):
    # 权重先验:正态分布
    w_prior = normal(np.zeros(X.shape[1]), 10000)
    
    # 噪声先验:Gamma分布
    sigma_prior = gamma(np.random.rand(1), a=2, b=1)
    
    # 后验推断(使用共轭先验性质)
    ...

项目扩展与资源

推荐学习路线

  1. 基础阶段:实现所有分布的概率计算与可视化
  2. 进阶阶段:推导共轭先验关系的数学证明
  3. 应用阶段:在PyTorch/TensorFlow中实现概率层

常用资源

  • 理论参考:Bishop《模式识别与机器学习》第2章
  • 代码扩展:添加分布的KL散度计算与采样函数
  • 可视化工具:使用plotly实现交互式参数调整界面

总结与展望

本文系统介绍了深度学习研究必备的13种概率分布,从数学原理到代码实现,从参数影响到实际应用。掌握这些分布不仅能帮助你构建更稳健的概率模型,还能为贝叶斯优化、变分推断等高级技术打下基础。

未来版本将添加:

  • 分布间的KL散度计算
  • 蒙特卡洛采样方法
  • PyTorch/TensorFlow版本实现

如果你觉得本文有帮助,请点赞收藏关注三连,下期将带来《概率分布在GAN中的应用》!

附录:完整代码仓库结构

distribution-is-all-you-need/
├── bernoulli.py      # 伯努利分布
├── beta.py           # Beta分布
├── binomial.py       # 二项分布
├── categorical.py    # 分类分布
├── chi-squared.py    # 卡方分布
├── dirichlet.py      # Dirichlet分布
├── exponential.py    # 指数分布
├── gamma.py          # Gamma分布
├── gaussian.py       # 高斯分布
├── multinomial.py    # 多项分布
├── normal.py         # 正态分布
├── student-t.py      # 学生t分布
├── uniform.py        # 均匀分布
└── graph/            # 可视化结果

【免费下载链接】distribution-is-all-you-need The basic distribution probability Tutorial for Deep Learning Researchers 【免费下载链接】distribution-is-all-you-need 项目地址: https://gitcode.com/gh_mirrors/di/distribution-is-all-you-need

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值