2018/11/07
機器學習-Gan算法
Alpha go:運用蒙特卡洛搜索樹,深度學習,機器學習三種方法 1920個CPU和280個GPU,理論算法峰值2332TFLOPS
人工智能:因為物聯(lián)網(wǎng)、云計算、大數(shù)據(jù)的出現(xiàn),導致海量數(shù)據(jù)的出現(xiàn),人工智能能對海量的數(shù)據(jù)進行處理和挖掘,導致人工智能的火熱。
海量數(shù)據(jù)、類型復雜、價值分散

工業(yè)自動化不等于人工智能!
圖靈測試(Truning Test):如果測試主持人能分辨出人和機器的概率小于50%,則認為機器具有了智能。
清華矣曉沅團隊開發(fā)的作詩機器人“九歌”:https://gaoxiao.eol.cn/news/7958.html
測試使用環(huán)境:https://jiuge.thunlp.cn//
1997年IBM深藍——超級國際象棋 ——90年代人工智能相對穩(wěn)定階段
滴滴的事故率萬分之二,出租車事故率為萬分之四
人工智能公共數(shù)據(jù)集
機器視覺——ImageNet、SVHN、Labeled Faces in the Wild
NLP——Wiki Text、SQuAD、Comon Crawl、Billion Words
語音識別——CHIME、TIMIT、

錯誤率低于5%,已經(jīng)高于人類的識別率。




寬度學習、自適應的深度學習算法正在成熟,有可能彌補深度學習的不足和可解讀性。
Gan算法介紹
二次元頭像生成!
1.k-means :只計算中心點,不計算方差,k-means是一種特殊的EM算法。

中心點:最開始隨機選兩個,計算距離后,用算數(shù)平均值計算中心點。
2.EM Alogrithm




跟k-meas類似,區(qū)別在于k-meas計算點到中心點的距離,EM用公式計算點到中心點的概率!
中心點:最開始隨機選兩個,計算概率(方差)后,用加權算數(shù)平均值(各個點的概率*數(shù)值)計算中心點和方差。
在使用中先用k-means計算出中心點,再用EM算法,這樣最開始選取的隨機點比較接近結果。
分多少類?有聚類分析方法,但這比較笨,只能從兩類一直計算到總數(shù)開根號-1類。
3.Maximum likelihood Estimattion

基本上使用高斯算法,以中心點加方差表示
高斯分布是自然界最常見的分布。

Gan的核心思想:自然界中有些模型不能用高斯分布表示,于是改為神經(jīng)網(wǎng)絡來表示。
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的發(fā)表資料(原始資料)

2018/11/7 PM
Gan 算法介紹
Basic Idea
GAN學習筆記(他人)https://baijiahao.baidu.com/s?id=1608234436964134667&wfr=spider&for=pc
1、什么是GAN
GAN 主要包括了兩個部分,即生成器 generator 與判別器 discriminator。生成器主要用來學習真實圖像分布從而讓自身生成的圖像更加真實,以騙過判別器。判別器則需要對接收的圖片進行真假判別。在整個過程中,生成器努力地讓生成的圖像更加真實,而判別器則努力地去識別出圖像的真假,這個過程相當于一個二人博弈,隨著時間的推移,生成器和判別器在不斷地進行對抗,最終兩個網(wǎng)絡達到了一個動態(tài)均衡:生成器生成的圖像接近于真實圖像分布,而判別器識別不出真假圖像,對于給定圖像的預測為真的概率基本接近 0.5(相當于隨機猜測類別)。
對于 GAN 更加直觀的理解可以用一個例子來說明:造假幣的團伙相當于生成器,他們想通過偽造金錢來騙過銀行,使得假幣能夠正常交易,而銀行相當于判別器,需要判斷進來的錢是真錢還是假幣。因此假幣團伙的目的是要造出銀行識別不出的假幣而騙過銀行,銀行則是要想辦法準確地識別出假幣。
剛才的描述中,你可能不太明白如何訓練新一代的Generator來騙過上一代的Discriminator,方法其實很簡單,你可以把新一代的Generator和上一代的Discriminator連起來形成一個新的NN,我們希望最終的輸出接近1,然后我們就可以拿中間的結果當作我們的新的圖片的輸出,下圖很形象的顯示了上面的過程:
2、GAN原理深入
先來回顧一下我們的極大似然估計,假設我們有一大堆data,他的分布是Pdata(x),我們可以認為這里的data就是一大堆圖片,但是,我們有了這一大堆東西,再想生成一個新的data是不容易的,因為我們不知道這個分布的具體參數(shù),所以,我們就想估計這堆數(shù)據(jù)的所服從的參數(shù)。那么,我們可以從Pdata(x)產(chǎn)生一大堆sample,然后,我們就希望找一組參數(shù),使得服從這組參數(shù)的分布產(chǎn)生這堆sample的可能性最大。
下面是極大似然估計的化簡過程,因為這堆sample都是從Pdata(x)里面出來的,所以,我們可以進行下面的約等轉換。然后我們把期望轉換為積分,同時加上后面一項(后面一項是一個常數(shù),只是為了更簡單的表示KL散度)
KL散度又稱相對熵。設P(x)和Q(x)是X取值的兩個概率概率分布,則對的相對熵為:
在一定程度上,熵可以度量兩個隨機變量的距離。KL散度是兩個概率分布P和Q差別的非對稱性的度量。KL散度是用來度量使用基于Q的編碼來編碼來自P的樣本平均所需的額外的位元數(shù)。 典型情況下,P表示數(shù)據(jù)的真實分布,Q表示數(shù)據(jù)的理論分布,模型分布,或P的近似分布。
那么,在GAN中,我們用NN的參數(shù)表示PG的參數(shù)θ:
那么 ,GAN的基本原理如下:
所以,我們最終的求解目標是:
我們可以用下面的圖來形象的表示上面的求解問題,看下面的圖,我們可以很清楚的知道,我們要找的G就是G3,而D則是最高點的D。
那么 ,V是什么,V寫作下面的式子,你不必管這個東西怎么來的,我只想說,能想到這個的人真的是太可怕了。當我們的V寫成下面這樣子的時候,我們?nèi)axV(G,D)就餓能表示Pg和Pdata的差異。
為什么V要寫成這樣能表示二者的差異呢?這個可以通過嚴格的數(shù)學證明推導出,這里,對于一個給定的G,我們來求解maxV(G,D):
對于任何一個常數(shù),因為Pdata和G這里都是給定的,我們可以認為這里是常數(shù),那么D取什么可以得到最大呢,很簡單,導數(shù)為0的情況下。
在有了D的值之后,我們就可以帶入原式中啦:
繼續(xù)化簡,我們可以得到兩個KL散度,進而得到JS散度:
相信大家對于求解得到D的過程已經(jīng)非常明白了,我自己再推到一下后面的式子吧,希望能夠比PPT更加明白一些:
所以,現(xiàn)在我們就明白了,按照上面的V的定義,我們就能得到二者的差距,當然我們可以定別的,就能產(chǎn)生別的散度度量。
那么,給定了一個G,我們能夠通過最大化V得到D,那么我們?nèi)绾吻蠼釭呢,用梯度下降就好啦:
3、實際中的GAN
剛才我們講的是理論部分的內(nèi)容,但是在實際中,Pdata和Pg我們是不知道的,我們沒辦法窮舉所有的x,所以,我們只能采用采樣的方法,同時可以采用我們二分類的思路,我們把Pdata(x)中產(chǎn)生的樣本當作正例,把Pg(x)產(chǎn)生的樣本當作負例,那么,下面V可以看作是我們二分類的一個損失函數(shù)的相反數(shù)(少了負號嘛):
也就是說,最大化V的話,其實就是最小化我們二分類的損失,下面的Minimize少了一個負號,所以我們要找的D,就是能使二分類的損失最小的D,也就是能夠正確分辨Pdata和Pg(x)的D,這也正符合我們想要找的discriminator的定義,是不是很神奇!
所以,總結一下,實踐中我們的GAN基于如下的步驟:
上面的步驟很好的解釋了我們剛才對于GAN的解釋:首先,我們又一個第一代的Generator,然后他產(chǎn)生一些圖片,然后我們把這些圖片和一些真實的圖片丟到第一代的Discriminator里面去學習,讓第一代的Discriminator能夠真實的分辨生成的圖片和真實的圖片,然后我們又有了第二代的Generator,第二代的Generator產(chǎn)生的圖片,能夠騙過第一代的Discriminator,此時,我們在訓練第二代的Discriminator,依次類推。
在實際中,我們有可能做下面的變換,可以加快我們的訓練速度:
GAN 官方PPT資料:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS17.html

https://zhuanlan.zhihu.com/p/24767059
非常好的教程做練手,設計爬蟲,opencv,dcgan
Community contributions: #pix2pix
GAN代碼解析(tensorflow實現(xiàn))文章結尾有GAN資料合集
https://blog.csdn.net/u013818406/article/details/73718265
中文手寫識別:http://python.jobbole.com/87509/
MNIST代碼背后的故事:http://www.oreilly.com.cn/ideas/?p=838