自编码算法与稀疏性

前一章神经网络是有监督学习的,自编码神经网络是无监督学习的,使用反向传播算法,让目标值=输入值。

1)隐藏层单元数少

迫使神经网络进行数据压缩,找到有趣的结构,与PCA相似

做法和普通神经网络一样,只是y=x

Autoencoder636.png

 2)隐藏层单元数多

给隐藏层加入稀疏性限制 - 对sigmoid函数来说,输出接近1为激活,输出接近0为抑制 - 要让神经元大部分时间被抑制

\begin{align}
\hat\rho_j = \frac{1}{m} \sum_{i=1}^m \left[ a^{(2)}_j(x^{(i)}) \right]
\end{align}表示隐藏层神经单元的平均激活度

限制条件:\begin{align}
\hat\rho_j = \rho,
\end{align}  ρ是稀疏性参数,通常是接近0的小数(0.05之类的) 

==> 为了实现限制,在优化函数中额外加入惩罚因子 - 当\textstyle \hat\rho_j和ρ有显著不同将得到惩罚

\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} 等于  \begin{align}
\sum_{j=1}^{s_2} {\rm KL}(\rho || \hat\rho_j),
\end{align}  (基于相对熵KL提出的)

==> 总体代价函数

\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}
\delta^{(2)}_i =
  \left( \left( \sum_{j=1}^{s_{2}} W^{(2)}_{ji} \delta^{(3)}_j \right)
+ \beta \left( - \frac{\rho}{\hat\rho_i} + \frac{1-\rho}{1-\hat\rho_i} \right) \right) f'(z^{(2)}_i) .
\end{align}   

剩下的地方不变,仍然是梯度下降法。

 

posted on 2016-04-22 13:08  IvanSSSS  阅读(220)  评论(0编辑  收藏  举报

导航