windows编译tensorflow tensorflow单机多卡程序的框架 tensorflow的操作 tensorflow的变量初始化和scope 人体姿态检测 segmentation标注工具 tensorflow模型恢复与inference的模型简化 利用多线程读取数据加快网络训练 tensorflow使用LSTM pytorch examples 利用tensorboard调参 深度学习中的loss函数汇总 纯C++代码实现的faster rcnn tensorflow使用记录 windows下配置caffe_ssd use ubuntu caffe as libs use windows caffe like opencv windows caffe implement caffe model convert to keras model flappyBird DQN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neural Networks Fast-style-transfer tensorflow安装 tensorflow DQN Fully Convolutional Models for Semantic Segmentation Transposed Convolution, Fractionally Strided Convolution or Deconvolution 基于tensorflow的分布式部署 用python实现mlp bp算法 用tensorflow和tflearn搭建经典网络结构 Data Augmentation Tensorflow examples Training Faster RCNN with Online Hard Example Mining 使用Tensorflow做Prisma图像风格迁移 RNN(循环神经网络)推导 深度学习中的稀疏编码思想 利用caffe与lmdb读写图像数据 分析voc2007检测数据 用python写caffe网络配置 ssd开发 将KITTI的数据格式转换为VOC Pascal的xml格式 Faster RCNN 源码分析 在Caffe中建立Python layer 在Caffe中建立C++ layer 为什么CNN反向传播计算梯度时需要将权重旋转180度 Caffe使用教程(下) Caffe使用教程(上) CNN反向传播 Softmax回归 Caffe Ubuntu下环境配置

深度学习中的稀疏编码思想

2016年07月10日

深度学习中的稀疏编码思想

正则回归模型

研究生阶段主要从事稀疏编码的科研工作,在特征表示阶段,稀疏编码的特征能获得非常好的特征。稀疏编码主要通过编码方式在字典集上重构表征信号获得编码系数。如今深度学习统治机器学习,但是从来没有一个东西是横空出世的,算法是一路传承下来的,算法中的思想都是有关联的,下面研究下深度学习和稀疏编码的数学内在联系。

机器学习里典型的带正则项的回归模型可以表示为:

\[Y=argmin\left \| X-DY \right \|^{^{2}}+\gamma \left ( Y \right )\]

其中$X$是输入数据,$Y$是求解的编码系数,$D$是字典基(basis),$Y$除了要求对于$D$能有很好重建$X$外,还受到一个额外的正则化项$\gamma \left ( Y \right )$的约束。这个模型看似简单,实则机器学习里众多著名的模型比如(PCA,LDA,Sparse Coding等)都可以用上述表达式表示。以上的算法可以写成一个迭代的一般表示形式:

\[Y^{k+1}=N\left ( L_{1}\left ( X \right )+L_{2}\left ( Y^{k} \right ) \right )\]

$Y^{k}$是k-iteration的输出,$L_{1}$,$L_{2}$,$N$是三个变换算子。这一迭代算法可以等价表示成下图中带反馈系统的形式:

1

对于上图反馈循环形式,接着做前向展开,获得一个有无限个前向传播单元的级联结构,然后再将这个结构截断,获得一个固定长度的前向结构:

2

上图即是一个“展开截断”的前向结构示意图($k=2$)。首先这一结构避免了环形结构、反馈回路的出现,所有信息流都是前向的。其次。这一结构等价于将原有迭代算法做$k$次近似,获得一个有限固定迭代步数下“不精确”的回归解。有趣的是在很多例子中$L_{1}$和$L_{2}$是带参数的线性变换,而$N$是不带参数的非线性变换。这和DNN的结构形成了精妙的巧合对应;如果将$L_{1}$和$L_{2}$看做是DNN中可以训练的layer,$N$看做是DNN中的非线性激发或者pooling,那么“展开截断”后的嵌套结构完全可以看做一个$k+1$层,有一定特殊结构的DNN。

所以带卷积情况下的带正则项的回归问题为:

\[Y=argmin\left \| X-\sum_{i}F_{i}\ast Z \right \|^{2}+\sum_{i}\gamma \left ( Z_{i} \right )\]

这一问题的形式,解法和结论都和前面的线性回归模型相仿。事实上,线性回归模型的结论将自然对应DNN的全连接层,而卷积回归模型的结论将对应到DNN的卷积层。

深度网络中潜藏的稀疏表示

现在我们考虑引入1范数约束的稀疏性作为回归模型的正则项:

\[Y=argmin\left \| X-DY \right \|^{2}+c\left \| Y \right \|_{1}\]

上式是经典的稀疏表示问题。对应的迭代算法形式如下:

\[Y^{k+1}=N\left ( L_{1}\left ( X \right )+L_{2}\left ( Y^{k} \right ) \right ),L_{1}\left ( X \right )=D^{T}X,L_{2}\left ( Y^\left ( k \right )\right )=\left ( I-D^{T}D \right )Y^\left ( k \right )\]

则是著名的软门限算子,形式如下图左所示,这很容易联想到DNN中最成功的ReLU(Rectified Linear Unit)激活函数,形式如下图右。

3

既然ReLU很强大,所以加入稀疏框架中,对$Y$加一个非负约束:

\[Y=argmin\left \| X-DY \right \|^{2}+c\left \| Y \right \|_{1},Y\geq 0\]

这一约束的直接效果是把软门限算子的负半侧砍掉归0。进一步,我们可以把原本软门限算子中的门限参数c,移到线性变换当中。最后迭代形式里:

\[L_{1}\left ( X \right )=D^{T}X,L_{2}\left ( Y^\left ( k \right )\right )=\left ( I-D^{T}D \right )Y^{k},N=ReLU\]

4

一个小问题:为什么可以“硬凑”一个非负约束到原稀疏表示问题中呢?首先“哲学”上,稀疏表达将“部分”线性组合为“整体”,如果这些“部分”还会相互抵消,总觉得不太自然,当然此属怪力乱神,不听也罢。不过生物建模上,其实早将稀疏表达和神经元编码联系了起来:稀疏特征的值对应于神经元的“激发率”(firing rate, i.e., the average number of spikes per unit time),自然而然需要非负。另外,图像处理和计算机视觉的研究者,很多都熟悉非负稀疏编码(nonnegative sparse coding, NSC)的大名;此前NSC 亦是学习视觉特征的最成功方法之一。如今风水轮流转,DNN大火,经过各种神经元的经验化设计尝试、大浪淘沙,ReLU脱颖而出 。而从前的非负性和稀疏性假设经过改头换面,又于无意识间悄悄潜伏进了ReLU中;这不能不说是个有趣的发现。

再进一步,上面那个对应非负稀疏编码的“展开&截断”前向结构,如果我们想避免那些不“特别典型”的中间连接(事实上,这些“捷径”的设计正在成为DNN的新热点,参加ResNet等工作)和权重共享(被重复展开),一个选择是只保留最开始的一部分计算而删掉后面,即让迭代算法从初始值开始只跑一步近似:

\[Y=ReLU\left ( D^{T}X-c \right )\]

5

如此便获得了DNN中最典型的构成单元:全连接层 + 偏置 + 神经元ReLU。偏置 来源于原本1范数正则项的加权;在原优化问题中,调整c即调整Y的稀疏度。不难想到,如果将非负稀疏编码换成非负稀疏卷积编码,那么同样可以得到由卷积层 + 偏置 +神经元ReLU组成的单元。这一角度对一般DNN结构的分析提供了很多意味深长的提示。

最后,简单讲讲另外两种形式的稀疏性。其一是将稀疏编码中1范数换成0范数:

\[Y=argmin\left \| X-DY \right \|^{2}+c^{2}\left \| Y \right \|^{0}\]

按照以上1范数情况下的推导结果,不难解出的形式为经典的硬门限算子(hard-thresholding)。相较软门限,硬门限容易获得零值更多、更稀疏的解,常有利于分类等任务。尤其有趣的是,这一算子在2015年的国际表示学习大会(ICLR)上被DNN研究者们“经验性”地设计出来,并被冠名以thresholded linear unit;实则未免稍稍有重造轮子之憾。另一个更有意义的例子是:

\[Y=argmin\left \| X-DY \right \|^{2} s.t. \left \| Y \right \|_{0}\leq M\]

该问题中的约束条件可以看作池化算子(pooling):即将输入中绝对值最大的M个值保留、其余归0。考虑到0范数约束问题是特征选择的经典形式之一,这也让我们对原本被视作单纯工程“瞎凑”的池化操作的实际作用,有了更多遐想。

看我写的辛苦求打赏啊!!!有学术讨论和指点请加微信manutdzou,注明

20


blog comments powered by Disqus