必威体育Betway必威体育官网
当前位置:首页 > IT技术

稀疏自编码器

时间:2019-10-01 13:13:24来源:IT技术作者:seo实验室小编阅读:53次「手机版」
 

稀疏

转自:https://blog.csdn.net/u010278305/article/details/46881443

本笔记主要记录学习《深度学习》的总结体会。如有理解不到位的地方,欢迎大家指出,我会努力改正。

   在学习《深度学习》时,我主要是通过Andrew Ng教授在http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial上提供的UFLDL(Unsupervised Feature Learning and Deep Learning)教程,本文在写的过程中,多有借鉴这个网站提供的资料。

稀疏自编码器(Sparse Autoencoder)可以自动从无标注数据中学习特征,可以给出比原始数据更好的特征描述。在实际运用时可以用稀疏编码器发现的特征取代原始数据,这样往往能带来更好的结果。本文将给出稀疏自编码器的算法描述,并演示说明稀疏编码器自动提取边缘特征。

   转载请注明出处:http://blog.csdn.net/u010278305。

   稀疏自编码器是具有一层隐含层的神经网络,其思路是让输出等于输入,(即\textstyle y^{(i)} = x^{(i)},其中\textstyle \{x^{(1)}, x^{(2)}, x^{(3)}, \ldots\}表示训练样本集合),让编码器自己发现输入数据中隐含的特征,自编码神经网咯的结果如下图:

Autoencoder636.png

   自编码神经网络尝试学习一个 \textstyle h_{W,b}(x) \approx x函数。换句话说,它尝试逼近一个恒等函数,从而使得输出 \textstyle \hat{x} 接近于输入 \textstyle x 。这样往往可以发现输入数据的一些有趣特征,最终我们会用隐藏层的神经元代替原始数据。当隐藏神经元数目少于输入的数目时,自编码神经网络可以达到数据压缩的效果(因为最终我们可以用隐藏神经元替代原始输入,输入层的n个输入转换为隐藏层的m个神经元,其中n>m,之后隐藏层的m个神经元又转换为输出层的n个输出,其输出等于输入);当隐藏神经元数目较多时,我们仍然可以对隐藏层的神经元加入稀疏性限制来发现输入数据的有趣结构。

   稀疏性可以被简单地解释如下。如果当神经元的输出接近于1的时候我们认为它被激活,而输出接近于0的时候认为它被抑制,那么使得神经元大部分的时间都是被抑制的限制则被称作稀疏性限制。这里我们假设的神经元的激活函数是sigmoid函数(如果你使用tanh作为激活函数的话,当神经元输出为-1的时候,我们认为神经元是被抑制的)。

我们使用 \textstyle a^{(2)}_j(x) 来表示在给定输入为 \textstyle x 情况下,自编码神经网络隐藏神经元 \textstyle j 的激活度。并将隐藏神经元 \textstyle j 的平均活跃度(在训练集上取平均)记为:

\begin{align}\hat\rho_j = \frac{1}{m} \sum_{i=1}^m \left[ a^{(2)}_j(x^{(i)}) \right]\end{align}

在此,稀疏性限制可以理解为使隐藏神经元的平均激活度特别小,可以表示为\begin{align}\hat\rho_j = \rho,\end{align}其中\textstyle \rho 是稀疏性参数,\textstyle \rho通常是一个接近于0的较小的值(比如 \textstyle \rho = 0.05),换句话说,我们想要让隐藏神经元 \textstyle j 的平均活跃度接近0.05。为了满足这一条件,隐藏神经元的活跃度必须接近于0。为了实现这一限制,我们需要在原始的神经网络优化目标函数中加入稀疏性限制这一项,作为一项额外的惩罚因子,我们可以选择具有如下形式的惩罚因子:

\begin{align}\sum_{j=1}^{s_2} \rho \log \frac{\rho}{\hat\rho_j} + (1-\rho) \log \frac{1-\rho}{1-\hat\rho_j}.\end{align}

其中, \textstyle s_2 是隐藏层中隐藏神经元的数量,而索引 \textstyle j 依次代表隐藏层中的每一个神经元。该表达式也可以描述为相对熵,记为

\begin{align}\sum_{j=1}^{s_2} {\rm KL}(\rho || \hat\rho_j),\end{align}

其中, \textstyle {\rm KL}(\rho || \hat\rho_j) = \rho \log \frac{\rho}{\hat\rho_j} + (1-\rho) \log \frac{1-\rho}{1-\hat\rho_j} 是一个以 \textstyle \rho 为均值和一个以 \textstyle \hat\rho_j 为均值的两个伯努利随机变量之间的相对熵。相对熵是一种标准的用来测量两个分布之间差异的方法。

   这一惩罚因子有如下性质,当 \textstyle \hat\rho_j = \rho 时 ,\textstyle {\rm KL}(\rho || \hat\rho_j) = 0,并且随着 \textstyle \hat\rho_j\textstyle \rho 之间的差异增大而单调递增。举例来说,在下图中,我们设定 \textstyle \rho = 0.2 并且画出了相对熵值 \textstyle {\rm KL}(\rho || \hat\rho_j) 随着 \textstyle \hat\rho_j 变化的变化。

KLPenaltyExample.png

   我们可以看出,相对熵在 \textstyle \hat\rho_j = \rho 时达到它的最小值0,而当 \textstyle \hat\rho_j 靠近0或者1的时候,相对熵则变得非常大(其实是趋向于\textstyle \infty)。所以,最小化这一惩罚因子具有使得 \textstyle \hat\rho_j 靠近 \textstyle \rho 的效果。现在,我们的总体代价函数可以表示为

\begin{align}J_{\rm sparse}(W,b) = J(W,b) + \beta \sum_{j=1}^{s_2} {\rm KL}(\rho || \hat\rho_j),\end{align}

其中, \textstyle J(W,b) 如之前所定义,而 \textstyle \beta 控制稀疏性惩罚因子的权重\textstyle \hat\rho_j 项则也(间接地)取决于 \textstyle W,b ,因为它是隐藏神经元 \textstyle j 的平均激活度,而隐藏层神经元的激活度取决于 \textstyle W,b 。为此,我们需要相应更改第二层的导数,具体来说,就是将原来的导数

\begin{align}\delta^{(2)}_i = \left( \sum_{j=1}^{s_{2}} W^{(2)}_{ji} \delta^{(3)}_j \right) f'(z^{(2)}_i),\end{align}

换成如下的形式

  \begin{align}\delta^{(2)}_i =  \left( \left( \sum_{j=1}^{s_{2}} W^{(2)}_{ji} \delta^{(3)}_j \right)+ \beta \left( - \frac{\rho}{\hat\rho_i} + \frac{1-\rho}{1-\hat\rho_i} \right) \right) f'(z^{(2)}_i) .\end{align}

就可以了。

更新这个导数时,我们需要知道\textstyle \hat\rho_i这一项,因此在计算神经元的后向传播之前,需要对所有的训练样本计算一遍前向传播,从而获得平均激活度。

   按照  http://deeplearning.stanford.edu/wiki/index.php/Exercise:Sparse_Autoencoder  给出的教程,我们可以对稀疏自编码器进行编写实现。

下面,给出稀疏自编码器代价函数及其导数的Matlab代码实现:


 

在编码器的输入为图片时,我们对输入层到隐藏层的权重进行可视化,得到如下图所示结果:

   可以发现,稀疏自编码器可以自动提取输入图片的边缘特征。

   稀疏自编码器完整的MATLAB实现代码已经上传,地址http://download.csdn.net/detail/u010278305/8901005

   转载请注明出处:http://blog.csdn.net/u010278305

--------------------- 本文来自 chenynCV 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u010278305/article/details/46881443?utm_source=copy

相关阅读

稀疏矩阵的三种存储方法

一,相关概念㈠特殊矩阵:矩阵中存在大多数值相同的元,或非0元,且在矩阵中的分布有一定规律。⒈对称矩阵:矩阵中的元素满足      a

stm32增量式光电编码器

原文:编码器速度和方向检测,371电机方向与速度检测,stm32编码器接口模式 转载链接:http://www.yfrobot.com/thread-2411-1-1.html 出

稀疏矩阵

一、稀疏矩阵的定义1、稀疏矩阵的概念   矩阵:矩阵是一个具有m行*n列的数表,共包含m*n个元素(元素),每个元素处在确定行和列的交点位

行稀疏与列稀疏

先介绍几个相关的矩阵范数。 矩阵X的范数——矩阵X中非零行的个数。先计算每一行的L2范数,再统计其中非零值的个数,即为矩阵X的范

理解稀疏编码sparse coding

2016年01月03日 19:31:25阅读数:8558稀疏编码系列:(一)----Spatial Pyramid 小结(二)----图像的稀疏表示——ScSPM和LLC的总结(三)----理

分享到:

栏目导航

推荐阅读

热门阅读