【深度学习】【auto-encoder】原文链接
鉴于这几天心情大好,于是我决定在挖一个大坑,讲一讲Auto encoder和PCA的关系以及 Denoising auto encoder 和PCA的关系(流形学习角度),今天这一篇作为这个大坑的第一步,我打算讲讲有关Auto encoder的基础概念,基本上讲有关DL的博客都有说的什么深度结构的优势什么的,我这就不多说了,接下来直接进入正题,按照惯例,先上个图:
这些都是我们接下来会用到的符号,请各位看官看仔细了,既然讲到Auto encoder,那就不得不提到表示(representation)这个词了,我们的auto encoder所要达到的目标就是找到输入的一个新的高级表示,假设输入层的维数比隐藏层低则称我们获得的表示是over-complete representation,反之则是under-complete representation,当然,获得的表示是有质量差别的,我们不能照单全收,所以我们需要一个标准来确定什么是一个好的表示,一个好的表示最低限度的要求是最大限度的保有输入所带有的“信息”(这里联系到信息论了),然后在这之上的就是是否可以使得分类的效果提升等的要求,当然了,如果把这些要求全讲出来会使得这个文章变得相当的混乱,当然,我们时常提到的稀疏性也是好的表示的标准之一。
好了,接下来开始推导了,各位看官可看仔细了。
刚刚我说了一个好的表示最低限度的要求是最大限度的保有输入所带有的信息,那好,感性的认识各位看官应该都有了,但是如果要变成实际的式子要如何表示呢?,我估计有人应该看出来了,对,就是互信息!,那为什么是使用互信息表示呢?因为其实互信息表示的其实就是两个随机事件的相关性的度量,互信息的式子如下
其实通俗点说,所谓的熵就是不确定性的度量,一般来说,感到闷热的话很有可能是会下雨了,于是可以做个假设,假设随机变量Y表示的是闷热与否,随机变量X表示的是是否下雨,这时候的条件熵
的值会比随机变量X的熵要低,因为闷热和下雨是有相关性的,从而在给定Y(闷热)的条件下,X(下雨)的不确定减少了,而互信息就是由随机变量X的熵减去随机变量X给定Y的条件熵,我想接下来我应该不用解释了,各位看官应该明白了。
好,终于绕回来了,作为一位语文老师死得早的娃来说,我又让我语文老师黄泉之下泪奔三千里了,好了,既然互信息是相关性的度量,那我们的任务就应该是最大化互信息,使得输入层和隐层的相关性最大,从而获得好的表示,如下式所示:
各位看官一定在想H(X)去哪里了吧,其实很简单,我们所要学习的参数
的来源是见下图
(这次结构有点乱,下次会好的,各位看官见谅)。
好了,关键的一部来了,见下图:
,这样我们就确定了互信息的下界了,所以只要我们不断提升下界就可以了,现在可能还有点看不出个所以然,但是各位看官别急,慢慢你就会发现原来如此了。接下来下一步:
各位看官注意一下这里的多了一个参数,这个就是我们要最大化的式子了其实就是从上一个图那里来的,我们的最大值将会在当
时得到(和相对熵的性质有关系,其实这个就是相对熵等于0的时候,根据相对熵的定义就可以得到)。
那我们就可以得到以下的式子:
注意看,这两个式子是有差别的,差别就在q(X)这里,这个其实是输入X(训练样本)的分布,但是我们不知道这个分布,所以我们用训练样本的经验平均值代替了。
好了,终于绕完了,现在我们正式引入传统的auto encoder,接下来你就会发现前面的推导有多有用了。
这些都是相当基础的东西了,估计各位看官应该都知道了。好了,接下来重要的来了
这样我们就有了loss function的统一标准了(个人看法),凡是满足这个条件的都可以当做loss function,底下就是可以使用的loss function的例子
当然,我们的目标函数也可以表示成这个样子,这就是大家平时所见的AE的目标函数了
最后的最后,总的来说,auto encoder是通过减小重构误差来提升X和Y的互信息的lower bound,从而学习到一个好的表示的。
本人菜鸟一只,希望各位大大多多指正。
下一篇讲Denosing autoencoder(流形学习方面)