Gen-ai 简明教程
Generative AI Models - Maximum Likelihood Estimation
最大似然估计 (MLE) 是一种统计方法,它提供了一种主方法来估计最能描述给定数据集的概率分布的参数。MLE 假设指定分布生成数据。简单来说,MLE 是一种方法,用于找出模型的未知参数的最可能值,例如一组数据点的平均值或分布。这有点像我们猜测序列中缺失的数字,以便它与我们已知的数字模式相符。
在生成式 AI 领域,尤其是在对抗生成网络 (GAN) 和变分自动编码器 (VAE) 等生成式模型中,MLE 找到了广泛的应用。例如,在生成手写数字 (0-9) 的图像时,我们希望我们的模型生成类似于我们数据集(例如 MNIST)中的图像。我们可以通过最大化在给定模型参数的情况下观察到我们训练数据的可能性来实现这一点。
maximize Σ log P(x | θ)
当我们使用 Python 编程语言创建第一个 GAN 模型时,我们稍后将详细介绍这一点。阅读本章节以了解最大似然估计的概念、它在生成式建模中的重要作用、MLE 在生成式建模中的应用以及它的 Python 实现。
Understanding Maximum Likelihood Estimation (MLE)
最大似然估计 (MLE) 是一种强大的统计方法,用于基于观察到的数据来估计概率分布的参数。让我们借助它的数学基础来更详细地了解一下它 -
Mathematical Foundation of MLE
MLE 的核心在于似然函数:$\mathrm{L(\theta | x)}$。其中,$\mathrm{\theta}$ 表示分布的参数,x 表示观察到的数据。
似然函数量化了在给定特定参数值的情况下观察到数据的概率。在数学上,它表示为观察数据的联合概率密度函数 (PDF) 或概率质量函数 (PMF)。
\mathrm{L(\theta | x) \: = \: f(x | \theta)}
为了使计算简单,我们通常研究似然函数 $\mathrm{l(\theta | x)}$,这是似然函数的对数自然对数 −
\mathrm{l(\theta | x) \: = \: \log L(\theta | x)}
实际上,MLE 的目标是找到使似然函数 $\mathrm{L(\theta | x)}$ 或等价地对数似然函数 $\mathrm{l(\theta | x)}$ 最大化的参数值 $\mathrm{\hat{\theta}}$ −
\mathrm{\hat{\theta} \: = \: argmax_{\theta} L(\theta | x)}
或者,
\mathrm{\hat{\theta} \: = \: argmax_{\theta} l(\theta | x)}
现在,为了获得最大似然估计 $\mathrm{\hat{\theta}}$,我们对数似然函数 $\mathrm{l(\theta | x)}$ 关于参数 $\mathrm{\theta}$ 求导数,并将导数设定为零 −
\mathrm{\frac{\partial \: l(\theta | x)}{\partial \: \theta} \: = \: 0}
求解上述公式给出 MLE $\mathrm{\hat{\theta}}$。
MLE in Generative Modeling
正如我们之前讨论过的,生成建模涉及捕获数据的底层分布并生成可与原始训练数据相媲美的新数据。在训练生成模型时,MLE 通过估计底层概率分布的参数发挥着至关重要的作用。
让我们看看 MLE 如何应用于生成建模 −
Applications of MLE in Generative Modeling
MLE 在生成建模的各个领域都有广泛的应用。下面给出了一些重要的应用程序 -
-
Gaussian Mixture Models (GMMs) - MLE 用于估计 GMM 中高斯分量的参数。这些参数能够模拟具有多种模式的复杂数据分布。
-
Variational Autoencoders (VAEs) - 在 VAE 中,MLE 用于学习潜在变量分布的参数。它允许模型通过从这个学习分布中采样来生成新的数据样本。
-
Generative Adversarial Networks (GANs) − GAN 不会直接优化似然函数,但 MLE 用于 GAN 的培训,以指导学习流程并提高样本质量。
Implementing Maximum Likelihood Estimation using Python
我们可以使用 Python 实施 MLE,并使用 Matplotlib 等库对其进行可视化。下面是一个从给定数据集中估计高斯分布的参数的简单 MLE 执行示例 −
Example
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
# Sample dataset (you can replace this with your own data)
data = np.random.normal(loc=2, scale=1, size=2000)
# Maximum Likelihood Estimation for a Gaussian distribution
def maximum_likelihood_estimation(data):
# Calculate the mean and standard deviation of the data
mu = np.mean(data)
sigma = np.std(data)
return mu, sigma
# Perform Maximum Likelihood Estimation
estimated_mu, estimated_sigma = maximum_likelihood_estimation(data)
# Generate x values for plotting
x = np.linspace(min(data), max(data), 1000)
# Plot histogram of the data
plt.figure(figsize=(7.2, 5.5))
plt.hist(data, bins=30, density=True, alpha=0.6, color='blue', label='Data Histogram')
# Plot the true Gaussian distribution
plt.plot(x, norm.pdf(x, loc=2, scale=1), color='red', linestyle='--', label='True Gaussian Distribution')
# Plot the estimated Gaussian distribution using MLE
plt.plot(x, norm.pdf(x, loc=estimated_mu, scale=estimated_sigma), color='green', linestyle='-', label='Estimated Gaussian Distribution (MLE)')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.title('Maximum Likelihood Estimation for Gaussian Distribution')
plt.legend()
plt.grid(True)
plt.show()
上述代码会生成一个图,其中显示数据的直方图、真实的高斯分布和使用最大似然估计 (MLE) 获得的估计高斯分布。