A. GAN的基本介紹和變種
GAN,全稱為Generative Adversarial Nets,直譯為「生成式對抗網路」。GAN作為生成模型的代表,自2014年被Ian Goodfellow提出後引起了業界的廣泛關注並不斷涌現出新的改進模型,深度學習泰斗之一的Yann LeCun高度評價GAN是機器學習界近十年來最有意思的想法。
GAN始終存在訓練難、穩定性差以及模型崩塌(Model Collapse)等問題。產生這種不匹配的根本原因其實還是對GAN背後產生作用的理論機制沒有探索清楚。
在推動GAN應用方面,2017年有兩項技術是非常值得關注的。其中一個是CycleGAN,其本質是利用對偶學習並結合GAN機制來優化生成圖片的效果的,採取類似思想的包括DualGAN以及DiscoGAN等,包括後續的很多改進模型例如StarGAN等。CycleGAN的重要性主要在於使得GAN系列的模型不再局限於監督學習,它引入了無監督學習的方式,只要准備兩個不同領域的圖片集合即可,不需要訓練模型所需的兩個領域的圖片一一對應,這樣極大擴展了它的使用范圍並降低了應用的普及難度。
另外一項值得關注的技術是英偉達採取「漸進式生成」技術路線的GAN方案,這項方案的引人之處在於使得計算機可以生成1024*1024大小的高清圖片,它是目前無論圖像清晰度還是圖片生成質量都達到最好效果的技術,其生成的明星圖片幾乎可以達到以假亂真的效果(參考圖3)。英偉達這項由粗到細,首先生成圖像的模糊輪廓,再逐步添加細節的思想其實並非特別新穎的思路,在之前的StackGAN等很多方案都採用了類似思想,它的獨特之處在於這種由粗到細的網路結構是動態生成的而非事先固定的靜態網路,更關鍵的是產生的圖片效果特別好
首先,有一個一代的 generator,它能生成一些很差的圖片,然後有一個一代的 discriminator,它能准確的把生成的圖片,和真實的圖片分類,簡而言之,這個 discriminator 就是一個二分類器,對生成的圖片輸出 0,對真實的圖片輸出 1。
接著,開始訓練出二代的 generator,它能生成稍好一點的圖片,能夠讓一代的 discriminator 認為這些生成的圖片是真實的圖片。然後會訓練出一個二代的 discriminator,它能准確的識別出真實的圖片,和二代 generator 生成的圖片。以此類推,會有三代,四代。。。n 代的 generator 和 discriminator,最後 discriminator 無法分辨生成的圖片和真實圖片,這個網路就擬合了。
對抗樣本(adversarial examples)是機器學習模型的輸入,攻擊者故意設計它們以引起模型出錯;它們就像是機器的視覺錯覺。
對抗樣本指的是一個經過微小調整就可以讓機器學習演算法輸出錯誤結果的輸入樣本。在圖像識別中,可以理解為原來被一個卷積神經網路(CNN)分類為一個類(比如「熊貓」)的圖片,經過非常細微甚至人眼無法察覺的改動後,突然被誤分成另一個類(比如「長臂猿」)。
對抗訓練
對抗訓練是防禦對抗樣本攻擊的一種方法。將對抗樣本和正常樣本一起訓練是一種有效的正則化,可以提高模型的准確度,同時也能有效降低對抗樣本的攻擊成功率。不過這種防禦也只是針對同樣用來產生訓練集中的對抗樣本的方法。
確實在下圖中可以看到,訓練集是正常樣本和對抗樣本,測試集是正常樣本的紅線比訓練集和測試集都是正常樣本的錯誤率要降低,說明對抗訓練是有正則化的功能。
Figure 9
在訓練的時候直接生成對抗樣本是比較低效的,之前提到的FGSM是一個高效的對抗訓練方法。只需要改變目標函數就能在訓練每個正常樣本的同時也考慮了對抗樣本。模型訓練去給對抗樣本賦予和正常樣本原分類同樣的類別。
用經過FGSM訓練的網路,可以有效的防禦用FGSM產生的對抗樣本攻擊,但是如果換其他對抗攻擊方法,也會被攻破。
對抗樣本的工作思路,可以有以下兩個方面的意義:
結論
要為集成模型創建對抗樣本,因為梯度方法的問題,難度會加大。但是生成的演算法更為可行有效。
單個模型出現盲點可以由其他模型彌補,採用的會是輸出結果最好的模型數據。
我們發現當我們用動態創建的對抗模型來訓練演算法時,能夠解決這些對抗樣本的問題。這是因為當模型面對這些可能出現問題的對抗低概率區域時,可以產生更高的「免疫力」。這同時也支持了低概率區域的論點,在這些區域的對抗樣本更難處理。
DCGAN是繼GAN之後比較好的改進,其主要的改進主要是在網路結構上,到目前為止,DCGAN的網路結構還是被廣泛的使用,DCGAN極大的提升了GAN訓練的穩定性以及生成結果質量。
論文的主要貢獻是:
◆ 為GAN的訓練提供了一個很好的網路拓撲結構。
◆ 表明生成的特徵具有向量的計算特性。
D(x)表示D網路判斷真實圖片是否真實的概率(因為x是真實的,所以對於D來說,這個值越接近1越好)。而D(G(z))D(G(z))是為了D判斷G生成的圖片是否真實的概率。
G的目的:G應該希望自己生成的圖片「越接近真實越好」。也就是說,G希望D(G(z))D(G(z))盡可能得大,這是V(D,G)V(D,G)會變小。
D的目的:D的能力越強,D(x)D(x)應該越大,D(G(x))D(G(x))應該越小。因此D的目的和G不同,D希望V(D,G)V(D,G)越大越好。
DCGAN對卷積神經網路的結構做了一些改變,以提高樣本的質量和收斂的速度,這些改變有:
取消所有pooling層。G網路中使用轉置卷積(transposed convolutional layer)進行上采樣,D網路中用加入stride的卷積代替pooling。
在D和G中均使用batch normalization
去掉FC層,使網路變為全卷積網路
G網路中使用ReLU作為激活函數,最後一層使用tanh
D網路中使用LeakyReLU作為激活函數
DCGAN中的G網路示意:
DCGAN的生成器網路結構如上圖所示,相較原始的GAN,DCGAN幾乎完全使用了卷積層代替全鏈接層,判別器幾乎是和生成器對稱的,從上圖中我們可以看到,整個網路沒有pooling層和上采樣層的存在,實際上是使用了帶步長(fractional-strided)的卷積代替了上采樣,以增加訓練的穩定性。
DCGAN能改進GAN訓練穩定的原因主要有:
◆ 使用步長卷積代替上采樣層,卷積在提取圖像特徵上具有很好的作用,並且使用卷積代替全連接層。
◆ 生成器G和判別器D中幾乎每一層都使用batchnorm層,將特徵層的輸出歸一化到一起,加速了訓練,提升了訓練的穩定性。(生成器的最後一層和判別器的第一層不加batchnorm)
◆ 在判別器中使用leakrelu激活函數,而不是RELU,防止梯度稀疏,生成器中仍然採用relu,但是輸出層採用tanh
◆ 使用adam優化器訓練,並且學習率最好是0.0002,(我也試過其他學習率,不得不說0.0002是表現最好的了)
BigGAN在訓練中 Batch 採用了很大的 Batch,已經達到了 2048(我們平常訓練 Batch 正常都是 64 居多),在卷積的通道上也是變大了,還有就是網路的參數變多了,在 2048 的 Batch 下整個網路的參數達到了接近 16 億
B. VAT虛擬對抗訓練
參考論文:Graph Adversarial Training: Dynamically Regularizing Based on Graph Structure
功能介紹: 虛擬對抗訓練是一種正則化方法,正則化在深度學習中是防止過擬合的一種方法。
關於正則化我就不過多展開,此處可理解為提高泛化能力。
最常見的正則化是直接對模型的參數的大小進行限制。
對抗訓練
對抗性訓練可以作為一種正則化方法來 提高泛化性能 以及防止深度學習模型過度擬合。
機器學習方法(包括深度學習)對對抗樣本非常敏感,這些對抗樣本和非對抗樣本非常相似,但是模型(已經在非對抗樣本中訓練好的模型)卻會錯分這些樣本。為了能更好的分類該類樣本,提出了對抗訓練的概念。
總結 為使得訓練模型更好的分類對抗樣本,對模型進行的訓練。
這里不重點展開重點,詳情就看我上一篇文章:
神經網路中的對抗攻擊與對抗樣本
由於本文章是對圖對抗訓練:基於圖結構的動態規則化(GAT)的改進,此處就不詳細推導。
GAT詳情請看: 圖對抗訓練:基於圖結構的動態正則化(GAT)
本篇是在 上一篇的基礎上 進行的討論,本篇將沿用上一篇的符號意義,並且不再說明,如有需要,則在上一篇手寫推導標注中查找。
改進之處:
1.局部平滑度
改動: 將損失函數中對於真實標簽的分布被替換為當前迭代下的標簽預測分布,採用真實分布,具體參數可以進行動態的多次迭代,隨著多次迭代,參數數量可以劇增,使得平滑性更好。
2.快速計算對抗方向
採用冪迭代法計算矩陣最大特徵值對應的特徵向量。
3.增加了額外的正則項
增加條件熵作為額外的正則項,讓輸出的概率分布更集中,更確定。達到更好的預測效果
數學推導;
C. 智能網聯汽車新興攻擊方式有哪些分別有哪些特點
一、基於車輛通信模塊信息泄露的遠程式控制制劫持攻擊
安全研究人員發現,國內自主品牌汽車大多使用專用apn,通過車內通信模塊中的T-box連接與車輛控制相關的TSP後端伺服器。通過ISP拉出一條專線,可以在一定程度上保護後端伺服器的安全,但也會給後端伺服器帶來更多的安全隱患。由於專網apn的存在,Tsp不會暴露在公網,導致Tsp安全人員忽略了專網和Tsp本身的安全問題。專網內部沒有嚴格的安全訪問控制,T-box過於可信,允許T-box隨意訪問專網內部資產。同時,許多不必要的基礎設施服務也暴露在APN專網中,這將導致更多的安全風險。
D. 神經網路中的對抗攻擊與對抗樣本
對抗攻擊
對抗攻擊論文參考:
《Intriguing properties of neural networks》
《神經網路有趣的特性》
《Threat of Adversarial Attacks on Deep Learning in Computer Vision: A Survey》,以下簡稱『Survey』。
圖片做適當修改後能欺騙深度學習模型的可能性
1.舉例理解:
左邊是一張能夠被GoogLeNet正常分類為熊貓的圖片,在添加一定的噪音後變成右圖,在人的肉眼看來,它還是熊貓,但GoogLeNet會判定為長臂猿。這種被修改後人類無法明顯察覺,卻被機器識別錯誤的數據即為 對抗樣本 ,而這整個過程就可以理解為 對抗攻擊 。
2.數學理解:
神經網路中每層神經元的輸入 a = g(Wx+b),其中 g 為激活函數,W 為權重參數,x 為上一層的樣本數據,b 為偏置參數,那麼從拓撲學角度來看,在一個二維平面上,這個過程相當於哪幾個步驟呢?
(1)一次使用權重參數矩陣 W 的線性變換
(2)一次使用偏執向量 b 的移動
(3)一次應用非線性激活函數 g 的變換
在 二維平面 ,其實是將整個平面進行了 旋轉、移動和拉伸 三步。
分類問題
簡單分類問題:通過較少幾次變換將問題轉換為一條直線可分割的空間。
既是一層神經網路就可以完成分類,通過變換空間布局,最終通過一條直線完成分類。
舉例:
簡單轉換ing........
轉換結果看下圖
復雜分類問題:通過多幾次的轉換完成將問題轉換為一條直線可分割的空間。
就是多層神經網路完成分類,通過變換空間布局,最終通過一條直線完成分類。
舉例:
動態多步轉換
以上是從低維度理解神經網路的訓練,其中也有難以拉伸的例外,下圖所示的圓套圓的情況,就是難以在二維空間將其拉伸到理想的位置的例子。
但,增加神經元,可以在 三維空間 中輕松將其分離。
看!
歸納 同樣對於復雜問題可以通過,增加神經元在高維度通過更長且復雜的方式解決。
但是例如兩個相互套起來的環,按照推測需要在四維空間中才能完全分開,然而我們難以想像四維空間,在現實世界的數據集中,這種死結或者纏繞問題可能會更復雜。
對於神經網路來,可以選擇 將打成死結的數據盡可能拉伸開,而不是完全解開 ,如下圖,對於分類問題來說,已經具有較高的准確率和召回率。
部分情況下,為了更精確地分類,較寬的神經網路可能相對深度來說更重要。
綜上所述
1. 神經網路中包含語義信息的不在每個獨立的神經單元,而是整個空間。 神經網路在最後一層能將樣本中諸多變化的因子理清楚並理解其語義,並不是因為某個獨立神經元中包含了什麼特定的語義,而是 對整個空間進行變換後從最終的表徵層中學到的 ,經過學習,神經網路會 放大某些相關因子,同時縮小某些無關因子 。
2. 神經網路學習到的輸入到輸出的映射在很大程度上是不連續的。 就像上面圖中為了解開一個死結所做的拉伸結果一樣, 在人看來,在拉伸距離較大的地方我們可以認為這種映射是連續的, 然而 對於仍然纏繞在一起的部分,之前可以用來劃分界限的直線或者超平面已經無法連續 。
通過仔細觀察可以區分出來,但是上文只是一個簡單的例子,現實世界中的真實數據較為復雜,對於肉眼來說可能很難分清楚纏繞在一起的部分。對於神經網路來說, 對抗樣本已經嚴重的跨過了用於分類的界限 ,而對於肉眼其實還 看不出來它有移動。
()線性特性的攻擊行為()和()高效製造對抗樣本的方法()
參考論文:
《Explaining and harnessing adversarial examples》
《對抗性例子的解讀和掌握》
深度神經網路在高緯空間中的線性特性已經足以產生這種攻擊行為 ,並提出了一種 更高效生成對抗樣本的方法 ,接下來我們就簡單分析一下這一理論和方法。
目前神經網路為了提高訓練效率所使用的激活函數在局部都過於線性。
例如:
類比先前舉出的拓撲學例子,在 最後的表徵層 都是 通過直線或超平面完成的分類 ,在線性的假設下,暫且不通過二維或三維空間來理解,先從一個簡單的數學公式角度開始。
數學解釋
公式內容解釋:
w 是訓練好的參數向量
x 表示真實樣本數據向量
η 表示給圖像加入的噪音向量
x ~表示加入噪音後新生成的樣本
當加入足夠小的 η 時,肉眼無法區分出 x 的變化,直觀感覺上左邊的式子可能也不會變化很大。
事實上 ,然而 η 當的方向與 w 完全一致的時候,即使很小,也會使整個激活值變化很大。
假設證明:
如果 w 是一個 n 維向量,而其權值的平均大小為 m,那麼激活值將會增加 nm。可見,在一個肉眼幾乎無法差覺的擾動干擾下,對神經網路最終激活層的計算會產生巨大的干擾,從而迷惑神經網路訓練出來的模型。
尋找正確方向
當 η 與 w 的方向一致時會使激活值最大,那麼,如何找到這個正確的方向呢?
結論,那就是損失函數在待構造樣本上的梯度方向,即下面的式子。
ε 是一個調節系數
sign() 是一個符號函數,代表的意思也很簡單,就是取一個值的符號
(當值大於 0 時取 1,當值等於 0 時取 0,當值小於 0 時取 -1)
▽ 表示求 x 的梯度,可以理解為偏導,
J 是訓練模型的損失函數。
結論的由來
在正常的神經網路模型訓練過程中,有一個過程叫反向傳播,就是對參數求偏導,然後將參數更新,我們結合下面這張圖看一下。
假設圖中的函數即為 損失函數 ,為了使損失函數降到最低,我們會根據當前值的梯度去調整。
當梯度小於 0 的時候我們可以看出,當前值需要右移。
而當梯度大於 0 的時候,當前值需要左移。
這個過程實際上就是用 θ 減去 θ。擴展到損失函數 J(θ, x, y) 中,θ 即為 我們要調整的參數 ,因此在樣本 x 和 y 不改變的情況下,我們會**不斷去調整參數 θ **以尋求局部最優解,即 θ = θ - θ 。
生成對抗樣本,也可以採用類似的方法,那就是 固定參數 θ,調整 x 同時使損失函數增大 ,而不是變小,此時就應該讓 x 往相反的方向走,即 x = x + x ,這樣是不是很容易可以理解上面 η 的定義呢?在實踐中,我們還需要通過 ε 這個參數來 調節噪音的大小 ,這種方法相比之前提到的優化方法非常高效,基本只需要一次計算就可以找到對抗樣本,因此作者將這種方法叫做 快速梯度符號法 (Fast Gradient Sign Method,FGSM)。總結一下FGSM,這種方法通過替換目標值 y 就可以 讓攻擊樣本朝著指定的分類目標走 ,即,可以做任意目標的欺騙。
將線性假設簡化到二維空間,我們要求的 η 其方向正好就接近於參數 w 的方向,不再展開說明,有興趣的讀者可以自行畫一畫。
建立在一個高維空間線性的假設或猜測前提下,需要 實驗 支撐,根據下列圖片分析展開。
圖片解釋
這張圖是對數據集CIFAR-10的分類器的決策邊界示意圖。
其中每個小格子代表的是不同的CIFAR-10樣本,
每個小格子中:
橫向從左往右代表的是FGSM演算法中的梯度方向,
縱向代表的是FGSM梯度方向的正交方向,
白色表示模型能分類正確的情況
彩色代表預測出錯的情況
不同的顏色代表不同的錯誤預測分類。
可以看出,在出錯的區域都程線性分布,另外,如果橫軸的方向走的不夠遠,即便再往其他方向走都無法使模型出錯,而一單進入這個區域,就會出現大量的對抗樣本。而在隨機找到的對抗樣本中,這種分布也是很隨機的,甚至很難找到,見下圖。
從實驗結果表明
高維空間中的線性假設也是合理的
舉例
一匹叫做 Clever Hans 的馬,剛出現的時候人們認為這匹馬會做算術,但實際上它只是會閱讀人的表情,當它點馬蹄的次數接近正確答案時,人們的表情會更興奮,它就知道該這個時候停止了。
隱喻神經網路,一個測試效果良好的分類器,其實並不像人類一樣學習到了所分類樣本的真正底層概念,只不過剛好構建了一個在訓練數據上運行相當良好的模型,所以,你以為你以為的就是你以為的嗎?
分類器能夠在訓練集的不同子集上訓練時獲得大致相同的分類權重,因為機器學習演算法能夠泛化, 基礎分類權重的穩定性反過來又會導致對抗性樣本的穩定性。因此, 對抗攻擊可以認為是存在於任何神經網路模型。
以上是論文二的線性特性的攻擊行為
高效製造對抗樣本的方法
目前來看還沒有能夠完全抵抗這種攻擊的方法,其實結合攻擊的原理也不難看出,即便分類器做得再好,總能使一個樣本用最小的干擾走到錯誤的分類區域,我們能做的更多是如何構造魯棒性更強的模型,同時也保持對這個領域的關注。『Survey』(注意第一篇論文的引用有注釋)中總結的目前抵禦攻擊的辦法可以分為三大類:
1.修改訓練樣本 ———— 通過添加更多的對抗樣本到訓練集中可以有效避免一部分攻擊 ,但這更像是一種無奈的做法, 當擴大樣本集的時候,其實分類邊界有可能也在隨之擴大 。
2.修改訓練網路 ,這類方法會對訓練網路做出一定調整,其中有一種方式是模擬生物學 在最後一層使用更加非線性的激活函數 ,但這種方式又會 導致訓練效率和效果下降 。修改訓練網路的方法分為 完全抵抗 和 僅檢測 兩種方式,完全抵抗其實就是讓模型能將對抗樣本識別為正確的分類,而僅檢測是為了發現這種攻擊樣本,從而拒絕服務。
3.附加網路 ,這種方式是在 不改變原有模型的情況下使用額外的網路進行輔助 ,這樣可以使原有網路保持不變,其中最有效的一種方式是生成式對抗網路——GAN。同樣的,這種方式也分為 完全抵抗 和 僅檢測 兩種方式。
總結一下
定義:
對抗樣本:是指在數據集中通過故意添加細微的干擾所形成的輸入樣本,會導致模型以高置信度給出一個錯誤的輸出。
原因分析:
對抗樣本出現的主要原因之一是過度線性, 神經網路主要是基於線性塊構建的,實現的整體函數被證明是高度線性的,如果一個線性函數具有許多輸入,那麼它的值可以非常迅速地改變。
參考:
E. 數據增強的方法有哪些
1 什麼是數據增強?
數據增強也叫數據擴增,意思是在不實質性的增加數據的情況下,讓有限的數據產生等價於更多數據的價值。
比如上圖,第1列是原圖,後面3列是對第1列作一些隨機的裁剪、旋轉操作得來。
每張圖對於網路來說都是不同的輸入,加上原圖就將數據擴充到原來的10倍。假如我們輸入網路的圖片的解析度大小是256×256,若採用隨機裁剪成224×224的方式,那麼一張圖最多可以產生32×32張不同的圖,數據量擴充將近1000倍。雖然許多的圖相似度太高,實際的效果並不等價,但僅僅是這樣簡單的一個操作,效果已經非凡了。
如果再輔助其他的數據增強方法,將獲得更好的多樣性,這就是數據增強的本質。
數據增強可以分為,有監督的數據增強和無監督的數據增強方法。其中有監督的數據增強又可以分為單樣本數據增強和多樣本數據增強方法,無監督的數據增強分為生成新的數據和學習增強策略兩個方向。
2 有監督的數據增強
有監督數據增強,即採用預設的數據變換規則,在已有數據的基礎上進行數據的擴增,包含單樣本數據增強和多樣本數據增強,其中單樣本又包括幾何操作類,顏色變換類。
2.1. 單樣本數據增強
所謂單樣本數據增強,即增強一個樣本的時候,全部圍繞著該樣本本身進行操作,包括幾何變換類,顏色變換類等。
(1) 幾何變換類
幾何變換類即對圖像進行幾何變換,包括翻轉,旋轉,裁剪,變形,縮放等各類操作,下面展示其中的若干個操作。
水平翻轉和垂直翻轉
隨機旋轉
隨機裁剪
變形縮放
翻轉操作和旋轉操作,對於那些對方向不敏感的任務,比如圖像分類,都是很常見的操作,在caffe等框架中翻轉對應的就是mirror操作。
翻轉和旋轉不改變圖像的大小,而裁剪會改變圖像的大小。通常在訓練的時候會採用隨機裁剪的方法,在測試的時候選擇裁剪中間部分或者不裁剪。值得注意的是,在一些競賽中進行模型測試時,一般都是裁剪輸入的多個版本然後將結果進行融合,對預測的改進效果非常明顯。
以上操作都不會產生失真,而縮放變形則是失真的。
很多的時候,網路的訓練輸入大小是固定的,但是數據集中的圖像卻大小不一,此時就可以選擇上面的裁剪成固定大小輸入或者縮放到網路的輸入大小的方案,後者就會產生失真,通常效果比前者差。
(2) 顏色變換類
上面的幾何變換類操作,沒有改變圖像本身的內容,它可能是選擇了圖像的一部分或者對像素進行了重分布。如果要改變圖像本身的內容,就屬於顏色變換類的數據增強了,常見的包括雜訊、模糊、顏色變換、擦除、填充等等。
基於雜訊的數據增強就是在原來的圖片的基礎上,隨機疊加一些雜訊,最常見的做法就是高斯雜訊。更復雜一點的就是在面積大小可選定、位置隨機的矩形區域上丟棄像素產生黑色矩形塊,從而產生一些彩色雜訊,以Coarse Dropout方法為代表,甚至還可以對圖片上隨機選取一塊區域並擦除圖像信息。
添加Coarse Dropout雜訊
顏色變換的另一個重要變換是顏色擾動,就是在某一個顏色空間通過增加或減少某些顏色分量,或者更改顏色通道的順序。
顏色擾動
還有一些顏色變換,本文就不再詳述。
幾何變換類,顏色變換類的數據增強方法細致數還有非常多,推薦給大家一個git項目:
https://github.com/aleju/imgaug
預覽一下它能完成的數據增強操作吧。
2.2. 多樣本數據增強
不同於單樣本數據增強,多樣本數據增強方法利用多個樣本來產生新的樣本,下面介紹幾種方法。
(1) SMOTE[1]
SMOTE即Synthetic Minority Over-sampling Technique方法,它是通過人工合成新樣本來處理樣本不平衡問題,從而提升分類器性能。
類不平衡現象是很常見的,它指的是數據集中各類別數量不近似相等。如果樣本類別之間相差很大,會影響分類器的分類效果。假設小樣本數據數量極少,如僅占總體的1%,則即使小樣本被錯誤地全部識別為大樣本,在經驗風險最小化策略下的分類器識別准確率仍能達到99%,但由於沒有學習到小樣本的特徵,實際分類效果就會很差。
SMOTE方法是基於插值的方法,它可以為小樣本類合成新的樣本,主要流程為:
第一步,定義好特徵空間,將每個樣本對應到特徵空間中的某一點,根據樣本不平衡比例確定好一個采樣倍率N;
第二步,對每一個小樣本類樣本(x,y),按歐氏距離找出K個最近鄰樣本,從中隨機選取一個樣本點,假設選擇的近鄰點為(xn,yn)。在特徵空間中樣本點與最近鄰樣本點的連線段上隨機選取一點作為新樣本點,滿足以下公式:
第三步,重復以上的步驟,直到大、小樣本數量平衡。
該方法的示意圖如下。
在python中,SMOTE演算法已經封裝到了imbalanced-learn庫中,如下圖為演算法實現的數據增強的實例,左圖為原始數據特徵空間圖,右圖為SMOTE演算法處理後的特徵空間圖。
(2) SamplePairing[2]
SamplePairing方法的原理非常簡單,從訓練集中隨機抽取兩張圖片分別經過基礎數據增強操作(如隨機翻轉等)處理後經像素以取平均值的形式疊加合成一個新的樣本,標簽為原樣本標簽中的一種。這兩張圖片甚至不限制為同一類別,這種方法對於醫學圖像比較有效。
經SamplePairing處理後可使訓練集的規模從N擴增到N×N。實驗結果表明,因SamplePairing數據增強操作可能引入不同標簽的訓練樣本,導致在各數據集上使用SamplePairing訓練的誤差明顯增加,而在驗證集上誤差則有較大幅度降低。
盡管SamplePairing思路簡單,性能上提升效果可觀,符合奧卡姆剃刀原理,但遺憾的是可解釋性不強。
(3) mixup[3]
mixup是Facebook人工智慧研究院和MIT在「Beyond Empirical Risk Minimization」中提出的基於鄰域風險最小化原則的數據增強方法,它使用線性插值得到新樣本數據。
令(xn,yn)是插值生成的新數據,(xi,yi)和(xj,yj)是訓練集隨機選取的兩個數據,則數據生成方式如下
λ的取值范圍介於0到1。提出mixup方法的作者們做了豐富的實驗,實驗結果表明可以改進深度學習模型在ImageNet數據集、CIFAR數據集、語音數據集和表格數據集中的泛化誤差,降低模型對已損壞標簽的記憶,增強模型對對抗樣本的魯棒性和訓練生成對抗網路的穩定性。
SMOTE,SamplePairing,mixup三者思路上有相同之處,都是試圖將離散樣本點連續化來擬合真實樣本分布,不過所增加的樣本點在特徵空間中仍位於已知小樣本點所圍成的區域內。如果能夠在給定范圍之外適當插值,也許能實現更好的數據增強效果。
3 無監督的數據增強
無監督的數據增強方法包括兩類:
(1) 通過模型學習數據的分布,隨機生成與訓練數據集分布一致的圖片,代表方法GAN[4]。
(2) 通過模型,學習出適合當前任務的數據增強方法,代表方法AutoAugment[5]。
3.1 GAN
關於GAN(generative adversarial networks),我們已經說的太多了。它包含兩個網路,一個是生成網路,一個是對抗網路,基本原理如下:
(1) G是一個生成圖片的網路,它接收隨機的雜訊z,通過雜訊生成圖片,記做G(z) 。
(2) D是一個判別網路,判別一張圖片是不是「真實的」,即是真實的圖片,還是由G生成的圖片。
GAN的以假亂真能力就不多說了。
2 Autoaugmentation[5]
AutoAugment是Google提出的自動選擇最優數據增強方案的研究,這是無監督數據增強的重要研究方向。它的基本思路是使用增強學習從數據本身尋找最佳圖像變換策略,對於不同的任務學習不同的增強方法,流程如下:
(1) 准備16個常用的數據增強操作。
(2) 從16個中選擇5個操作,隨機產生使用該操作的概率和相應的幅度,將其稱為一個sub-policy,一共產生5個sub-polices。
(3) 對訓練過程中每一個batch的圖片,隨機採用5個sub-polices操作中的一種。
(4) 通過模型在驗證集上的泛化能力來反饋,使用的優化方法是增強學習方法。
(5) 經過80~100個epoch後網路開始學習到有效的sub-policies。
(6) 之後串接這5個sub-policies,然後再進行最後的訓練。
總的來說,就是學習已有數據增強的組合策略,對於門牌數字識別等任務,研究表明剪切和平移等幾何變換能夠獲得最佳效果。
F. GAN生成對抗網路(一)
GAN(Generative Adversarial Networks)是兩個網路的的組合, 一個網路生成模擬數據, 另一個網路判斷生成的數據是真實的還是模擬的。生成模擬數據的網路要不斷優化自己讓判別的網路判斷不出來, 判別的網路也要優化自己讓自己判斷得更准確。 二者關系形成對抗博弈,因此叫 對抗神經網路 (生成對抗網路)。實驗證明, 利用這種網路間的對抗關系所形成的網路, 在無監督及半監督領域取得了很好的效果, 可以算是用網路來監督網路的一個自學習過程。在GAN發明之前,變分自編碼器被認為是理論完美、實現簡單,使用神經網路訓練起來很穩定, 生成的圖片逼近度也較高, 但是人類還是可以很輕易地分辨出真實圖片與機器生成的圖片。
生成對抗網路包含了 2 個子網路: 生成網路(Generator, G)和判別網路(Discriminator,D), 其中生成網路負責學習樣本的真實分布,判別網路負責將生成網路采樣的樣本與真實樣本區分開來。
生成網路 G(𝐳) 生成網路 G 和自編碼器的 Decoder 功能類似, 從先驗分布 中采樣隱藏變數 ,通過生成網路 G 參數化的 分布, 獲得生成樣本 ,如下圖所示。 其中隱藏變數𝒛的先驗分布 可以假設屬於某中已知的分布,比如多元均勻分布 。
可以用深度神經網路來參數化, 如下圖所示, 從均勻分布 中采樣出隱藏變數𝒛, 經過多層轉置卷積層網路參數化的 分布中采樣出樣本 。
判別網路 D(𝒙) 判別網路和普通的二分類網路功能類似,它接受輸入樣本𝒙,包含了采樣自真實數據分布 的樣本 ,也包含了采樣自生成網路的假樣本 , 和 共同組成了判別網路的訓練數據集。判別網路輸出為𝒙屬於真實樣本的概率 ,我們把所有真實樣本 的標簽標注為1,所有生成網路產生的樣本 標注為0, 通過最小化判別網路預測值與標簽之間的誤差來優化判別網路參數。
我們的目標很明確, 既要不斷提升判斷器辨別真假圖像樣本的能力, 又要不斷提升生成器生成更加逼真的圖像,使判別器越來越難判別。
對於判別網路 D ,它的目標是能夠很好地分辨出真樣本 與假樣本 。即最小化圖片的預測值和真實值之間的交叉熵損失函數:
其中 代表真實樣本 在判別網路 的輸出, 為判別網路的參數集, 為生成樣本 在判別網路的輸出, 為 的標簽,由於真實樣本標注為真,故 , 為生成樣本的 的標簽,由於生成樣本標注為假,故 。 根據二分類問題的交叉熵損失函數定義:
因此判別網路的優化目標是:
去掉 中的負號,把 問題轉換為 問題,並寫為期望形式:
對於生成網路G(𝒛) ,我們希望 能夠很好地騙過判別網路 , 假樣本 在判別網路的輸出越接近真實的標簽越好。也就是說,在訓練生成網路時, 希望判別網路的輸出 越逼近 1 越好,此時的交叉熵損失函數:
把 問題轉換為 問題,並寫為期望形式:
再等價轉化為:
GAN的優化過程不像通常的求損失函數的最小值, 而是保持生成與判別兩股力量的動態平衡。 因此, 其訓練過程要比一般神經網路難很多。
把判別網路的目標和生成網路的目標合並,寫成min-max形式:
原GAN論文中:
這里為了好理解,把各個符號梳理的更清晰了,注意符號和網路參數的對應。
理想情況下 , 會有更精確的鑒別真偽數據的能力,經過大量次數的迭代訓練會使 盡可能模擬出以假亂真的樣本, 最終整個GAN會達到所謂的納什均衡, 即 對於生成樣本和真實樣本鑒別結果為正確率和錯誤率各佔50%。下面具體從理論層面來推導。
現在從理論層面進行分析, 通過博弈學習的訓練方式,生成器 G 和判別器 D 分別會達到什麼狀態。 具體地,來看以下 2 個問題:
首先我們通過 一維正態分布的例子給出一個直觀的解釋,如下圖所示,黑色虛線曲線代表了真實數據的分布 , 為某正態分布 , 綠色實線代表了生成網路學習到的分布 , 藍色虛線代表了判別器的決策邊界曲線, 圖中(a)(b)(c)(d)分別代表了生成網路的學習軌跡。在初始狀態,如圖 (a)所示, 分布與 差異較大,判別器可以很輕松地學習到決策邊界,即圖(a)中的藍色虛線,將來自 的采樣點判定為 0, 中的采樣點判定為 1。 隨著生成網路的分布 越來越逼近真實分布 ,判別器越來越困難將真假樣本區分開,如圖 (b)(c)所示。 最後,生成網路性能達到最佳,學習到的分布 ,此時從生成網路中采樣的樣本非常逼真, 判別器無法區分,即判定為真假樣本的概率均等,如圖(d)所示。
固定生成器G的參數 ,判別器D最佳能達到的狀態:
證明: 對於給定的生成器G,要讓判別器D達到最優,我們的目標是最大化損失函數,其積分形式為:
對於給定的 ,真實分布始終是固定的,所以 和 都是定值,於是對於判別器D,要找出
的最大值,其中 是判別器網路參數,對於函數 ,不難得到 在 處取得極大值且是最大值。因此可得 的極值點也為
故判別器 能達到的最佳狀態為定理中給出的式子。
現在考慮第二個問題。
JS 散度(Jensen–Shannon divergence)
對於KL散度, ,是不對稱的。但JS散度是對稱的。
當 達到 時,考慮此時 和 的 散度:
考慮到判別網路到達 時,此時的損失函數為:
於是我們可以得到:
對於生成網路 而言,目標是最小化損失函數,由於 ,因此 取得最小值僅在 時(此時 ), 取得最小值:
此時生成網路達到 狀態是:
即 的學到的分布 與真實分布 一致,網路達到納什均衡點,此時:
即對於生成器生成的圖像有0.5的概率被判定為真,也有0.5的概率被判定為假。