栈式自编码器的无监督逐层贪婪预训练(greedy layer-wise pre training)

对于深层模型的训练,通常采用BP算法来更新网络参数。但是需要对网络参数进行很小心的初始化,以免网络陷入局部最小点。当然,现在已经有了很多网络参数初始化的办法,或者其他的深度网络处理技巧,可以很好的避免网络陷入局部最小点,但鉴于无监督逐层贪婪预训练在深度网络优化中不可磨灭的影响,我们还是有必要了解这一方法。

要想读懂这篇博客,首先需要了解autoencoder,不了解的可以先读完我另一篇博客。

考虑一个神经网络,如下图所示。它的输入是6维向量,输出是3维向量,代表输入样本属于三个类别的概率。

一个简单的神经网络

最开始我们通过高斯分布随机初始化网络参数,然后逐层地优化网络参数。首先第一层。如下图,我们只保留输入层Input和第一个隐藏层Features I,其余层去掉。之后,加入一个输出层,该输出层的输出向量维度和输入层一样,从而构成一个自编码器。我们训练这个自编码器,便可以得到第一层的网络参数,即绿线部分。

优化第一层网络参数

然后是第二层的网络参数。如下图,我们只保留原始神经网络中的第一个隐藏层和第二个隐藏层,其余层去掉。之后添加一个输出层,其输出向量维度和第一个隐藏层维度一样,从而构成一个自编码器,自编码器的输入是第一个隐藏层。优化这个自编码器,我们就可以得到第二层网络参数,即红线部分。

优化第二层网络参数

优化这两个自编码器的过程就是逐层贪婪预训练。由于每个自编码器都只是优化了一层隐藏层,所以每个隐藏层的参数都只是局部最优的。优化完这两个自编码器之后,我们把优化后的网络参数作为神经网络的初始值,之后微调(fine tune)整个网络,直到网络收敛。

参考资料
[1] UFLDL栈式自编码器
[2] Autoencoder

你可能感兴趣的:(栈式自编码器的无监督逐层贪婪预训练(greedy layer-wise pre training))