从0了解深度学习——无监督学习
本文章将介绍深度学习中的无监督学习
(如果文章中的公式不能正常显示,请刷新该页面。如果还不能解决,请邮箱联系我,谢谢...)
无监督学习的一些部分在机器学习入门系列文章已经介绍过,这里不做赘述,本篇文章只介绍未提及的部分
无监督特征学习

我们希望在无标签数据中学习到有用的特征表示
例如图中,将 \(x\) 以某种编码方式,映射到另一个空间中的 \(z\) ,其又称作 \(x\) 的编码,还可以将 \(z\) 解码回原来的 \(x'\)
在真正的学习中,我们不一定要利用完整的过程
可以只用到前半段 \(x\rightarrow z\) ,例如: PCA 主成分分析
也可以使用后半段,学习一个编码 \(z\) 和一个词典(一般是 \(z\) 和 \(x'\) 之间的连线,也就是权重矩阵),使得 \(z\) 可以作为某种 \(x'\) 的有效编码
或者都使用:自编码器
应用:
目的:特征提取、去噪、降维、数据可视化
主成分分析(PCA)
当数据原始特征存在问题:
- 高维:维度灾难、过拟合
- 冗余性:学习效果差
解决方式:降维
常见的降维方法:线性投影 \[ Z=W^T·X \] \(z\) :投影后的向量
\(W^T\) :新坐标轴的基向量
基向量满足: \[ W^T·W=I\qquad W_i·W_j=0\;\;(垂直) \] 主成分分析优化准则:
最大投影方差:即原始数据在新坐标轴中投影所得点的方差最大,或投影点到新坐标原点的距离平方和最大,原因是为了保存原数据尽可能多的信息
最小重构误差
计算:
由于投影为: \[ Z=W^T·X\;\Leftrightarrow\;z^{(n)}=w^T·x^{(n)} \] 则方差为: \[ \begin{gather} \sigma(X;W)=\frac{1}{N}\sum_{n=1}^N(W^Tx^{(n)}-W^T\bar{x}^{(n)})^2 \\ =\frac{1}{N}(W^TX-W^T\bar{X})(W^TX-W^T\bar{X})^T \\ =W^T·\frac{1}{N}(X-\bar{X})(X-\bar{X})^T·W \end{gather} \] 因为协方差为: \[ \begin{gather} Cov(x,y)=\frac{1}{N}\sum_{n=1}^N(x-\bar{x})(y-\bar{y}) \\ Cov(x,x)=\frac{1}{N}\sum_{n=1}^N(x-\bar{x})^2 \\ \Downarrow 向量形式 \\ \Sigma=\frac{1}{N}(X-\bar{X})(X-\bar{X})^T \end{gather} \] \(\Sigma\) 表示协方差
那么原来的方差公式可以写成: \[ \begin{gather} \sigma(X;W)=W^T·\frac{1}{N}(X-\bar{X})(X-\bar{X})^T·W \\ \Downarrow \\ \sigma(X;W)=W^T·\Sigma·W \end{gather} \] 为了求得最大值,且 \(W^T·W=1\) ,有约束的优化问题,使用拉格朗日乘数法:
- 拉格朗日乘数法,一种求有约束最值的方法:
若有一个函数 \(f(x)\) ,有约束:\(g(x)=0\) ,则有: \[ L(x)=f(x)+\lambda g(x) \] 求: \[ \begin{cases} \frac{\partial L(x)}{\partial x_i}=0\qquad i=1,2,3,...,n \\ \frac{\partial L(x)}{\partial \lambda}=0 \end{cases} \] 求解上述方程组就是 \(f(x)\) 在约束 \(g(x)=0\) 下极值点的候选值
回到之前的问题,对于函数 \(\sigma(X;W)\) 有约束 \(W^T·W=1\) ,则有: \[ L=W^T·\Sigma·W+\lambda(1-W^T·W) \] 令 \(W^T\) 的偏导数为0: \[ \Sigma·W=\lambda·W\qquad<1> \] 左乘 \(W^T\) 得: \[ \begin{gather} W^T·\Sigma·W=W^T·\lambda·W \\ \because\;W^T·W=I \\ \therefore\;W^T·\Sigma·W=\lambda \end{gather} \] 也就是说,方差的值为: \[ \sigma(X;W)=\lambda\qquad<2> \] 因为公式 <1> : \[ \Sigma·W=\lambda·W \] 我们知道 \(\lambda\) 为 \(\Sigma\) 的特征值,而 \(W\) 为 \(\Sigma\) 的特征向量
对 \(\Sigma\) 进行特征值分解,若 \(W\) 为 \(D\) 维,则有: \[ \begin{gather} \Sigma·\vec{w}_1=\lambda_1·\vec{w}_1 \\ \Sigma·\vec{w}_2=\lambda_2·\vec{w}_2 \\ . \\ . \\ . \\ \Sigma·\vec{w}_D=\lambda_D·\vec{w}_D \\ \end{gather} \] 也就是有 \(D\) 个特征值与特征向量
其中 \(\lambda\) 为各自维度的方差,\(\vec{w}\) 为各自维度的基向量
我们也可以计算各维度方差占比: \[ \sigma_i=\frac{\lambda_i}{\sum_{j=1}^D\lambda_j}\qquad i\in[1,D] \] 将得到的 \(\sigma\) 或者仅仅使用 \(\lambda\) 进行从大到小排序,若要将维度降到 \(d\) 维,那么就保留前 \(d\) 个特征向量即可,其对应的特征向量即最优的投影矩阵
总结:
主成分分析是一种无监督学习方法,可以作为监督学习的数据预处理方法,用来去除噪声并减少特征之间的相关性,但是它并不能保证投影后数据的类别可分性更好
提高两类可分性的方法一般为监督学习方法,比如线性判别分析(Linear Discriminant Analysis,LDA)
编码与稀疏编码
编码
给一组基向量 \(A=[a_1,...,a_M]\) ,将输入样本 \(X\) 表示为这些向量的线性组合

在上图中,\(X\) 通过编码 \(Z=WX\) 得到 \(Z\) ,而 \(Z\) 通过解码 \(X^{'}=W^{'}Z\) 还原得到 \(X^{'}\)
那么我们能不能直接跳过编码的过程,直接得到 \(W^{'}\) 和 \(Z\) 呢?引入字典

如上图所示,字典 \(A\) 就可以看出 \(x\) 的基向量组合: \[ x=\sum_{m=1}^Mz_ma_m=Az \] 学习目标:\(Az\) 尽可能还原 \(x\) ,即与 \(x\) 间误差要小 \[ \begin{gather} x^{(1)},...,x^{(n)} \\ min\sum_{n=1}^N\|Az^{(n)}-x^{(n)} \| \end{gather} \] 优化参数:\(A\) 和 \(z\) ,先固定一个,再学另一个,一直迭代使误差最小
稀疏编码
找一组 “过完备” 的基向量( \(M>D\) )来编码
完备性:
- 过完备:\(M\) 个基向量能够支撑 \(D\) 维欧氏空间,\(M>D\)
- 完备:\(M\) 个基向量刚好支撑 \(M\) 维欧氏空间
- 欠完备:若 \(D\) 维空间没有冗余,否则 \(M\) 个基向量不能 100% 重构出原数据,\(M<D\)

稀疏性的生物学可解释性:
神经激活是稀疏的,少数神经元可以表示高层次特征
给一组 \(N\) 个输入向量 \(x^{(1)},...,x^{(N)}\) ,其稀疏编码的目标函数定义为: \[ L(A,Z)=\sum_{n=1}^N(\|x^{(n)}-Az^{(n)} \|^2+\eta\rho(z^{(n)})) \] \(\rho(·)\) 是一个稀疏性衡量函数,\(\eta\) 是一个超参数,用来控制稀疏性的强度

优化方式:交替优化
- 固定基向量 \(A\) ,对每个输入 \(x^{(n)}\) ,计算其对应的最优编码
\[ \begin{gather} min \\ z^{(n)} \end{gather} =\|x^{(n)}-Az^{(n)} \|+\eta\rho(z^{(n)})\quad \forall\, n\in[1,N] \]
- 固定上一步得到的编码 \(\{ z^{(n)} \}_{n=1}^N\) ,计算其最优的基向量
\[ \begin{gather} min \\ A \end{gather} =\sum^N_{n=1}\|x^{(n)}-Az^{(n)} \|^2+\lambda\frac{1}{2}\|A \|^2 \quad \forall\, n\in[1,N] \]
稀疏编码的优点:
- 降低后续计算量
- 可解释性强
- 便于特征选择
自编码器

自编码器需要完整的编码和解码过程
目标函数:重构误差 \[ \begin{gather} L=\sum_{n=1}^N\|x^{(n)}-g(f(x^{(n)})) \|^2 \\ =\sum_{n=1}^N\|x^{(n)}-f\circ g(x^{(n)}) \| \end{gather} \] 示例:两层网络结构自编码器

实际使用中,其实只用前半段,也就是编码器段
其中的 \(W_1\) 和 \(W_2\) 可能不同,但学习时可设置互为转置,学习更容易
这个网络自编码器还可以堆叠更深:

稀疏自编码器
通过给自编码器中隐藏单元 \(Z\) 加上稀疏性限制,自编码器可以学习到数据中一些有用的结构
目标函数: \[ L=\sum_{n=1}^N\|x^{(n)}-x'^{(n)} \|^2+\eta\rho(Z)+\lambda\|W \|^2 \] \(W\) 为自编码器中的参数
和稀疏编码一样,稀疏自编码器的优点是有很高的可解释性,并同时进行了隐式的特征选择
降噪自编码器(DAE)
通过引入噪声来增加编码鲁棒性的自编码器
对于一个向量 \(X\) ,我们首先根据一个比例 \(\mu\) 随机将 \(X\) 的一些维度的值设置为0,得到一个被损坏的向量 \(\tilde{x}\)
然后将被损坏的向量 \(\tilde{x}\) 输入给自编码器得到编码 \(Z\) ,并重构出原始的无损输入 \(X\)

自监督学习
不再只是以输入重构作为目标,在无标签样本自身寻找更多样的 “目标”
例如:
- 输入的一部分预测另一部分
- 过去预测未来
- 未来预测过去
- 过去预测现在
- 从顶部预测底部
- ...
人为对数据进行操作或加噪,并将这些操作作为 \(y\) 给网络学习
例如:图像任务中的自监督学习
旋转角度预测:

由于没有外部监督,其学习的是自身数据,故处于有监督和无监督之间,叫自监督学习
自监督学习就是未来——Yann LeCun
- 有监督:要人为标记,工作量大
- 强化学习:虽然降低工作量,但监督信号有限,学习困难
概率密度估计
参数密度估计
根据先验知识假设随机变量服从某种分布,然后通过训练样本来估计分布的参数
估计方法:最大似然估计 \[ \log p(\mathcal{D};\theta)=\sum_{n=1}^N\log p(x^{(n)};\theta) \]
正态分布
假设样本 \(x\in\mathbb{R}^d\) 服从正态分布 \[ \mathcal{N}(x|\mu,\Sigma)=\frac{1}{(2\pi)^{\frac{D}{2}}|\Sigma|^{\frac{1}{2}}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)} \] 其中 \(\mu\) 和 \(\Sigma\) 分别为正态分布的均值和方差
数据集 \(\mathcal{D}=\{x^{(n)} \}^N_{n=1}\) 的对数似然函数为: \[ \log p(\mathcal{D}|\mu,\Sigma)=-\frac{N}{2}\log((2\pi)^D|\Sigma|)-\frac{1}{2}\sum^N_{n=1}(x^{(n)}-\mu)^T\Sigma^{-1}(x^{(n)}-\mu) \] 分别求上式关于 \(\mu,\Sigma\) 的偏导数,令其等于0,可得: \[ \begin{gather} \mu^{ML}=\frac{1}{N}\sum^N_{n=1}x^{(n)} \\ \Sigma^{ML}=\frac{1}{N}\sum^N_{n=1}(x^{(n)}-\mu^{ML})(x^{(n)}-\mu^{ML})^T \end{gather} \]
多项式分布
假设样本服从 \(K\) 个状态的多项分布,令 onehot 向量 \(x\in[0,1]^K\) 来表示第 \(k\) 个状态,即 \(x_k=1\) ,其余 \(x_{i,i\neq k}=0\) 。样本 \(x\) 的概率密度函数为: \[ p(x|\mu)=\prod^K_{k=1}\mu_k^{x_k} \] 其中 \(\mu_k\) 为第 \(k\) 个状态的概率,并满足 \(\sum^K_{k=1}\mu_k=1\)
数据集 \(\mathcal{D}=\{x^{(n)} \}^N_{n=1}\) 的对数似然函数为: \[ \log p(\mathcal{D}|\mu)=\sum^N_{n=1}\sum^K_{k=1}x_k^{(n)}\log(\mu_k) \] 多项分布的参数估计为约束优化问题。引入拉格朗日乘子 \(\lambda\) ,将原问题转换为无约束优化问题 \[ \begin{gather} max \\ \mu,\lambda \end{gather} \quad\sum^N_{n=1}\sum^K_{k=1}x_k^{(n)}\log(\mu_k)+\lambda(\sum^K_{k=1}\mu_k-1) \] 分别上式关于 \(µ_k,\lambda\) 的偏导数,并令其等于0。可得: \[ \mu_k^{ML}=\frac{m_k}{N},\qquad 1\leq k\leq K \] 其中 \(m_k=\sum_{n=1}^Nx^{(n)}_k\) 为数据集中取值为第 \(k\) 个状态的样本数量
在实际应用中,参数密度估计一般存在以下问题:
- 模型选择问题: 即如何选择数据分布的密度函数。实际数据的分布往往是非常复杂的,而不是简单的正态分布或多项分布
- 不可观测变量问题: 即我们用来训练的样本只包含部分的可观测变量, 还有一些非常关键的变量是无法观测的,这导致我们很难准确估计数据的真实分布
- 维度灾难问题: 即高维数据的参数估计十分困难。随着维度的增加,估计参数所需要的样本数量指数增加。在样本不足时会出现过拟合
非参数密度估计
不假设数据服从某种分布,通过将样本空间划分为不同的区域并估计每个区域的概率来近似数据的概率密度估计函数
对于高维空间中的一个随机向量 \(x\) ,假设其服从一个未知分布 \(p(x)\) ,则 \(x\) 落入空间中的小区域 \(\mathcal{R}\) 的概率为: \[ P=\int_{\mathcal{R}}p(x)dx \] 给定 \(N\) 个训练样本 \(D=\{x^{(n)}\}^N_{n=1}\) ,落入区域 \(R\) 的样本数量 \(K\) 服从二项分布 \[ P_K= \begin{pmatrix} N \\ K \end{pmatrix} P^K(1-P)^{1-K} \] 其中 \(\frac{K}{N}\) 的期望为 \(E[\frac{K}{N}] = P\) ,方差为 \(var(\frac{K}{N}) = \frac{P(1−P)}{N}\) 。当 \(N\) 非常大时,我们可以近似认为: \[ P\approx\frac{K}{N} \] 假设区域 \(\mathcal{R}\) 足够小,其内部的概率密度是相同的,则有: \[ P\approx p(x)V \] 其中 \(V\) 为区域 \(R\) 的体积。结合上述两个公式,得到 \[ p(x)\approx\frac{K}{NV} \] 要准确地估计 \(p(x)\) 需要尽量使得样本数量 \(N\) 足够大,区域体积 \(V\) 尽可能地小。但在具体应用中,样本数量一般是有限的,过小的区域会导致落入该区域的样本比较少,这样估计的概率密度就不太准确
因此,实践中非参数密度估计通常使用两种方式:
固定区域大小 \(V\) ,统计落入不同区域的数量,这种方式包括直方图方法和核方法两种。
改变区域大小以使得落入每个区域的样本数量为 \(K\) ,这种方式称为 \(K\) 近邻方法
直方图法
一种直观的估计连续变量密度函数的方法
将取值范围分为 \(M\)
个连续,不重叠区间(bin),每个宽度 \(\Delta
m\) ,给定 \(N\) 个训练样本
\(\mathcal{D}=\{x^{(n)} \}^N_{n=1}\)
,我们统计每个区间数量 \(K_m\)
,后将他们归一化为密度函数 \[
p_m=\frac{K_m}{N\Delta_m},\qquad 1\leq m\leq M
\] 
优点:简单直观,计算效率高
缺点:对区间划分敏感,不平衡
核密度估计
是一种直方图方法的改进,也叫 Parzen 窗方法

假设 \(\mathcal{R}\) 为 \(d\) 维空间中一个以点 \(x\) 为中心的 “超立方体” ,并定义核函数来表示一个样本 \(Z\) 是否落入该超核立方体中

核函数: \[ \phi(\frac{z-x}{h})= \begin{cases} 1\qquad if\;|z_i-x_i|<\frac{H}{2},1\leq i\leq D \\ 0\qquad else \end{cases} \] \(H\) 为空间大小
点 \(x\) 的密度估计为: \[ p(x)=\frac{K}{NH^D}=\frac{1}{NH^D}\sum^N_{n=1}\phi(\frac{x^{(n)}-x}{H}) \]
K近邻法
要估计点 \(x\) 的密度,首先找到一个以 \(x\) 为中心的球体,使得落入球体的样本数量为 \(K\) ,就可以计算出点 \(x\) 的密度

核心: \[ p(x)=\frac{K}{N·V} \] 固定 \(K,N\) 不变,记录每个区间的大小
非参数密度估计(直方图法除外)需要保留整个训练集
而参数密度估计不需要保留整个训练集,因此在存储和计算上更加高效
从0了解深度学习——无监督学习