【科普】贝叶斯神经网络与分形神经网络

贝叶斯神经网络

贝叶斯神经网络(Bayesian Neural Network,BNN )是一类结合了贝叶斯推断神经网络 的模型。它的核心思想是:不像传统神经网络那样学习固定的参数值(即网络权重),BNN 会学习这些参数的概率分布 。这样可以更好地量化不确定性,提高模型在不确定环境下的鲁棒性。


🔧 传统神经网络 vs 贝叶斯神经网络

特点 传统神经网络 贝叶斯神经网络
参数(权重) 固定值(点估计) 概率分布
输出 单值预测 预测分布
不确定性表示 没有或依赖于 dropout 等近似方法 内在地建模参数和预测的不确定性
优点 高效、易训练 不确定性建模、可避免过拟合
缺点 不提供置信度 推理成本高、训练复杂

🧠 BNN 的核心思想

BNN 采用贝叶斯公式:

P ( θ ∣ D ) = P ( D ∣ θ ) P ( θ ) P ( D ) P(\theta | D) = \frac{P(D | \theta) P(\theta)}{P(D)} P(θ∣D)=P(D)P(D∣θ)P(θ)

其中:

  • θ \theta θ:模型参数(如网络权重)
  • P ( θ ) P(\theta) P(θ):先验分布
  • P ( D ∣ θ ) P(D|\theta) P(D∣θ):似然函数
  • P ( θ ∣ D ) P(\theta|D) P(θ∣D):后验分布

我们不再学习一个确定的 θ \theta θ,而是学习其后验分布


🔁 推理过程

由于后验分布一般不可解析,BNN 常用近似推理方法:

常见推理方法包括:
  1. 变分推断(Variational Inference)

    用一个简单的分布 q ( θ ) q(\theta) q(θ) 去近似真实的后验分布 P ( θ ∣ D ) P(\theta | D) P(θ∣D)。

  2. 马尔可夫链蒙特卡洛(MCMC)采样

    精度高但计算开销大。

  3. 贝叶斯 dropout(Monte Carlo Dropout)

    在测试时启用 dropout 多次,近似后验采样,简单有效。


✅ BNN 的优势

  • 提供预测的不确定性(例如医疗、自动驾驶中的决策更可靠)
  • 抑制过拟合(通过先验正则)
  • 可与主动学习、强化学习等结合良好

🚫 挑战

  • 训练成本高(需要估计后验分布)
  • 模型复杂度增加
  • 推理速度慢于传统网络

🧪 PyTorch 中的 BNN 示例(简化版)

python 复制代码
import torch
import torch.nn as nn
import torch.nn.functional as F

class BayesianLinear(nn.Module):
    def __init__(self, in_features, out_features):
        super().__init__()
        self.w_mu = nn.Parameter(torch.Tensor(out_features, in_features).normal_(0, 0.1))
        self.w_logvar = nn.Parameter(torch.Tensor(out_features, in_features).normal_(-3, 0.1))
    
    def forward(self, x):
        epsilon = torch.randn_like(self.w_mu)
        w_sample = self.w_mu + torch.exp(0.5 * self.w_logvar) * epsilon
        return F.linear(x, w_sample)

# 用法类似普通神经网络

📚 推荐资源


分形神经网络

分形神经网络(Fractal Neural Network, FNN)是一类受自然界分形结构 启发的神经网络结构。它的核心理念是:通过自相似(self-similar)结构 来构建深度网络,以提高模型的表达能力和泛化能力,同时缓解梯度消失或爆炸等深度网络中的常见问题。


🧠 什么是分形结构?

在数学中,分形(Fractal)是具有自相似性的结构------整体与局部在形态上是相似的。例如:雪花、费尔南德斯三角形、树木、血管等自然结构。


🔧 分形神经网络的核心结构

分形神经网络中,一个典型的模块通过递归组合更小的网络结构来构造大网络,如图:

复制代码
F(C) = [F(C), F(C)] + C

这意味着:一个大的网络由多个小网络的组合构成,且每个小网络结构和大的结构是一样的(递归自我复制)。

🎯 举例:FractalNet(ICLR 2017)

FractalNet 是一个代表性的分形神经网络架构,由德国波恩大学提出。其特点是:

  • 多个路径、不同深度:网络中的每个分支代表一个不同深度的子网络
  • 自相似结构:使用统一的模块递归构建
  • drop-path 正则化:训练时随机丢弃某些路径,防止过拟合并增强鲁棒性

🏗️ 构造原理

一个深度为 n 的 Fractal Block 定义为:

F n ( x ) = Concat ( F n − 1 ( F n − 1 ( x ) ) , F n − 1 ( x ) ) F_{n}(x) = \text{Concat}(F_{n-1}(F_{n-1}(x)), F_{n-1}(x)) Fn(x)=Concat(Fn−1(Fn−1(x)),Fn−1(x))

其中 F_0 是基础卷积模块。

每一层都由前面层的重复结构构建,最终形成"树状结构"。


✅ 优势

优势 说明
多路径学习 类似 ResNet 的跳跃连接,多个深度路径并行
稀疏激活 每个样本可能只激活部分路径,形成类似 ensemble 效果
容易训练 由于浅层路径存在,梯度传导不再依赖太深的网络
自动选择路径 drop-path 类似强化学习中的 policy sampling,可自动选择最优深度

🧪 FractalNet 的 PyTorch 伪代码结构

python 复制代码
class FractalBlock(nn.Module):
    def __init__(self, conv, depth):
        super().__init__()
        self.depth = depth
        if depth == 1:
            self.block = conv()
        else:
            self.left = FractalBlock(conv, depth-1)
            self.right = FractalBlock(conv, depth-1)
    
    def forward(self, x):
        if self.depth == 1:
            return self.block(x)
        else:
            left = self.left(self.left(x))
            right = self.right(x)
            return (left + right) / 2

你可以将 conv() 替换为任意的 CNN 层模块。


🤔 分形神经网络 vs ResNet vs DenseNet

特性 ResNet DenseNet FractalNet
跳跃连接 是(结构性)
多路径结构
自动路径选择 是(drop-path)
模块构造方式 手动 累积连接 递归分形构造

📚 推荐资源


如果你想我为你:

  • 画出 FractalNet 的结构图
  • 写一个完整的 FractalNet 网络代码
  • 分析它在图像分类或NLP中的表现
相关推荐
Hao想睡觉3 分钟前
CNN卷积神经网络之VggNet和GoogleNet经典网络模型(四)
网络·人工智能·cnn
我不是小upper9 分钟前
anaconda、conda、pip、pytorch、torch、tensorflow到底是什么?它们之间有何联系与区别?
人工智能·pytorch·深度学习·conda·tensorflow·pip
z樾29 分钟前
Sum-rate计算
开发语言·python·深度学习
智汇云校乐乐老师32 分钟前
产教融合 AI赋能 创新引领 | 第十七届高校教育发展高峰论坛在利川成功举办!
人工智能·高峰论坛·讯方技术
热河暖男36 分钟前
Spring Boot AI 极速入门:解锁智能应用开发
java·人工智能·spring boot·ai编程
SugarPPig38 分钟前
(一)LoRA微调BERT:为何在单分类任务中表现优异,而在多分类任务中效果不佳?
人工智能·分类·bert
zzywxc7871 小时前
在处理大数据列表渲染时,React 虚拟列表是提升性能的关键技术,但在实际实现中常遇到渲染抖动和滚动定位偏移等问题。
前端·javascript·人工智能·深度学习·react.js·重构·ecmascript
oscar9991 小时前
在线免费的AI文本转语音工具TTSMaker介绍
人工智能·语音
zhongqu_3dnest1 小时前
VR 三维重建:开启沉浸式体验新时代
人工智能·计算机视觉