降维

为什么要降维

主成分分析(PCA)

自编码器(Autoencoder)

局部线性嵌入

词向量嵌入

降维问题

在处于大数据时代的今天,想直接对几千上万维度的输入进行拟合不仅是因为硬件上的困难,还是因为维度灾难(参考博客其他文章)导致的输入数据稀疏,以及噪声过大。

考虑这里:深度神经网络 - alittlebear’s blog 提到的流行假设。如果我们有办法获取这个内在维度(intrinsic dimension)的基,那么我们就可以将高维数据通过这个基来表示。下文讲到的主成分分析 PCA 本质上就就是在通过线性代数找出一组正交基的(最)近似解,当然,既然用的是线性代数,这也表示了 PCA 假设了输入空间是向量空间的,也引申出了其限制。针对此,我们在PCA后介绍几种非线性降维方法。

主成分分析(Principal Component Analysis,PCA)

如上面所说,主成分分析的概念线性代数课堂基本都会学到,具体数学推导这里就不赘述了。

但其核心思想就是通过寻找一组新的正交基(orthogonal basis)来从高维的标准欧几里得基变为这个低维基。这组正交基会最大化数据集的方差以此来进行区分(保留最多信息)。

更具体的,PCA用前 \(d\) 大的特征值来构建 \(d\) 维的正交基,从数学上可以严格证明谱(spectrum,特征值的集)对应了最大化方差的正交基。

可以看到,计算十分简单,快捷,且有效。但最大的问题还是只能解决线性数据。

自编码器(Auto-Encoder,AE)

如其名,先将 PCA 的集元素看作是潜在表示、隐表示(Latent Representation),那么 PCA 就是在学习这些潜在表示的线性组合。与其学习线性组合,不如通过神经网络的激活函数的非线性来变为学习潜在表示的非线性组合(表示和组合两者都要学习)。

基于以上思想,自编码器分为两个部分:编码器 \(\phi\) 和解码器 \(\psi\)

  • 编码器 \(\phi: \mathcal{X}\to\mathcal{F}\) 将数据映射到一个“特征码”(或者叫隐含表示、隐含变量),记为 \(h\)
  • 解码器 \(\psi: \mathcal{F}\to\mathcal{X}\) 将“特征码”隐射回原空间。

自编码器可以看作是一种特殊的神经网络,其有一层特殊的中间层,其宽度是小于输入维度(不然毫无意义)。于是,也可以通过反向传播算法 BP 来优化两个部分。

如果仅是如此可能过于简单,但是一些变种还是很有实际意义,或者可解释性还是不错的。

稀疏自编码器在自编码器的基础上进行稀疏化

去噪自编码器通过给输入添加噪声来学习去噪的过程,这种学习方式可以有效的学习输入的特征表示而不是一些细枝末节的“细节”。现在热门的 Diffusion 模型可以看作是一连串(不同噪声等级)的去噪自编码器。

深度生成模型 这里可以看到变分自编码器 - 编码概率而不是某个具体的点,来生成新数据。

局部线性嵌入(Locally Linear Embedding,LLE)

决策树作为万能函数逼近器,本质上就是通过一个个局部线性的小线段来“锯齿状”的模拟全局函数。

类似想法也可以从数学的角度解释。在数学上流形局部同胚于一个欧几里得空间,也就是,所有局部都是可以被线性函数近似的。

词向量嵌入

自然语言的词汇量十分庞大,常用的词袋表示方法(Bag-of-Word,BoW)将第 \(i\) 维的输入作为第 \(i\) 个词出现的频率,这导致了维度十分庞大,且稀疏(大部分词都不会出现在一个输入内)。

隐含语义分析(Latent semantic analysis,LSA)

词向量嵌入假设了如果两个词出现的上下文相同,那么他们语义也相同(分布假说,distribution hypothesis)。

隐含语义分析将词-文档这个矩阵通过奇异值分解(SVD)来降维。

现在更常用的还是下一小节的基于深度神经网络的神经语言模型:

神经语言模型

从现在的眼光来看,下面两个 Word2Vec 模型作为静态嵌入(embedding)模型最大的问题就是无法区分词的多语义。如

  • 我去 Bank (银行)存钱
  • 我在 Bank (河岸)钓鱼

模型无法区分上述两个 Bank 不同的含义,融合在了一起。后续 ELMo 和 BERT 引用了动态上下文嵌入才解决。

连续词袋模型(Continuous bag-of-words,CBOW)

相比 BOW,CBOW 的C(连续,continuous)体现在了聚合特征向量 \(h\) 和概率输出 \(p(w_t|c)\)

如图所示,CBOW先将 one-hot 的上下文词一起通过 \(\theta\) 映射到一个聚合特征向量 \(h\),然后 \(h\) 通过输出投影矩阵 \(\Phi\) 映射会原空间,但不是 one-hot 而是 Softmax 的形式,最后去概率最高的作为输出。

整个过程类似于“掩码自编码器”(如 BERT,参考 深度生成模型),可以看作是一个神经网络,代表了可以通过反向传播来优化。

可以看到,上下文的几个词顺序上不重要,这导致模型失去了这方面的信息,影响输出。此外,因为平滑机制,这个模型对低频词处理不了。

Skip-gram 模型

可以看到,Skip-gram 和 CBOW 较为相反。给定一个上下文中心 \(w_t\),Skip-gram 预测上下文词。

相比之下,这个模型对低频词处理的更好,但可以看到最大的问题就是计算量太大。并且,在一个自然段中,距离远的词不一定有联系,但是这个模型假设了上下文所有词都与这个词有联系。

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...