当前位置: 首页 > news >正文

贝叶斯神经网络(Bayesian Neural Network)

最近在研究贝叶斯神经网络,一些概念一直搞不清楚,这里整理一下相关内容,方便以后查阅。

贝叶斯神经网络(Bayesian Neural Network)

  • 贝叶斯神经网络(Bayesian Neural Network)
    • 1. BNN 的核心思想
    • 2. BNN 的优化目标
    • 3. BNN 的结构与特点
    • 4. BNN 的训练过程
    • 5. BNN 的优缺点
    • 6. 与经典神经网络的对比
    • 7. 简单代码示例(PyTorch)
    • 总结
  • BNN 的目标是计算后验分布
    • 1. 经典神经网络与最大化似然估计
    • 2. 贝叶斯神经网络的目标
    • 3. 经典神经网络与贝叶斯神经网络的核心区别
    • 4. 为什么不是最大化似然估计或最小化损失函数
    • 5. 贝叶斯神经网络的优化目标
    • 6. 实际意义:后验分布的好处
    • 总结
  • Bayes by Backprop
    • 1. Bayes by Backprop 的目标
    • 2. Bayes by Backprop 的实现细节
    • 总结
  • 经典神经网络优化的例子
    • 使用均方根误差优化
      • 代码实现
      • 代码解释
      • 对比 Bayes by Backprop
    • 使用最大化似然估计优化
      • 代码实现
      • 代码解释
      • MLE如何在此应用
      • 对比 Bayes by Backprop

贝叶斯神经网络(Bayesian Neural Network)

贝叶斯神经网络(Bayesian Neural Network, BNN) 是在经典神经网络中引入贝叶斯概率框架的一种扩展模型。它将网络的权重参数表示为概率分布,而不是确定性的点值,从而可以量化模型和预测结果的不确定性。

在这里插入图片描述

在这里插入图片描述

1. BNN 的核心思想

在经典神经网络中,权重是固定的点值,通过最小化损失函数(如均方误差、交叉熵)来优化权重参数。而在贝叶斯神经网络中,权重被建模为概率分布,目标是通过数据更新这些分布(即计算后验分布)。

贝叶斯定理:
p ( w ∣ D ) = p ( D ∣ w ) p ( w ) p ( D ) , p(\mathbf{w}|\mathcal{D}) = \frac{p(\mathcal{D}|\mathbf{w}) p(\mathbf{w})}{p(\mathcal{D})}, p(wD)=p(D)p(Dw)p(w),

其中:

  • p ( w ∣ D ) p(\mathbf{w}|\mathcal{D}) p(wD):后验分布,表示在观察数据后,权重的分布。
  • p ( D ∣ w ) p(\mathcal{D}|\mathbf{w}) p(Dw):似然函数,表示数据在给定权重下的可能性。
  • p ( w ) p(\mathbf{w}) p(w):先验分布,表示我们对权重的先验假设(如权重可能是零均值的高斯分布)。
  • p ( D ) p(\mathcal{D}) p(D):边际似然,通常通过积分对所有可能的权重求和:
    p ( D ) = ∫ p ( D ∣ w ) p ( w ) d w . p(\mathcal{D}) = \int p(\mathcal{D}|\mathbf{w}) p(\mathbf{w}) d\mathbf{w}. p(D)=p(Dw)p(w)dw.

2. BNN 的优化目标

BNN 的目标是计算后验分布 p ( w ∣ D ) p(\mathbf{w}|\mathcal{D}) p(wD)。由于边际似然 p ( D ) p(\mathcal{D}) p(D) 的计算通常非常困难(涉及高维积分),我们采用近似方法来推断后验分布,例如:

  1. 变分推断(Variational Inference)
    用一个简单的分布 q ( w ∣ θ ) q(\mathbf{w}|\boldsymbol{\theta}) q(wθ) 近似 p ( w ∣ D ) p(\mathbf{w}|\mathcal{D}) p(wD),并最小化 KL 散度:
    K L ( q ( w ∣ θ ) ∥ p ( w ∣ D ) ) . \mathrm{KL}(q(\mathbf{w}|\boldsymbol{\theta}) \| p(\mathbf{w}|\mathcal{D})). KL(q(wθ)p(wD)).

  2. 蒙特卡罗方法(Monte Carlo Methods)
    使用随机采样方法(如 MCMC)直接从后验分布中采样。

  3. 贝叶斯 by Backprop
    通过重参数化技巧,将变分推断和神经网络的反向传播结合。

3. BNN 的结构与特点

BNN 与经典神经网络的主要区别是权重的建模方式

  • 经典神经网络:权重是固定值(点估计)。
  • 贝叶斯神经网络:权重是概率分布,表示为 p ( w ) p(\mathbf{w}) p(w)

在 BNN 中,推断网络输出时也会引入随机性:
p ( y ∣ x , D ) = ∫ p ( y ∣ x , w ) p ( w ∣ D ) d w . p(\mathbf{y}|\mathbf{x}, \mathcal{D}) = \int p(\mathbf{y}|\mathbf{x}, \mathbf{w}) p(\mathbf{w}|\mathcal{D}) d\mathbf{w}. p(yx,D)=p(yx,w)p(wD)dw.

这意味着预测结果(输出 y \mathbf{y} y)不仅依赖于输入 x \mathbf{x} x还受到权重分布的不确定性影响

4. BNN 的训练过程

BNN 的训练过程包括以下步骤:

  1. 定义先验分布
    对权重 w \mathbf{w} w 定义一个先验分布 p ( w ) p(\mathbf{w}) p(w),例如零均值的高斯分布:
    p ( w ) = N ( w ∣ 0 , σ 2 ) . p(\mathbf{w}) = \mathcal{N}(\mathbf{w}|0, \sigma^2). p(w)=N(w∣0,σ2).

  2. 计算似然函数
    定义数据的似然函数 p ( D ∣ w ) p(\mathcal{D}|\mathbf{w}) p(Dw)例如对分类任务,通常是交叉熵损失对应的概率分布

  3. 近似后验分布
    q ( w ∣ θ ) q(\mathbf{w}|\boldsymbol{\theta}) q(wθ) 近似 p ( w ∣ D ) p(\mathbf{w}|\mathcal{D}) p(wD)

    • q ( w ∣ θ ) q(\mathbf{w}|\boldsymbol{\theta}) q(wθ) 的参数(如均值 μ \mu μ 和方差 σ \sigma σ)是通过优化得到的。
    • 目标是最大化变分下界:
      L ( θ ) = E q ( w ∣ θ ) [ log ⁡ p ( D ∣ w ) ] − K L ( q ( w ∣ θ ) ∥ p ( w ) ) . \mathcal{L}(\boldsymbol{\theta}) = \mathbb{E}_{q(\mathbf{w}|\boldsymbol{\theta})}[\log p(\mathcal{D}|\mathbf{w})] - \mathrm{KL}(q(\mathbf{w}|\boldsymbol{\theta}) \| p(\mathbf{w})). L(θ)=Eq(wθ)[logp(Dw)]KL(q(wθ)p(w)).

对最小化变分下界的理解:

  1. 第一部分:对数似然的期望 E q ( w ∣ θ ) [ log ⁡ p ( D ∣ w ) ] \mathbb{E}_{q(\mathbf{w}|\boldsymbol{\theta})}[\log p(\mathcal{D}|\mathbf{w})] Eq(wθ)[logp(Dw)]

    • 作用:评估近似分布 q ( w ∣ θ ) q(\mathbf{w}|\boldsymbol{\theta}) q(wθ) 在训练数据 D \mathcal{D} D 上的拟合能力。
    • 解释:从分布 q ( w ∣ θ ) q(\mathbf{w}|\boldsymbol{\theta}) q(wθ) 中采样权重 w \mathbf{w} w,然后计算其对应的对数似然 log ⁡ p ( D ∣ w ) \log p(\mathcal{D}|\mathbf{w}) logp(D
http://www.lryc.cn/news/511837.html

相关文章:

  • Direct Preference Optimization: Your Language Model is Secretly a Reward Model
  • 如何通过 Kafka 将数据导入 Elasticsearch
  • 嵌入式系统 第十二讲 块设备和驱动程序设计
  • 攻防世界web第六题upload
  • 人工智能-Python网络编程-HTTP
  • 探索仓颉编程语言:功能、实战与展望
  • Unity-Editor扩展显示文件夹大小修复版 FileCapacity.cs
  • BLE core 内容整理解释
  • Linux CPU调度算法
  • Linux套接字通信学习
  • mybatis-plus 用法总结
  • 小程序配置文件 —— 14 全局配置 - tabbar配置
  • Redis-十大数据类型
  • linux系统编程(七)管道和FIFO
  • 【vLLM大模型TPS测试三部曲】
  • Elasticsearch:使用 Ollama 和 Go 开发 RAG 应用程序
  • Windows平台ROBOT安装
  • 【动态规划篇】穿越算法迷雾:约瑟夫环问题的奇幻密码
  • 代码随想录算法训练营第51期第32天 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • 爱思唯尔word模板
  • 每日一题 354. 俄罗斯套娃信封问题
  • ASP.net网站的注册、登录和密码修改的操作详解
  • 2024.12.29(进程线程实现并发服务器)
  • 如何在 Ubuntu 上安装 PyTorch
  • 8-Gin 中间件 --[Gin 框架入门精讲与实战案例] 【文末有测试代码】
  • 【潜意识Java】深入详细理解分析Java中的toString()方法重写完整笔记总结,超级详细。
  • 【论文笔记】Contrastive Learning for Sign Language Recognition and Translation
  • Gitlab17.7+Jenkins2.4.91实现Fastapi/Django项目持续发布版本详细操作(亲测可用)
  • 一起来看--红黑树
  • SpringBoot整合篇 05、Springboot整合Redission