訓練不穩定、調參難度大,這裡有 7 大法則帶你規避 GAN 訓練的坑!

2021-01-11 雷鋒網

由於其對於原始數據潛在概率分布的強大感知能力,GAN 成為了當下最熱門的生成模型之一。然而,訓練不穩定、調參難度大一直是困擾著 GAN 愛好者的老問題。本文是一份乾貨滿滿的 GAN 訓練心得,希望對有志從事該領域研究和工作的讀者有所幫助!

在當下的深度學習研究領域中,對抗生成網絡(GAN)是最熱門的話題之一。在過去的幾個月裡,關於 GAN 的論文數量呈井噴式增長。GAN 已經被應廣泛應用到了各種各樣的問題上,如果你之前對此並不太了解,可以通過下面的 Github 連結看到一些酷炫的 GAN 應用:

時至今日,我已經閱讀了大量有關 GAN 的文獻,但我還從來沒有自己動手實踐過。因此,在瀏覽了一些對人有所啟發的論文和 Github 代碼倉庫後,我決定親自嘗試訓練一個簡單的 GAN。不出所料,我立刻就遇到了一些問題。

本文的目標讀者是從 GAN 入門的熱愛深度學習的朋友。除非你走了大運,否則你自己第一次訓練一個 GAN 的過程可能是非常令人沮喪的,而且需要花費好幾個小時才能做好。當然,隨著時間的推移和經驗的增長,你可能會漸漸善於訓練 GAN。但是對於初學者來說,可能會犯一些錯,而且不知道該從哪裡開始調試。在本文中,我想向大家分享我第一次從頭開始訓練 GAN 時的觀察和經驗教訓,希望本文可以幫助大家節省幾個小時的調試時間。

GAN 簡介

在過去的一年左右的時間裡,深度學習圈子裡的每個人(甚至一些沒有參與過深度學習相關工作的人),都應該對 GAN 有所耳聞(除非你住在深山老林裡、與世隔絕)。生成對抗網絡(GAN)是一種數據的生成式模型,主要以深度神經網絡的形式存在。也就是說,給定一組訓練數據,GAN 可以學會估計數據的底層概率分布。這一點非常有用,因為我們現在可以根據學到的概率分布生成原始訓練數據集中沒有出現過的樣本。如上面的連結所示,這催生了一些非常實用的應用程式。

該領域的專家已經提供了一些很棒的資源來解釋 GAN 以及它們的工作遠離,所以本文在這裡不會重複他們的工作。但是為了保持文章的完整性,在這裡對相關概念進行簡要的回顧。

GAN 模型概覽

生成對抗網絡實際上是兩個相互競爭的深度網絡。給定一個訓練集 X(比如說幾千張貓的圖像),生成網絡 G(x) 會將隨機向量作為輸入,並試圖生成與訓練集中的圖像相類似的新圖像樣本。判別器網絡 D(x) 則是一種二分類器,試圖將訓練集 X 中「真實的」貓的圖像和由生成器生成的「假的」貓圖像區分開來。如此一來,生成網絡的職責就是學習 X 中的數據的分布,這樣它就可以生成看起來真實的貓圖像,並確保判別器無法區分來自訓練集的貓圖像和來自生成器的貓圖像。判別器則需要通過學習跟上生成器不斷進化、嘗試通過新的方式生成可以「騙過」判別器的「假的」貓圖像的步伐。

最終,如果一切順利,生成器(或多或少)會學到訓練數據的真實分布,並變得非常善於生成看起來真實的貓圖像。而判別器則不能再將訓練集中的貓圖像和生成的貓圖像區分開來。

從這個意義上說,這兩個網絡一直在努力確保對方不能很好地完成自己的任務。那麼,這究竟是如何起作用的呢?

另一種看待 GAN 的方式是:判別器試圖通過高速生成器真實的貓圖像看起來是怎樣的,從而引導生成器。最終,生成器研究清楚了問題,開始生成看起來真實的貓圖像。訓練 GAN 的方法類似於博弈論中的極大極小算法,兩個網絡試圖達到同時考慮二者的納什均衡。更多細節,請參閱本文底部給出的參考資料。

GAN 訓練面臨的挑戰

下面,我們將繼續分析 GAN 的訓練過程。為了簡單起見,我使用了「Keras+Tensorflow 後端」的組合,在 MNIST 數據集上訓練了一個 GAN(確切地說是 DC-GAN)。這並不太困難,在對生成器和判別器網絡進行了一些小的調整之後,GAN 就可以生成清晰的 MNIST 圖像了。

生成的 MNIST 數字

如果你覺得 MNIST 中黑白數字沒那麼有趣,那麼生成各種物體和人的彩色圖片還很酷炫的。而這樣一來,問題就變得棘手了。在攻克了 MNIST 數據集之後,顯然下一步就是生成 CIFAR-10 圖像。經過日復一日的超參數調參、改變網絡架構、增添或刪除網絡層,我終於能夠生成出高質量的和 CIFAR-10 類似的圖像。

 

使用 DC-GAN 生成的青蛙

 

使用 DC-GAN 生成的汽車

我最初使用了一個非常深的網絡(但是大多數情況下性能並不佳),最後使用的真正有效的網絡卻十分簡單。在我開始調整網絡和訓練過程時,經過 15 個 epoch 的訓練後生成的圖像從這樣: 

變成了這樣:

 

最終的結果是:

 

下面,我基於自己犯過的錯誤以及一直以來學到的東西,總結出了 7 大規避 GAN 訓練陷阱的法則。所以,如果你是一個 GAN 新兵,在訓練中沒有很多成功的經驗,也許看看下面的幾個方面可能會有所幫助:

鄭重聲明:下面我只是列舉出了我嘗試過的事情以及得到的結果。並且,我並不是說已經解決了所有訓練 GAN 的問題。

1. 更大更多的卷積核

更大的卷積和可以覆蓋前一層特徵圖中的更多像素,因此可以關注到更多的信息。在 CIFAR-10 數據集上,5*5 的卷積核可以取得很好的效果,而在判別器中使用 3*3 的卷積核會使判別器損失迅速趨近於 0。對於生成器來說,我們希望在頂層的卷積層中使用較大的卷積核來保持某種平滑性。而在較底層,我並沒有發現改變卷積核的大小會帶來任何關鍵的影響。

卷積核的數量的提升會大幅增加參數的數量,但通常我們確實需要更多的卷積核。我幾乎在所有的卷積層中都使用了 128 個卷積核。特別是在生成器中,使用較少的卷積核會使得最終生成的圖像太模糊。因此,似乎使用更多的卷積核有助於捕獲額外的信息,最終會提升生成圖像的清晰度。

2. 反轉標籤(Generated=True, Real=False)

儘管這一開始似乎有些奇怪,但是對我來說,改變標籤的分配是一個重要的技巧。

如果你正在使用「真實圖像=1」、「生成圖像=0」的標籤分配方法,將標籤反轉過來會對訓練有所幫助。正如我們會在後文中看到的,這有助於在迭代早期梯度流的傳播,也有助於訓練的順利進行。

3. 軟標籤和帶噪聲標籤

這一點在訓練判別器時極為重要。使用硬標籤(非 1 即 0)幾乎會在早期就摧毀所有的學習進程,導致判別器的損失迅速趨近於 0。我最終用一個 0-0.1 之間的隨機數來代表「標籤 0」(真實圖像),並使用一個 0.9-1 之間的隨機數來代表 「標籤 1」(生成圖像)。在訓練生成器時則不用這樣做。

此外,添加一些帶噪聲的標籤是有所幫助的。在我的實驗過程中,我將輸入給判別器的圖像中的 5% 的標籤隨機進行了反轉,即真實圖像被標記為生成圖像、生成圖像被標記為真實圖像。

4. 批量歸一化有所助益,但還有其它先決條件

批量歸一化當然對提升最終的結果有所幫助。加入批量歸一化可以最終生成明顯更清晰的圖像。但是,如果你錯誤地設置了卷積核的大小和數量,或者判別器損失迅速趨近於 0,那加入批量歸一化可能也無濟於事。

在網絡中加入批量歸一化(BN)層後生成的汽車

5. 一次訓練一類

為了便於訓練 GAN,確保輸入數據有類似的特性是很有用的。例如,與其在 CIFAR-10 數據集中所有 10 個類別上訓練 GAN,不如選出一個類別(比如汽車或青蛙),訓練 GAN 根據此類數據生成圖像。DCGAN 的另外一些變體可以很好地學會根據若干個類生成圖像。例如,條件 GAN(CGAN)將類別標籤一同作為輸入,以類別標籤為先驗條件生成圖像。但是,如果你從一個基礎的 DCGAN 開始學習訓練 GAN,最好保持模型簡單。

6. 觀察梯度的變化

如果可能的話,請監控網絡中的梯度和損失變化。這可以幫助我們了解訓練的進展情況。如果訓練進展不是很順利的話,這甚至可以幫助我們進行調試。

理想情況下,生成器應該在訓練的早期接受大梯度,因為它需要學會如何生成看起來真實的數據。另一方面,判別器則在訓練早期則不應該總是接受大梯度,因為它可以很容易地區分真實圖像和生成圖像。當生成器訓練地足夠好時,判別器就沒有那麼容易區分真實圖像和生成圖像了。它會不斷發生錯誤,並得到較大的梯度。

我在 CIFAR-10 中的汽車上訓練的幾個早期版本的 GAN 有許多卷積層和批量歸一化層,並且沒有進行標籤反轉。除了監控梯度的變化趨勢,監控梯度的大小也很重要。如果生成器中網絡層的梯度太小,學習可能會很慢或者根本不會進行學習。

生成器頂層的梯度(x 軸:minibatch 迭代次數) 

生成器底層的梯度(x 軸:minibatch 迭代次數) 

判別器頂層的梯度(x 軸:minibatch 迭代次數)

 

判別器底層的梯度(x 軸:minibatch 迭代次數)

生成器最底層的梯度太小,無法進行任何的學習。判別器的梯度自始至終都沒有變化,說明判別器並沒有真正學到任何東西。現在,讓我們將其與帶有上述所有改進方案的 GAN 的梯度進行對比,改進後的 GAN 得到了很好的、與真實圖像看起來類似的圖像:

生成器頂層的梯度(x 軸:minibatch 迭代次數)

生成器底層的梯度(x 軸:minibatch 迭代次數)

 

判別器頂層的梯度(x 軸:minibatch 迭代次數)

 

判別器底層的梯度(x 軸:minibatch 迭代次數)

此時生成器底層的梯度明顯要高於之前版本的 GAN。此外,隨著訓練的進展,梯度流的變化趨勢與預期一樣:生成器在訓練早期梯度較大,而一旦生成器被訓練得足夠好,判別器的頂層就會維持高的梯度。

7.不要採用早停法(early stopping)

可能是由於我缺乏耐心,我犯了一個愚蠢的錯誤——在進行了幾百個 minibatch 的訓練後,當我看到損失函數仍然沒有任何明顯的下降,生成的樣本仍然充滿噪聲時,我終止了訓練。比起等到訓練結束才意識到網絡什麼都沒有學到,重新開始工作、節省時間確實讓人心動。GAN 的訓練時間很長,初始的少量的損失值和生成的樣本幾乎不能顯示出任何趨勢和進展。在結束訓練過程並調整設置之前,還是很有必要等待一段時間的。

這條規則的一個例外情況是:如果你看到判別器損失迅速趨近於 0。如果發生了這種情況,幾乎就沒有任何機會補救了。最好在對網絡或訓練過程進行調整後重新開始訓練。

最終的 GAN 的架構如下所示: 

希望本文中的這些建議可以幫助所有人從頭開始訓練他們的第一個 DC-GAN。下面,本文將給出一些包含大量關於 GAN 的信息的學習資源:

GAN 論文參考:

「Generative Adversarial Networks」

「Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks」

「Improved Techniques for Training GANs」

其他參考連結:

「Training GANs: Better understanding and other improved techniques」

「NIPS 2016 GAN 教程」

「Conditional GAN」

本文最終版 GAN 的 Keras 代碼連結如下:

https://github.com/utkd/gans/blob/master/cifar10dcgan.ipynb?source=post_page

via  https://medium.com/@utk.is.here/keep-calm-and-train-a-gan-pitfalls-and-tips-on-training-generative-adversarial-networks-edd529764aa9    雷鋒網(公眾號:雷鋒網)雷鋒網雷鋒網

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 這些資源你肯定需要!超全的GAN PyTorch+Keras實現集合
    /dcgan.py在 GAN 的第一篇論文出來之後的大概一年時間裡,訓練 GAN 與其說是科學,倒不如說是藝術——模型很不穩定,需要大量調整才能工作。值得一提的是,由於 GAN 中使用的極小極大(minimax)優化,訓練有可能相當不穩定。但是,有一些技巧可以用來使得訓練更魯棒。
  • 健身訓練容易受傷怎麼辦?如何恢復訓練?這4大要點要記住
    導語:假如你正在健身,那麼一定或多或少會受到傷害。可能是因為衝壓重量時沒有憋住,可能是因為沒有防護措施導致臥倒,可能是因為拉力過大造成下背部受傷等等。但受傷並不可怕,也不必因此而放棄訓練,訓練是一輩子的事。有些傷病也會讓你自我反省,接下來的訓練你會更加小心。但是當你從傷病中恢復並重新開始訓練時,有幾點需要注意。首先談談為什麼會受傷。
  • 生成式對抗網絡GAN的高級議題
    GAN問題以前我們討論了GAN的一些最基本的問題,主要是需要大量的計算能力,大圖像訓練的難度,靈敏度以及模態崩潰。本文想重申這些問題,因為訓練GAN非常困難且耗時。振蕩當發生器和鑑別器共同尋找平衡時,可能發生振蕩,但模型更新是獨立的。沒有理論上的收斂性保證,事實上,結果可能會發生變化。
  • 訓練的神經網絡不工作?一文帶你跨過這37個坑
    數據集中是否有太多的噪音?我曾經遇到過這種情況,當我從一個食品網站抓取一個圖像數據集時,錯誤標籤太多以至於網絡無法學習。手動檢查一些輸入樣本並查看標籤是否大致正確。7. Shuffle 數據集如果你的數據集沒有被 shuffle,並且有特定的序列(按標籤排序),這可能給學習帶來不利影響。
  • 《DK燒腦思維訓練手冊》書評:有這樣的訓練方法,再也不怕忘性大
    忘性大確實會帶來很多麻煩不知你會把出現這些問題的原因歸結為什麼,是壓力、睡眠不足、年紀大了,還是「一孕傻三年」?不管什麼原因,當出現這些狀況的時候,我們更應該思考的是有沒有什麼辦法可以克服它。二、刻意的訓練能提高大腦的工作效率DK出版的《DK燒腦思維訓練手冊》是一本以「幫助人們解決日常生活中遇到的記憶障礙問題為目的」的書。
  • 用龍門架怎麼來訓練腹肌?健身房還有哪些器械可以訓練腹肌?
    卷腹訓練法是龍門架卷腹和繩索卷腹最常用的訓練方法。但個人認為,腹肌訓練與其他部位不同,是全身最適合徒手訓練的肌肉,即大部分腹肌訓練不需要藉助器械,有張瑜伽墊就可以了,許多腹肌訓練器械反而是花哨的。腹式訓練可以根據不同部位的功能進行分化訓練,也可以用一些複合動作刺激整體。腹分為直肌、腹內外斜肌、腹橫肌。
  • 增肌訓練應該以大重量訓練為主?不上重量真的沒有辦法增肌嗎?
    影響增肌的重要因素-容量 既然我們的目標是增肌,也就是肌肥大訓練,那麼影響你增肌效果的重要指標就是容量。容量是指我們完成一次訓練時,所做的總功,也就是:組數*次數*使用的重量。研究顯示,肌肉肥大與訓練的總容量有密切關係,在一定範圍內,總容量越大,增肌的效果越好。
  • 聽力受損兒童訓練內容之聽覺訓練
    上一篇文章,我們講到了兒童聽力受損訓練要遵循的原則。這一期,我們就來講一講具體的訓練內容,聽障兒童的訓練內容包括聽覺訓練、言語語言訓練兩大部分。這一期的內容主題是:聽覺訓練的內容及方法。
  • 海軍潛水員進行大深度訓練
    近日,南部戰區海軍某防險救生支隊組織潛水員在南海某海域進行大深度潛水訓練。針對大深度潛水訓練難度大、危險係數等特點,訓練制定了針對性措施和方案,有效提升潛水員水下技戰術水平。瀏覽器版本過低,暫不支持視頻播放
  • 引體向上訓練遇到平臺期,這幾個訓練小建議,能夠幫助你突破
    導語:說到引起向上訓練動作,大多數的健身人士都是不陌生的,即使我們沒有接觸過健身領域,或多或少都了解過。引體向上訓練動作是我們中學時代體能測試的一個經典動作,然而該訓練動作的難度的確是不容小覷的,可以說,很多男生做引體向上都非常吃力,而且絕大多數的女生一個引體向上都完成不了。
  • 跑步的12大黃金法則:掌握恢復尺度 睡眠也關鍵
    當然,根據個體差異性,以下提到的每一個原則都會有例外。為什麼?正如你從小學上學到長這麼大一樣,每個所謂的「標準答案」都會根據具體事件的不同而有例外。1、專項性法則有效的模擬某一運動專項來進行針對性訓練。以比賽為導向,這是任何運動項目的基本訓練原則,你練200米專項和連5000米專項,訓練顯然是不同的。
  • 3位導師1天特訓,雙12大促巔峰訓練營傳授爆單黃金法則(內附雙12...
    》,特邀電子商務國家工程實驗室講師、Lazada官方講師廖鶴鳴為商家們帶來《2020圍繞大促的節奏布局及作戰運營策略》,Lazada億級金牌商家小荷傳授《2020 Lazada新玩法&大促營銷繞坑秘籍》,擁有12年經驗的跨境電商專家John為商家作《東南亞跨境電商旺季站外引流解析
  • 登月之前,太空人要在這裡秘密訓練,學習地質學!
    登月之前,太空人要在這裡秘密訓練並學習地質學!在尼爾·阿姆斯特朗(Neil Armstrong)和巴茲·奧爾德林(Buzz Aldrin)知道自己將成為第一個登上月球的人之前,他們在大峽谷和附近一個地球上保存最完好的隕石坑上了地質學速成課。
  • 海軍潛水員南海大深度潛水訓練
    海軍潛水員在南海某海域進行大深度潛水訓練近日南部戰區海軍某防救支隊組織潛水員在南海某海域進行大深度潛水訓練訓練中他們針對大深度潛水訓練難度大危險係數高、減壓時間長等特點制定針對性措施和方案緊貼戰場環境強化現場指揮和各戰位之間的協同配合對不同等級潛水員進行分層級訓練有效提升潛水員的水下技戰術水平為下一步遂行援潛救生任務打下基礎
  • 張東升,我知道是你!如何使用GAN做一個禿頭生產器
    STGAN中生成網絡在編碼器和解碼器之間加入Selective Transfer Units(STU),同時引入屬性差異向量(只輸入需要改變的屬性),這樣一來,網絡變得更容易訓練,相比於目標屬性標籤,屬性差異標籤可以提供更多有價值的信息,使屬性生成精度明顯提升。
  • 邊境牧羊犬應該怎麼訓練?訓練什麼?
    一、訓練的時期在開始對邊牧進行訓練之前有一件事需要注意,就是訓練狗狗的時期了,一般來說小邊牧三到六個月的時候就可以開始準備訓練了,不然等到一歲以後狗狗的心智接近成熟,不同的性格會給訓練增加一些難度。二、呼喚狗狗訓練的第一環就是呼喚狗狗了,要訓狗就要先讓狗狗對它自己的名字有所反應,主人可以重複喊狗狗的名字,當它對你有所反應的時候可以給予它一些獎勵,讓它知道應該這樣做,這樣以後只要你喊它的名字它就會回應你了。
  • 谷歌大腦提出簡化稀疏架構,預訓練速度可達T5的7倍
    目前,MoE 模型已在機器翻譯領域取得了令人矚目的成就,但由於模型複雜度高、通信成本高、訓練不夠穩定,其廣泛應用受到了一定的阻礙。為了解決這些問題,Google Brain 的研究者提出了 Switch Transformer。
  • 絕佳的單腿訓練動作推薦,提升訓練效果!
    大多數人會想到深蹲、弓箭步…等動作,但你有沒有發現,這些都是雙腳運動,一段時間下來肌力表現可能會停滯,這時候可以加入單腳的訓練動作來突破瓶頸!大家有沒有發現,生活中很多動作都不是雙腳一起發力,而是單腳,例如:爬樓梯、打籃球、跑步…等,所以不想樓梯爬幾層就腿酸、打球有足夠的爆發力蓋人家火鍋,那在訓練菜單中增加單腳動作,會讓你在運動或是日常生活用到腿部肌肉更加舒適又不容易受傷喔!
  • 無人機飛行學院,帶你直擊訓練基地
    小時候一張紙飛機就是一個飛行夢長大後一架無人機承載一個航天夢每個人心中都有一個航天夢今天帶各位看官領略飛虎無人機訓練基地。長蟲山,許多人也許不太熟悉,但談到孫髯翁那首膾炙人口的大觀樓18字天下第一長聯,聯中的&34;這般古雅的詩句,你一定不會感到陌生。北走蜿蜒,說的就是長蟲山。蛇山似一條石質巨蟒,靜臥於昆明城的北郊。地貌特徵十分顯著而又富有堅強的個性。
  • 最強蝸牛基因模擬訓練怎麼玩 基因模擬訓練玩法詳解
    基因特殊模擬訓練圖鑑 特殊模擬訓練特殊模擬訓練大部分屬於彩蛋系列~僅需需要xx基因碎片,你就可以開始懟懟懟模式! 限定異種形態,此基因訓練獎勵進化寶箱和藍色器官,總層數16層,挑戰難度不高,但獲取難度較高。 博家諾星人訓練 第十次打飛機時擊沉飛碟獲取(需30根栴檀) 限定機械形態,此基因訓練獎勵器官寶箱,總層數50層,難度較高。