什么是數(shù)據(jù)增強
數(shù)據(jù)增強(Data Augmentation)是一種通過讓有限的數(shù)據(jù)產(chǎn)生更多的等價數(shù)據(jù)來人工擴展訓(xùn)練數(shù)據(jù)集的技術(shù)。它是克服訓(xùn)練數(shù)據(jù)不足的有效手段,目前在深度學(xué)習(xí)的各個領(lǐng)域中應(yīng)用廣泛。但是由于生成的數(shù)據(jù)與真實數(shù)據(jù)之間的差異,也不可避免地帶來了噪聲問題。
為什么需要數(shù)據(jù)增強
深度神經(jīng)網(wǎng)絡(luò)在許多任務(wù)中表現(xiàn)良好,但這些網(wǎng)絡(luò)通常需要大量數(shù)據(jù)才能避免過度擬合。遺憾的是,許多場景無法獲得大量數(shù)據(jù),例如醫(yī)學(xué)圖像分析。數(shù)據(jù)增強技術(shù)的存在是為了解決這個問題,這是針對有限數(shù)據(jù)問題的解決方案。數(shù)據(jù)增強一套技術(shù),可提高訓(xùn)練數(shù)據(jù)集的大小和質(zhì)量,以便您可以使用它們來構(gòu)建更好的深度學(xué)習(xí)模型。在計算視覺領(lǐng)域,生成增強圖像相對容易。即使引入噪聲或裁剪圖像的一部分,模型仍可以對圖像進行分類,數(shù)據(jù)增強有一系列簡單有效的方法可供選擇,有一些機器學(xué)習(xí)庫來進行計算視覺領(lǐng)域的數(shù)據(jù)增強,比如:imgaug(https://github.com/aleju/imgaug)它封裝了很多數(shù)據(jù)增強算法,給開發(fā)者提供了方便。但是在自然語言處理領(lǐng)域中,由于自然語言本身是離散的抽象符號,微小的變化就可能會導(dǎo)致含義的巨大偏差,所以數(shù)據(jù)增強算法并不常用。很多自然語言處理任務(wù)在真正落地的時候,往往會遇到數(shù)據(jù)量不足的問題,自然語言的數(shù)據(jù)增強算法值得我們深入研究。接下來我們先介紹計算視覺領(lǐng)域的數(shù)據(jù)增強方法,再介紹自然語言處理領(lǐng)域的數(shù)據(jù)增強算法,希望能對大家有所啟發(fā)。
計算視覺數(shù)據(jù)增強
計算視覺領(lǐng)域的數(shù)據(jù)增強算法大致可以分為兩類:第一類是基于基本圖像處理技術(shù)的數(shù)據(jù)增強,第二個類別是基于深度學(xué)習(xí)的數(shù)據(jù)增強算法。
下面先介紹基于基本圖像處理技術(shù)的數(shù)據(jù)增強方法:
幾何變換(Geometric Transformations):由于訓(xùn)練集與測試集合中可能存在潛在的位置偏差,使得模型在測試集中很難達到訓(xùn)練集中的效果,幾何變換可以有效地克服訓(xùn)練數(shù)據(jù)中存在的位置偏差,而且易于實現(xiàn),許多圖像處理庫都包含這個功能。
顏色變換(Color Space):圖片在輸入計算機之前,通常會被編碼為張量(高度×寬度×顏色通道),所以可以在色彩通道空間進行數(shù)據(jù)增強,比如將某種顏色通道關(guān)閉,或者改變亮度值。
旋轉(zhuǎn) | 反射變換(Rotation/Reflection):選擇一個角度,左右旋轉(zhuǎn)圖像,可以改變圖像內(nèi)容朝向。關(guān)于旋轉(zhuǎn)角度需要慎重考慮,角度太大或者太小都不合適,適宜的角度是1度 到 20度。
噪聲注入(Noise Injection):從高斯分布中采樣出的隨機值矩陣加入到圖像的RGB像素中,通過向圖像添加噪點可以幫助CNN學(xué)習(xí)更強大的功能。
內(nèi)核過濾器(Kernel Filters):內(nèi)核濾鏡是在圖像處理中一種非常流行的技術(shù),比如銳化和模糊。將特定功能的內(nèi)核濾鏡與圖像進行卷積操作,就可以得到增強后的數(shù)據(jù)。直觀上,數(shù)據(jù)增強生成的圖像可能會使得模型面對這種類型的圖像具有更高的魯棒性。
混合圖像(Mix):通過平均圖像像素值將圖像混合在一起是一種非常違反直覺的數(shù)據(jù)增強方法。對于人來說,混合圖像生成的數(shù)據(jù)似乎沒有意義。雖然這種方法缺乏可解釋性,但是作為一種簡單有效的數(shù)據(jù)增強算法,有一系列的工作進行相關(guān)的研究。Inoue在圖像每個像素點混合像素值來混合圖像,Summers和Dinneen又嘗試以非線性的方法來混合圖像,Takahashi和Matsubara通過隨機圖像裁剪和拼接來混合圖像,以及后來的mixup方法均取得了不錯的成果。
隨機擦除(Random Erasing):隨機擦除是Zhong等人開發(fā)的數(shù)據(jù)增強技術(shù)。他們受到Dropout機制的啟發(fā),隨機選取圖片中的一部分,將這部分圖片刪除,這項技術(shù)可以提高模型在圖片被部分遮擋的情況下性能,除此之外還可以確保網(wǎng)絡(luò)關(guān)注整個圖像,而不只是其中的一部分。
縮放變換(Zoom):圖像按照一定的比例進行放大和縮小并不改變圖像中的內(nèi)容,可以增加模型的泛化性能。
移動(Translation):向左,向右,向上或向下移動圖像可以避免數(shù)據(jù)中的位置偏差,比如在人臉識別數(shù)據(jù)集合中,如果所有圖像都居中,使用這種數(shù)據(jù)增強方法可以避免可能出現(xiàn)的位置偏差導(dǎo)致的錯誤。
翻轉(zhuǎn)變換(Flipping):通常是關(guān)于水平或者豎直的軸進行圖像翻轉(zhuǎn)操作,這種擴充是最容易實現(xiàn)的擴充,并且已經(jīng)證明對ImageNet數(shù)據(jù)集有效。
裁剪(Cropping):如果輸入數(shù)據(jù)集合的大小是變化的,裁剪可以作為數(shù)據(jù)預(yù)處理的一個手段,通過裁剪圖像的中央色塊,可以得到新的數(shù)據(jù)。在實際使用過程之中,這些數(shù)據(jù)增強算法不是只使用一種,而是使用一套數(shù)據(jù)增強策略,在AutoAugment這篇文章中,作者嘗試讓模型自動選擇數(shù)據(jù)增強策略。
第二個類別是基于深度學(xué)習(xí)的數(shù)據(jù)增強算法:
特征空間增強(Feature Space Augmentation):神經(jīng)網(wǎng)絡(luò)可以將圖像這種高維向量映射為低維向量,之前討論的所有圖像數(shù)據(jù)增強方法都應(yīng)用于輸入空間中的圖像?,F(xiàn)在可以在特征空間進行數(shù)據(jù)增強操作,例如:SMOTE算法,它是一種流行的增強方法,通過將k個最近的鄰居合并以形成新實例來緩解類不平衡問題。
對抗生成(Adversarial Training):對抗攻擊表明,圖像表示的健壯性遠不及預(yù)期的健壯性,Moosavi-Dezfooli等人充分證明了這一點。對抗生成可以改善學(xué)習(xí)的決策邊界中的薄弱環(huán)節(jié),提高模型的魯棒性。
基于GAN的數(shù)據(jù)增強(GAN-based Data Augmentation):使用 GAN 生成模型來生成更多的數(shù)據(jù),可用作解決類別不平衡問題的過采樣技術(shù)。
神經(jīng)風(fēng)格轉(zhuǎn)換(Neural Style Transfer):通過神經(jīng)網(wǎng)絡(luò)風(fēng)格遷移來生成不同風(fēng)格的數(shù)據(jù),防止模型過擬合。
如果想要閱讀更多的細(xì)節(jié),請參考這篇文章:
https://link.springer.com/article/10.1186/s40537-019-0197-0
自然語言處理數(shù)據(jù)增強
在自然語言處理領(lǐng)域,被驗證為有效的數(shù)據(jù)增強算法相對要少很多,下面我們介紹幾種常見方法。
同義詞詞典(Thesaurus):Zhang Xiang等人提出了Character-level Convolutional Networks for Text Classification,通過實驗,他們發(fā)現(xiàn)可以將單詞替換為它的同義詞進行數(shù)據(jù)增強,這種同義詞替換的方法可以在很短的時間內(nèi)生成大量的數(shù)據(jù)。
隨機插入(Randomly Insert):隨機選擇一個單詞,選擇它的一個同義詞,插入原句子中的隨機位置,舉一個例子:“我愛中國” —> “喜歡我愛中國”。
隨機交換(Randomly Swap):隨機選擇一對單詞,交換位置。
隨機刪除(Randomly Delete):隨機刪除句子中的單詞。
語法樹結(jié)構(gòu)替換:通過語法樹結(jié)構(gòu),精準(zhǔn)地替換單詞。
加噪(NoiseMix) (https://github.com/noisemix/noisemix):類似于圖像領(lǐng)域的加噪,NoiseMix提供9種單詞級別和2種句子級別的擾動來生成更多的句子,例如:這是一本很棒的書,但是他們的運送太慢了。->這是本很棒的書,但是運送太慢了。
情境增強(Contextual Augmentation):這種數(shù)據(jù)增強算法是用于文本分類任務(wù)的獨立領(lǐng)域的數(shù)據(jù)擴充。通過用標(biāo)簽條件的雙向語言模型預(yù)測的其他單詞替換單詞,可以增強監(jiān)督數(shù)據(jù)集中的文本。
生成對抗網(wǎng)絡(luò):利用生成對抗網(wǎng)絡(luò)的方法來生成和原數(shù)據(jù)同分布的數(shù)據(jù),來制造更多的數(shù)據(jù)。在自然語言處理領(lǐng)域,有很多關(guān)于生成對抗網(wǎng)絡(luò)的工作:
Generating Text via Adversarial Training
GANS for Sequences of Discrete Elements with the Gumbel-softmax Distribution
SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient
回譯技術(shù)(Back Translation):回譯技術(shù)是NLP在機器翻譯中經(jīng)常使用的一個數(shù)據(jù)增強的方法。其本質(zhì)就是快速產(chǎn)生一些翻譯結(jié)果達到增加數(shù)據(jù)的目的?;刈g的方法可以增加文本數(shù)據(jù)的多樣性,相比替換詞來說,有時可以改變句法結(jié)構(gòu)等,并保留語義信息。但是,回譯的方法產(chǎn)生的數(shù)據(jù)嚴(yán)重依賴于翻譯的質(zhì)量。
擴句-縮句-句法:先將句子壓縮,得到句子的縮寫,然后再擴寫,通過這種方法生成的句子和原句子具有相似的結(jié)構(gòu),但是可能會帶來語義信息的損失。
無監(jiān)督數(shù)據(jù)擴增(Unsupervised Data Augmentation):通常的數(shù)據(jù)增強算法都是為有監(jiān)督任務(wù)服務(wù),這個方法是針對無監(jiān)督學(xué)習(xí)任務(wù)進行數(shù)據(jù)增強的算法,UDA方法生成無監(jiān)督數(shù)據(jù)與原始無監(jiān)督數(shù)據(jù)具備分布的一致性,而以前的方法通常只是應(yīng)用高斯噪聲和Dropout噪聲(無法保證一致性)。(https://arxiv.org/abs/1904.12848)
此外,這個倉庫(https://github.com/quincyliang/nlp-data-augmentation)中介紹了一些自然語言處理中的數(shù)據(jù)增強技術(shù)。
總結(jié)
數(shù)據(jù)增強是增大數(shù)據(jù)規(guī)模,減輕模型過擬合的有效方法,但是,數(shù)據(jù)增強不能保證總是有利的。在數(shù)據(jù)非常有限的域中,這可能導(dǎo)致進一步過度擬合。因此,重要的是要考慮搜索算法來推導(dǎo)增強數(shù)據(jù)的最佳子集,以便訓(xùn)練深度學(xué)習(xí)模型。
雖然相比于計算視覺,自然語言處理領(lǐng)域中的數(shù)據(jù)增強應(yīng)用更少,難度也要更大,但是同時也意味著更大的機遇。
審核編輯 :李倩
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4729瀏覽量
100347 -
nlp
+關(guān)注
關(guān)注
1文章
483瀏覽量
21979 -
計算視覺
+關(guān)注
關(guān)注
0文章
5瀏覽量
1513
原文標(biāo)題:一文了解NLP和CV領(lǐng)域的數(shù)據(jù)增強
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論