zoukankan      html  css  js  c++  java
  • Sparse AutoEncoder简介

    1. AutoEncoder

      AutoEncoder是一种特殊的三层神经网络, 其输出等于输入:(y^{(i)}=x^{(i)}), 如下图所示:

            

      亦即AutoEncoder想学到的函数为(f_{W,b} approx x), 来使得输出(hat{x})比较接近x. 乍看上去学到的这种函数很平凡, 没啥用处, 实际上, 如果我们限制一下AutoEncoder的隐藏单元的个数小于输入特征的个数, 便可以学到数据的很多有趣的结构. 如果特征之间存在一定的相关性, 则AutoEncoder会发现这些相关性.

      2. Sparse AutoEncoder

      我们可以限制隐藏单元的个数来学到有用的特征, 或者可以对网络施加其他的限制条件, 而不限制隐藏单元的个数. 特别的, 我们可以对隐藏单元施加稀疏性限制. 具体的, 一个神经元是激活的当且仅当其输出值比较接近1, 一个神经元是不激活的当且仅当其输出值比较接近0. 我们可以限制神经元在大多数时间下都是不激活的(亦即Sparse Filtering中的Lifetime Sparsity概念).

      定义(a_j^{(2)})为AutoEncoder中隐藏单元的激活值, 我们形式化的定义如下的限制:$${hat{ ho}}_j=frac{1}{m}sum_{i=1}^{m}[a_j^{2}(x^{(i)})]= ho$$

      其中( ho)是稀疏性参数, 一般取值为一个比较接近0的数, 比如0.05. 

      为了使得学到的AutoEncoder达到上述的稀疏性要求, 我们在优化目标里添加了新的一项, 用于惩罚那些偏离( ho)太多的(hat{ ho}_j). 可以使用KL Divergence:$$sum_{j=1}^{s_2} ho log frac{ ho}{hat{ ho}_j}+(1- ho)logfrac{1- ho}{1-hat{ ho}_j}$$

      上式可也以写作:$$sum_{j=1}^{s_2}KL( ho||hat{ ho}_j)$$

      下图展示了KL Divergence的特性: (hat{ ho}_j)越接近( ho)(此处为0.2), 则KL Divergence越小.

      

      所以, Sparse AutoEncoder的损失函数为:$$mathit{J}_{sparse}(mathit{W},mathit{b})=mathit{J}(mathit{W},mathit{b}) + etasum_{j=1}^{s_2}KL( ho||hat{ ho}_j)$$

      其中$$mathit{J}(mathit{W},mathit{b})=left[frac{1}{m}sum_{i=1}^{m}mathit{J}(mathit{W},mathit{b};mathit{x}^{(i)},mathit{j}^{(i)}) ight]+frac{lambda}{2}sum_{l=1}^{n_l-1}sum_{i=1}^{s_l}sum_{j=1}^{s_l+1}left(mathit{W}_{ji}^{(l)} ight) ^2=left[frac{1}{m}sum_{i=1}^{m}left(frac{1}{2}left|left|h_{mathit{W,b}}(x^{(i)})-y^{(i)} ight| ight| ^2 ight) ight]+frac{lambda}{2}sum_{l=1}^{n_l-1}sum_{i=1}^{s_l}sum_{j=1}^{s_l+1}left(mathit{W}_{ji}^{(l)} ight) ^2$$

      添加KL Divergence后的cost function后的偏导数为:

         

      有个新的偏导数之后, 使用Back Propagation来优化整个神经网络:

      参考文献:

      [1]. Sparse AutoEncoder. Andrew Ng.

  • 相关阅读:
    字符串转换成整型数 atoi()
    求一个正整数各个数位上的数字之和
    求小于等于n的所有素数
    iomanip,setw(),setw: undeclared identifier
    计算机界的牛人前辈
    clrscr( )用法
    printf()
    realloc() 用法详解
    ADO和ADO.NET的区别
    C++中delete和delete[]的区别
  • 原文地址:https://www.cnblogs.com/kemaswill/p/3348883.html
Copyright © 2011-2022 走看看