国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

WGAN最新進展:從weight clipping到gradient penalty

陳江龍 / 2250人閱讀

摘要:前面兩個期望的采樣我們都熟悉,第一個期望是從真樣本集里面采,第二個期望是從生成器的噪聲輸入分布采樣后,再由生成器映射到樣本空間。

Wasserstein GAN進展:從weight clipping到gradient penalty,更加先進的Lipschitz限制手法

前段時間,Wasserstein ?GAN以其精巧的理論分析、簡單至極的算法實現、出色的實驗效果,在GAN研究圈內掀起了一陣熱潮(對WGAN不熟悉的讀者,可以參考我之前寫的介紹文章:令人拍案叫絕的Wasserstein GAN - 知乎專欄)。但是很多人(包括我們實驗室的同學)到了上手跑實驗的時候,卻發現WGAN實際上沒那么完美,反而存在著訓練困難、收斂速度慢等問題。其實,WGAN的作者Martin Arjovsky不久后就在reddit上表示他也意識到了這個問題,認為關鍵在于原設計中Lipschitz限制的施加方式不對,并在新論文中提出了相應的改進方案:

論文:[1704.00028] Improved Training of Wasserstein GANs

Tensorflow實現:igul222/improved_wgan_training

首先回顧一下WGAN的關鍵部分——Lipschitz限制是什么。WGAN中,判別器D和生成器G的loss函數分別是:

直觀上解釋,就是當輸入的樣本稍微變化后,判別器給出的分數不能發生太過劇烈的變化。在原來的論文中,這個限制具體是通過weight clipping的方式實現的:每當更新完一次判別器的參數之后,就檢查判別器的所有參數的值有沒有超過一個閾值,比如0.01,有的話就把這些參數clip回 [-0.01, 0.01] 范圍內。通過在訓練過程中保證判別器的所有參數有界,就保證了判別器不能對兩個略微不同的樣本給出天差地別的分數值,從而間接實現了Lipschitz限制。

然而weight clipping的實現方式存在兩個嚴重問題:

第一,如公式1所言,判別器loss希望盡可能拉大真假樣本的分數差,然而weight clipping獨立地限制每一個網絡參數的取值范圍,在這種情況下我們可以想象,最優的策略就是盡可能讓所有參數走極端,要么取較大值(如0.01)要么取最小值(如-0.01)!為了驗證這一點,作者統計了經過充分訓練的判別器中所有網絡參數的數值分布,發現真的集中在較大和最小兩個極端上:

這樣帶來的結果就是,判別器會非常傾向于學習一個簡單的映射函數(想想看,幾乎所有參數都是正負0.01,都已經可以直接視為一個二值神經網絡了,太簡單了)。而作為一個深層神經網絡來說,這實在是對自身強大擬合能力的巨大浪費!判別器沒能充分利用自身的模型能力,經過它回傳給生成器的梯度也會跟著變差。

在正式介紹gradient penalty之前,我們可以先看看在它的指導下,同樣充分訓練判別器之后,參數的數值分布就合理得多了,判別器也能夠充分利用自身模型的擬合能力:

第二個問題,weight clipping會導致很容易一不小心就梯度消失或者梯度爆炸。原因是判別器是一個多層網絡,如果我們把clipping threshold設得稍微小了一點,每經過一層網絡,梯度就變小一點點,多層之后就會指數衰減;反之,如果設得稍微大了一點,每經過一層網絡,梯度變大一點點,多層之后就會指數爆炸。只有設得不大不小,才能讓生成器獲得恰到好處的回傳梯度,然而在實際應用中這個平衡區域可能很狹窄,就會給調參工作帶來麻煩。相比之下,gradient penalty就可以讓梯度在后向傳播的過程中保持平穩。論文通過下圖體現了這一點,其中橫軸代表判別器從低到高第幾層,縱軸代表梯度回傳到這一層之后的尺度大小(注意縱軸是對數刻度),c是clipping threshold:

說了這么多,gradient penalty到底是什么?

前面提到,Lipschitz限制是要求判別器的梯度不超過K,那我們何不直接設置一個額外的loss項來體現這一點呢?比如說:

這就是所謂的gradient penalty了嗎?還沒完。公式6有兩個問題,首先是loss函數中存在梯度項,那么優化這個loss豈不是要算梯度的梯度?一些讀者可能對此存在疑惑,不過這屬于實現上的問題,放到后面說。

其次,3個loss項都是期望的形式,落到實現上肯定得變成采樣的形式。前面兩個期望的采樣我們都熟悉,第一個期望是從真樣本集里面采,第二個期望是從生成器的噪聲輸入分布采樣后,再由生成器映射到樣本空間。可是第三個分布要求我們在整個樣本空間 ?上采樣,這完全不科學!由于所謂的維度災難問題,如果要通過采樣的方式在圖片或自然語言這樣的高維樣本空間中估計期望值,所需樣本量是指數級的,實際上沒法做到。

所以,論文作者就非常機智地提出,我們其實沒必要在整個樣本空間上施加Lipschitz限制,只要重點抓住生成樣本集中區域、真實樣本集中區域以及夾在它們中間的區域就行了。具體來說,我們先隨機采一對真假樣本,還有一個0-1的隨機數:

這就是新論文所采用的gradient penalty方法,相應的新WGAN模型簡稱為WGAN-GP。我們可以做一個對比:

weight clipping是對樣本空間全局生效,但因為是間接限制判別器的梯度norm,會導致一不小心就梯度消失或者梯度爆炸;

gradient penalty只對真假樣本集中區域、及其中間的過渡地帶生效,但因為是直接把判別器的梯度norm限制在1附近,所以梯度可控性非常強,容易調整到合適的尺度大小。

論文還講了一些使用gradient penalty時需要注意的配套事項,這里只提一點:由于我們是對每個樣本獨立地施加梯度懲罰,所以判別器的模型架構中不能使用Batch Normalization,因為它會引入同個batch中不同樣本的相互依賴關系。如果需要的話,可以選擇其他normalization方法,如Layer Normalization、Weight Normalization和Instance Normalization,這些方法就不會引入樣本之間的依賴。論文推薦的是Layer Normalization。

實驗表明,gradient penalty能夠顯著提高訓練速度,解決了原始WGAN收斂緩慢的問題:

雖然還是比不過DCGAN,但是因為WGAN不存在平衡判別器與生成器的問題,所以會比DCGAN更穩定,還是很有優勢的。不過,作者憑什么能這么說?因為下面的實驗體現出,在各種不同的網絡架構下,其他GAN變種能不能訓練好,可以說是一件相當看人品的事情,但是WGAN-GP全都能夠訓練好,尤其是最下面一行所對應的101層殘差神經網絡:

剩下的實驗結果中,比較厲害的是第一次成功做到了“純粹的”的文本GAN訓練!我們知道在圖像上訓練GAN是不需要額外的有監督信息的,但是之前就沒有人能夠像訓練圖像GAN一樣訓練好一個文本GAN,要么依賴于預訓練一個語言模型,要么就是利用已有的有監督ground truth提供指導信息。而現在WGAN-GP終于在無需任何有監督信息的情況下,生成出下圖所示的英文字符序列:

它是怎么做到的呢?我認為關鍵之處是對樣本形式的更改。以前我們一般會把文本這樣的離散序列樣本表示為sequence of index,但是它把文本表示成sequence of probability vector。對于生成樣本來說,我們可以取網絡softmax層輸出的詞典概率分布向量,作為序列中每一個位置的內容;而對于真實樣本來說,每個probability vector實際上就蛻化為我們熟悉的onehot vector。

但是如果按照傳統GAN的思路來分析,這不是作死嗎?一邊是hard onehot vector,另一邊是soft probability vector,判別器一下子就能夠區分它們,生成器還怎么學習?沒關系,對于WGAN來說,真假樣本好不好區分并不是問題,WGAN只是拉近兩個分布之間的Wasserstein距離,就算是一邊是hard onehot另一邊是soft probability也可以拉近,在訓練過程中,概率向量中的有些項可能會慢慢變成0.8、0.9到接近1,整個向量也會接近onehot,最后我們要真正輸出sequence of index形式的樣本時,只需要對這些概率向量取argmax得到較大概率的index就行了。

新的樣本表示形式+WGAN的分布拉近能力是一個“黃金組合”,但除此之外,還有其他因素幫助論文作者跑出上圖的效果,包括:

文本粒度為英文字符,而非英文單詞,所以字典大小才二三十,大大減小了搜索空間

文本長度也才32

生成器用的不是常見的LSTM架構,而是多層反卷積網絡,輸入一個高斯噪聲向量,直接一次性轉換出所有32個字符

上面第三點非常有趣,因為它讓我聯想到前段時間挺火的語言學科幻電影《降臨》:

里面的外星人“七肢怪”所使用的語言跟人類不同,人類使用的是線性的、串行的語言,而“七肢怪”使用的是非線性的、并行的語言?!捌咧帧痹诟鹘墙涣鞯臅r候,都是一次性同時給出所有的語義單元的,所以說它們其實是一些多層反卷積網絡進化出來的人工智能生命嗎?

開完腦洞,我們回過頭看,不得不承認這個實驗的setup實在過于簡化了,能否擴展到更加實際的復雜場景,也會是一個問題。但是不管怎樣,生成出來的結果仍然是突破性的。

最后說回gradient penalty的實現問題。loss中本身包含梯度,優化loss就需要求梯度的梯度,這個功能并不是現在所有深度學習框架的標配功能,不過好在Tensorflow就有提供這個接口——tf.gradients。開頭鏈接的GitHub源碼中就是這么寫的:

# interpolates就是隨機插值采樣得到的圖像,gradients就是loss中的梯度懲罰項

gradients = tf.gradients(Discriminator(interpolates), [interpolates])[0]

對于我這樣的PyTorch黨就非常不幸了,高階梯度的功能還在開發,感興趣的PyTorch黨可以訂閱這個GitHub的pull request:Autograd refactor,如果它被merged了話就可以在版中使用高階梯度的功能實現gradient penalty了。 但是除了等待我們就沒有別的辦法了嗎?其實可能是有的,我想到了一種近似方法來實現gradient penalty,只需要把微分換成差分:

也就是說,我們仍然是在分布 ?上隨機采樣,但是一次采兩個,然后要求它們的連線斜率要接近1,這樣理論上也可以起到跟公式9一樣的效果,我自己在MNIST+MLP上簡單驗證過有作用,PyTorch黨甚至Tensorflow黨都可以嘗試用一下。

歡迎加入本站公開興趣群

商業智能與數據分析群

興趣范圍包括各種讓數據產生價值的辦法,實際應用案例分享與討論,分析工具,ETL工具,數據倉庫,數據挖掘工具,報表系統等全方位知識

QQ群:81035754

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/4539.html

相關文章

  • 時下火熱的wGAN將變革深度學習?這得源頭講起

    摘要:但是在傳統的機器學習中,特征和算法都是人工定義的。傳統的深度學習中,是由人來決定要解決什么問題,人來決定用什么目標函數做評估。 隨著柯潔與AlphaGo結束以后,大家是不是對人工智能的底層奧秘越來越有興趣?深度學習已經在圖像分類、檢測等諸多領域取得了突破性的成績。但是它也存在一些問題。首先,它與傳統的機器學習方法一樣,通常假設訓練數據與測試數據服從同樣的分布,或者是在訓練數據上的預測結果與在...

    Brenner 評論0 收藏0
  • 生成對抗網絡GAN最近在NLP領域有哪些應用?

    摘要:直接把應用到領域主要是生成序列,有兩方面的問題最開始是設計用于生成連續數據,但是自然語言處理中我們要用來生成離散的序列。如圖,針對第一個問題,首先是將的輸出作為,然后用來訓練。 我來答一答自然語言處理方面GAN的應用。直接把GAN應用到NLP領域(主要是生成序列),有兩方面的問題:1. GAN最開始是設計用于生成連續數據,但是自然語言處理中我們要用來生成離散tokens的序列。因為生成器(G...

    asoren 評論0 收藏0
  • 提高GAN訓練穩定性的9大tricks

    摘要:另外,在損失函數中加入感知正則化則在一定程度上可緩解該問題。替代損失函數修復缺陷的最流行的補丁是。的作者認為傳統損失函數并不會使收集的數據分布接近于真實數據分布。原來損失函數中的對數損失并不影響生成數據與決策邊界的距離。 盡管 GAN 領域的進步令人印象深刻,但其在應用過程中仍然存在一些困難。本文梳理了 GAN 在應用過程中存在的一些難題,并提出了的解決方法。使用 GAN 的缺陷眾所周知,G...

    Xufc 評論0 收藏0
  • 人工智能術語表

    摘要:如果你對算法實戰感興趣,請快快關注我們吧。加入實戰微信群,實戰群,算法微信群,算法群。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/b5c... 介紹一些人工智能技術的術語,如果你還有術語補充,請訪問 Github English Terminology 中文術語 neur...

    pingan8787 評論0 收藏0
  • Deep learning:九(Sparse Autoencoder練習)

    摘要:實驗基礎其實實現該功能的主要步驟還是需要計算出網絡的損失函數以及其偏導數,具體的公式可以參考前面的博文八。生成均勻分布的偽隨機數。 前言:   現在來進入sparse autoencoder的一個實例練習,參考Ng的網頁教程:Exercise:Sparse Autoencoder。 這個例子所要實現的內容大概如下:從給定的很多張自然圖片中截取出大小為8*8的小patches圖片共10000張...

    ?xiaoxiao, 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<