散度

生成对抗网络GAN的数学公式的前因后果

拥有回忆 提交于 2019-12-07 16:32:08
Basic Idea of GAN Generator G G是一个生成器,给定先验分布 Pprior(z) 我们希望得到生成分布 PG(x)  ,这里很难通过极大似然估计得到结果 Discriminator D D是一个函数,来衡量 PG(x) 与 Pdata(x) 之间的差距,这是用来取代极大似然估计 首先定义函数V(G, D)如下: 我们可以通过下面的式子求得最优的生成模型 下面我们来看看原文中几个重要的数学公式描述,首先我们直接上原始论文中的目标公式吧: 上述这个公式说白了就是一个最大最小优化问题,其实对应的也就是上述的两个优化过程。有人说如果不看别的,能达看到这个公式就拍案叫绝的地步,那就是机器学习的顶级专家,哈哈,真是前路漫漫。同时也说明这个简单的公式意义重大。 这个公式既然是最大最小的优化,那就不是一步完成的,其实对比我们的分析过程也是这样的,这里现优化D,然后在取优化G,本质上是两个优化问题,把拆解就如同下面两个公式: 优化D: 优化G: 可以看到,优化D的时候,也就是判别网络,其实没有生成网络什么事,后面的G(z)这里就相当于已经得到的假样本。优化D的公式的第一项,使的真样本x输入的时候,得到的结果越大越好,可以理解,因为需要真样本的预测结果越接近于1越好嘛。对于假样本,需要优化是的其结果越小越好,也就是D(G(z))越小越好,因为它的标签为0。但是呢第一项是越大

损失函数--KL散度与交叉熵

廉价感情. 提交于 2019-12-06 11:15:22
损失函数 在逻辑回归建立过程中,我们需要一个关于模型参数的可导函数,并且它能够以某种方式衡量模型的效果。这种函数称为损失函数(loss function)。 损失函数越 小 ,则模型的预测效果越 优 。所以我们可以把训练模型问题转化为 最小化损失函数 的问题。 损失函数有多种,此次介绍分类问题最常用的 交叉熵(cross entropy)损失 ,并从 信息论 和 贝叶斯 两种视角阐释交叉熵损失的内涵。 ## 公式请查看 : https://blog.csdn.net/Ambrosedream/article/details/103379183 K-L散度与交叉熵 随机变量 X 有 k 种不同的取值: ,, ​ 。 记 X 的取值 ​ 的概率为p(X= ​ ) ,简写为P( ​ ) . 克劳德 · 香农定义了信息的信息量: ​ 注:其中对数可以以任意合理数为底,如 2、e。使用不同的底数所得到的信息量之间相差一个常系数。 若以2为底,信息量的单位是bit ,I(X= ​ )是X = ​ 这条信息的自信息量(self-information) . 自信息量 I 随着概率 P ( ​ )的图像变化如下: 自信息量背后的含义:信息中事件发生的概率越小,则信息量越大。 举例:假如有人告诉你即将开奖的彩票中奖号码是777777777,这条信息的价值很高,类似事情发生概率极小

熵、交叉熵、KL散度、JS散度

蹲街弑〆低调 提交于 2019-12-05 17:46:09
熵、交叉熵、KL散度、JS散度 一、信息量 事件发生的可能性大,信息量少;事件发生的可能性小,其信息量大。 即一条信息的信息量大小和它的不确定性有直接的关系,比如说现在在下雨,然后有个憨憨跟你说今天有雨,这对你了解获取天气的信息没有任何用处。但是有人跟你说明天可能也下雨,这条信息就比前一条的信息量大。可以看出信息量的大小与事件发生的可能性成反比。 \[ \begin{align} p\left(x\right) &= Pr(X=x),x \in \chi \\ I(x) &= - \log(p(x)) \tag{1} \end{align} \] \(I(x)\) 称为随机变量X的自信息,描述的是随机变量的某个事件(X = \(x\) )发生所带来的信息量。这里可以稍微理解一下为什么使用 \(log\) :例如两个相互独立的事件 \(x,y\) ,因为两者相互独立所以两个事件带来的信息量为 \(I(x)+I(y)\) ,而两个事件同时发生的概率是 \(p(x,y) = p(x)p(y)\) 。 \(log\) 函数就满足这两个式子,其中 \(log\) 的基数可以任意,常用的是2(二进制编码), \(e\) 。 二、熵 从信息量的公式可以看出,当一个事件的发生概率为 \(p(x)\) 时,它的信息量就是 \(-log(p(x))\)

聚类算法的评估

时光毁灭记忆、已成空白 提交于 2019-12-05 11:26:25
这里只讨论没有外部标签的情况,有标签自然好判别 数据簇的特点 以中心定义的数据簇:通常球形分布,集合中的数据到中心的距离相比到其他簇中心的距离更近 以密度定义的数据簇:当数据簇不规则或互相盘绕,并且有噪声和离群点时,常常使用 以连通定义的数据簇:具有连通关系 以概念定义的数据簇:同一集合内数据具有某一相同性质 聚类可行性 检测数据分布是否存在非随机的簇结构 方法 观察聚类误差是否随着聚类类别数目的增加而单调变化(找不到一个合适的K) 霍普金斯统计量,判断数据在空间上的随机性 首先,在所有样本中随机找n个点,记为 \(p_1, \cdots, p_n\) ,对其中的每一个点,都在样本空间中找到一个离它最近的点就按他们之间的距离 \(x_i\) ,从而得到距离向量 \(x_1, \cdots, x_n\) ;然后,从样本的可能取值范围随机生成n个点,记为 \(q_1, \cdots, q_n\) ,对每个点找到他们最近的样本点计算距离,得到 \(y_1, \cdots, y_n\) 。霍普金斯统计量 \(H\) 表示为 \[H = \frac{\sum \limits_{i=1}^n y_i}{\sum \limits_{i=1}^{n} x_i + \sum \limits_{i=1}^{n} y_i} \] 如果样本随机分布,则H接近0.5。如果有聚类趋势

[转载]--令人拍案叫绝的Wasserstein GAN

我只是一个虾纸丫 提交于 2019-12-05 10:46:05
文章转载自: https://zhuanlan.zhihu.com/p/25071913 令人拍案叫绝的Wasserstein GAN 郑华滨 · 2 天前 在GAN的相关研究如火如荼甚至可以说是泛滥的今天,一篇新鲜出炉的arXiv论文《 Wassertein GAN 》却在Reddit的Machine Learning频道火了,连Goodfellow都 在帖子里和大家热烈讨论 ,这篇论文究竟有什么了不得的地方呢? 要知道自从 2014年Ian Goodfellow提出 以来,GAN就存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。从那时起,很多论文都在尝试解决,但是效果不尽人意,比如最有名的一个改进 DCGAN 依靠的是对判别器和生成器的架构进行实验枚举,最终找到一组比较好的网络架构设置,但是实际上是治标不治本,没有彻底解决问题。而今天的主角Wasserstein GAN(下面简称WGAN)成功地做到了以下爆炸性的几点: 彻底解决GAN训练不稳定的问题,不再需要小心平衡生成器和判别器的训练程度 基本解决了collapse mode的问题,确保了生成样本的多样性 训练过程中终于有一个像交叉熵、准确率这样的数值来指示训练的进程,这个数值越小代表GAN训练得越好,代表生成器产生的图像质量越高(如题图所示) 以上一切好处不需要精心设计的网络架构

WGAN介绍

和自甴很熟 提交于 2019-12-05 10:44:13
WGAN可谓是继原作GAN之后又一经典之作,本文将介绍一下WGAN WGAN的 前作 中对原始GAN存在的问题作了严谨的数学分析。原始GAN问题的根源可以归结为两点,一是等 价优化的距离衡量(KL散度、JS散度)不合理,二是生成器随机初始化后的生成分布很难与真实分布有不可忽略的重叠(上升到高维时)从而导致在判别器 优化的很好的时候生成器会有梯度消失的情况发生。对于生成分布与真实分布的重叠问题在WGAN前作中粗略的提及到改进的办法,那就是对生成样本和真实 样本加噪声。 原文对此处描述为:通过对生成样本和真实样本加噪声,使得原本的两个低维流形“弥散”到整个高维空间,强行让它们产生不可忽略的重叠。而一旦存在重 叠,JS散度就能真正发挥作用,此时如果两个分布越靠近,它们“弥散”出来的部分重叠得越多,JS散度也会越小而不会一直是一个常数,于是生成器梯度消 失的问题就解决了。在训练过程中,我们可以对所加的噪声进行退火(annealing),慢慢减小其方差,到后面两个低维流形“本体”都已经有重叠时,就算 把噪声完全拿掉,JS散度也能照样发挥作用,继续产生有意义的梯度把两个低维流形拉近,直到它们接近完全重合。 这样的加噪声对训练模型真的有大幅度提高吗?显然这样做是不够的,文章中解释为加噪声后JS散度的具体数值受到噪声的方差影响,随着噪声的退火,前 后的数值就没法比较了

生成对抗网络GAN详细推导

♀尐吖头ヾ 提交于 2019-12-03 19:17:00
文章目录 概述 1、什么是GAN? 2、发展历史 一、GAN模型 1、GAN的基本思想 2、GAN的基本模型 二、 GAN的训练 三、存在的问题 问题一 问题二 问题三 四、项目实战 概述 1、什么是GAN? 生成对抗网络简称GAN,是由两个网络组成的,一个生成器网络和一个判别器网络。这两个网络可以是神经网络(从卷积神经网络、循环神经网络到自编码器)。我们之前学习过的机器学习或者神经网络模型主要能做两件事:预测和分类,这也是我们所熟知的。那么是否可以让机器模型自动来生成一张图片、一段语音?而且可以通过调整不同模型输入向量来获得特定的图片和声音。例如,可以调整输入参数,获得一张红头发、蓝眼睛的人脸,可以调整输入参数,得到女性的声音片段,等等。也就是说,这样的机器模型能够根据需求,自动生成我们想要的东西。因此,GAN 应运而生! 2、发展历史 生成对抗网络是由Ian Goodfellow等人于2014年在论文 《Generative Adversarial Networks》 中提出的。学术界公开接受了GAN,业界也欢迎GAN。GAN的崛起是不可避免的。 随着《Generative Adversarial Networks》提出后,GAN产生了广泛流行的架构,如DCGAN,StyleGAN,BigGAN,StackGAN,Pix2pix,Age-cGAN,CycleGAN

DualGan

匿名 (未验证) 提交于 2019-12-02 23:34:01
DualGan 这篇文章的灵感来源是Xia et al 提出的一篇做机器翻译的文章NIP Dual【2】。这篇文章的一个例子很好的解释了对偶的思想。首先假设我们有两个人A和B,A会英文不会法语,B会法语不会英文。A要和B进行交流,A写了一段话,通过翻译器GA翻译成法语,但A看不懂法语,只能将翻译的结果直接发给B;B收到这段话之后,用自己的理解整理了一下,通过翻译器GB翻译成英文直接发给A;A收到之后,要检查B是否真正理解自己说的话。如此往复几次,A和B都能确认对方理解了自己。在这个例子中,翻译器A和B分别是两个生成器,A和B分别担任了判别器的角色。 原始GAN存在的问题 在wgan这篇文章中系统的阐述了原始GAN存在的一些问题。 (1)当我们通过最小化 来训练G时会出现 难训练、无法优化G 的问题   由于实际上Pg与Pdata很难有不可忽略的重叠,当D太强时,我们发现JS散度就固定是常数log2,C(G)就为一个固定值,所以导致G梯度消失。当D太弱时,会导致G梯度不准,四处乱跑。所以G和D必须同步得很好才行。 (2)原始GAN提出了优化方案:通过最小化 来训练G。但会出现 梯度不稳定、模型崩溃 的问题   在原始GAN的距离度量 方式下,G的loss可以被化简成一下形式:    从上面这个式子,我们可以看到在最优D时

Python计算KL散度

匿名 (未验证) 提交于 2019-12-02 22:11:45
Python计算KL散度 import numpy as np import scipy.stats x = [np.random.randint(1,11) for i in range(10)] print(x) print(np.sum(x)) px = x/np.sum(x)#归一化 print(px) y = [np.random.randint(1, 11) for i in range(10)] print(y) print(np.sum(y)) py = y / np.sum(y)#归一化 print(py) ## scipy计算函数可以处理非归一化情况,因此这里使用# scipy.stats.entropy(x, y)或scipy.stats.entropy(px, py)均可 KL = scipy.stats.entropy(x, y) print(KL) #自己编程实现 kl= 0.0 for i in range(10): kl += px[i] * np.log(px[i]/py[i]) print(k) #TensorFlow的神经网络 import sys; sys.path.append("/home/hxj/anaconda3/lib/python3.6/site-packages") import tensorflow as tf import