当前位置:首页>AI快讯 >

胶囊网络原理与实现详解

发布时间:2025-10-11源自:融质(上海)科技有限公司作者:融质科技编辑部

好的,我们直接开始讲解胶囊网络的原理与实现。 胶囊网络原理与实现详解 胶囊网络是一种旨在克服传统卷积神经网络某些局限性的新型神经网络架构,由 Geoffrey Hinton 等人提出。其核心思想是建模图像中物体的姿态(如位置、大小、方向、纹理等)和部件与整体之间的层级关系一、为何需要胶囊网络?CNN的局限性 要理解胶囊网络,首先需了解其要解决的问题:

信息丢失: 传统CNN通过池化层(如最大池化)来实现平移不变性和降维,但这个过程会丢失物体的精确空间信息(例如,物体的精确位置和姿态)。网络只知道“有什么”,但不知道“在哪里”以及“如何存在”。 对视角变化的脆弱性: CNN通过海量数据增广(如旋转、缩放图片)来学习视角不变性。但如果遇到训练数据中未出现的新视角,模型可能表现不佳。因为它并未真正理解物体的3D结构。 “专家盲”问题: CNN容易将图像中同时出现的多个特征误判为同一物体。例如,一张脸上有嘴巴和眼睛,但如果把眼睛放在额头,CNN可能仍然会高概率地判断为“人脸”,因为它缺乏对部件间空间一致性的显式建模。

胶囊网络试图通过“向量”而非“标量”来表征物体,从而解决上述问题。 二、胶囊网络的核心原理

1. 胶囊与活动向量

CNN的神经元: 输出一个标量,表示某个特征(如边缘、拐角)存在的概率。 胶囊: 输出一个向量。这个向量的模长 表示某个实体(如眼睛、嘴巴、整张脸)存在的概率,而向量的方向 编码了该实体的实例化参数,即其姿态(如位置、旋转、比例等)。

例如,一个“眼睛”胶囊输出的向量方向,编码了这只眼睛的具体朝向和位置。

2. 动态路由算法——胶囊间的共识机制
这是胶囊网络的灵魂。它解决了低层胶囊如何将信息传递给高层胶囊的问题,其核心是“共识”而非“最大激活”。 目标: 低层胶囊(如“眼睛胶囊”、“鼻子胶囊”)需要判断自己的输出应该被发送到哪个高层胶囊(如“人脸胶囊”或“车轮胶囊”)。 步骤详解:

预测向量: 对于每个低层胶囊 i,其输出向量 u_i 会乘以一个变换矩阵 W_ij,得到一个“预测向量” û_j|iû_j|i 的含义是:“胶囊 i 认为父胶囊 j 的输出向量应该是什么样子”。

> û_j|i = W_ij  u_i

加权求和: 高层胶囊 j 的输入 s_j 是所有低层胶囊对其预测的加权和。

> s_j = Σ (c_ij  û_j|i)
> c_ij 是**耦合系数**,表示低层胶囊 i 与高层胶囊 j 相连的**概率**。所有与胶囊 j 相连的 c_ij 之和为1。

动态路由(迭代更新耦合系数 c_ij):

初始化: 将所有耦合系数 b_ijc_ijb_ij 通过softmax计算得到)初始化为0。 迭代(通常3次):

a.  **计算耦合系数:** c_ij = softmax(b_ij)。对于胶囊 j,所有 ic_ij 构成一个概率分布。
b.  **计算高层输入:** s_j = Σ (c_ij  û_j|i)
c.  **挤压函数:** 高层胶囊 j 的最终输出 v_j 通过对 s_j 应用一个非线性的“挤压函数”得到。该函数保持向量方向不变,但将模长压缩到0到1之间,以表示概率。
    > v_j = ||s_j||^2 / (1 + ||s_j||^2)  (s_j / ||s_j||)
d.  **更新权重 b_ij(达成共识):** 检查每个低层胶囊的预测 û_j|i 是否与高层胶囊的实际输出 v_j 一致。如果两者点积(内积)大,说明预测准确,则应增加该连接的权重。
    > b_ij = b_ij + û_j|i · v_j

经过几轮迭代,只有那些预测与最终输出 v_j 一致的低层胶囊,其耦合系数 c_ij 会越来越大,从而其贡献也越大。这就形成了一个“共识”机制:只有空间关系一致的部件投票,才能激活一个高层的整体胶囊。

3. 边际损失函数
胶囊网络使用一种特殊的边际损失函数来同时学习每个类别的存在与否。 对于每个存在于输入图片中的类别 k,损失函数的第一项要求正确类别的胶囊输出模长尽可能长(接近1)。对于不存在的类别 k,第二项要求其输出模长尽可能短(小于0.1)。通过这种设计,网络可以同时输出多个类别(多标签分类),并给出其存在概率。 三、胶囊网络的实现详解 一个典型的胶囊网络(如CapsNet)结构如下:

编码器:

标准卷积层: 使用常规卷积层从原始图像中提取低级特征(如边缘、颜色)。 主胶囊层: 这是第一个胶囊层。它通过一组卷积操作实现,每个空间位置输出一组胶囊向量。例如,使用32种不同的8D卷积核,在每个位置产生一个8维向量,最终得到 [6, 6, 32] 个胶囊,每个胶囊是8维向量。 数字胶囊层: 这是最高层的胶囊层,每个胶囊对应一个类别(如MNIST数据集就是10个胶囊,每个代表一个数字)。通过动态路由算法,将主胶囊层的所有胶囊信息路由到这10个胶囊上。每个数字胶囊输出一个16维向量,其模长就是该类别的概率。

解码器(用于重建和正则化):

解码器是一个全连接神经网络,以正确的数字胶囊的输出向量为输入(训练时,其他类别的胶囊向量被屏蔽),目标是重建出原始图像。 使用重建损失(如均方误差MSE)作为正则项,迫使胶囊不仅学习到物体的存在性,还学习到其详细的实例化参数(姿态),因为从这些参数中必须能重建出原图。

实现关键点:

动态路由的迭代次数: 通常3次迭代即可达到良好效果,过多迭代可能导致过拟合。 挤压函数: 确保输出向量的模长在0到1之间,这是实现概率表示的关键。 掩码技术: 训练时,只有正确类别的胶囊向量被用于重建,这鼓励胶囊网络将编码所有必要信息的“姿态”参数存入输出向量中。

优势与挑战:

优势: 对仿射变换鲁棒性强、所需训练数据更少、能显式建模部件关系、输出结果可解释性更强(通过操作胶囊向量可以观察到物体的变化)。 挑战: 计算量较大(动态路由是迭代过程)、在非常复杂的数据集(如ImageNet)上性能尚不及最先进的CNN。

总结来说,胶囊网络通过向量输出和动态路由机制,为神经网络提供了一种建模物体姿态和部件-整体关系的新范式,是深度学习向更具鲁棒性和可解释性方向发展的重要探索。

欢迎分享转载→ https://shrzkj.com.cn/aikuaixun/144442.html

Copyright © 2025 融质(上海)科技有限公司 All Rights Reserved. 本站部分资源来自互联网收集,如有侵权请联系我们删除。沪ICP备2024065424号-2XML地图