1. 非负矩阵分解问题描述
传统的NMF
问题可以描述如下:给定矩阵
V
∈
R
+
n
×
m
V\in R_{+}^{n\times m}
V∈R+n×m, 寻找非负矩阵
W
∈
R
+
n
×
r
W \in R_{+}^{n \times r}
W∈R+n×r 和非负矩阵
H
∈
R
+
r
×
m
H \in R_{+}^{r \times m}
H∈R+r×m, 使得
V
≈
A
W
V \approx AW
V≈AW。可以理解为原始矩阵
V
V
V 的列向量是对做矩阵
A
A
A 中所有列向量的加权和,而权重系数就是有矩阵对应列向量的元素,故称
A
A
A 为基矩阵,
W
W
W 为系数矩阵。一般情况下
r
r
r 的选择要比
n
n
n 小, 即满足
(
m
+
n
)
r
<
m
n
(m+n)r<mn
(m+n)r<mn,这时用系数矩阵代替原是矩阵,就可以实现对原是矩阵进行降维,得到数据特征的降维矩阵,从而减少存储空间减少计算机资源。
2.非负矩阵的求解
当矩阵的秩 r r r 未知的时候,只能对矩阵的秩进行不断的遍历求解。如果知道矩阵的秩,可以通过 E M EM EM 的方法对目标函数进行求解,主要思想是先对矩阵 A A A和 W W W进行随机猜一个值,然后进行不断地迭代,求解直到收敛。目前常用的方法有乘法更新法和 最小二乘法方法。
2.1. 乘法更新求解法
在乘法更新求解法的目标函数表达式为:
D
F
(
Y
∣
∣
A
X
)
=
1
2
∣
∣
Y
−
A
X
∣
∣
F
2
,
s
.
t
.
a
i
j
≥
0
,
x
j
t
≥
0
,
∀
i
,
j
,
t
D_{F}\left ( Y||AX \right )=\frac{1}{2}\left|| Y-AX\right||_{F}^{2}, s.t. a_{ij}\ge0, x_{jt}\ge0,\forall{i,j,t}
DF(Y∣∣AX)=21∣∣Y−AX∣∣F2,s.t.aij≥0,xjt≥0,∀i,j,t
对这个目标函数表达式求解 KKT 条件得到如下:
A
≥
0
,
X
≥
0
A\ge0, X\ge0
A≥0,X≥0
▽
A
D
F
≥
0
,
▽
X
D
F
≥
0
\bigtriangledown_{A}D_{F}\ge0, \bigtriangledown_{X}D_{F}\ge0
▽ADF≥0,▽XDF≥0
A
∗
▽
A
D
F
=
0
,
X
∗
▽
X
D
F
=
0
A\ast\bigtriangledown_{A}D_{F}=0, X\ast\bigtriangledown_{X}D_{F}=0
A∗▽ADF=0,X∗▽XDF=0
其中梯度的表达式为:
▽
A
D
F
=
A
X
X
T
−
Y
X
T
,
▽
X
D
F
=
A
T
A
X
−
A
T
Y
\bigtriangledown_{A}D_{F}=AXX^{T}-YX^{T}, \bigtriangledown_{X}D_{F}=A^{T}AX-A^{T}Y
▽ADF=AXXT−YXT,▽XDF=ATAX−ATY
结合上述的两组式子得到:
A
∗
(
A
X
X
T
)
=
A
∗
(
Y
X
T
)
,
X
∗
(
A
T
A
X
)
=
X
∗
(
A
T
Y
)
A\ast(AXX^{T})=A\ast(YX^{T}),X\ast(A^{T}AX)=X\ast(A^{T}Y)
A∗(AXXT)=A∗(YXT),X∗(ATAX)=X∗(ATY)
即更新的规则为:
A
←
A
∗
[
(
Y
X
T
)
⊘
(
A
X
X
T
+
ε
)
]
A \gets A\ast\left[(YX^{T}) \oslash(AXX^{T}+\varepsilon )\right]
A←A∗[(YXT)⊘(AXXT+ε)]
X
←
X
∗
[
(
A
T
Y
)
⊘
(
A
T
A
X
+
ε
)
]
X \gets X\ast\left[(A^{T}Y) \oslash(A^{T}AX+\varepsilon )\right]
X←X∗[(ATY)⊘(ATAX+ε)]
2.2.最小二乘法求解法
在最小二乘法中目标函数的表达式为:
D
F
(
Y
∣
∣
A
X
)
=
1
2
∣
∣
Y
−
A
X
∣
∣
F
2
,
s
.
t
.
a
i
j
≥
0
,
x
j
t
≥
0
,
∀
i
,
j
,
t
D_{F}\left ( Y||AX \right )=\frac{1}{2}\left|| Y-AX\right||_{F}^{2}, s.t. a_{ij}\ge0, x_{jt}\ge0,\forall{i,j,t}
DF(Y∣∣AX)=21∣∣Y−AX∣∣F2,s.t.aij≥0,xjt≥0,∀i,j,t
对这个目标函数表达式求解 KKT 条件得到如下:
A
≥
0
,
X
≥
0
A\ge0, X\ge0
A≥0,X≥0
▽
A
D
F
≥
0
,
▽
X
D
F
≥
0
\bigtriangledown_{A}D_{F}\ge0, \bigtriangledown_{X}D_{F}\ge0
▽ADF≥0,▽XDF≥0
A
∗
▽
A
D
F
=
0
,
X
∗
▽
X
D
F
=
0
A\ast\bigtriangledown_{A}D_{F}=0, X\ast\bigtriangledown_{X}D_{F}=0
A∗▽ADF=0,X∗▽XDF=0
其中梯度的表达式为:
▽
A
D
F
(
Y
∣
∣
A
X
)
=
∂
D
F
(
Y
∣
∣
A
X
)
∂
A
=
[
−
Y
X
T
+
A
X
X
T
]
=
0
\bigtriangledown_{A}D_{F}(Y||AX)=\frac{\partial D_{F}(Y||AX)}{\partial A}=\left[-YX^{T}+AXX^{T} \right]=0
▽ADF(Y∣∣AX)=∂A∂DF(Y∣∣AX)=[−YXT+AXXT]=0
▽
A
D
F
(
Y
∣
∣
A
X
)
=
∂
D
F
(
Y
∣
∣
A
X
)
∂
X
=
[
−
A
T
Y
+
A
T
A
X
]
=
0
\bigtriangledown_{A}D_{F}(Y||AX)=\frac{\partial D_{F}(Y||AX)}{\partial X}=\left[-A^{T}Y+A^{T}AX \right]=0
▽ADF(Y∣∣AX)=∂X∂DF(Y∣∣AX)=[−ATY+ATAX]=0
即更新的规则为:
A
←
[
Y
X
T
(
X
X
T
)
−
1
]
+
=
[
Y
X
†
]
+
A \gets \left[YX^{T}\left(XX^{T}\right)^{-1}\right]_{+}=\left[YX^{\dagger }\right]_{+}
A←[YXT(XXT)−1]+=[YX†]+
X
←
[
(
A
T
A
)
−
1
A
T
Y
]
+
=
[
A
†
Y
]
+
X \gets \left[(A^{T}A)^{-1}A^{T}Y\right]_{+}=\left[A^{\dagger }Y\right]_{+}
X←[(ATA)−1ATY]+=[A†Y]+
3. 非负矩阵收敛证明
4. 参考资料
- http://www.xiongfuli.com/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/2016-01/NMF.html
- https://blog.csdn.net/acdreamers/article/details/44663421