DenseNet模型分析

这是本系列的最后一篇文章,我会针对DenseNet中的密集连接和瓶颈层进行一些分析探讨。

1 密集连接与特征复用

DenseNet的网络结构有两个核心特点:

  • 一是把ResNet的跨层连接从Add变成Concatenate
  • 二是把前面每层都这样直接连接到后面

这样使得网络中的任一层都可以使用低层的信息。transition层(无论是否使用compression)和BottleNeck层都相当于特征优化精选的作用,所以理想状态下DenseNet的低层信息可以一直流动到最后一层。这意味着梯度也一样可以畅通无阻的从最后一层反向传播到第一层,因而可以构造更深的网络。
可以想象,肯定有一些连接是冗余的,DenseNet的论文 里有一张热力图,其实已经说明了这点(尽管论文作者是想通过这张图说明网络中比较靠后的层会用到前面浅层的特征 ? ,实际情况就像图中展现的,会有一些浅层特征被使用了,也有一些没有被使用):
这里写图片描述
这张热力图里是一个在Cifar10+上训练,深40,k = 12的DenseNet,三个Dense Block里颜色越接近红色的方格权重越大,而蓝色的方格都是权重接近0的连接,可以看出来低层的特征越往后用的越少,总体趋势是每一层都倾向于使用离自己更近的层的特征,这也比较符合一般的直觉。

2 可视化分析DenseNet

下面将使用卷积可视化这个工具对DenseNet进行进一步的分析,在真正开始分析之前,我们需要首先介绍CNN可视化技术的背景知识。
(在后面的两节中会频繁出现filter和channel两个词,filter指某一个卷积核,channel是指使用某个卷积核做卷积输出的特征channel,可以认为这两个词本质上是指同一对象,但在不同语境中强调的方面不同。)

2.1. CNN可视化

卷积网络的关键特点就是使用卷积核对输入信息(经常是图像)进行特征提取,因此,如果能把每一个卷积核提取的特征图像可视化出来,将大大帮助对卷积网络功能的理解。
论文《How convolutional neural network see the world》对当前可视化解释卷积网络的方法进行了总结(读者也可以看这个中文版:《CNN可视化最新研究方法进展》),一共包含四种不同的方式:

  • Activation Maximization有点像neural style transfer中使用的技术,从一张随机(或者种子)图像开始,使用梯度下降,最大化某一个filter的输出。最后得到的图像使这个filter最大的激活,也就是这个filter要检测的特征。因为AM技术仅依赖梯度下降,所以无论什么网络结构,都可以使用深度学习框架训练出特征图。需要提醒读者的是,你必须要意识到,任何一个filter的最大激活都不是只依赖于这个卷积核本身,它其实是从这个filter的输出一直反向传播到网络的输入层的结果,是输入信息从卷积网络的第一层经过每一层每一个filter,最后到达这个目标filter的激活效果。换句话说,高层网络利用低层网络提取的特征进行抽象。
  • DeconvNet(反卷积网络)是这样工作的:首先给卷积网络输入一张图片,前向传播,选取某层的某个filter进行分析,从这个filter的输出开始反方向运算,在原卷积网络卷积运算的地方使用该卷积核进行转置卷积,在pooling的地方unpooling,在relu的地方relu,直到重建出一幅特征图,这就是该filter感兴趣的模式。在不同层,不同filter上重复这一过程,就可以得到不同filter的不同特征模式。正因为不同filter是用于检测不同模式的,所以一张输入图片不会激活整个网络,需要选取不同类型的多幅图像来对网络进行分析。因为反卷积网络直接使用网络参数进行运算,所以可以得到更加明确和直接的特征模式。需要提醒读者的一点是:反卷积不是卷积运算的逆运算,而是转置卷积,网络上很多文章对什么是转置卷积都没有说清楚,建议读者看CS231n,我这就不啰嗦了。另外,反卷积网络需要对不同的操作自定义反向操作代码,因而不同的网络结构可能需要添加不同的代码。
  • 论文中提到的另外两种方法需要根据原始引用和实现代码进行理解,本文在此不做更多解释。

由于Activation Maximization使用起来比较简单,本文采用基于AM技术的keras-vis做可视化分析,代码参考vis_densenet.py

2.2 可视化分析DenseNet模型

我从训练出的模型中选取一个进行分析,

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值