deep learning tutorial(二)Denosing Autoencoders(dA)

自编码器

        UFLDL教程中中对自编器的解释是:自编码神经网络尝试学习一个的函数。换句话说,它尝试逼近一个恒等函数,从而使得输出接近于输入x 。

        过程如下:a.首先让x经过一个hidden layer

(1)

                          b.对y进行解码,W'是W的转置

(2)

这个过程也叫做重构,产生的误差叫重构误差,常用的右

平方误差

交叉熵

学习的过程就是使重构误差最小(对于来自相同分布的输入,有较低的重构误差).

        y应该是沿着协方差的主轴的(协方差最大的方向),类似于PCA。

        如果有个线性的hidden layer,其中右k个hidden units,题么提取出的是k个主成份。

        如果是非线性的,我们可以捕捉到输入中的多模态成分(multi-modal )

如果对让hidden layer的输入=input,直观上会学习到恒等函数,但是事实并非如此,我们仍然可以得到有用的表示,一个直观的解释是,一个具有 early stopping 的随机梯度下降相当于对参数的L2正则化,为了更好的对输入进行重构,我们假设一个只有一层hidden layer的非线性自编器,它第一层的W应该非常小(这样就会具有某些线性特征),第二层非常大。对于二值输入,我们想需要非常大的W来获得较小的重构误差。而这样会使得规范化项非常大。所以算法只能朝着近似输入的方向去优化参数。这意味着,我们的学习过程是一个对训练集的随机表示,而不是对输入的进行来复制


(early stopping,摘自wiki:is a form of regularization used to avoid overfitting when training a learner with an iterative method, such as gradient descent.

上面是直译的,更好理解,其实就是 regularized auto-encoder 

而且一般也是直接加上L2正则项

        避免获得恒等函数的其他方法

        1.加上稀疏性(使hidden units 的激活值接近0):稀疏自编码器,见UFLDL

        2.在从输入到重构的转换过程中加入一些随机噪声

Denoising Autoencoders

 原理就是给input(eg.随机将一些输入置为0)加入一些corrupted vision

过程:1.对输入进行编码

            2.去除对输入的随机腐蚀

以下函数的过程就是随机把一些输入变成0,denoising au-encoder试图从未被破坏的数据中还原出被破坏的数据,然后得到这些样本的参数的联合概率分布,这时一个gibbs采样的过程。

gibbs采样解释:

LDA-math-MCMC 和 Gibbs Sampling(1) 
LDA-math-MCMC 和 Gibbs Sampling(2)

def get_corrupted_input(self, input, corruption_level):
        """
                 binomial 是theano 库里的函数
                Sample n times with probability of success p for each trial and
        return the number of successes.
                应该是对input里面的每个元素以概率p进行采样,每个n次,
                实际上是是模拟来gibbs采样的过程
                 reutrn:本程序中N=1,所以返回一个0-1矩阵,0代表该元素以corruption_level的概率被腐蚀,1代表1-corruption_level的概率被腐蚀
        """
        return self.theano_rng.binomial(size=input.shape, n=1,
                                        p=1 - corruption_level,
                                        dtype=theano.config.floatX) * input
这个函数不太懂,有时间回来看看

对binomial(n, p, size=None)函数的解释

        对一个具有特定参数的二项分布进行采样,判别n次,每次判断成功的概率为p,参看MCMC,Gibbs采样:RBM

       返回:一个矩阵(ndarray)或者标量(scalar),每个元素的值都属于[0,n]

举个栗子,一个公司要钻9个油井,其中每个油井存储石油的概率为0.1,那么这些油井都没有石油的概率是多少?

我们可以作2000次实验,然后数以下产生结果为0的个数

sum(np.random.binomial(9, 0.1, 20000) == 0)/20000.
答案是 0.38885

而MCMC方法中

判断是否接受为

 if ((u[i] <= p_accept))  
    {  
        x[i] = y  
        print("accept")  
    }  
    else  
    {  
        x[i] = x[i-1]  
        print("reject")  
    }  


        



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值