稀疏编码是无监督学习的一种,它学习一组超完备基的集合用以高效地表示数据,即

x=∑i=1kaiϕi

\begin{align} \mathbf{x} = \sum_{i=1}^k a_i \mathbf{\phi}_{i} \end{align}
稀疏编码就是要找到基向量ϕi。

虽然PCA等技术可以让我们高效地找到基向量,但我们希望可以找到基向量的超完备集(over-complete)来表示输入向量x∈Rnx∈R^n(也就是k>n)。有一组超完备基的好处在于我们的基向量可以更高地捕捉到输入数据内在的结构和模式。然而,使用超完备基时,系数αiα_i不再是由输入x唯一确定了。因此,稀疏编码中,我们引入了一个评价标准:稀疏性(sparsity )用以解决超完备带来的退化(degeneracy)问题。

我们对稀疏性的定义如下:
只有少数非零元素或者只有少数不接近零的元素。要求系数αiα_i稀疏意思是,对于一组输入向量,我们希望远离0的系数越少越好。

之所以要求输入数据的表示具有稀疏性,是因为很多感官数据,比如自然图像,可以视作为一些数量较少的元素(如面或者边)的叠加。

定义m个输入向量的稀疏编码代价函数为

minimizea(j)i,ϕi∑j=1m∣∣∣∣∣∣∣∣x(j)−∑i=1ka(j)iϕi∣∣∣∣∣∣∣∣2+λ∑i=1kS(a(j)i)

\begin{align} \text{minimize}_{a^{(j)}_i,\mathbf{\phi}_{i}} \sum_{j=1}^{m} \left|\left| \mathbf{x}^{(j)} - \sum_{i=1}^k a^{(j)}_i \mathbf{\phi}_{i}\right|\right|^{2} + \lambda \sum_{i=1}^{k}S(a^{(j)}_i) \end{align}

S(.)是用来惩罚aia_i离0较远。虽然稀疏的直观表示为"L0""L_0"范数,也就是S(αi)=1(|αi|>0)S(α_i)=1(|α_i|>0),但是它是不可微的,比较难进行优化。实际上,稀疏化比较常见的方法是用"L1""L_1"范数S(αi)=|αi|1S(α_i)=|α_i|_1和log惩罚函数S(αi)=log(1+α2i)S(α_i)=log(1 + α_i^2)。

代价函数优化时,有可能为了减小aia_i,使得ΦiΦ_i很大,为了防止这种事情发生,我们约束||Φi||2||Φ_i||^2小于一个常数C。完整的稀疏编码代价方程为:

minimizea(j)i,ϕisubject to∑j=1m∣∣∣∣∣∣∣∣x(j)−∑i=1ka(j)iϕi∣∣∣∣∣∣∣∣2+λ∑i=1kS(a(j)i)||ϕi||2≤C,∀i=1,...,k

\begin{array}{rc} \text{minimize}_{a^{(j)}_i,\mathbf{\phi}_{i}} & \sum_{j=1}^{m} \left|\left| \mathbf{x}^{(j)} - \sum_{i=1}^k a^{(j)}_i \mathbf{\phi}_{i}\right|\right|^{2} + \lambda \sum_{i=1}^{k}S(a^{(j)}_i) \\ \text{subject to} & \left|\left|\mathbf{\phi}_i\right|\right|^2 \leq C, \forall i = 1,...,k \\ \end{array}


概率解释

我们可以从概率的角度出发,将稀疏编码视作为一种生成模型。

我们将对自然图像的建模视作为k个独立源特征ΦiΦ_i和加性噪声v的叠加:

x=∑i=1kaiϕi+ν(x)

\begin{align} \mathbf{x} = \sum_{i=1}^k a_i \mathbf{\phi}_{i} + \nu(\mathbf{x}) \end{align}

我们的目标是找到一组特征基向量ΦΦ,使得P(x∣ϕ)和输入数据P∗(x)的经验分布函数尽可能相似。一种方法是最小化他们的KL散度(KL divergence)

D(P∗(x)||P(x∣ϕ))=∫P∗(x)log(P∗(x)P(x∣ϕ))dx

\begin{align} D(P^*(\mathbf{x})||P(\mathbf{x}\mid\mathbf{\phi})) = \int P^*(\mathbf{x}) \log \left(\frac{P^*(\mathbf{x})}{P(\mathbf{x}\mid\mathbf{\phi})}\right)d\mathbf{x} \end{align}
也就是最大化log(P(X|Φ)log(P(X|Φ).
假设v是方差为σ2σ^2的高斯白噪声,则

P(x∣a,ϕ)=1Zexp(−(x−∑ki=1aiϕi)22σ2)

\begin{align} P(\mathbf{x} \mid \mathbf{a}, \mathbf{\phi}) = \frac{1}{Z} \exp\left(- \frac{(\mathbf{x}-\sum^{k}_{i=1} a_i \mathbf{\phi}_{i})^2}{2\sigma^2}\right) \end{align}

假设我们的源特征是相互独立的,则

P(a)=∏i=1kP(ai)

\begin{align} P(\mathbf{a}) = \prod_{i=1}^{k} P(a_i) \end{align}
我们将稀疏性加进来,也就是我们希望 αiα_i的概率分布在0处的峰值很高。一个方便的参数化先验分布为:

P(ai)=1Zexp(−βS(ai))

\begin{align} P(a_i) = \frac{1}{Z}\exp(-\beta S(a_i)) \end{align}
其中, S(αi)S(α_i) 是决定先验分布的形状的函数
这时,我们可以得到P(X|ϕ)

P(X|ϕ)=∫P(X|α,ϕ)P(α)dα

P(X|ϕ) = ∫P(X|α, ϕ)P(α)dα
我们的问题变为求

ϕ∗=argmaxϕE[log(P(x∣ϕ))]

\begin{align} \mathbf{\phi}^*=\text{argmax}_{\mathbf{\phi}} E\left[ \log(P(\mathbf{x} \mid \mathbf{\phi})) \right] \end{align}

但通过对α积分求P(X|ϕ)P(X|ϕ) 是不可行的,前文提到过P(X|ϕ)P(X|ϕ) 非常陡峭,因此,我们可以近似积分为P(X|ϕ)P(X|ϕ) 的最大值。

跟之前一样,为了防止ϕ\mathbf{\phi}过大,我们对它添加一个约束。最终得到:

E(x,a∣ϕ):=−log(P(x∣ϕ,a)P(a))=∑j=1m∣∣∣∣∣∣∣∣x(j)−∑i=1ka(j)iϕi∣∣∣∣∣∣∣∣2+λ∑i=1kS(a(j)i)

\begin{array}{rl} E\left( \mathbf{x} , \mathbf{a} \mid \mathbf{\phi} \right) & := -\log \left( P(\mathbf{x}\mid \mathbf{\phi},\mathbf{a}\right)P(\mathbf{a})) \\&= \sum_{j=1}^{m} \left|\left| \mathbf{x}^{(j)} - \sum_{i=1}^k a^{(j)}_i \mathbf{\phi}_{i}\right|\right|^{2} + \lambda \sum_{i=1}^{k}S(a^{(j)}_i) \end{array}
其中, λ=2σ2βλ=2σ^2β,且关系不大的常亮被隐藏了。我们可以将上式改写为:

ϕ∗,a∗=argminϕ,a∑j=1m∣∣∣∣∣∣∣∣x(j)−∑i=1ka(j)iϕi∣∣∣∣∣∣∣∣2+λ∑i=1kS(a(j)i)

\begin{align}\mathbf{\phi}^{*},\mathbf{a}^{*}=\text{argmin}_{\mathbf{\phi},\mathbf{a}} \sum_{j=1}^{m} \left|\left| \mathbf{x}^{(j)} - \sum_{i=1}^k a^{(j)}_i \mathbf{\phi}_{i}\right|\right|^{2} + \lambda \sum_{i=1}^{k}S(a^{(j)}_i) \end{align}
通过概率论的分析,选择 "L1""L_1"范数和log惩罚函数 S(αi)=log(1+α2i)S(α_i)=log(1 + α_i^2)分别对应于使用了拉普拉斯概率 P(ai)∝exp(−β|ai|)P(a_i) \propto \exp\left(-\beta|a_i|\right)和柯西概率 P(ai)∝β1+a2iP(a_i) \propto \frac{\beta}{1+a_i^2}


学习

用稀疏编码算法学习ϕ\mathbf{\phi}的过程实际上包含两个优化过程:对每个训练样本x优化αiα_i,之后一次性处理多个样本对基向量 ϕ\mathbf{\phi} 进行优化。
如果采用L1L_1范数作为稀疏惩罚函数,学习αiα_i实际上成为了用L1L_1范数做最小二乘法问题,对于αiα_i是凸函数,有很多凸优化器如CVX可以解决。如果S(.)是可微的,如log惩罚函数,可以采用基于梯度算法的方法,如共轭梯度法。

用L2L_2范数来约束,同样也可以简化为用L2L_2范数的最小二乘法问题,标准的凸优化器同样可以用,不过也有很多新的更有效的方法,如对偶拉格朗日法。

稀疏编码有一个显著的局限性,即使可以学到一组基向量,但为了编码到新的数据,优化器必须再次执行优化过程来得到所需的稀疏。这种显著的实时消耗意味着,即使在test时,稀疏编码计算量很大,尤其和典型的前馈结构比。

Sparse Coding 稀疏编码相关推荐

  1. 【sparse coding】【转】sparse coding稀疏表达论文列表

    http://www.sigvc.org/bbs/thread-57-1-1.html 1 What is the Goal of Sensory Coding:   介绍了两种sensory cod ...

  2. Sparse coding(稀疏编码)

    转自:http://www.cnblogs.com/tornadomeet/archive/2013/04/13/3018393.html 本节将简单介绍下sparse coding(稀疏编码),因为 ...

  3. 深度学习之五:稀疏编码

     9.2.Sparse Coding稀疏编码 如果我们把输出必须和输入相等的限制放松,同时利用线性代数中基的概念,即O = a1*Φ1 + a2*Φ2+-.+ an*Φn, Φi是基,ai是系数, ...

  4. 稀疏编码(sparsecode)简单理解

    Sparse coding: 本节将简单介绍下sparse coding(稀疏编码),因为sparse coding也是deep learning中一个重要的分支,同样能够提取出数据集很好的特征.本文 ...

  5. Sparse coding:

    本节将简单介绍下sparse coding(稀疏编码),因为sparse coding也是deep learning中一个重要的分支,同样能够提取出数据集很好的特征.本文的内容是参考斯坦福deep l ...

  6. Stanford UFLDL教程 稀疏编码自编码表达

    稀疏编码自编码表达 Contents [hide] 1稀疏编码 2拓扑稀疏编码 3稀疏编码实践 3.1将样本分批为"迷你块" 3.2良好的s初始值 3.3可运行算法 4中英文对照 ...

  7. 稀疏编码(Sparse Coding)(二)

    为了更进一步的清晰理解大脑皮层对信号编码的工作机制(策略),需要把他们转成数学语言,因为数学语言作为一种严谨的语言,可以利用它推导出期望和要寻找的程式.本节就使用概率推理(bayes views)的方 ...

  8. 深度学习基础(九)—— 稀疏编码(sparse coding)

    稀疏编码算法是一种无监督学习方法,它用来寻找一组"超完备"基向量来更高效地表示样本数据.稀疏编码算法的目的就是找到一组基向量 (自然图像的小波基?) ϕi \mathbf{\phi ...

  9. 【转】K-SVD简述——字典学习,稀疏编码

    原帖地址http://www.cnblogs.com/CBDoctor/archive/2011/10/24/2222358.html K-SVD Rachel Zhang 1. k-SVD intr ...

最新文章

  1. 4 个关键步骤打造用户满意的产品体验
  2. Shell Here Document 免交互命令和Expect
  3. c语言编程三问三答,c语言程序编程
  4. 数学之美 (第二版) pdf
  5. 如何证明pi是无理数
  6. 43大学计算机,加州大学戴维斯分校计算机科学排名第43(2020年TFE美国排名)
  7. 全网最全开源数据集 | 资源
  8. 解决小米手机用Android studio安装不了app的问题
  9. 在字节跳动干软件测试5年,2月无情被辞,想给划水的兄弟提个醒
  10. Java 常用工具类 Collections 源码分析
  11. 用计算机画画作品,小学生电脑绘画作品简单
  12. 为什么宝宝本来发高烧却手脚冰凉呢?
  13. 023_接口类,抽象类,多态,鸭子类型,封装
  14. 【程序源代码】微信支付接口源码
  15. 帧动画与spine动画
  16. android 自定义view实现推箱子小游戏。
  17. 使用Android模拟器调试linux内核
  18. jeecg 关于.xlsx.xls表格文件导入后提示框功能(后台设置提示框)
  19. 谈一谈App的架构设计
  20. OPPO A53刷机包下载 OPPO A53T刷机包下载_oppo密码忘记怎么办?来这里搞定

热门文章

  1. 【Redis】——滴滴滴滴滴滴滴
  2. PIPIOJ 1110: 地砖问题
  3. 人工智能库兹韦尔的“奇点理论”有一天是否会变成现实
  4. OPNET编译进程模型出现错误
  5. 利用R语言进行相关性分析及可视化
  6. 大数据教程:Hadoop+Hive进行航空公司客户价值分析
  7. 用Python搞定九宫格式的朋友圈。内附“马云”朋友圈
  8. 【数学分析】学科简介 ( 初等数学缺陷 | 微分与积分 | 学习数学分析的目的 | 数学分析与高等数学对比 )
  9. 本地厂库上传到码云报错fatal: remote origin already exists.
  10. 如何开发一个自己的个人网站