DL_6_无监督学习

无监督学习基础

无监督学习是指从无标签的数据中学习出一些有用的模式。

监督学习:构建输入-输出之间的映射关系;

无监督学习:发现隐藏的数据中的有价值信息,包括有效的特征、类别、结构以及概率分布。

主要应用

主要分为特征学习和密度估计两大应用

特征学习中,又分为聚类和分布式表示两种类型。

关于特征学习,核心思想是:化繁为简。
在这里插入图片描述
从数据中抽象出本质特征,训练时只有输入数据。

关于密度估计,核心思想是:无中生有。

以Generation为例,根据特征生成数据,训练时只有输出数据。

在这里插入图片描述

名词解释

无监督特征学习:从无标签的训练数据中挖掘有效的特征或表示。用来进行降维、数据可视化或监督学习前期的数据预处理;

概率密度估计:根据训练样本来估计样本空间的概率密度。又详细分为参数密度估计和非参数密度估计。参数密度估计是假设数据服从某个已知概率密度函数的参数。非参数密度估计是不假设数据服从某个已知分布,只利用训练样本对密度进行估计,可以进行任意形状密度估计。

学习要素

  1. 模型;
  2. 学习准则;
  3. 优化算法。

其中,损失函数中,无监督特征学习主要采用最小重构误差;概率密度估计采用最大似然估计。

无监督特征学习

聚类

K-Means

K-means

聚类算法最困扰的问题在于无法确定簇的个数,只能凭经验选择。

HAC

该方法,构建了一个树。
在这里插入图片描述
其过程为:

  1. 有五个样本,经过比较,前两个样本相似度最高,我们构建一个pair;
  2. 四个样本,最后两个样本相似度最高,构建一个pair;
  3. 有三个样本,前两个样本相似度高,构建一个pair;
  4. 最后两个样本归并于root。

决定簇个数的方法是阈值划分法。我们对相似度设定一个阈值,低于该阈值,看看有几个样本。图中划分为了三类。

分布式表示

聚类的话,可以看做是一种特征学习,但是比较片面,划分很绝对。

因此,我们给出了很多个类别,得到一个样本属于不同类别的分数。

这类似于“六边形战士”之流。

降维表示

降维表示和分布式表示其实是一样的,不过是换一种称呼。

为什么要降维?

维数灾难:
1.数据样本稀疏;
2.距离计算困难。
我们在分析KNN的性能时,做出了领域内必有点的假设,这在现实任务中是很难满足的。因为大部分数据维度较高,分布稀疏。同时高维还会带来内积、距离计算困难。
而解决维数灾难的一个方案是——降维(“维数约减”)。这有助于提高样本密度,简化距离计算。

除此之外,有一些特征是没必要、可以省略的。降维也是一个提取特征的过程。

如何进行降维?

在这里插入图片描述
核心思想是找到一个函数。

特征选择

在一些视频中,被称为脑瘫降维法。
就是从高维数据中选择几个维度来代表这个样本。

PCA

PCA
PAC要求满足最大化方差以及最小化重构误差。

在这里插入图片描述

Auto-encoder

在这里插入图片描述
我们希望训练一个网络,对数据进行自动降维,这称之为Encoder;

然而,这样一个Encoder难以训练,因为没有对其结果进行评价的方法。

于是,我们设计一个decoder,将code复原,计算它与原来的图像的重构误差。

这样的想法,我们在PCA中已经见过:
在这里插入图片描述
我们只要将其中W的计算,转化为网络自动训练,就可以得到Auto Encoder。

其中瓶颈层得到的数据,就是降维后的特征向量。

如果在输入层,瓶颈层,输出层之间多加几层网络,就转化为了Deep Auto Encoder。

我们比较PCA和Auto Encoder的效果,可以清晰地发现两者的差异。

在这里插入图片描述

文本检索

在这里插入图片描述
文本检索,就是找到相似内容。

我们可以将文本抽象为一个向量,通过计算向量内积/余弦相似性的方式判读文本内容的相似程度。

那么如何抽象为一个向量就成为了文本检索的关键问题。

在传统的词袋模型中,我们首先构建一个语料库,通过对出现的词汇置1来表示一句话。这样的做法可行,但有很大的缺点,就是无法考虑词汇之间语义之间的相关性。apple和pen对词袋模型而言是一视同仁的。

而我们通过自编码器得到特征,就可以很好的解决这一问题。

图像检索

图像检索也是同样的道理。

传统的图像检索在欧式空间中进行,相似性是通过欧氏距离度量。

我们可以通过自编码器得到欧氏空间中的隐式嵌入空间中的向量,依次来度量相似性。

预训练DNN

在过去,训练一个深度神经网络是很困难的,因为数据量过大。因此,我们可以采用自编码器,对每一层做一个预训练。

本身神经网络的每一层都是一个提特征的过程,自编码器也是一个提特征的过程,两者的目标是有相似性的。

其过程为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Auto-encoder for CNN

对于图像的处理,我们一般采用CNN,于是Auto-encodor也有对应CNN的版本:
在这里插入图片描述
令人困惑的是Unpooling和Deconvolution究竟是个什么操作???

Unpooling
在这里插入图片描述
以MaxPooling为例,我们在做maxpooling时,记录下了最大值的位置,我们只要将特征图的每个像素点填充到原来的位置,其余地方补0即可。

Deconvolution
Deconvolution其实就是Convolution + padding。
在这里插入图片描述

Auto Encoder +

在这里插入图片描述
在自编码器中,我们最初的做法是,最小化重构误差。

那么出了最小化重构误差,还有其他的方法吗?

我们的目的是为了让encoder输出与样本相关的code,因此,在整体上的思想就是判断样本与code的相关性。

我们可以借助GAN的思想,设计一个Discriminator来判断这一点。

在这里插入图片描述
我们给出很多正负样本(正样本,匹配;负样本,不匹配),而Discriminator对其打分、分类即可。

于是,最小化重构误差转化为了最小化交叉熵损失函数。

本质上,最小化重构误差是该方法的特殊化:
在这里插入图片描述
特殊点在于:

  1. 判别器输出的得分转化为了重构误差;
  2. 训练时,没有用到负样本。

除此之外,我们还希望特征可以有效表示数据,也就是说,特征应该有可解释性,那么这该如何做到?

我们用特征解耦的应用来讲解。 耦合操作,是将几个东西连接在一起,而解耦操作则是将他们分开。

输入的数据,往往带有诸多信息,我们希望能通过特征解耦,将这些信息分开。比如说encoder得到的code的前100维是信息A,后一百维是信息B,这就使得code具有了可解释性。

思想有了,那么该怎么实现呢?

在这里插入图片描述
假设一段音频只包含语者声音与说话内容两个信息。我们借助GAN的思想,创建一个Speaker Classifier,用来对前100维的code进行判别(打分、Discriminator),看看它究竟属于哪一个说话人。

我们希望Classifier得到信息后,完全都猜错,也就是说,code的前100维没有语者信息。从而,信息得到了划分。

整体的训练是一个交替训练的过程。

我们可以用划分的code进行随机组合,得到变声器。

矩阵因子分解(Matrix Factorization)

在这里插入图片描述
该矩阵的行标签是动漫人物,该矩阵的列标签是路人。

矩阵中的数据是路人给动漫人物的打分。

我们首先给出这样一个概念:万事万物背后,都有一个向量,代表着其性格、喜好等等。这样一个向量也可以认为是其特征向量。

这样一个评分矩阵是显示的,而路人和动漫角色背后的向量则是隐式的。

得到这个向量要解决两方面问题:

  1. 向量维数;
  2. 向量数值。

向量维数问题其实和聚类问题一样,都是经验所得;但是向量数值问题,可以通过矩阵因子分解得到。

在这里插入图片描述
评分矩阵也称为反馈矩阵;
K是特征向量数量;M为路人数量;N为动漫人物数量。

关于路人矩阵和动漫人物矩阵可以通过SVD分解求解。

我们希望分解后的矩阵相乘后和反馈矩阵尽量接近,因此我们通过重建误差度量。

在这里插入图片描述

但是反馈矩阵有一个很大的问题:现实中,会出现缺失值,无法进行SVD分解。

我们给出的解决方案是忽略缺失部分,优化损失函数,实现特征嵌入。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

右边是我女神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值