1、稀疏自编码器的结构
上图为稀疏自编码器的一个大致结构,其主要特征为其输入层的结点(不包括偏置节点)和输出层的结点的个数是相同的,而隐含层结点的个数则较少,该模型的目的在于学习得到 h w , b ( x ) h_{w,b}(x) hw,b(x)使得 h w , b ( x ) ≈ x h_{w,b}(x) \approx x hw,b(x)≈x成立。而“稀疏”则要体现造中间的隐含层,中间的隐含层是从原始数据x中提取出来的,而同时可以经过线性加权和激活函数得到 h ( x ) h(x) h(x),即能够还原到原来的特征,那么可以认为中间的隐含层实现了对原始数据的抽象表示,而这里的抽象性表示可以分为两种:
- 降维:让隐含层节点的个数小于输入节点的个数
- 稀疏:即在隐含层的神经元上加入稀疏性的限制
降维很容易理解,那么“稀疏”呢?
2、稀疏性约束
对于使用Sigmoid函数作为激活函数的神经元,如果其输出为1代表该神经元被激活,否则称为未被激活。那么稀疏性表征的就是在大多数情况下神经元都是未被激活的。对于隐含层的第i个神经元,定义其激活度为
a
i
2
=
S
i
g
m
o
i
d
(
W
i
1
1
x
1
+
.
.
.
+
W
i
m
1
x
n
+
b
i
1
)
a^2_i=Sigmoid(W^1_{i1}x_1 + ... + W^1_{im}x_n+b^1_i)
ai2=Sigmoid(Wi11x1+...+Wim1xn+bi1)
那么对于m个样本,平均激活度为
ρ
j
^
=
1
m
∑
i
=
1
m
[
a
j
(
2
)
(
x
(
i
)
)
]
\hat{\rho_j}=\frac{1}{m}\sum^m_{i=1}[a^{(2)}_j(x^{(i)})]
ρj^=m1i=1∑m[aj(2)(x(i))]
通常让
ρ
j
^
=
ρ
\hat{\rho_j}=\rho
ρj^=ρ,其中
ρ
\rho
ρ为一个常数,表示稀疏性的参数。可让这个常数较小,来增加其稀疏性。为了让平均激活度能够尽可能接近于稀疏性常数,可以用相对熵来衡量平均激活度与稀疏性参数之间的差异程度,假设
s
2
s_2
s2为隐含层的节点个数,那么该层节点的相对熵之和可以表示为:
∑
j
=
1
s
2
K
L
(
ρ
∥
ρ
j
^
)
=
∑
j
=
1
s
2
(
ρ
l
o
g
ρ
ρ
j
^
+
(
1
−
ρ
)
l
o
g
1
−
ρ
1
−
ρ
j
^
)
\sum^{s_2}_{j=1}KL(\rho\parallel \hat{\rho_j})=\sum^{s_2}_{j=1}(\rho log\frac{\rho}{\hat{\rho_j}}+(1-\rho)log\frac{1-\rho}{1-\hat{\rho_j}})
j=1∑s2KL(ρ∥ρj^)=j=1∑s2(ρlogρj^ρ+(1−ρ)log1−ρj^1−ρ)
上述式子表示若能够使得每个神经元的激活度都等于稀疏度参数,那么其相对熵将为0,代表差距达到最小。
3、稀疏自编码器的求解
该网络的损失函数是在其他一般网络的损失函数的基础上加上了稀疏性的约束,即:
J
(
W
,
b
)
=
[
1
m
∑
i
=
1
m
(
1
2
∥
h
W
,
b
(
x
(
i
)
−
y
(
i
)
∥
2
)
]
+
λ
2
∑
l
=
1
L
∑
i
=
1
s
l
∑
j
=
1
s
l
+
1
(
W
j
i
(
l
)
)
2
J(W,b)=[\frac{1}{m}\sum^m_{i=1}(\frac{1}{2}\lVert h_{W,b}(x^{(i)} - y^{(i)} \rVert^2)]+\frac{\lambda}{2}\sum^{L}_{l=1}\sum^{s_l}_{i=1}\sum^{s_{l+1}}_{j=1}(W^{(l)}_{ji})^2
J(W,b)=[m1i=1∑m(21∥hW,b(x(i)−y(i)∥2)]+2λl=1∑Li=1∑slj=1∑sl+1(Wji(l))2
那么求解的方法也是进行结合反向传播来进行梯度下降。