您好,欢迎来到网暖!

当前位置:网暖 » 站长资讯 » 建站基础 » 网络技术 » 文章详细 订阅RssFeed

深度学习之自编码与稀疏性

来源:网络整理 浏览:277次 时间:2022-01-27
深度学习之自编码与稀疏性

Fighting365 机器学习算法与Python学习

目前为止,我们已经讨论了神经网络在监督学习中的应用。在监督学习中,训练样本是有标签的。现在假设我们只有一个无类别标签的训练样本集合{x[^1], x[^2],...,x[^m]} ,其中x[^i] 是 n维向量。自编码神经网络是一种无监督学习算法,它使用了反向传播算法,并让目标值等于输入值,比如 y[^i = x[^i]。下图是一个自编码神经网络的示例。

自编码神经网络尝试学习一个hW,b = x 的函数。换句话说,它尝试逼近一个恒等函数,从而使得输出 接近于输入 。恒等函数虽然看上去不太有学习的意义,但是当我们为自编码神经网络加入某些限制,比如限定隐藏神经元的数量,我们就可以从输入数据中发现一些有趣的结构。举例来说,假设某个自编码神经网络的输入x 是一张 10 x 10 图像(共100个像素)的像素灰度值,于是 n=100 ,其隐藏层 L[2] 中有50个隐藏神经元。注意,输出也是100维的 y 是100维的 。由于只有50个隐藏神经元,我们迫使自编码神经网络去学习输入数据的压缩表示,也就是说,它必须从50维的隐藏神经元激活度向量 a[^2](是50维的) 中重构出100维的像素灰度值输入x 。如果网络的输入数据是完全随机的,比如每一个输入 x[i] 都是一个跟其它特征完全无关的独立同分布高斯随机变量,那么这一压缩表示将会非常难学习。但是如果输入数据中隐含着一些特定的结构,比如某些输入特征是彼此相关的,那么这一算法就可以发现输入数据中的这些相关性。事实上,这一简单的自编码神经网络通常可以学习出一个跟主元分析(PCA)结果非常相似的输入数据的低维表示。

我们刚才的论述是基于隐藏神经元数量较小的假设。但是即使隐藏神经元的数量较大(可能比输入像素的个数还要多),我们仍然通过给自编码神经网络施加一些其他的限制条件来发现输入数据中的结构。具体来说,如果我们给隐藏神经元加入稀疏性限制,那么自编码神经网络即使在隐藏神经元数量较多的情况下仍然可以发现输入数据中一些有趣的结构。
稀疏性可以被简单地解释如下。如果当神经元的输出接近于1的时候我们认为它被激活,而输出接近于0的时候认为它被抑制,那么使得神经元大部分的时间都是被抑制的限制则被称作稀疏性限制。这里我们假设的神经元的激活函数是sigmoid函数。如果使用tanh作为激活函数的话,当神经元输出为-1的时候,我们认为神经元是被抑制的。

注意到 a[^2][j] 表示隐藏神经元 j 的激活度,但是这一表示方法中并未明确指出哪一个输入 x 带来了这一激活度。所以我们将使用a[^2]j 来表示在给定输入为 x 情况下,自编码神经网络隐藏神经元 j 的激活度。 进一步,让

表示隐藏神经元 j 的平均活跃度(在训练集上取平均)。我们可以近似的加入一条限制

其中, ρ 是稀疏性参数,通常是一个接近于0的较小的值(比如 ρ = 0.05)。换句话说,我们想要让隐藏神经元 j 的平均活跃度接近0.05。为了
满足这一条件,隐藏神经元的活跃度必须接近于0。
为了实现这一限制,我们将会在我们的优化目标函数中加入一个额外的惩罚因子,而这一惩罚因子将惩罚那些 ρ[j] 和 ρ 有显著不同的情况从而使得隐藏神经元的平均活跃度保持在较小范围内。惩罚因子的具体形式有很多种合理的选择,我们将会选择以下这一种:

这里,s[2] 是隐藏层中隐藏神经元的数量,而索引 j 依次代表隐藏层中的每一个神经元。如果你对相对熵(KL divergence)比较熟悉,这一惩罚因子实际上是基于它的。于是惩罚因子也可以被表示为


上式是一个以 ρ 为均值以 ρ[j] 为均值的伯努利随机变量之间的相对熵(相对熵是一种标准的用来测量两个分布之间差异的方法)。
在下图中,我们设定 ρ = 0.2 并且画出了相对熵值的变化。

我们可以看出,相对熵在 ρ = ρ[j] 时达到它的最小值0,而当 ρ 靠近0或者1的时候,相对熵则变得非常大。所以,最小化这一惩罚因子具有使得 ρ[j] 靠近 ρ 的效果。

现在,我们的总体代价函数可以表示为

其中 J(W,b) 如之前所定义,而 β 控制稀疏性惩罚因子的权重。为了对相对熵进行导数计算,我们可以使用一个易于实现的技巧。( 这只需要在你的程序中稍作改动即可)。具体来说,前面在后向传播算法中计算第二层(l=2 )更新的时候我们已经计算了

现在我们将上式换成

有一个需要注意的地方就是我们需要知道 ρ[i] 来计算这一项更新。所以在计算任何神经元的后向传播之前,你需要对所有的训练样本计算一遍前向传播,从而获取平均激活度。如果你的训练样本可以小到被整个存到内存之中,你可以方便地在你所有的样本上计算前向传播并将得到的激活度存入内存并且计算平均激活度 。然后你就可以使用事先计算好的激活度来对所有的训练样本进行后向传播的计算。如果你的数据量太大,无法全部存入内存,你就可以扫过你的训练样本并计算一次前向传播,然后将获得的结果累积起来并计算平均激活度 (当某一个前向传播的结果中的激活度 a[^2][i] 被用于计算平均激活度 ρ[i] 之后就可以将此结果删除)。然后当你完成平均激活度 的计算之后,你需要重新对每一个训练样本做一次前向传播从而可以对其进行后向传播的计算。对于后一种情况,你对每一个训练样本需要计算两次前向传播,所以在计算上的效率会稍低一些。

推荐站点

  • 腾讯腾讯

    腾讯网(www.QQ.com)是中国浏览量最大的中文门户网站,是腾讯公司推出的集新闻信息、互动社区、娱乐产品和基础服务为一体的大型综合门户网站。腾讯网服务于全球华人用户,致力成为最具传播力和互动性,权威、主流、时尚的互联网媒体平台。通过强大的实时新闻和全面深入的信息资讯服务,为中国数以亿计的互联网用户提供富有创意的网上新生活。

    www.qq.com
  • 搜狐搜狐

    搜狐网是全球最大的中文门户网站,为用户提供24小时不间断的最新资讯,及搜索、邮件等网络服务。内容包括全球热点事件、突发新闻、时事评论、热播影视剧、体育赛事、行业动态、生活服务信息,以及论坛、博客、微博、我的搜狐等互动空间。

    www.sohu.com
  • 网易网易

    网易是中国领先的互联网技术公司,为用户提供免费邮箱、游戏、搜索引擎服务,开设新闻、娱乐、体育等30多个内容频道,及博客、视频、论坛等互动交流,网聚人的力量。

    www.163.com
  • 新浪新浪

    新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技、房产、汽车等30多个内容频道,同时开设博客、视频、论坛等自由互动交流空间。

    www.sina.com.cn
  • 百度一下百度一下

    百度一下,你就知道

    www.baidu.com