蒙特卡洛模拟近似拉普拉斯范数的理论推导
蒙特卡洛方法
蒙特卡洛模拟
蒙特卡洛方法,也称统计模拟方法。是冯诺依曼和乌拉姆提出的一种以概率统计理论为指导的数值计算方法。
与之相对应的有拉斯维加斯方法(没错,都是赌城的名字)。
通常蒙特卡罗方法可以粗略地分成两类:
- 一类是所求解的问题本身具有内在的随机性,借助计算机的运算能力可以直接模拟这种随机的过程。
- 另一种类型是所求解问题可以转化为某种随机分布的特征数,比如随机事件出现的概率,或者随机变量的期望值。通过随机抽样的方法,以随机事件出现的频率估计其概率,或者以抽样的数字特征估算随机变量的数字特征,并将其作为问题的解。这种方法多用于求解复杂的多维积分问题。
在机器学习中,特别是强化学习的算法中。一般情况下,针对得到的样本数据集创建相对模糊的模型,通过蒙特卡洛方法对于模型中的参数进行选取,使之于原始数据的残差尽可能的小。从而达到创建模型拟合样本的目的。(后面使用蒙特卡洛模拟近似拉普拉斯范数也是用到的这个思想)
利用蒙特卡洛模拟近似求解圆周率
历史上使用蒙特卡洛模拟求解圆周率的方法有著名的布丰投针试验和随机数试验。两者的思想都是相同的。都是把求解圆周率过程转换为一种基于概率统计的解决方法。
布丰投针试验
18世纪,布丰提出以下问题:
设我们有一个以平行且等距木纹铺成的地板,现在随意抛一支长度比木纹之间距离小的针,求针和其中一条木纹相交的几率。这就是布丰投针问题。
理论推导如下:
下图是历史上学者们进行投针试验的结果。
随机数实验
随机数试验是经典的用来讲解蒙特卡洛方法的例子,网上有很多研究者的理论讲解和代码编写,所以我就不细讲了,大致说一下。
- 在一个正方形内部画个内切圆,他们的面积之比是π/4
- 现在,在这个正方形内部随机产生N个点,计算它们与中心点的距离,从而判断是否落在圆内。
- 落在圆内的点数/正方形内的点数 = π/4。
- 以此来计算得出π的值
随着产生的点数量越多,计算得到的π值就会越接近圆周率的真实值≈3.1415926
拉普拉斯分布
雅可比矩阵
雅可比矩阵(Jacobian matrix)是函数的一阶偏导数以一定方式排列成的矩阵。
其重要性在于,如果函数f: ℝn → ℝm,从 x ∈ ℝn 映射到 向量 f(x) ∈ ℝm, 其雅可比矩阵是一个 m×n 的矩阵,换句话讲也就是从 ℝn 到 ℝm 的线性映射,其重要意义在于它表现了一个多变量向量函数的最佳线性逼近。因此,雅可比矩阵类似于单变量函数的导数。
此函数 f 的雅可比矩阵 J 为 m×n 的矩阵,一般由以下方式定义:
矩阵的分量可表示成:
拉普拉斯范数
拉普拉斯范数这个词,我是读论文 ICLR 2018《Semi-Supervised Learning With GANs: Revisiting Manifold Regularization》中提到的,是在论文 ICLR 2006《Manifold Regularization: A Geometric Framework for Learning from Labeled and Unlabeled Examples》首次提出的。
拉普拉斯范数,用拉普拉斯分布先验来计算向量x的距离方法。
拉普拉斯分布如下:
蒙特卡洛模拟近似拉普拉斯范数
使用蒙特卡洛模拟近似拉普拉斯范数来实现流形正则化,是论文《Semi-Supervised Learning With GANs: Revisiting Manifold Regularization》的创新点,为了成功实现这个方法,论文提出了两个假设
- GANs可以对图像的分布进行建模
- GANs可以对图像流形建模
设一个GAN模型,它被训练在大量的(未标记的)图像集合上。假设1表示GAN近似于图像的边缘分布P(X),使我们能够利用蒙特卡罗积分从GAN的生成器g的潜在表示空间中提取样本z(i)来估计分类器f上的拉普拉斯范数。然后,假设2意味着生成器定义了图像空间上的流形,允许我们计算所需的梯度(雅可比矩阵)关于潜在表示,而不必像在其他方法中那样明确地计算切方向。形式上,有
J是雅可比矩阵。在实验中,使用随机有限差分来近似最终的雅可比正则化器,因为训练一个精确的雅可比矩阵模型在计算上是昂贵的。具体地说,我们使用
其中
代码分析
本文只分析论文实现流形正则化的部分。
通过以下代码返回两个噪声图片,其中 z 是基于高斯分布采样生成的噪声图片,而 z_perturbed 是在 z
的基础上加上了一些模糊。
def define_noise(self):
'''
生成高斯白噪声
:return: z和z_perturbed都是噪声图片
'''
z = torch.randn(self.batch_size, self.latent_dim).cuda()
z_perturbed = z + torch.randn(self.batch_size, self.latent_dim).cuda() * 1e-5
return z, z_perturbed
通过上文提到的,蒙特卡洛方法在机器学习邻域的用法:
在机器学习中,特别是强化学习的算法中。一般情况下,针对得到的样本数据集创建相对模糊的模型,通过蒙特卡洛方法对于模型中的参数进行选取,使之于原始数据的残差尽可能的小。从而达到创建模型拟合样本的目的。
所以后续的操作,估计是计算 z 和 z_perturbed 的距离,并使其最小化。
下列代码是将生成的噪声输入进判别器,判别器是一个由 9个卷积层+1个全连接层 叠加的深度神经网络,提取出图像特征。
计算两个图像特征在特征空间的距离,就是其流形正则化项。
有一个问题就是,代码是基于高斯分布做的先验分布进行采样的,而拉普拉斯范数理论上应该是基于拉普拉斯分布作为先验分布进行采样,所以这里我一直没想通,希望读者们一起讨论。