【漫话机器学习系列】202.参数共享(Parameter Sharing)


参数共享(Parameter Sharing):高效神经网络的核心机制

在深度学习中,尤其是卷积神经网络(CNN)中,有一个非常关键却常被忽视的设计思想,那就是------参数共享(Parameter Sharing) 。这一机制不仅大大减少了模型需要学习和存储的参数数量,还提高了模型的泛化能力和运算效率。本文将深入探讨什么是参数共享、它的数学基础、应用实例、实现方式以及它带来的优势。


一、什么是参数共享?

参数共享指的是同一组参数(例如权重)在多个模型结构、位置或输入上重复使用。这样做的好处是在不牺牲模型表达能力的前提下,大大减少了模型参数的总数量。

在图片中,我们看到如下定义(翻译和解释如下):

"参数共享是指参数在多个模型或者部分模型中被共享。例如,卷积神经网络(CNN)在图像的不同位置中共享参数,这使得 CNN 在一个图像的任意位置都可以识别模式,以及减少需要存储的参数数量。"

简而言之:共享的参数等于减少冗余 = 更高效的学习


二、卷积神经网络中的参数共享

最著名的参数共享应用就是卷积神经网络(CNN)。

卷积层的例子

设输入图像为大小 32×32×3,若用一个全连接神经网络来处理该图像(假设只有一个隐藏层),则所需的参数数目为非常庞大的:

32×32×3=3072(输入节点)

若连接到一个拥有 100 个神经元的隐藏层:

3072×100=307200 个权重参数

而使用卷积层,比如使用一个 5×5×3 的卷积核,滤波器数量为 10,仅需:

5×5×3×10=750 个参数

对比:307200 → 750,减少超过 400 倍!

这正是参数共享 的效果:卷积核参数在整张图像的不同区域重复使用(共享) ,每次滑动时卷积核的参数不变。


三、数学表达

设一个卷积核的参数为 <math xmlns="http://www.w3.org/1998/Math/MathML"> W ∈ R k × k × c W \in \mathbb{R}^{k \times k \times c} </math>W∈Rk×k×c,其中 k 是卷积核尺寸,c 是输入通道数。输入图像为 <math xmlns="http://www.w3.org/1998/Math/MathML"> X ∈ R H × W × c X \in \mathbb{R}^{H \times W \times c} </math>X∈RH×W×c。

卷积操作实质上是:

<math xmlns="http://www.w3.org/1998/Math/MathML"> Y i , j = ∑ m = 1 k ∑ n = 1 k ∑ d = 1 c W m , n , d ⋅ X i + m , j + n , d Y_{i,j} = \sum_{m=1}^{k} \sum_{n=1}^{k} \sum_{d=1}^{c} W_{m,n,d} \cdot X_{i+m,j+n,d} </math>Yi,j=∑m=1k∑n=1k∑d=1cWm,n,d⋅Xi+m,j+n,d

对于每个滑动窗口的输出 Yi,jY_{i,j},都使用同样的 WW,这就是参数共享。


四、参数共享的其他应用场景

除了 CNN 之外,参数共享还出现在很多模型中:

1. 循环神经网络(RNN)

在时间序列中,RNN 每一个时间步都使用相同的权重矩阵:

<math xmlns="http://www.w3.org/1998/Math/MathML"> h t = tanh ⁡ ( W x h x t + W h h h t − 1 ) h_t = \tanh(W_{xh} x_t + W_{hh} h_{t-1}) </math>ht=tanh(Wxhxt+Whhht−1)

其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> W x h W_{xh} </math>Wxh 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> W h h W_{hh} </math>Whh 在每一个 t 中都是共享的。

2. Transformer 中的共享嵌入

Transformer 中常将词嵌入矩阵和输出投影矩阵进行共享,以减少参数数量。

3. Siamese 网络

用在度量学习或人脸识别中,两个子网络共享所有层的参数,保证提取的特征具有可比性。


五、参数共享的优点

优点 说明
减少参数数量 降低存储和计算成本,特别适合大规模输入(如图像、语音)
提高泛化能力 降低过拟合风险,模型不会记住每个位置特征而是学到全局共性
对位置不变性友好 CNN 能在图像任意位置识别相同模式,提升识别能力
便于迁移学习 共享的参数学到的模式具有广泛通用性,易迁移到新任务

六、PyTorch 示例代码:CNN 中的参数共享

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

class SimpleCNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv = nn.Conv2d(in_channels=3, out_channels=10, kernel_size=3)
        # 参数:3x3x3x10 共270个参数,无论图片多大,只有这270个参数会被复用

    def forward(self, x):
        return F.relu(self.conv(x))

model = SimpleCNN()
input_image = torch.randn(1, 3, 32, 32)
output = model(input_image)

print("Output shape:", output.shape)
print("Total parameters:", sum(p.numel() for p in model.parameters()))

运行结果

yaml 复制代码
Output shape: torch.Size([1, 10, 30, 30])
Total parameters: 280

七、未来趋势与研究

  • 动态参数共享:在不同任务或阶段动态决定共享的参数结构
  • 条件共享结构(Conditional Parameter Sharing) :不同输入激活不同子网络,但共享底层部分
  • 跨任务共享(Multi-task Learning) :多个任务共享部分神经网络结构(如 BERT 多任务微调)

八、总结

参数共享是深度学习架构中一项关键性的设计理念,尤其在 CNN 和 RNN 中极大地提高了效率和表达能力。通过在模型内部或多个模型之间复用相同的权重,我们不仅节省了计算资源,还提高了模型的泛化能力。

📌 小贴士:在设计模型时,充分考虑哪些层、哪些结构可以复用参数,是实现轻量高效神经网络的重要一步!

相关推荐
Guheyunyi2 分钟前
监测预警系统重塑隧道安全新范式
大数据·运维·人工智能·科技·安全
码码哈哈爱分享2 分钟前
[特殊字符] Whisper 模型介绍(OpenAI 语音识别系统)
人工智能·whisper·语音识别
郄堃Deep Traffic8 分钟前
机器学习+城市规划第十三期:XGBoost的地理加权改进,利用树模型实现更精准的地理加权回归
人工智能·机器学习·回归·城市规划
Lucky-Niu8 分钟前
解决transformers.adapters import AdapterConfig 报错的问题
人工智能·深度学习
FserSuN13 分钟前
Prompt工程学习之思维树(TOT)
人工智能·学习·prompt
字节跳动_离青1 小时前
智能的路径
人工智能
王上上1 小时前
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
论文阅读·人工智能·cnn
Channing Lewis1 小时前
如果科技足够发达,是否还需要维持自然系统(例如生物多样性)中那种‘冗余’和‘多样性’,还是可以只保留最优解?
大数据·人工智能·科技
禺垣1 小时前
区块链技术概述
大数据·人工智能·分布式·物联网·去中心化·区块链
IT科技那点事儿1 小时前
引领AI安全新时代 Accelerate 2025北亚巡展·北京站成功举办
人工智能·安全