生成型神经网络
Python微信訂餐小程序課程視頻
https://edu.csdn.net/course/detail/36074
Python實戰量化交易理財系統
https://edu.csdn.net/course/detail/35475
最簡單的X->Y****映射
讀書時代課本上的函數其實就是我們最早接觸關于“映射”的概念,f(x)以“某種邏輯”將橫坐標軸上的值映射到縱坐標軸。后來學習編程之后接觸了函數(或者叫方法)的概念,它以“某種邏輯”將函數輸入映射成輸出,映射邏輯就是函數本身的實現過程。映射就是將若干輸入以某種邏輯轉換成若干輸出,課本上的函數是這樣,編程中的函數是這樣,深度學習中神經網絡同樣是這樣。
圖1 映射關系
最簡單的映射邏輯是線性映射,類似f(x)=wx + b這樣,它的函數圖像是一條直線,其中w和b是映射過程用到的參數。高中數學中的拋物線f(x)=axx + bx +c 是一種比線性映射更復雜的映射關系,同樣a、b、c是該映射過程要用到的參數。 這里不管是w還是abc這樣的參數,同樣存在于神經網絡這種高復雜度的映射過程之中,事實上,我們完全可以將神經網絡類比為我們更為熟悉的直線、拋物線結構。
與我們讀書學習直線、拋物線不同的是,書本中直線、拋物線函數的參數大部分時候都是已知的,而神經網絡中的參數是未知的,或者說不是最優的,我們需要使用已知的樣本(輸入/輸出)去擬合網絡,從而得出最優的參數值,然后將擬合(學習)到的參數應用到新數據中(只有輸入),擬合的這個過程叫做“訓練模型”或者“學習”。
圖2 線性映射與神經網絡類比
神經網絡的輸入輸出
前面說到映射過程有輸入和輸出,同樣神經網絡也有輸入和輸出。就計算機視覺領域相關任務來講,有圖像分類網絡,有目標檢測、分割等網絡,也有專門用于圖像特征提取的網絡,這些網絡的輸入基本都是圖片,輸出要么是分類概率值,要么是跟目標有關的像素坐標值,或者是高維特征向量值,這些輸出有一個共同的特點,都屬于數字類輸出,就像我們剛接觸機器學習時預測房價的案例,算法輸出是房價,也是數字類型。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-UcsbkcRx-1648228598434)(https://img2022.cnblogs.com/blog/104032/202203/104032-20220325165609074-1035807282.png)]
圖3 普通網絡的輸入輸出
那么神經網絡是否還有更復雜的輸出格式呢?答案是有,神經網絡可以輸出更高維的數據結構,比如圖片。雖然嚴格來講,圖片也是由數字組成,但是為了與前面提到的簡單輸出類型區分,我們可以將輸出圖片的這類神經網絡稱為“生成型網絡”。顧名思義,生成型網絡的特點是可以生成類似圖片這種直觀結果(或者類似網絡輸入那種更高維數據)。
圖4 生成型網絡的輸入輸出(舉例)
生成型網絡的訓練方式一般比較特別,大部分都是無監督學習,也就是事先無需對樣本做人工標注。事實上,了解生成型網絡是我們熟悉無監督學習的一種非常好的途徑。
生成型網絡的實現方式常見有兩種,一個是AutoEncoder,翻譯成中文叫“自編碼器”,基本原理就是將輸入圖片先編碼,生成一個特征表達,然后再基于該特征重新解碼生成原來的輸入圖片,編碼和解碼是兩個獨立的環節,訓練的時候合并、使用的時候拆開再交叉組合。前幾年非常火的AI換臉就是基于AutoEncoder實現的,代碼非常簡單,之前的一篇文章對它有非常詳細的介紹。另一個是GAN,全稱Generative Adversarial Networks,翻譯成中文是“生成對抗型網絡”,它也是由兩部分組成,一個負責生成一張圖片,一個負責對圖片進行分類(判斷真假),訓練的時候一起訓練,使用的時候只用前面的生成網絡。GAN也是本篇文章后面介紹的重點內容。
GAN****生成對抗型網絡工作原理
首先要明確地是,最原始的GAN是2014年提出來的,它可以基于一個無任何標注的圖片樣本集,生成類似風格的全新圖片,就像一個畫家,看了一些示例后,可以畫出類似風格的畫。2014年提出來的GAN結構相對簡單,也存在一些缺陷,比如生成的圖片分辨率太低、網絡訓練很難收斂。后面有人陸陸續續提出了各種改進版本的GAN(變種),雖然各方面都有所調整,但是整體思想仍然沿用第一版,這里也是介紹最原始GAN網絡的工作原理。
GAN網絡主要由兩子網絡組成,一個學名叫Generative Network(顧名思義,生成網絡),輸入隨機數,輸出一張固定尺寸的圖片(比如64*64大小),另一個學名叫Discriminative Network(顧名思義,辨別網絡),輸入前一個網絡生成的圖片以及訓練樣本集中的圖片,輸出真和假(生成的為假、樣本集中的為真)。如果單獨分開來看,這兩沒什么特別的,一個負責生成圖片、一個負責判別真假。但是,GAN高妙之處就在于這兩在訓練過程中并不是獨立的。我們先來看下GAN的結構:
圖5 GAN網絡結構
上面顯示的GAN網絡結構其實非常簡單,但是只看這張圖的人可能會有一個疑問?訓練樣本集只作為辨別網絡(Discriminative network,簡稱D)的輸入并參與訓練,它是怎樣對生成網絡(Generative network,簡稱G)起到作用的?答案在GAN的訓練過程中,GAN的訓練方式主要可以歸納成3個要點:
1、將G的輸出作為D的輸入,并以False標簽來訓練D網絡,更新D網絡的參數,讓D知道什么是假的;
2、將訓練樣本集輸入D,并以True標簽來訓練D網絡,更新D網絡的參數,讓D知道什么是真的;
3、將D的參數凍結,再將D和G兩個網絡串起來,G的輸出還是作為D的輸入,但是這次以True標簽來訓練整個組合網絡。由于D的參數已經凍結,所以整個訓練過程只會更新前面G網絡的參數,讓G知道如何生成看起來像“真的”圖片。
上面的過程1和過程2讓D越來越聰明,知道什么是真的、什么是假的。過程3讓G也越來越聰明,知道如何調整自己的參數,才能讓生成的圖片更能欺騙D。隨著上面的過程不斷反復,G不斷的更新自己的參數,雖然輸入的一直是隨機數,但是輸出的圖片卻越來越像訓練樣本集中的圖片,到此完成了對G的訓練。下面用圖來說明上面的過程:
GAN**(變種網絡)可以解決哪些任務?**
基于GAN思想的生成型網絡有很多應用,比如素材生成,當你已經有一定數量的圖片樣本后,你可以利用GAN生成更多類似但完全不同的圖片,提升樣本庫的豐富性。目前比較成熟的風格遷移(style transfer)也用到了GAN思想,可以將一張手機拍攝的自然風景圖片轉換成山水畫、卡通畫風格。下面是利用Pro-GAN網絡生成的圖公路像素材,剛開始生成的圖像模糊,隨著訓練時間增加,生成的圖像越來越清晰、并且能夠保持與已有樣本集一致的風格。
總結
- 上一篇: 广东工业大学电子工艺实习报告书(双路输出
- 下一篇: 长图预警,全网最全的23个免费无背景PN