深度学习算法--自动编码器

深度学习最常见的一种算法,就是自动编码器算法了。

这种算法的大致思想是:将神经网络的隐含层看成是一个编码器和解码器,输入数据经过隐含层的编码和解码,到达输出层时,确保输出的结果尽量与输入数据保持一致。也就是说,隐含层是尽量保证输出数据等于输入数据的。  这样做的一个好处是,隐含层能够抓住输入数据的特点,使其特征保持不变。例如,假设输入层有100个神经元,隐含层只有50个神经元,输出层有100个神经元,通过自动编码器算法,我们只用隐含层的50个神经元就找到了100个输入层数据的特点,能够保证输出数据和输入数据大致一致,就大大降低了隐含层的维度。


既然隐含层的任务是尽量找输入数据的特征,也就是说,尽量用最少的维度来代表输入数据,因此,我们可以想象,隐含层各层之间的参数构成的参数矩阵,应该尽量是个稀疏矩阵,即各层之间有越多的参数为0就越好。 


假设隐含层每个神经元的平均激活值为:

\begin{align}\hat\rho_j = \frac{1}{m} \sum_{i=1}^m \left[ a^{(2)}_j(x^{(i)}) \right]\end{align}   ,其中 \textstyle a^{(2)}_j(x) 表示在给定输入为\textstyle x情况下,自编码神经网络隐藏神经元\textstyle j的激活值,由各层参数\textstyle W^{(l)}_{ij}和偏置项\textstyle b^{(l)}_{i},以及输入数据构成。

我们的目标是,让尽可能多的神经元处于抑制状态,即 \textstyle \hat\rho_j 越小越好,于是令:

\begin{align}\hat\rho_j = \rho,\end{align}

其中\textstyle \rho是稀疏性参数,通常是接近0的最小值。

为了使\textstyle \hat\rho_j尽可能地接近\textstyle \rho,我们采用 相对熵  类似的概念来刻画\textstyle \hat\rho_j\textstyle \rho的接近程度(相对熵用来描述两个随机分布的差异程度,两个分布差异越大,其对应的相对熵也越大,如果两个分布相同,则它们的相对熵为0。设两个分布的概率密度函数分别为p(x)和q(x),则他们的信息熵为:)。因此,我们构造函数(也成惩罚因子):


\begin{align}\sum_{j=1}^{s_2} \rho \log \frac{\rho}{\hat\rho_j} + (1-\rho) \log \frac{1-\rho}{1-\hat\rho_j}.\end{align}

\textstyle {\rm KL}(\rho || \hat\rho_j) = \rho \log \frac{\rho}{\hat\rho_j} + (1-\rho) \log \frac{1-\rho}{1-\hat\rho_j},则上式也可表示为:

\begin{align}\sum_{j=1}^{s_2} {\rm KL}(\rho || \hat\rho_j),\end{align}


最后,把我们自动编码器模型的目标函数设为:

\begin{align}J_{\rm sparse}(W,b) = J(W,b) + \beta \sum_{j=1}^{s_2} {\rm KL}(\rho || \hat\rho_j),\end{align}

其中,

\begin{align}J(W,b)&= \left[ \frac{1}{m} \sum_{i=1}^m J(W,b;x^{(i)},y^{(i)}) \right]                       + \frac{\lambda}{2} \sum_{l=1}^{n_l-1} \; \sum_{i=1}^{s_l} \; \sum_{j=1}^{s_{l+1}} \left( W^{(l)}_{ji} \right)^2 \\&= \left[ \frac{1}{m} \sum_{i=1}^m \left( \frac{1}{2} \left\| h_{W,b}(x^{(i)}) - y^{(i)} \right\|^2 \right) \right]                       + \frac{\lambda}{2} \sum_{l=1}^{n_l-1} \; \sum_{i=1}^{s_l} \; \sum_{j=1}^{s_{l+1}} \left( W^{(l)}_{ji} \right)^2\end{align}

称为全局代价函数,\textstyle \beta 为惩罚因子的权重。这个全局目标函数,是关于参数\textstyle W^{(l)}_{ij}\textstyle b^{(l)}_{i}的函数。通过类似反向梯度求导算法,求得 min\textstyle J_{\rm sparse}(W,b) 时各参数的值,即可得到局部最优解。






你可能感兴趣的:(深度学习算法--自动编码器)