您想構(gòu)建一個(gè)沒有太多訓(xùn)練數(shù)據(jù)的機(jī)器學(xué)習(xí)模型嗎?眾所周知,機(jī)器學(xué)習(xí)需要大量數(shù)據(jù),而收集和注釋數(shù)據(jù)需要時(shí)間且成本高昂(點(diǎn)擊文末“閱讀原文”獲取完整代碼數(shù)據(jù))。
本文介紹了一些在沒有太多數(shù)據(jù)或標(biāo)記數(shù)據(jù)的情況下進(jìn)行圖像分類的方法。我將介紹遷移學(xué)習(xí)、自監(jiān)督學(xué)習(xí)的最重要方面。
視頻
與標(biāo)記數(shù)據(jù)相比,未標(biāo)記的數(shù)據(jù)通常更容易訪問。不利用這一點(diǎn)就是一種浪費(fèi)!
自監(jiān)督學(xué)習(xí)解決了從未標(biāo)記的數(shù)據(jù)中學(xué)習(xí)深度特征的問題。訓(xùn)練自監(jiān)督模型后,特征提取器可以像在遷移學(xué)習(xí)中一樣使用,因此您仍然需要一些帶注釋的數(shù)據(jù)來進(jìn)行微調(diào)。
那么,如何從未標(biāo)記的數(shù)據(jù)中訓(xùn)練深度特征提取器呢?總而言之,您需要一個(gè)足夠困難的代理任務(wù)(Pretext Task),使您能夠?qū)W習(xí)分類任務(wù)的有趣特征。
如果你想在不玩實(shí)際比賽的情況下贏得足球比賽,例如,你可以盡可能多地訓(xùn)練雜技球。雜技球?qū)⑻岣吣目厍蚣夹g(shù),這在玩游戲時(shí)會派上用場。
代理任務(wù)的一個(gè)例子是預(yù)測圖像的旋轉(zhuǎn)角度?;旧?,對于每個(gè)圖像,您應(yīng)用旋轉(zhuǎn) z 來獲取旋轉(zhuǎn)的圖像 x。然后,你訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)來預(yù)測 x 中的 z 。 此轉(zhuǎn)換預(yù)測任務(wù)會強(qiáng)制您的網(wǎng)絡(luò)深入了解您的數(shù)據(jù)。事實(shí)上,要預(yù)測狗圖像的旋轉(zhuǎn),您的網(wǎng)絡(luò)首先需要了解圖像中有一只狗,并且狗應(yīng)該以特定的方式定向。
根據(jù)特定目標(biāo),代理任務(wù)可能會有很大差異。常用的代理任務(wù)包括:
轉(zhuǎn)換預(yù)測:數(shù)據(jù)集中的樣本由轉(zhuǎn)換修改,您的網(wǎng)絡(luò)將學(xué)習(xí)預(yù)測轉(zhuǎn)換。
屏蔽預(yù)測:輸入圖像的隨機(jī)方塊被屏蔽,網(wǎng)絡(luò)必須預(yù)測圖像的屏蔽部分。
實(shí)例區(qū)分:了解區(qū)分所有數(shù)據(jù)樣本的表示形式。例如,每個(gè)數(shù)據(jù)點(diǎn)都可以被視為一個(gè)類,并且可以在此任務(wù)上訓(xùn)練分類器。
當(dāng)您從頭開始訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)時(shí),您通常會隨機(jī)初始化權(quán)重。這是初始化神經(jīng)網(wǎng)絡(luò)的最佳方法嗎?答案通常是否定的。
首先,深度學(xué)習(xí)是關(guān)于表征的。在經(jīng)典機(jī)器學(xué)習(xí)中,特征需要手動制作。深度學(xué)習(xí)背后的想法是,你讓你的神經(jīng)網(wǎng)絡(luò)在訓(xùn)練時(shí)自己學(xué)習(xí)特征表示。
在神經(jīng)網(wǎng)絡(luò)的每一層之間,您有一個(gè)輸入數(shù)據(jù)的表示形式。你越深入你的神經(jīng)網(wǎng)絡(luò),你的表示應(yīng)該越全局化。通常,已知分類器神經(jīng)網(wǎng)絡(luò)的第一層能夠檢測顏色和形狀。中間層將第一層表示作為輸入,以計(jì)算比第一層更復(fù)雜的概念。例如,他們可能會檢測到蘋果葉或枝干的存在。最后一層給出了圖像來自每個(gè)類的概率。
遷移學(xué)習(xí)背后的想法是,從另一個(gè)分類任務(wù)中學(xué)習(xí)的一些表示可能對您的任務(wù)有用。遷移學(xué)習(xí)是關(guān)于在另一項(xiàng)任務(wù)上獲取預(yù)訓(xùn)練網(wǎng)絡(luò)的第一層,在其上添加新層,并在感興趣的數(shù)據(jù)集上微調(diào)整個(gè)網(wǎng)絡(luò)。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
【視頻】神經(jīng)網(wǎng)絡(luò)正則化方法防過擬合和R語言CNN分類手寫數(shù)字圖像數(shù)據(jù)MNIST|數(shù)據(jù)分享
左右滑動查看更多
01
02
03
04
作為比較,如果你的目標(biāo)是學(xué)習(xí)贏得足球比賽,那么遷移學(xué)習(xí)將包括先學(xué)習(xí)打籃球,習(xí)慣移動你的身體,鍛煉你的耐力等,然后再開始玩足球比賽。
它將如何影響最終網(wǎng)絡(luò)的性能?您應(yīng)該在哪里切斷預(yù)先訓(xùn)練的網(wǎng)絡(luò)?這些問題在中得到了廣泛的解決。
總結(jié)最重要的想法:
神經(jīng)網(wǎng)絡(luò)的第一層是非常通用的,而最深的層是預(yù)訓(xùn)練任務(wù)中最專業(yè)的。因此,您可以預(yù)期,如果您的預(yù)訓(xùn)練任務(wù)接近目標(biāo)任務(wù),那么保留更多層將更有益。
在中間層切割通常會導(dǎo)致性能不佳。這是由于通過微調(diào)在中間層中達(dá)到的脆弱平衡。
使用預(yù)先訓(xùn)練的權(quán)重總是比使用隨機(jī)初始化的權(quán)重更好。這是因?yàn)橥ㄟ^先訓(xùn)練另一個(gè)任務(wù),你的模型學(xué)會了它本來不會學(xué)到的特征。
當(dāng)重新訓(xùn)練這些預(yù)先訓(xùn)練的權(quán)重時(shí),可以獲得更好的表現(xiàn)——最終對它們使用較低的學(xué)習(xí)率。
R語言深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò) (CNN)對 CIFAR 圖像進(jìn)行分類:訓(xùn)練與結(jié)果評估可視化
library(keras)
CIFAR10 數(shù)據(jù)集包含 10 個(gè)類別的 60,000 張彩色圖像,每個(gè)類別有 6,000 張圖像。數(shù)據(jù)集分為 50,000 張訓(xùn)練圖像和 10,000 張測試圖像。這些類是互斥的,它們之間沒有重疊。
為了驗(yàn)證數(shù)據(jù)集看起來是否正確,讓我們繪制訓(xùn)練集中的前 25 張圖像并在每張圖像下方顯示類別名稱。
train %>%
map(as.rater, max = 255) %>%
下面的6行代碼使用一種常見的模式定義了卷積基礎(chǔ):Conv2D和MaxPooling2D層的堆疊。
作為輸入,CNN接受形狀的張量(image\_height, image\_width, color\_channels),忽略了批次大小。如果你是第一次接觸這些維度,color\_channels指的是(R,G,B)。在這個(gè)例子中,你將配置我們的CNN來處理形狀為(32,32,3)的輸入,這是CIFAR圖像的格式。你可以通過將參數(shù)input_shape傳遞給我們的第一層來做到這一點(diǎn)。
kers\_moe\_etl %>%
laer\_c\_2d(fles = 32, ene_sz = c(3,3), acan = "relu",
lye\_apoi\_2d(posize = c(2,2)) %>%
lae\_cv\_2d(filrs = 64, relze = c(3,3), ctitio = "reu")
到目前為止,讓我們展示一下我們模型的架構(gòu)。
summary(model)