深入了解自编码权重绑定——我用实验给你看(附代码)

深入了解自编码权重绑定——我用实验给你看(附代码)


“等到退潮的时候,就能看出谁在裸泳。”


自上一篇自编码深度学习一个神奇的应用——权重绑定(附自编码学习资料) 推出后,很多小伙伴都表示有些原理搞得不太清楚,到底效果咋样也不知道,感觉意犹未尽。今天再来给大家深入聊一聊。


01、卷积神经网络权重更新与绑定


深入了解自编码权重绑定——我用实验给你看(附代码)


1.卷积神经网络权重更新


卷积神经网的权重更新是网络学习的关键,这里面的基本原理就是:正向计算误差,反向传播更新权重。


下面来说说卷积层的误差传播。


如下图所示是卷积层的误差传播。卷积层要看成只与特定单元相连接的全连接层。卷积核就相当于权重。卷积核的调整和深度前馈网络相同,也是从上层的连接权重开始逐层调整。


深入了解自编码权重绑定——我用实验给你看(附代码)


具体的计算过程与全连接神经网络类似的,这里省略1千字。


2.神经网络权重绑定


自编码器是神经网络的一种,通常包括两部分:encoder(也称为识别网络)将输入转换成内部表示,decoder(也称为生成网络)将内部表示转换成输出。如图所示。


深入了解自编码权重绑定——我用实验给你看(附代码)


如果一个自编码器的层次是严格轴对称的(如下图),一个常用的技术是将decoder层的权重捆绑到encoder层。这使得模型参数减半,加快了训练速度并降低了过拟合风险。

注意:偏置项不会捆绑。


深入了解自编码权重绑定——我用实验给你看(附代码)


02、权重绑定的效果如何?


深入了解自编码权重绑定——我用实验给你看(附代码)


看一个产品到底咋样,不能看广告,要看疗效。


下面就来设计一个简单的实验。这是一个使用Mnist图片集进行图片去噪的实验。


1.先来说说绑定权重的程序结构。


网络的结构是这样的:


深入了解自编码权重绑定——我用实验给你看(附代码)


首先,我们给图片加上50%的噪声,就变成了这样:


深入了解自编码权重绑定——我用实验给你看(附代码)


然后,对整个网络进行50个迭代的训练,输入数据和标签数据都是噪声数据。


关键代码是这样的:


autoencoder.fit(x_train_noisy, x_train_noisy,

epochs=50,

batch_size=128,

shuffle=True,

callbacks=[TensorBoard(log_dir='tmp/autoencoder')])


最后,我们将训练好的网络用来预测噪声图片。


2.现在,我们来比较一下绑定了权重和没有绑定权重的效果。


先看看没有绑定权重的运行效果。


训练了50个迭代,耗时6422秒。


含噪的图片和去噪的效果是这样的:


深入了解自编码权重绑定——我用实验给你看(附代码)


我们来计算一下去噪后的图片与原图片之间的PSNR(越大越好):11.09599823, 11.36105018, 12.3519772,11.04931201,11.12839616,11.30604725,11.25429406,11.89961281,11.965045,11.04202353


那最好的效果就是第三张图,PSNR为12.3519772


再来看看绑定了卷积权重的运行效果。


训练了50个迭代,耗时4519秒。


含噪的图片和去噪的效果是这样的:


深入了解自编码权重绑定——我用实验给你看(附代码)


和前面的效果对比来看,去噪的效果明显提升了。


我们来计算一下去噪后的图片与原图片之间的PSNR:11.55367647,12.20789348,13.90931466,12.03116715,11.72392653,12.17388934,12.27409268, 11.81460505, 11.79203777, 11.41119956


那最好的效果就是第3张图,PSNR为13.90931466


03 小结


深入了解自编码权重绑定——我用实验给你看(附代码)


通过上面的实验数据,我们可以得出以下结论:


一是使用权重绑定,我们可以节约训练时间近30%。

二是使用权重绑定,最好的处理效果提高了1.5个PSNR。在去噪效果方面,提高1个PSNR都会有明显的改善的。从去噪的效果图片也表明了肉眼可见的效果提升。


所以使用权重绑定的不管从训练效率和去噪质量上都有了一个提高。


下一步,如果有兴趣还可以研究Maxpooling和Upsample之间的神经元共享。


小伙伴们,你觉得权重绑定技术如何呢?欢迎留言讨论。


如果喜欢请点赞,或联系我交流和获取源代码。


分享到:


相關文章: