自编码器——AE
自编码器是一种利用反向传播算法使得输出值等于输入值的神经网络,借助稀疏编码的思想(将输入压缩成潜在空间表征),使用稀疏的一些高阶特征重新组合来重构输出。 自编码器两个部分:输入到隐层编码和隐层到输出解码
自编码器作用
实现非线性降维,只要设定输出层中神经元个数小于输入层中神经元的个数就可以对数据集进行降维。 如果将输出层的神经元个数设置为大于输入层神经元个数,然后在损失函数 构造上加入正则化项进行系数约束,就构成稀疏自编码器。 利用自编码器来进行神经网络预训练。对于深层网络,通过随机初始化权重,然后用梯度下降来训练网络,很容易发生梯度消失。因此在训练深度网络时,采用先无监督学习来训练模型参数,再将这些参数作为初始化参数进行有监督训练。
自编码器特征——稀疏性
稀疏性对于解决高维度数据的计算量问题非常有效。 稀疏编码算法是一种无监督学习算法,用来寻找一组最适合的基向量来更高效的表示样本数据。稀疏编码算法的目的就是找到一组基向量
?
i
\phi_{i}
?i?,使得输入向量
X
X
X可以表示为这些向量的线性组合:
X
=
∑
i
=
1
k
a
i
?
i
X=\sum_{i=1}^{k} a_{i} \phi_{i}
X=∑i=1k?ai??i?
常见的自编码器
欠完备自编码器:将输出层中神经元的个数设置为小于输入层中神经元个数,以达到非线性降维的效果(在神经网络的传递过程中由于激活函数的存在,因此是非线性的传递)。 稀疏自编码器:对隐层的神经元加入稀疏约束,以便约束隐层中神经元不为0的个数,目的是达到用尽可能少的神经元来表示数据
X
X
X,以达到稀疏降维。稀疏自编码器有加速网络训练的功能。 收缩自编码器:在损失函数中加入一项平方Frobenius范数(矩阵所有元素平方和的开方根)的正则项:
J
C
A
E
(
θ
)
=
∑
x
∈
D
n
(
L
(
x
,
g
(
f
(
x
)
)
)
+
λ
∥
J
f
(
x
)
∥
F
2
)
J_{C A E}(\theta)=\sum_{x \in D_{n}}\left(L(x, g(f(x)))+\lambda\left\|J_{f}(x)\right\|_{F}^{2}\right)
JCAE?(θ)=∑x∈Dn??(L(x,g(f(x)))+λ∥Jf?(x)∥F2?)
∥
J
f
(
x
)
∥
F
2
=
∑
i
=
1
d
h
(
h
i
(
1
?
h
i
)
)
2
∑
j
=
1
d
x
W
i
j
2
\left\|J_{f}(x)\right\|_{F}^{2}=\sum_{i=1}^{d_{h}}\left(h_{i}\left(1-h_{i}\right)\right)^{2} \sum_{j=1}^{d_{x}} W_{i j}^{2}
∥Jf?(x)∥F2?=∑i=1dh??(hi?(1?hi?))2∑j=1dx??Wij2? 栈式自编码器:主要是用来实现深度学习的无监督预训练的。
自编码器的应用
数据去噪:从数据样本中进行无监督学习,即可将这个算法应用到某个数据集中,来取的良好的性能,且不需要任何新的特征工程,只需要适当的训练数据。 可视化降维:自编码器在图像压缩方面性能不佳
|