四海八荒最佳深度学习入门教程(5)

原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢!

作者: Zouxy

 
 

想要和Zouxy还有全世界的大牛讨论人工智能异构计算相关技术?加nanoarch为微信好友,拉你进微信群  

 

四海八荒最佳深度学习入门教程(1

四海八荒最佳深度学习入门教程(2

四海八荒最佳深度学习入门教程(3

四海八荒最佳深度学习入门教程(4

 

9.2Sparse Coding稀疏编码

 

       如果我们把输出必须和输入相等的限制放松,同时利用线性代数中基的概念,即O = a11 + a22+….+ ann Φi是基,ai是系数,我们可以得到这样一个优化问题:

Min ,I – O,,其中I表示输入,O表示输出。

       通过求解这个最优化式子,我们可以求得系数ai和基Φi,这些系数和基就是输入的另外一种近似表达。

 


 

       因此,它们可以用来表达输入I,这个过程也是自动学习得到的。如果我们在上述式子上加上L1Regularity限制,得到:

Min ,I – O, + u*(,a1, + ,a2, + … + ,an ,)

 

        这种方法被称为Sparse Coding。通俗的说,就是将一个信号表示为一组基的线性组合,而且要求只需要较少的几个基就可以将信号表示出来。稀疏性定义为:只有很少的几个非零元素或只有很少的几个远大于零的元素。要求系数 ai
是稀疏的意思就是说:对于一组输入向量,我们只想有尽可能少的几个系数远大于零。选择使用具有稀疏性的分量来表示我们的输入数据是有原因的,因为绝大多数的感官数据,比如自然图像,可以被表示成少量基本元素的叠加,在图像中这些基本元素可以是面或者线。同时,比如与初级视觉皮层的类比过程也因此得到了提升(人脑有大量的神经元,但对于某些图像或者边缘只有很少的神经元兴奋,其他都处于抑制状态)。

 

         稀疏编码算法是一种无监督学习方法,它用来寻找一组超完备基向量来更高效地表示样本数据。虽然形如主成分分析技术(PCA)能使我们方便地找到一组完备基向量,但是这里我们想要做的是找到一组超完备基向量来表示输入向量(也就是说,基向量的个数比输入向量的维数要大)。超完备基的好处是它们能更有效地找出隐含在输入数据内部的结构与模式。然而,对于超完备基来说,系数ai不再由输入向量唯一确定。因此,在稀疏编码算法中,我们另加了一个评判标准稀疏性来解决因超完备而导致的退化(degeneracy)问题。(详细过程请参考:UFLDL Tutorial稀疏编码

 


 

       比如在图像的Feature Extraction的最底层要做Edge Detector的生成,那么这里的工作就是从Natural Imagesrandomly选取一些小patch,通过这些patch生成能够描述他们的,也就是右边的8*8=64basis组成的basis,然后给定一个test patch, 我们可以按照上面的式子通过basis的线性组合得到,而sparse matrix就是a,下图中的a中有64个维度,其中非零项只有3个,故称“sparse”

 

       这里可能大家会有疑问,为什么把底层作为Edge Detector呢?上层又是什么呢?这里做个简单解释大家就会明白,之所以是Edge Detector是因为不同方向的Edge就能够描述出整幅图像,所以不同方向的Edge自然就是图像的basis……而上一层的basis组合的结果,上上层又是上一层的组合basis……(就是上面第四部分的时候咱们说的那样)

 

       Sparse coding分为两个部分:

 

1Training阶段:给定一系列的样本图片[x1, x 2, …],我们需要学习得到一组基[Φ1, Φ2, …],也就是字典。

 

       稀疏编码是k-means算法的变体,其训练过程也差不多(EM算法的思想:如果要优化的目标函数包含两个变量,如L(W, B),那么我们可以先固定W,调整B使得L最小,然后再固定B,调整W使L最小,这样迭代交替,不断将L推向最小值。EM算法可以见我的博客:从最大似然到EM算法浅解)。

 

       训练过程就是一个重复迭代的过程,按上面所说,我们交替的更改aΦ使得下面这个目标函数最小。


      每次迭代分两步:

a)固定字典Φ[k],然后调整a[k],使得上式,即目标函数最小(即解LASSO问题)。

b)然后固定住a [k],调整Φ [k],使得上式,即目标函数最小(即解凸QP问题)。

 

      不断迭代,直至收敛。这样就可以得到一组可以良好表示这一系列x的基,也就是字典。

2Coding阶段:给定一个新的图片x,由上面得到的字典,通过解一个LASSO问题得到稀疏向量a。这个稀疏向量就是这个输入向量x的一个稀疏表达了。


例如:


 

 

经作者同意,本文转载自Zouxy大侠的博文《Deep Learning(深度学习)学习笔记整理系列》,作者邮箱 zouxy09@qq.com,博客地址http://blog.csdn.net/zouxy09


欢迎给ssdfans投稿,投稿就能加入ssdfans作者群,和冬瓜哥,蛋蛋,王齐等大咖切磋武艺,还有稿酬拿.

 

喜欢就请分享转发!

 

不想错过后续精彩文章?长按或扫描下面二维码关注ssdfans就可以了!


 

ssdfans微信群介绍

 

ssdfans人工智能异构计算群:讨论人工智能和异构计算架构等技术问题

 

ssdfans-ASIC-FPGA:芯片和FPGA相关的硬件开发人员技术讨论群

 

ssdfans企业级:讨论企业级存储和高性能计算

 

想加入这些群,请加nanoarch为微信好友,介绍你的昵称公司职业,注明群名,拉你进群。

分类目录 人工智能, 其他, 技术文章.
扫一扫二维码或者微信搜索公众号ssdfans关注(添加朋友->点最下面的公众号->搜索ssdfans),可以经常看到SSD技术和产业的文章(SSD Fans只推送干货)。
ssdfans微信群介绍
技术讨论群 覆盖2000多位中国和世界华人圈SSD以及存储技术精英
固件、软件、测试群 固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD、企业级存储
销售群 全国SSD供应商都在这里,砍砍价,会比某东便宜20%
工作求职群 存储行业换工作,发招聘,要关注各大公司招聘信息,赶快来
高管群 各大SSD相关存储公司高管和创始人、投资人

想加入这些群,请微信扫描下面二维码,或搜索nanoarchplus,加阿呆为微信好友,介绍你的昵称-单位-职务,注明群名,拉你进群。SSD业界需要什么帮助,也可以找阿呆聊。