2018/11/07
机器学习-Gan算法
Alpha go:运用蒙特卡洛搜索树,深度学习,机器学习三种方法 1920个CPU和280个GPU,理论算法峰值2332TFLOPS
人工智能:因为物联网、云计算、大数据的出现,导致海量数据的出现,人工智能能对海量的数据进行处理和挖掘,导致人工智能的火热。
海量数据、类型复杂、价值分散
webwxgetmsgimg.jpg工业自动化不等于人工智能!
图灵测试(Truning Test):如果测试主持人能分辨出人和机器的概率小于50%,则认为机器具有了智能。
清华矣晓沅团队开发的作诗机器人“九歌”:https://gaoxiao.eol.cn/news/7958.html
测试使用环境:https://jiuge.thunlp.cn//
1997年IBM深蓝——超级国际象棋 ——90年代人工智能相对稳定阶段
滴滴的事故率万分之二,出租车事故率为万分之四
人工智能公共数据集
机器视觉——ImageNet、SVHN、Labeled Faces in the Wild
NLP——Wiki Text、SQuAD、Comon Crawl、Billion Words
语音识别——CHIME、TIMIT、
错误率低于5%,已经高于人类的识别率。
image image image image image宽度学习、自适应的深度学习算法正在成熟,有可能弥补深度学习的不足和可解读性。
Gan算法介绍
二次元头像生成!
1.k-means :只计算中心点,不计算方差,k-means是一种特殊的EM算法。
webwxgetmsgimg.jpg
中心点:最开始随机选两个,计算距离后,用算数平均值计算中心点。
2.EM Alogrithm
webwxgetmsgimg.jpg
webwxgetmsgimg (1).jpg
webwxgetmsgimg.jpg
webwxgetmsgimg (1).jpg
跟k-meas类似,区别在于k-meas计算点到中心点的距离,EM用公式计算点到中心点的概率!
中心点:最开始随机选两个,计算概率(方差)后,用加权算数平均值(各个点的概率*数值)计算中心点和方差。
在使用中先用k-means计算出中心点,再用EM算法,这样最开始选取的随机点比较接近结果。
分多少类?有聚类分析方法,但这比较笨,只能从两类一直计算到总数开根号-1类。
3.Maximum likelihood Estimattion
webwxgetmsgimg.jpg
基本上使用高斯算法,以中心点加方差表示
高斯分布是自然界最常见的分布。
webwxgetmsgimg (2).jpg
Gan的核心思想:自然界中有些模型不能用高斯分布表示,于是改为神经网络来表示。
Basic Idea of GAN
-Gernerator G Hard to learn by maximum likelihood
G is a function,input z,output x
Given a prior distribution Pprior(z), a probability distribution Pg(x) is defined by function G
-Discriminator D
D is a function, input x, output scalar
Evaluate the "difference" between Pg(x) and Pdata(x)
Gan的发表资料(原始资料)
webwxgetmsgimg (3).jpg
2018/11/7 PM
Gan 算法介绍
Basic Idea
GAN学习笔记(他人)https://baijiahao.baidu.com/s?id=1608234436964134667&wfr=spider&for=pc
1、什么是GAN
GAN 主要包括了两个部分,即生成器 generator 与判别器 discriminator。生成器主要用来学习真实图像分布从而让自身生成的图像更加真实,以骗过判别器。判别器则需要对接收的图片进行真假判别。在整个过程中,生成器努力地让生成的图像更加真实,而判别器则努力地去识别出图像的真假,这个过程相当于一个二人博弈,随着时间的推移,生成器和判别器在不断地进行对抗,最终两个网络达到了一个动态均衡:生成器生成的图像接近于真实图像分布,而判别器识别不出真假图像,对于给定图像的预测为真的概率基本接近 0.5(相当于随机猜测类别)。
对于 GAN 更加直观的理解可以用一个例子来说明:造假币的团伙相当于生成器,他们想通过伪造金钱来骗过银行,使得假币能够正常交易,而银行相当于判别器,需要判断进来的钱是真钱还是假币。因此假币团伙的目的是要造出银行识别不出的假币而骗过银行,银行则是要想办法准确地识别出假币。
image image刚才的描述中,你可能不太明白如何训练新一代的Generator来骗过上一代的Discriminator,方法其实很简单,你可以把新一代的Generator和上一代的Discriminator连起来形成一个新的NN,我们希望最终的输出接近1,然后我们就可以拿中间的结果当作我们的新的图片的输出,下图很形象的显示了上面的过程:
image
2、GAN原理深入
先来回顾一下我们的极大似然估计,假设我们有一大堆data,他的分布是Pdata(x),我们可以认为这里的data就是一大堆图片,但是,我们有了这一大堆东西,再想生成一个新的data是不容易的,因为我们不知道这个分布的具体参数,所以,我们就想估计这堆数据的所服从的参数。那么,我们可以从Pdata(x)产生一大堆sample,然后,我们就希望找一组参数,使得服从这组参数的分布产生这堆sample的可能性最大。
image
下面是极大似然估计的化简过程,因为这堆sample都是从Pdata(x)里面出来的,所以,我们可以进行下面的约等转换。然后我们把期望转换为积分,同时加上后面一项(后面一项是一个常数,只是为了更简单的表示KL散度)
image
KL散度又称相对熵。设P(x)和Q(x)是X取值的两个概率概率分布,则对的相对熵为:
image
在一定程度上,熵可以度量两个随机变量的距离。KL散度是两个概率分布P和Q差别的非对称性的度量。KL散度是用来度量使用基于Q的编码来编码来自P的样本平均所需的额外的位元数。 典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。
那么,在GAN中,我们用NN的参数表示PG的参数θ:
image
那么 ,GAN的基本原理如下:
image
所以,我们最终的求解目标是:
image
我们可以用下面的图来形象的表示上面的求解问题,看下面的图,我们可以很清楚的知道,我们要找的G就是G3,而D则是最高点的D。
image
那么 ,V是什么,V写作下面的式子,你不必管这个东西怎么来的,我只想说,能想到这个的人真的是太可怕了。当我们的V写成下面这样子的时候,我们取maxV(G,D)就饿能表示Pg和Pdata的差异。
为什么V要写成这样能表示二者的差异呢?这个可以通过严格的数学证明推导出,这里,对于一个给定的G,我们来求解maxV(G,D):
image
对于任何一个常数,因为Pdata和G这里都是给定的,我们可以认为这里是常数,那么D取什么可以得到最大呢,很简单,导数为0的情况下。
image image
在有了D的值之后,我们就可以带入原式中啦:
image
继续化简,我们可以得到两个KL散度,进而得到JS散度:
image
相信大家对于求解得到D的过程已经非常明白了,我自己再推到一下后面的式子吧,希望能够比PPT更加明白一些:
image
所以,现在我们就明白了,按照上面的V的定义,我们就能得到二者的差距,当然我们可以定别的,就能产生别的散度度量。
那么,给定了一个G,我们能够通过最大化V得到D,那么我们如何求解G呢,用梯度下降就好啦:
image image image3、实际中的GAN
刚才我们讲的是理论部分的内容,但是在实际中,Pdata和Pg我们是不知道的,我们没办法穷举所有的x,所以,我们只能采用采样的方法,同时可以采用我们二分类的思路,我们把Pdata(x)中产生的样本当作正例,把Pg(x)产生的样本当作负例,那么,下面V可以看作是我们二分类的一个损失函数的相反数(少了负号嘛):
image image也就是说,最大化V的话,其实就是最小化我们二分类的损失,下面的Minimize少了一个负号,所以我们要找的D,就是能使二分类的损失最小的D,也就是能够正确分辨Pdata和Pg(x)的D,这也正符合我们想要找的discriminator的定义,是不是很神奇!
image
所以,总结一下,实践中我们的GAN基于如下的步骤:
image
上面的步骤很好的解释了我们刚才对于GAN的解释:首先,我们又一个第一代的Generator,然后他产生一些图片,然后我们把这些图片和一些真实的图片丢到第一代的Discriminator里面去学习,让第一代的Discriminator能够真实的分辨生成的图片和真实的图片,然后我们又有了第二代的Generator,第二代的Generator产生的图片,能够骗过第一代的Discriminator,此时,我们在训练第二代的Discriminator,依次类推。
在实际中,我们有可能做下面的变换,可以加快我们的训练速度:
imageGAN 官方PPT资料:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS17.html
image.pnghttps://zhuanlan.zhihu.com/p/24767059
非常好的教程做练手,设计爬虫,opencv,dcgan
Community contributions: #pix2pix
GAN代码解析(tensorflow实现)文章结尾有GAN资料合集
https://blog.csdn.net/u013818406/article/details/73718265
中文手写识别:http://python.jobbole.com/87509/
MNIST代码背后的故事:http://www.oreilly.com.cn/ideas/?p=838
网友评论