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

贝叶斯神经网络

贝叶斯神经网络(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中的表现
相关推荐
科技小花20 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
zhuiyisuifeng1 天前
2026前瞻:GPTimage2镜像官网或将颠覆视觉创作
人工智能·gpt
徐健峰1 天前
GPT-image-2 热门玩法实战(一):AI 看手相 — 一张手掌照片生成专业手相分析图
人工智能·gpt
weixin_370976351 天前
AI的终极赛跑:进入AGI,还是泡沫破灭?
大数据·人工智能·agi
Slow菜鸟1 天前
AI学习篇(五) | awesome-design-md 使用说明
人工智能·学习
冬奇Lab1 天前
RAG 系列(五):Embedding 模型——语义理解的核心
人工智能·llm·aigc
深小乐1 天前
AI 周刊【2026.04.27-05.03】:Anthropic 9000亿美元估值、英伟达死磕智能体、中央重磅定调AI
人工智能
码点滴1 天前
什么时候用 DeepSeek V4,而不是 GPT-5/Claude/Gemini?
人工智能·gpt·架构·大模型·deepseek
狐狐生风1 天前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
波动几何1 天前
CDA架构代码工坊技能cda-code-lab
人工智能