理解生成對抗網路,一步一步推理得到GANs(一)
作者:Joseph Rocca
編譯:ronghuaiyang
導讀
GANs在2014年提出,然後就在影象生成領域取得了巨大的成功,但是其背後的原理卻不是那麼好理解,這篇文章帶你從最基礎的隨機變數開始,一步一步推理得到GANs,非常的詳細,一定要看看!由於文章較長,分兩部分分享給大家,今天是第一部分。
介紹
Yann LeCun將其描述為“過去10年機器學習領域最有趣的想法”。當然,這樣一個來自深度學習領域的傑出研究者的讚美,對於我們正在談論的主題來說,總是一個很好的廣告!事實上,自從2014年Ian J. Goodfellow和他的合著者在Generative Adversarial Nets中介紹生式對抗網路(GANs)以來,它已經取得了巨大的成功。
那麼什麼是生成性對抗性網路呢?是什麼讓它們如此“有趣”?在這篇文章中,我們將看到對抗性的訓練是一個極有啟發性的想法,簡單美,代表了機器學習的真正進步的概念,更尤其是生成模型(以同樣的方式作為反向傳播是一個簡單但很聰明的技巧,使神經網路變得如此受歡迎和有效)。
在討論細節之前,讓我們先簡要介紹一下GANs的用途。生成對抗性網路屬於生成模型。這意味著他們能夠產生新的內容。為了說明“生成模型”的概念,我們可以看一些使用GANs獲得結果的著名的例子。
Ian Goodfellow及其合著者對GANs能力的說明。這些是在兩個資料集:MNIST和TFD上進行訓練後對抗網路生成的樣本。對於這兩種情況,最右邊的列是離生成的直接相鄰樣本最近的真實資料。這表明產生的資料實際上是生成的,而不僅僅是由網路記憶的。
很自然,這種生成新內容的能力讓GANs看起來有點“神奇”,至少乍一看是這樣。在下面的部分中,我們將克服GANs的魔法,以便深入研究這些模型背後的思想、數學和建模。我們不僅會討論生成對抗網路所依賴的基本概念,而且,我們還會一步一步地構建這些概念,並從一開始就對這些概念進行推理。
廢話不多說,讓我們一起重新發現GANs !
注 :雖然我們試圖使本文儘可能地可以獨立的閱讀,但仍然需要具備機器學習的基本先驗知識。然而,大多數概念將在需要時保留,並提供一些參考資料。我們盡力使這篇文章讀起來儘可能流暢。不要猶豫,在評論部分會提到你想要閱讀的更多內容(可能會有更多關於這個主題的文章)。
概要
在下面的第一部分中,我們將討論從給定的分佈生成隨機變數的過程。然後,在第2節中,我們將通過一個例子說明,GANs試圖解決的問題可以表示為隨機變數生成問題。在第3節中,我們將討論基於匹配的生成網路,並展示它們如何回答第2節中描述的問題。最後在第4節中,我們將介紹GANs。更特別的是,我們將展示帶有損失函式的通用架構,並與之前的所有部分進行連結。
生成隨機變數
在本節中,我們將討論隨機變數的生成過程:我們將提醒一些現有的方法,特別是允許從簡單的均勻隨機變數生成複雜隨機變數的逆變換方法。儘管所有這些似乎都與我們的主題GANs有些不同,我們將在下一節中看到與生成模型的深層聯絡。
均勻隨機變數可以偽隨機生成
計算機基本上是確定的。因此,從理論上講,不可能生成真正隨機的數字(即使我們可以說“什麼是隨機?”這個問題很難回答)。然而,定義生成屬性非常接近理論隨機數序列的數字序列的演算法是可能的。具體地說,計算機能夠使用偽隨機數字生成器生成一個數字序列,該序列近似地遵循0和1之間的均勻隨機分佈。均勻的情況是一個非常簡單的情況,在此基礎上可以用不同的方式構建更復雜的隨機變數。
由一個操作或過程的結果表示的隨機變數
有不同的技術旨在生成更復雜的隨機變數。其中包括逆變換法、拒絕抽樣法、Metropolis-Hasting演算法等。所有這些方法都依賴於不同的數學技巧,這些技巧主要是包括用一個操作的結果(相對於更簡單的隨機變數)來表示我們希望的隨機變數。
拒絕抽樣表示隨機變數是一個過程的結果,這個過程不是從複雜的分佈中抽樣,而是從一個眾所周知的簡單分佈中抽樣,並根據某些條件接受或拒絕抽樣值。重複這個過程直到取樣值被接受,我們可以證明在接受的條件正確的情況下,有效取樣的值將遵循正確的分佈。
在Metropolis-Hasting演算法中,我們的想法是找到一個馬爾可夫鏈(MC),使這個MC的平穩分佈對應於我們想要對隨機變數進行抽樣的分佈。一旦這個MC找到了,我們就可以在這個MC上模擬一個足夠長的軌跡,考慮到我們已經達到了一個穩定的狀態,然後我們用這種方法得到的最後一個值可以被認為是從感興趣分佈中得到的。
我們不再深入討論拒絕抽樣和Metropolis-Hasting抽樣的細節,因為這些方法並不能引導我們理解GANs背後的概念(儘管如此,感興趣的讀者可以參考Wikipedia中有針對性的文章和連結)。讓我們更加關注一下逆變換方法。
逆變換方法
逆變換方法的想法只是代表我們的複雜性—在本文中“複雜”應該理解“不簡單”的感覺,而不是在數學意義上的複雜,我們知道如何生成隨機變數函式的結果應用於一個統一的隨機變數。
我們以一維的例子來考慮。假設X是一個複雜隨機變數,U是一個均勻隨機變數,取值範圍為[0,1],我們知道如何抽樣。我們提醒你一下,一個隨機變數是由它的累積分佈函式 (CDF)完全定義的。隨機變數的CDF是一個從隨機變數的定義域到區間[0,1]的函式,並且在一維中定義。
在U為均勻隨機變數的特殊情況下,我們有
為了簡單起見,我們在這裡假設函式CDF_X是可逆的,它的逆表示為
(使用泛函的逆,該方法可以很容易地推廣到非可逆的情況下,但這真的不是我們想要關注的重點)。如果我們定義
我們有
我們可以看到,Y和X有相同的CDF然後定義出的隨機變數。因此,通過定義上面的Y(作為一個均勻隨機變數的函式),我們成功地定義了一個具有目標分佈的隨機變數。
綜上所述,逆變換法是一種使一個均勻的隨機變數通過一個精心設計的“變換函式”(逆CDF)來生成一個服從給定分佈的隨機變數的方法。實際上,“逆變換法”的概念可以推廣到“變換法”的概念,即更一般地,將隨機變數作為一些更簡單的隨機變數的函式來生成(不一定是一致的,那麼變換函式就不再是逆CDF)。從概念上講,“變換函式”的目的是對初始概率分佈進行變形/重塑:轉換函式從初始概率分佈相對於目標概率分佈過高的地方入手,將其放到初始概率分佈過低的地方。
逆變換法的圖解。藍色表示[0,1]上的均勻分佈。橙色表示標準高斯分佈。灰色:從均勻分佈到高斯分佈的對映(逆CDF)。
生成模型
我們嘗試生成更加複雜的隨機變數…
假設我們對生成大小為n×n畫素的狗的黑白正方形影象感興趣。我們可以將每個資料重新塑造為一個N=n×n維向量(通過將列疊加在一起),這樣狗的影象就可以用一個向量來表示。然而,這並不意味著所有的向量變回正方形之後都表示為狗!因此,我們可以說,N維向量可以有效地給到一些東西,看起來像一隻狗,這個N維向量的分佈是根據特定的概率分佈在整個N維向量空間中的(一些空間中的點很可能代表狗,而另外的可能不像)。本著同樣的精神,在這個N維向量空間中,存在著貓、鳥等影象的概率分佈。
然後,生成一個新的dog影象的問題等價於在N維向量空間中按照“dog概率分佈”生成一個新的向量的問題。實際上,我們面臨的問題是根據特定的概率分佈生成一個隨機變數。
在這一點上,我們可以提到兩件重要的事情。首先,我們提到的“狗的概率分佈”在一個非常大的空間是一個非常複雜的分佈。其次,即使我們可以假設存在這樣的底層分佈(實際上存在看起來像狗的影象和其他不像狗的影象),我們顯然不知道如何顯式地表達這種分佈。前面的兩點使得從這個分佈中生成隨機變數的過程非常困難。接下來讓我們嘗試解決這兩個問題。
… 所以讓我們在變換方法中使用神經網路作為變換函式吧!
我們在生成dog的新影象時遇到的第一個問題是,在N維向量空間上的“dog概率分佈”是一個非常複雜的問題,我們不知道如何直接生成複雜的隨機變數。然而,我們很清楚如何生成N個不相關的均勻隨機變數,我們可以利用變換方法。為此,我們需要將N維隨機變數表示為將一個非常複雜的函式,應用在生成一個簡單的N維隨機變數上!
在這裡,我們可以強調這樣一個事實,即找到變換函式並不像描述逆變換方法那樣簡單,只需對累積分佈函式(我們顯然不知道)求出封閉形式的逆。轉換函式不能顯式表達出來,我們必須從資料中進行學習。
在大多數情況下,非常複雜的函式自然意味著神經網路建模。然後,通過神經網路對變換函式進行建模,該神經網路將一個簡單的N維均勻隨機變數作為輸入,並返回另一個N維隨機變數,該隨機變數在訓練後應遵循正確的“dog概率分佈”。一旦網路架構設計完成,我們仍然需要對其進行訓練。在接下來的兩節中,我們將討論兩種方法來訓練這些生成網路,包括GANs背後的對抗性訓練!
圖解使用神經網路生成模型的概念。顯然,我們討論的維度比這裡表示的要高得多。
英文原文:https://towardsdatascience.com/understanding-generative-adversarial-networks-gans-cd6e4651a29
https://www.toutiao.com/i6725010195707068942/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2653733/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 理解生成對抗網路,一步一步推理得到GANs(二)
- 一步一步,看圖理解長短期記憶網路與門控迴圈網路
- 一步一步理解命令模式模式
- dl4j-gans: Deeplearning4j生成對抗網路GNA的示例原始碼原始碼
- 【深度學習理論】通俗理解生成對抗網路GAN深度學習
- 一步一步理解Generator函式的原理函式
- TensorFlow 一步一步實現卷積神經網路卷積神經網路
- GAN生成對抗網路-DCGAN原理與基本實現-深度卷積生成對抗網路03卷積
- 第六週:生成式對抗網路
- 一步一步生成滑動驗證碼圖片
- NLP(二十九)一步一步,理解Self-Attention
- RNN是怎麼從單層網路一步一步構造的?RNN
- 對Node.js非同步的進一步理解Node.js非同步
- 實戰生成對抗網路[1]:簡介
- LSGAN:最小二乘生成對抗網路
- 實戰生成對抗網路[2]:生成手寫數字
- 卷積生成對抗網路(DCGAN)---生成手寫數字卷積
- 訓練生成對抗網路的一些技巧和陷阱
- 一步一步來
- 萬字綜述之生成對抗網路(GAN)
- 一步一步上手MyBatisPlusMyBatis
- 一步一步搭建Flutter開發架子-網路請求,非同步UI更新封裝Flutter非同步UI封裝
- 如何應用TFGAN快速實踐生成對抗網路?
- 生成對抗網路的進步多大,請看此文
- 解讀生成對抗網路(GAN) 之U-GAN-IT
- [深度學習]生成對抗網路的實踐例子深度學習
- 0901-生成對抗網路GAN的原理簡介
- 一步一步學spring bootSpring Boot
- 如何一步一步配置webpackWeb
- 一步一步手寫GPTGPT
- 一步一步分析vue之observeVue
- 一步一步教你寫kubernetes sidecarIDE
- 一步一步搭建腳手架
- 一步一步教你 https 抓包HTTP
- 一步一步分析Redux原始碼?Redux原始碼
- 一步一步實現一個PromisePromise
- 【生成對抗網路學習 其三】BiGAN論文閱讀筆記及其原理理解筆記
- 一步一步分析vue之$mount(1)Vue