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

贝叶斯神经网络

贝叶斯神经网络(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中的表现
相关推荐
IT_陈寒1 小时前
Vue这个坑我跳了两次,原来问题出在这
前端·人工智能·后端
新新技术迷2 小时前
Node给AI接口做SSE代理与鉴权
人工智能
redreamSo2 小时前
大模型是不是到顶了?瓶颈到底在哪
人工智能·openai
Oo9202 小时前
Tool Use 背后的技术逻辑
人工智能
姗姗来迟了2 小时前
Vue3封装AI流式对话组件踩坑实录
人工智能
码上天下3 小时前
用Pinia管理AI多会话状态
人工智能
用户054324329704 小时前
Next.js接大模型流式SSE实操踩坑
人工智能
Assby4 小时前
从 Function Calling 到 MCP:理解 Agent 工具调用的底层通信机制
人工智能·后端
小星AI4 小时前
Claude Code 从入门到精通,一步到位
人工智能
后端小肥肠4 小时前
Codex + Obsidian 做人生副本视频:输入主题文案,直通剪映草稿
人工智能·aigc·agent