# Auto Encoder

[自编码(Autoencoder)](http://wenku.baidu.com/link?url=vCnWYGgPVJU_caI0QkBZ45hYVhR4lpSrMOy8YFSfXJYLPxg6YBkEuf78lvNiIbgBujo53NsMoWujYcVUwbFAjBrzULA5ISssfbQsyYFyeq7)

[自编码(Autoencoder)-深度学习](https://wenku.baidu.com/view/5306a872dd88d0d232d46ad1.html)\
AUtoEncoder相当于reconstruction，需注意并不是重建所有的样本，只是重建符合数据分布的X。\
隐藏层的节点比输入层少，相当于做了压缩，**如果激活函数不是sigmoid函数，而是线性的话，则等价于PCA。**

[【Deep Learning】林轩田机器学习技法](http://www.cnblogs.com/xbf9xbf/p/4727835.html)

## sparse autoEncoder

稀疏AUtoEncoder是对模型加了L1范数，导致隐藏层很多节点为0 ，**注意是隐藏层的输出为0**。

![](https://352802547-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7DcNFZmOW8qzXTiAei%2Fsync%2Fbd779a48d8598fe1d4b8de31434bb088e1cd9332.png?generation=1589383537984332\&alt=media)\
优化目标函数：

$$
h = W^T x \\
minimize \qquad \left | (Wh-x) \right |\_2^2  + \lambda \left | h \right |\_1 + \gamma  \left | W \right |\_2^2 \\
s.t. \qquad W\_j^T W\_j \le 1
$$

> **这里是对h做L1范数**\
> x为样本数据，h为一个用于表示样本数据的稀疏特征集，W为一个将特征集从特征空间转换到样本数据空间的基向量。

### 算法过程

有了以上两种技巧，稀疏编码算法修改如下：\
1\. 随机初始化A\
2\. 重复以下步骤直至收敛\
1\. 随机选取一个有2000个patches的迷你块\
2\. 如上所述，初始化s\
3\. 根据上一步给定的A，求解能够最小化J(A,s)的s\
4\. 根据上一步得到的s，求解能够最小化J(A,s)的A\
通过上述方法，可以相对快速的得到局部最优解。

稀疏编码获取的完备的基向量不一定线性无关。

## Stacked AutoEncoder

就是多个隐藏层，逐层贪婪的学习。

[稀疏编码自编码表达](http://ufldl.stanford.edu/wiki/index.php/%E7%A8%80%E7%96%8F%E7%BC%96%E7%A0%81%E8%87%AA%E7%BC%96%E7%A0%81%E8%A1%A8%E8%BE%BE)\
[稀疏编码(Sparse Coding)的前世今生(一)](http://blog.csdn.net/marvin521/article/details/8980853)

[Variational Autoencoders](https://zhuanlan.zhihu.com/p/21741426)
