比较:Tensorflow中实现稀疏编码的不同方法

点击上方关注,All in AI中国

比较:Tensorflow中实现稀疏编码的不同方法

我一直在研究稀疏编码和实现它的不同方法,在这篇文章中,我会比较它们,以下是详细的情况。

  • 案例a:纯自动编码
  • 案例b:具有L2正则化的自动编码器
  • 案例c:吴恩达课程中的稀疏自动编码器
  • 案例d:用于稀疏编码的简单、高效和神经算法
  • 案例e:k-Sparse 自编码器
比较:Tensorflow中实现稀疏编码的不同方法

论文地址:https://arxiv.org/pdf/1503.00778.pdf

比较:Tensorflow中实现稀疏编码的不同方法

论文地址:https://arxiv.org/pdf/1312.5663.pdf

简介、数据集和一般理念

本文已经假设读者对神经网络和自编码器有一定的了解,所以我不会详细介绍。 另外,我将仅介绍使用自动编码器进行稀疏编码的方法。 请记住,超参数设置相同,但并不能保证它在每种情况下都是最佳的!最后,我使用的所有数据都来自MNIST数据集。

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

橙色框→矢量形式的原始数据

红盒→压缩数据

蓝盒→重建数据

自编码器的一般思想非常简单,即在压缩后重建原始数据。 我们在今天的帖子中要看到的是学习权重(橙色框和红框之间的权重),因为这些权重代表我们捕获的数据(或特征)。

案例a:纯自编码器的结果

比较:Tensorflow中实现稀疏编码的不同方法

500 epoch学习权重的进展

从上面的进展中,我们可以注意到一些事情,学到的权重(或特征)并不特定于某些数字。这是因为由于网络可以使用学习字典中的所有原子来重建原始数据,因此不需要为给定数据学习专门的过滤器。

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

上图→原始数据

下图→重构数据

重构数据有点模糊,但通常它包含数字的正确形状。

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

上图→具有对比度归一化的学习权重

中间图像→没有对比度的学习权重归一化

正确的图像→训练期间的成本

当我们再次查看学习的权重时,我们可以再次观察到过滤器不是特定于某些数字。

案例b的结果:具有L2正则化的自编码器

比较:Tensorflow中实现稀疏编码的不同方法

当我们将L2正则化添加到原始自动编码器时,我们看不到学习权重之间的极端差异。这很自然,因为在重建原始数据时,网络仍然可以完全访问字典中的所有原子。

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

上图→原始数据

下图→重构数据

同样,与纯自编码器类似,重构数据模糊但仍保留一般的形状。

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

上图→具有对比度归一化的学习权重

中间图像→没有对比度的学习权重归一化

正确的图像→训练期间的成本

我们仍然看不到特定于某些数字的过滤器。

案例c的结果:来自吴恩达课程的稀疏自动编码器

比较:Tensorflow中实现稀疏编码的不同方法

当我们在隐藏层中引入稀疏性概念时,并非字典中的所有原子都可以使用。我们可以清楚地观察到,所学习的滤波器对某些数字变得更加具体,并且在最后epoch之后,滤波器代表了一个数字的笔划。

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

上图→原始数据

下图→重构数据

我个人认为,重构的数据比其他两个(上图)更模糊,但它们清晰可辨。

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

上图→具有对比度归一化的学习权重

中间图像→没有对比度的学习权重归一化

正确的图像→训练期间的成本

当我们可视化学习的权重时,我们可以看到网络正在尝试从给定数据中提取不同的笔画。

案例d的结果:用于稀疏编码的简单、高效和神经算法

比较:Tensorflow中实现稀疏编码的不同方法

如果没有重构损失函数进行优化,我们可以观察到收敛需要更长的时间。然而,我们可以观察到,如果要使用字典中的某个原子,它会产生类似于我们有稀疏概念时的过滤。 (案例c)

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

上图→原始数据

下图→重建数据

这种方法的一个缺点是没有重建损失,虽然它产生了更清洁的滤波器,但它不能重构原始数据以及其他方法。

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

上图→具有对比度归一化的学习权重

中间图像→没有对比度的学习权重归一化

正确的图像→训练期间的成本

当我们可视化学习的权重时,我们可以看到这种方法的优点,即它可以生成更清晰的过滤器。

案例e的结果:k-Sparse 自编码

比较:Tensorflow中实现稀疏编码的不同方法

对于给定的数据,顶级K稀疏自编码器在汇聚到最优点时要快得多。我们可以观察到,学习的权重是干净的,同时捕捉到笔划的特征。

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

上图→原始数据

下图→重构数据

由于存在重建误差,与情况d相比,重构数据更清晰,但是,我们可以清楚地观察到它在这里和那里缺乏对比度的事实。

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

比较:Tensorflow中实现稀疏编码的不同方法

上图→具有对比度归一化的学习权重

中间图像→没有对比度的学习权重归一化

正确的图像→训练期间的成本

同样,学习过滤器在捕获笔画类型功能时更加清晰。

互动代码

比较:Tensorflow中实现稀疏编码的不同方法

(https://colab.research.google.com/drive/15vST8Gma0uyQa1DOwO5weUWQ-I55FQoG)

请按此进入案例b的代码。

(https://colab.research.google.com/drive/1m2IfnKFdXN5KMOvDMfFSj4vc94kcch73)

请按此进入案例c的代码。

(https://colab.research.google.com/drive/1-OHYBSYxsQ0dYRvq5wzzBhzlQRs2p169)

请按此进入案例d的代码。

(https://colab.research.google.com/drive/1HtXdq6hcX2rbywjl8I1BnLmelXy7P2sZ)

如欲取得个案e的代码,请按此。

(https://colab.research.google.com/drive/1J6cTgJnUXi64ndOx7X_1eoiStGzpt4fU)

比较:Tensorflow中实现稀疏编码的不同方法


分享到:


相關文章: