传统CNN基本都是单向传播, 在靠后的层, 接收到的信号十分微弱, 这种单向传播的网络, 比如VDSR/DRCN等, 称为短期记忆网络。
而有些网络结构中, 网络中的神经元不仅受到直接前驱的影响, 另外还受到额外指定的前驱神经元的影响, 这种被称为限制的长期记忆网络
MemNet引入了一个包含递归单元(recursive unit)和门控单元(gate unit)的内存块(Memory block), 以期通过自适应学习过程明确地挖掘持续记忆, 递归单元学习当前状态在不同接收域(receptive field)下的多层表征(multi-level representation, Fig 1©中哪些蓝色的圈), 这些表征就可以视为由当前Memory block产生的short-term memory, 而long-term memory是由之前的Memory block产生的表征(就是Fig 1©的绿色箭头, 它表示long-term memory从之前的Memory block来), 这些short-term memory和long-term memory被合并输送到gate unit, gate unit自适应控制应保留多少先前的状态, 并决定应存储多少当前状态, 如文中所说的, is a non-linear function to maintain persistent memory。
本文的主要贡献有:
- 构建了一个Memory block用gate unit建立长期记忆, 在每个Memory block, gate unit自适应的控制不同的block在最终输出中所占的权重, 控制保留哪些单元, 存储哪些信息;
- 很深的网络(80层), 密集的连接结构, 信号补偿机制(靠后的神经元被靠前的神经元直接连接), 最大限度地让信息在不同记忆单元之间流动;
- 该结构被证明有很强的学习能力, 一个model处理多个任务(Denoise, SR, JPEG deblocking)。
网络结构
基本结构分为三个部分:
FENet:提取特征的卷积层(bn+relu+conv)
Memory block:重复单元, 每个Memory block里一堆Recursive unit和一个Gate Unit, 根据代码我并没有看出来Recursive unit用了Recurrent结构, 这点和这篇文章承袭的DRCN不太一样. 在代码中, 一个Memory block里有6个Recursive unit和一个Gate unit. 每个Recursive block都是bn+relu+conv & bn+relu+conv + skip connection这种结构. Gate unit就是将之前的Recursive block的结果concat在一起, 在经过一个卷积层(bn+relu+conv)。ReconvNet, 就是1x1卷积层 + 3x3卷积层(都是bn+relu+conv), 将前面输出的结果维度变换到y的维度整个网络的strides都是[1,1], 所以从开始到结束图像的分辨率都没有变化。
和VDSR/DRCN, 包括再往前推的SRCNN一样, MemNet也要保证网络的输入输出是同一尺寸, 所以input x是经过插值之后image size和y一样的LR图像, 至于怎么插值, 就看SRCNN是怎么做的了。
Multi-Supervised MemNet:
这个结构就和DRCN非常相似了, 实际上就是每一个Memory block预测的feature我都作为一个预测值, 然后给这些预测值乘以不同的权重得到最后的x^, 这些权重也是经过学习得到的。