前置:背景知识
概率符号说明
- P(x) = 事件x发生的概率。
- 联合概率:P(x, y) 或 P(x \cap y) = 事件x和y同时发生的概率。
- 条件概率: P(x | y) = 已知事件y发生的条件下,事件x发生的概率。
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> P ( x ∣ y ) = P ( x ∩ y ) P ( y ) P(x | y) = \frac{P(x \cap y)}{P(y)} </math>P(x∣y)=P(y)P(x∩y)
(这个公式展示了条件概率如何与联合概率相关。)
概率分布
- 描述了一个随机变量取各个可能值的概率。
- 是一个函数,表示为 p(x)p(x)。
- 对于每一个可能的 xx,它赋予一个非负值,代表 xx 的可能性或概率。
- 总和(或者对于连续随机变量,其积分)为1,即归一化。
例子
- 图片中给出了英文文本中字母(a-z)出现的概率分布。
- 这代表了在给定的英文文本或语料库中,每个字母出现的相对频率。
- 图表展示了不同字母的概率大小,并且所有概率的总和为1。
概率密度函数 (Probability Density Function, PDF)
- 描述连续随机变量的概率分布。
- 是一个函数,表示为 p(x)p(x)。
- 对于每一个可能的 xx,它赋予一个非负值,代表 xx 的可能性或概率密度。
- 该函数下的总面积(或积分)等于1,即归一化。也就是说,随机变量落在某个范围内的概率是该范围内的概率密度函数的积分。
例子
- 图片中给出了澳大利亚每周收入的概率密度函数。
- 这代表了在给定的数据集或样本中,每个收入水平的概率密度。
- 图表展示了不同收入水平的概率密度大小,以及如何归一化以确保其下的面积(或积分)等于1。
判别模型 (Discriminative models) 与生成模型 (Generative models)
判别模型 (Discriminative models)
- 判别模型试图学习输入数据与输出标签之间的关系。简单地说,它们尝试"判别"给定输入属于哪个类别。
- 输入通常是一张图像,输出是标签的概率密度函数。这类模型学习条件概率 p(y|x)。
- 常见的判别模型有:逻辑回归、支持向量机、神经网络等。
生成模型 (Generative models)
生成模型可根据所学分布生成新样本。
- 条件生成模型(Conditional Generative Model)
- 输入是一个标签(例如:"青蛙")。
- 输出是基于图像的概率密度函数,表示为 p(x∣y)。
- 例如,给定标签"青蛙",模型将尝试生成与"青蛙"相关的图像的概率分布。
- 无条件生成模型 (Unconditional Generative Model)
- 输出是图像的概率分布,表示为 p(x)。
- 核心思想是直接生成数据的概率分布,而不依赖于任何给定的条件或标签。与条件生成模型不同,它不使用任何外部信息或条件来生成数据。
- 无条件生成模型的目标是学习整个数据集的概率分布,并尝试从这个分布中生成新的、未见过的样本。
- 例如,如果有一个包含各种动物图片的数据集,该模型训练后可能随机生成一个动物图像,而不是特定的动物,因为它不依赖于具体的输入条件。
贝叶斯 (Bayes' Rule)
此规则描述了以下模型之间的关系:
比较
- 判别模型 (Discriminative models)
判别模型基于给定的图像产生一个关于标签的概率分布。
- 目标:学习在给定输入属性 X 的情况下,类别 Y 的条件概率,表示为 p(y∣x)。
- 特点:直接对输入和输出之间的关系进行建模,试图找到不同类别之间的边界。
- 生成模型 (Generative models)
生成模型基于一个给定的标签产生一个关于图像的概率分布(条件生成)或者对所有图像产生一个总体的概率分布(无条件生成)。
- 目标:学习输入属性 XX 与类别 YY 的联合概率分布,表示为 p(x,y)。
- 特点:学习数据如何生成,从而理解数据的整体模式。
- 关系:生成模型包含判别模型的信息。通过联合概率,我们可以得到条件概率 p(y∣x)。此外,生成模型还可以进行反向预测,给定类别 Y 来得到属性 X 的概率,表示为 p(x∣y)。
什么因素决定了一组像素比另一组更有可能( what makes one set of pixels more probable than another)?
一组像素比另一组更有可能的原因通常基于其在训练数据中的出现频率。例如,如果在图像数据集中,某一特定的像素组合经常出现,模型则认为这种组合的概率较高。此外,结构和上下文也起到关键作用,即图像中的像素是如何相互关联的。例如,在自然图像中,天空通常位于图像的上部,所以这样的像素组合可能性较高。
Autoencoders
无监督学习(Unsupervised learning)
- 为未标记的数据学习一个模型。
- 目标是找到一个能够尽可能好地表示数据的模型,通常这样的模型参数更少。
应用:
- 为另一个机器学习系统提供更简化的模型。
- 是一种降维技术。
- 可能带来更好的泛化能力。
无监督学习 + 神经网络(NNs)
就像有监督的机器学习算法,无监督算法在"原始"输入空间(如文本、图像)中可能表现不佳。
为什么? 解决方案?
Embeddings - 嵌入(例如来自神经网络的)可能更有效。
但我们没有标签来学习为我们的任务准备的嵌入。为其他任务学习的嵌入可能无法完全表示数据。
Autoencode 架构
基础架构
深层架构
简介
- 基本上是用于无监督学习的神经网络。
- 有时被称为"自监督"学习。
- 网络的输出是传递给网络的内容(例如,一张图片)。
- 隐藏层学习输入的低维表示。
架构
- 在隐藏层(hidden layer)进行编码(encoder)
- 隐藏层小于输入层(神经元数量更少)
- 解码(decoder)至输出层
- 通常,编码和解码的权重被强制设置为相同 通常,编码和解码的权重被强制设置为相同
目标:使其输出尽可能地复制或重构其输入。
隐藏层(Hidden Layer)
- "瓶颈(Bottleneck)"层 - 小于输入层。
- 用潜在(latent)变量表示输入。
- 在最简单的情况下(一个隐藏层,使用线性激活函数),这一层学习的是主成分分析(PCA)。
为什么这一层需要小于输入?
隐藏层被设计为小于输入层,是因为其目的是捕捉输入数据的内在结构和特征,实现数据的压缩表示。如果隐藏层的大小与输入层相同或更大,网络可能只会学习输入数据的直接复制 而不捕捉到数据的内在结构 。通过减少隐藏层的大小,可以迫使网络学习数据的更为紧凑和有效的表示,有助于提取更有信息的特征 和进行降维。
输出和损失(Output and loss)
与标准的神经网络不同,输出不是一个类别或回归值------它与输入的类型相同(例如,一张图片)
激活函数需要选择合适的类型:
- 对于二值图像,可以选择双曲正切函数(tanh)或 S 型函数(sigmoid)。
- 对于常规图像,可以选择线性激活函数。
损失函数 = 输入和输出之间的差异(例如,均方误差(MSE))。
潜在表示(Latent representation)
在自编码器中,当输入数据通过编码器(encoder)部分传递时,它会被转换为潜在表示。这个潜在表示是输入数据在低维空间中的一个简化表示,捕捉了数据的主要特征和结构。
Autoencoder
从数据中学习一个潜在表示:解释数据的低维特征集
不是真正的生成模型 - 没有办法生成新数据
- 你可以通过给解码器提供随机的潜在变量值来"采样",但不能保证这些会生成真实的图
变分自编码器(Variational Autoencoder, VAE)
概率版本的自编码器:学习潜在表示并从模型中采样以生成新图像。
-
假设图像是由潜在变量 zz 的某些分布生成的。
-
假设一个简单的先验 p(z)p(z),例如,均匀分布或高斯分布。
概率:
概率解码器学习 - p(x|z)
概率编码器学习 - p(z|x)
目标:最大化似然 (maximize the likelihood) - p(x)
概率编码器(Probabilistic encoder)
输入:图像 x
输出: 均值 <math xmlns="http://www.w3.org/1998/Math/MathML"> μ z ∣ x \mu_{z|x} </math>μz∣x 和对角协方差 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∑ z ∣ x \sum_{z|x} </math>∑z∣x 。 这些参数构成了一个生成 x 的高斯分布,条件是 x。
潜在空间中的一个点,通常是一个潜在向量。在变分自编码器中,编码器输出潜在变量的参数(如均值和方差)
功能:将原始数据映射或编码到一个潜在空间(latent space),通常是一个低维空间。
学习 p(z|x) 的近似: <math xmlns="http://www.w3.org/1998/Math/MathML"> q ( z ∣ x ) = N ( μ z ∣ x , ∑ z ∣ x ) q(z|x) = N(\mu_{z|x}, \sum_{z|x}) </math>q(z∣x)=N(μz∣x,∑z∣x)
概率解码器(Probabilistic decoder)
输入:潜在变量 z
输出:均值 <math xmlns="http://www.w3.org/1998/Math/MathML"> μ x ∣ z \mu_{x|z} </math>μx∣z 和对角协方差 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∑ x ∣ z \sum_{x|z} </math>∑x∣z 。 这些参数构成了一个生成 x 的高斯分布,条件是 z。
重构的数据,应尽可能接近原始输入数据。在生成新数据时,解码器可以使用潜在空间中新的点作为输入来生成新的数据点。
功能:从潜在空间中的点重构或解码回原始数据空间。
<math xmlns="http://www.w3.org/1998/Math/MathML"> p ( x ∣ z ) = N ( μ x ∣ z , ∑ x ∣ z ) p(x|z) = N(\mu_{x|z},\sum_{x|z}) </math>p(x∣z)=N(μx∣z,∑x∣z) - 这是在给定 z 的条件下生成 x 的概率
目标:最大化 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( x ) = p ( x ∣ z ) p ( z ) p ( z ∣ x ) p(x) = \frac{p(x|z)p(z)}{p(z|x)} </math>p(x)=p(z∣x)p(x∣z)p(z)
VAE架构
损失函数(Loss Function)
目标:最大化可能性 p(x)
损失基于 p(x) 的变分下限(variational lower bound)
损失包括两部分:重构损失 和正则化损失
重构损失(Reconstruction loss)
目的:鼓励网络创建与输入图像尽可能相似的输出图像。
重构质量(Reconstruction quality)
这部分表示输入数据 x 的重构质量或重构的对数似然(log likelihood)。它衡量的是解码器重构输入数据的能力。
重构损失:鼓励网络创建与输入图像尽可能相似的输出图像。
正则化损失(Regularisation loss)
目的:鼓励网络学习一个与先验(标准正态分布)相似的潜在表示 z。
Kullback-Leibler 散度(Kullback-Leibler divergence)
这部分表示编码器估计的潜在变量 z 的分布 q(z∣x) 与我们的先验分布 p(z)(通常是标准正态分布)之间的差异。
目标: 损失函数整体的目的是找到一种平衡,使模型能够有效地重构输入数据,同时确保前在空间有一个有意义的结构,通常是通过使潜在变量服从标准正态分布来实现的。
潜在空间(latent space)
特性 Properties
为了对生成过程有用,潜在空间应该是:
- 连续的(Continuous):潜在空间中相邻的点对应于相似的图像。
- 完整的(Complete):潜在空间中的每一点都对应于一个有效的图像。
标准正态分布满足这两个要求。
使用对角协方差矩阵确保潜在变量是独立的。
应用 - 图像操作(Image manipulation)
给定图像 x 的潜在变量表示 z,可以改变 z 的值来创建 x 的变体。 潜在空间中的相邻点对应于相似的图像(连续性要求),并且轴(axes)是独立的。 但是,潜在空间中的方向可能不对应于可识别的图像属性(除非有额外的约束)。
通过微调潜在变量 z 的值,可以生成原始图像 x 的各种变化和修改。但也指出了一个问题,即潜在空间中的方向可能不直接对应于图像中可以直观识别的属性,除非引入额外的约束来引导潜在空间的结构和解释性。
VAE 优缺点
优点
- 学习 p(z∣x) 和 p(x∣z) 的近似值,其中 z 是输入 x 的潜在变量表示。
- 可用于生成 x 的新实例。
缺点
输出通常很模糊。
模糊的输出通常是因为模型在学习过程中尝试生成能够平均适应各种可能输入的图像。因此,生成的图像往往是训练数据中多个实际图像的某种"平均"或"混合",这导致了输出的模糊性。
小结
- 判别模型从图像预测标签,生成模型预测图像的概率分布。
- 自编码器假设图像可以从潜在变量的低维空间生成。
- 常规自编码器(Regular Autoencoder) - 学习潜在表示以重构图像。
- 变分自编码器(VAE) - 自编码器的概率版本,可以从潜在空间中采样。