无监督学习
有监督学习vs无监督学习
有监督学习
数据:(x,y),x:样本,y:标签
目标:学习xy的映射
应用:分类,回归,目标检测,语义分割
无监督学习
数据:x,,x:数据
目标:找出隐含在数据里的模式或者结构
应用:聚类(K-means),降维(主成分分析),特征学习(自编码),密度估计
相比有监督的优势:数据获取成本低
生成模型
- 定义:给定训练集,产生与训练集同分布的新样本
希望学到一个模型P model(x),其与训练样本的分布P data(x)接近
(由于维数过高,没有能力去得出P data的分布,只能用P modal去逼近)
只要能训练出P modal,再从P modal中采样,就能得到想要的图像
-
生成模型的应用
-
生成模型分类
PixelRNN and PixelCNN
- PixelRNN
概念:显式的密度模型(显式:能求解分布函数)
原理:利用链式准则将图像x的生成概率转变为每个像素生成概率的乘积
最大化训练数据的似然
注意:
-
需要定义像素产生的顺序,生成速度慢
-
分布复杂(但可以使用神经网络建模)
- PixelCNN
概念:基于已生成的像素,使用CNN来生成新的像素
每次计算只取其中一块区域,速度比RNN快(计算量小了),但生产过程依然是逐个像素生成,依旧慢
使用上述两个模型在CIFAR-10和ImageNet数据集上训练后生成的图像结果
总结(PixelRNN & PixelCNN)
优点:似然函数可以精确计算;利用似然函数可以有效评估模型
缺点:像素按序列产生,速度慢
Variational Autoencoders(VAE)
概念:显式模型(概率密度函数显式定义,但无法求出,只能近似求解)
- 自编码器
概念:无监督的特征学习,目标是利用无标签数据找到一个有效的低维特征提取器
Z的维度一般小于x(特征降维)
Q:特征降维的作用。
A:希望降维后的特征仅保留数据中有意义的信息。
Q:怎么得到编码器?
A:构造自编码器,训练该模型(x与x head越接近越好),最后得到编码器。
- 解码器与编码器的训练方法
Q:如何学习?
A:
1. 计算重构误差:L2(损失越小越好,无需标签),训练完成后移出解码器
2. 训练完后的编码器作为有监督学习的初始特征提取模型(利用少量有标签的数据,训练最终的网络)。
注意:VAE模型并不完全套用这种学习方式(分类和生成图像的侧重点不同)
训练好的解码器用处:以一个2维解码器为例,输入编码,生成图像
例如有上图一样的码空间,将一个点输入解码器,就能生成概率最高的数字图像
- 为什么使用VAE
Q:既然解码器能生成图像,为什么还需要VAE?
A:解码器只能生成已有的图片,如输入满月与半月的图像,希望生成中间状态的月亮,只是用解码器是无法实现的
- 自编码器与VAE工作示意图
VAE的编码器与自编码器不同,自编码器是直接得到输出z(编码),而VAE的编码器输出是一个概率分布,其中m为分布均值,σ为分布方差
e是噪声,e与exp(σ)做乘积,得到的值作为偏移量与m相加后最为最后输出(带有噪声的)编码
其中,噪声的方差σ是从数据中学到的,取exp是为了保证是一个正数
在取σ时,除了要考虑重构损失最小,还要让σ尽量趋近于0,即最小化黄色框内的式子
怎么理解这个式子?按照对应下划线颜色画出曲线,绿色曲线为蓝色与红色的差值
mi:L2的正则化,目的是防止码值聚集
- VAE模型的推导
在进行VAE模型的推导前,先介绍:高斯混合模型
采样过程:
1. 从m选择一个具体的整数
2. 根据选出的m值,得到对应的高斯函数(得到其μ与σ),进行采样
但只是混合高斯模型,只能解决有限个的对应关系(即m个),所以我们将P(m)替换为一个分布函数,用函数来对应,就能产生无数组的对应关系
VAE的推导
我们的目标是输入z,通过一个神经网络,输出对应的高斯分布的μ与σ
其中,z的分布是标准正态分布(也可以是其他分布,但要简单)
神经网络的任务就是去学习找一个最合适的从z到P(x)的对应关系
由于输入从离散变为连续,则计算P(x)的公式从求和变为积分
现在问题变为怎么求出P(x)
最大化似然估计L
无法求解P(x),用P(x|z)去逼近,P(x|z)可以是任何分布
红色划线部分求不出来,但能知道求解式子一定≥某个可以计算的式子(最后一行)
将其称为下界Lb,令其最小
q(z|x)是神经网络的学习内容
最后得到式子的两个部分分别称为:KL散度,重建损失
就对应到两个损失函数
- 用VAE生成的图像
总结
优点:生成模型里的一种主要方法;可以计算q(z|x),这个特征表示可以用在其他许多地方
缺点:最大化似然函数的下边界能够有效地工作,但模型本身没有PixelRNN/CNN那样好评估;与GAN相比,产生的图像比较模糊,质量低