生成模型笔记预备知识笔记——概率分布变换
最近准备课程分享,挑了一下最近比较火的AI作画方面的文章,结果发现这个领域水挺深的,也涉及到挺多数学方面的知识,得多做一下笔记。本文参考了这篇分享,算是这篇的一个读后笔记。PaperWeekly 第41期 | 互怼的艺术:从零直达 WGAN-GP
看了那些大佬发的文章,我发现高度真的会影响一个人看世界的角度。生成模型有许多伟大的想法,他们可以将这个世界的所有物体理解成高维空间的一个点,也可以把每一个事件看成是背后由一个隐藏的概率函数控制,并通过采样决定这个事件。而概率分布其实在生成模型中是很关键的一个想法。对于之前没有接触过生成模型的小伙伴来说,这里可能会有些稀里糊涂,但没关系,我们可以先来看一个比较小的问题。
如果有一个伪随机数程序能够生成 [0,1] 之间的均匀随机数,那么如何由它来生成服从正态分布的伪随机数?比如怎么将 U[0,1] 映射成 N(0,1)?
乍一看,这两个分布没有任何的相似处,从两个概率密度函数图像上来看也没有任何可取之处(注意定义域和值域);但是我们可以把左边的线段给他往上面提,就像拉毛线一样,把均匀分布的图像拉成标准正态分布的样子,这个想法大家估计都有想实现的冲动,但是在数学上可不允许这样来。严格来说,我们需要找到一个具体的映射,使得X~U[0,1]经过一个函数Y=f(x)进行映射,Y~N(0,1)。
此时我们假设p(x)是这个X~U[0,1]的概率密度函数。在原始定义域上,在任意区间[x, x+dx]上的概率与其映射后在另一个域上[y, y+dy]的概率是相等的,即.
由于dx,dy很小,所以可以近似认为在这个区间上的概率密度函数不变,而概率就等于概率密度函数乘上区间的长度。标准正态分布(高斯分布)的概率密度表达式为
于是就有下面的等式
熟悉概率论的小伙伴应该知道是标准正态分布的概率分布函数(这里的积分上下限需要格外注意一下,左边是定义在[0,1]上的,而右边是实数域上的正态分布)。对这个式子中的y进行求解就能得到其中是的反函数。
小伙伴应该知道,标准正态分布的概率密度函数表达式是无法使用初等函数进行表示的,它的反函数就更不可能显式地表达出来,因此我们到这里可以明白将均匀分布映射到高斯分布的函数y=f(x)是存在的,但是就是表达不出来。不过呢,我们可以通过一些骚操作来进行大致的函数拟合,因为我们拥有一个很好的工具——神经网络,它理论上可以拟合出任何一种函数。
具体的做法如下:给定一组服从某个分布的数据(这里采用正态分布),要求我们找到一个映射函数f(x),使得映射得到的满足指定的分布z(这个分布是未知的,比如一张图片)。这里我们对问题进行梳理,首先我们不知道这个f(x),但是可以使用神经网络拟合这个;其次我们不知道z是什么分布,这个问题的解决也是比较需要技巧的。
先解决第一个问题,如何使用神经网络训练出这个f(x)?很显然的,将给定的X丢到这个神经网络中,然后它会产出一个与X同维度的Y,如果这个Y与指定的z是足够接近的,那么这个神经网络也就训练出来了。这里就涉及到一个问题,神经网络的训练是需要一个损失函数的,换句话说,我们需要告诉网络,你的产出与我们的预期接不接近,不接近的话就及时调整参数。在这个例子上就是得告诉网络,你产出的这个Y与这个z是不是服从同一个分布?
这就遇到了问题二了,我们不知道这个z是什么分布,甚至我们不知道这个产出来的Y是什么分布。但是问题不大哦,既然我们不知道这两个是什么分布,我们就老规矩,去估计、拟合、接近它。我们将实数域划分为若干个不相交的区间然后使用一个简单的计数函数,用区间上的频率来估计区间的概率,即
其中N为指定样本的个数,函数为指示函数,当是为1,反之为0.
那这是什么意思呢?我这里画一个图相信大家就理解了。以标准正态分布为例,我们知道它大致长成下图这个样子
很可以的看出这是个漂亮的在实数域上连续的函数,如果我们将x轴进行一个划分,就像下图这样,那么落在各个区间的量的个数的样子也会和上图的趋势大致一致,这就是用频率近似替代概率的想法。
同理,我们也可以对神经网络输出的也进行这样的操作:
这样我们就得到了两个分布(神经网络输出Y的分布和指定z的分布)的概率估计,那又要怎么比较这两个是不是同一分布呢?这就需要使用一个工具叫KL散度(divergence),它可以描述两个分布之间的差异,详细可以看一下这个人工智能学习笔记——KL散度_不认输的韦迪的博客-CSDN博客
但是这个度量是不对称的于是我们改进一下使用JS距离
这样就对称了,从而我们的神经网络的损失函数就可以采用
结语
概率分布在很多典型的生成网络中都是主要思想,比如VAE、GAN等,当然我对这个了解也不是很深,文中可能也有些错误,希望大佬们斧正!不胜感激!
生成模型笔记预备知识笔记——概率分布变换相关推荐
- python输出字体的大小_Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格
Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格 Python 需要创建和读取excel表里面的数据,需要用 openpyxl 这个包,今天安装好备用. 首先,进入C命令窗口 ...
- [ASP.NET Debugging BuggyBits读书笔记] 预备知识 Part 2
2019独角兽企业重金招聘Python工程师标准>>> 1. dumpstackobjects (!dso)找到当前线程引用的所有的对象. 2. !dumparray(!da) 有的 ...
- 生成模型学习笔记:从高斯判别分析到朴素贝叶斯
机器之心专栏 作者:张威 翻译:燕子石 本文是哥伦比亚大学研究生张威在生成模型上的学习笔记,由毕业于新西兰奥克兰理工大学的燕子石翻译.机器之心之前曾介绍过张威所写的吴恩达<机器学习>课程的 ...
- 判别模型和生成模型的区别
20210703 https://www.zhihu.com/question/20446337 机器学习"判定模型"和"生成模型"有什么区别? 重点 http ...
- 【GAN优化外篇】详解生成模型VAE的数学原理
最近在学习生成模型的相关知识,这篇文章将介绍一下变分自编码器(Variational Auto-encoder),本文只介绍一些粗浅内容,不会涉及比较深刻的问题. 作者&编辑 | 小米粥 1. ...
- 大规模计算时代:深度生成模型何去何从
©PaperWeekly 原创 · 作者|Chunyuan Li 单位|Microsoft Research Researcher 研究方向|深度生成模型 人工智能的核心愿望之一是开发算法和技术,使计 ...
- 生成模型和判别模型学习
生成模型和判别模型 在机器学习中,一般将学习方式分为监督式学习和非监督式学习方式. 回忆一下,监督学习的任务就是从数据中学习一个模型,应用这一模型,对给定的输入X预测相应的输出Y.这个模型的一般形式为 ...
- 机器学习-白板推导系列(三十)-生成模型(Generative Model)
机器学习-白板推导系列(三十)-生成模型(Generative Model) 30.1 生成模型的定义 前面所详细描述的模型以浅层的机器学习为主.本章将承上启下引出后面深度机器学习的部分.本小节,主要 ...
- [work] 生成模型和判别模型的理解
转载自:https://blog.csdn.net/zouxy09/article/details/8195017 https://blog.csdn.net/lk7688535/article/de ...
最新文章
- 宏使用 Tricks
- 【ES6】ES6编程规范 编程风格
- [BZOJ 2002][Hnoi2010]Bounce 弹飞绵羊(分块)
- OpenCV-Python教程(9)(10)(11): 使用霍夫变换检测直线 直方图均衡化 轮廓检测
- 如何启用计算机超级账户,Windows7启用超级管理员账户的方法
- mmap无血缘关系进程间通信
- Android菜鸟如何学习Android系统开发?
- mysql innoback_innobackex工具备份mysql数据
- A星寻路算法(A* Search Algorithm)
- css中hack是什么
- 《Thinkphp5使用Socket服务》 入门篇
- php 数组 utf8,PHP数组编码gbk与utf8互相转换的两种方法实例分享
- 简单制作百度注册页面
- Mysql基础篇(8)—— 变量、流程控制和游标
- 机器人教育对孩子们的作用
- html与css常用标签大全
- 英文手写墨水艺术字体
- Vue 源码解读(11)—— render helper
- Java学习查漏补缺及知识点整理
- MySQL 大作业实训考试题_2020系统综合实践 期末大作业 15组