0
本文作者: 奕欣 | 2017-07-28 17:31 | 專題:CVPR 2017 |
雷鋒網(wǎng) AI 科技評論按:本文為 CVPR 2017 的論文解讀,作者周縱葦(Zongwei Zhou),郵箱:zongweiz@asu.edu,微博:@MrGiovanni。本文首發(fā)于簡書,經(jīng)作者授權(quán),雷鋒網(wǎng)轉(zhuǎn)載。
下面要介紹的工作發(fā)表于 CVPR 2017,題為??「Fine-tuning Convolutional Neural Networks for Biome?dical Image Analysis: Actively and Incrementally?」。它主要解決了一個深度學(xué)習(xí)中的重要問題:如何使用盡可能少的標(biāo)簽數(shù)據(jù)來訓(xùn)練一個效果 promising 的分類器。根據(jù)我的判斷,當(dāng)遇到兩種情況的時候,這篇論文的可以非常強大的指導(dǎo)意義:
一共手頭有 100 個未標(biāo)記樣本,和僅僅夠標(biāo)記 10 個樣本的錢,老板說,通過訓(xùn)練這十個標(biāo)記的樣本,能接近甚至達到訓(xùn)練 100 個樣本的 performance;
手頭有了一個已經(jīng)在 100 個樣本中訓(xùn)練完的分類器,現(xiàn)在又來了 100 個新標(biāo)記的樣本,老板說,只給提供夠訓(xùn)練 10 個樣本的計算機;或者只給你提供夠訓(xùn)練 10 個樣本的時間,讓分類器盡快學(xué)習(xí)到新來樣本的特征;
這兩個情況發(fā)生的條件是完全不同的,Situation A 發(fā)生在屌絲公司,沒有錢拿到精標(biāo)記的數(shù)據(jù)集,卻也想做深度學(xué)習(xí);Situation B 一般發(fā)生在高富帥公司,有海量的精標(biāo)記數(shù)據(jù),但是由于目前即使是最牛逼的計算機也不能用深度學(xué)習(xí)在短時間內(nèi)一次性地去處理完這些數(shù)據(jù)(e.g.,內(nèi)存溢出,或者算上個幾年都算不完)。Anyway,我想我已經(jīng)說清楚應(yīng)用背景了,讀者可以根據(jù)實際情況判斷是否往后讀下去。
感謝你選擇繼續(xù)往下閱讀,那么如果覺得下文所傳遞的思想和方法對你有幫助,請記得一定引用這篇 CVPR 2017 的文章。Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis: Actively and Incrementally.
@InProceedings{Zhou_2017_CVPR,
author = {Zhou, Zongwei and Shin, Jae and Zhang, Lei and Gurudu, Suryakanth and Gotway, Michael and Liang, Jianming},
title = {Fine-Tuning Convolutional Neural Networks for Biomedical Image Analysis: Actively and Incrementally},
booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
month = {July},
year = {2017}
}
現(xiàn)在深度學(xué)習(xí)很火,做的人也越來越多,那么它的門檻可以說是很低的,Caffe,Keras,Torch 等等框架的出現(xiàn),讓該領(lǐng)域的 programming 的門檻直接拆了。所以深度學(xué)習(xí)真正的門檻變成了很簡單概念——錢。這個錢有兩個很重要的流向,一是計算機的運算能力(GPU Power),二是標(biāo)記數(shù)據(jù)的數(shù)量。這兒就引出一個很重要的問題:是不是訓(xùn)練數(shù)據(jù)集越多,深度學(xué)習(xí)的效果會越好呢?這個答案憑空想是想不出來的,能回答的人一定是已經(jīng)擁有了海量的數(shù)據(jù),如 ImageNet,Place 等等,他們可以做一系列的實驗來回答這個問題。需要呈現(xiàn)的結(jié)果很簡單,橫坐標(biāo)是訓(xùn)練集的樣本數(shù),縱坐標(biāo)是分類的 performance,如下圖所示:
Fig.1 如果答案是左圖,那么就沒什么可以說的了,去想辦法弄到盡可能多的訓(xùn)練數(shù)據(jù)集就 ok,但是現(xiàn)實結(jié)果是右圖的紅實線,一開始,訓(xùn)練集的樣本數(shù)增加,分類器的性能快速地在上升,當(dāng)訓(xùn)練集的樣本數(shù)達到某一個臨界值的時候,就基本不變了,也就是說,當(dāng)達到了這個臨界的數(shù)目時,再去標(biāo)注數(shù)據(jù)的 ground truth 就是在浪費時間和金錢。有了這個認知,接下來就是想辦法讓這個臨界值變小,也就是用更小的訓(xùn)練集來更快地達到最理想的性能,如右圖的紅虛線所示。紅實線我們認為是在隨機地增加訓(xùn)練集,那么紅虛線就是用主動學(xué)習(xí)(Active Learning)的手段來增加訓(xùn)練集,從而找到一個更小的子集來達到最理想的性能。
這里需要說明的一點是,訓(xùn)練樣本數(shù)的臨界點大小和這個分類問題的難度有關(guān),如果這個分類問題非常簡單,如黑白圖像分類(白色的是 1,黑色的是 0),那么這個臨界值就特別小,往往幾幅圖就可以訓(xùn)練一個精度很高的分類器;如果分類問題很復(fù)雜,如判斷一個腫瘤的良惡性(良性是 0,惡性是 1),那么這個臨界值會很大,因為腫瘤的形狀,大小,位置各異,分類器需要學(xué)習(xí)很多很多的樣本,才能達到一個比較穩(wěn)定的性能。
FIG.1 對于很多從事深度學(xué)習(xí)的無論是研究員還是企業(yè)家都是一個十分有啟發(fā)性的認知改變。一般來講,人的慣性思維會引領(lǐng)一個默認的思路,就是訓(xùn)練樣本越多越好,如左圖所示,這將直接導(dǎo)致許多工作的停滯不前,理由永遠是「我們沒有足夠的數(shù)據(jù),怎么訓(xùn)練網(wǎng)絡(luò)!」進一步的思路是圖二的紅實線認知:要多少是多啊,先訓(xùn)著再說,慢慢的就會發(fā)現(xiàn)即便用自己有的一小部分數(shù)據(jù)集好像也能達到一個不錯的分類性能,這個時候就遇到一個問題:自己的數(shù)據(jù)集樣本數(shù)到底有沒有到達臨界值呢?這個問題也很關(guān)鍵,它決定了要不要繼續(xù)花錢去找人標(biāo)注數(shù)據(jù)了。這個問題我會在第三部分去回答它,這里先假設(shè)我們知道了它的答案,接下來的問題就是如何讓這個臨界值變?。?/strong>
解決方案就是主動學(xué)習(xí)(Active Learning),去主動學(xué)習(xí)那些比較「難的」,「信息量大的」樣本(hard mining)。關(guān)鍵點是每次都挑當(dāng)前分類器分類效果不理想的那些樣本(hard sample)給它訓(xùn)練,假設(shè)是訓(xùn)練這部分 hard sample 對于提升分類器效果最有效而快速。問題是在不知道真正標(biāo)簽的情況下怎么去定義 HARD sample?或者說怎么去描述當(dāng)前分類器對于不同樣本的分類結(jié)果的好壞?
定義:由于深度學(xué)習(xí)的輸出是屬于某一類的概率(0~1),一個很直觀的方法就是用「熵(entropy)」來刻畫信息量??,把那些預(yù)測值模棱兩可的樣本挑出來,對于二分類問題,就是預(yù)測值越靠近 0.5,它們的信息量越大。還有一個比較直觀的方法是用「多樣性(diversity)」來刻畫 labeled data 和 unlabeled data 的相似性。這兩個方法都是在「Active batch selection via convex relaxations with guaranteed solution bounds」中被提出。是十分重要的兩個 Active Learning 的選擇指標(biāo)。?
Important Observation: To boost the performance of CNNs in biomedical imaging, multiple patches are usually generated automatically for each candidate through data augmentation; these patches generated from the same candidate share the same label, and are naturally expected to have similar predictions by the current CNN before they are expanded into the training dataset.
有了這兩個指標(biāo)來選 hard sample,是比較靠譜了——實驗結(jié)果表明,這比隨機去選已經(jīng)能更快地達到臨界拐點了。
FIG.2 Active Learning 的結(jié)構(gòu)示意圖。利用深度學(xué)習(xí)所帶來的優(yōu)勢在于,一開始你可以不需要有標(biāo)記的數(shù)據(jù)集。
舉例來講,假設(shè)你是一個養(yǎng)狗的大戶,你現(xiàn)在想做一個非常偏的(專業(yè)化的)分類問題,如卷毛比雄犬和哈瓦那犬的分類問題,你手頭有這兩種狗各 50 條,你自己可以很輕松地區(qū)分這 100 條狗,現(xiàn)在需要做的是訓(xùn)練一個分類器,給那些不懂狗的人,他們拍了狗的照片然后把照片輸入到這個分類器就可以很好地判斷這是卷毛比雄犬還是哈瓦那犬。首先你可以給這 100 條狗拍照片,每條狗都有不同形態(tài)的 10 張照片,一共拍了 1000 張沒有標(biāo)記的照片。對于這 1000 張照片,你所知道的是哪 10 張對應(yīng)的是一條狗,其他什么都不知道。
在這個實際分類問題中,你擁有絕對的數(shù)據(jù)優(yōu)勢,即便是 Google Image 也不能企及,當(dāng)然一種選擇是你把 1000 張圖片從頭到尾看一遍,標(biāo)注好,但是你更希望是把大多數(shù)簡單的分類工作交給分類器,自己盡可能少的做標(biāo)記工作,并且主要是去標(biāo)記那些分類器模棱兩可的那幾張照片來提高分類器的性能。
我們初步提供的解決方案是 (參考 Fig.2 或者 Fig.3):
把 1000 張圖放到?在大量自然圖像中預(yù)訓(xùn)練的網(wǎng)絡(luò)(LeNet,AlexNet,GoogLeNet,VGG,ResNet 等等)中測試一遍,得到預(yù)測值,然后挑出來那些「最難的」,「信息量最大的」樣本,你看一下,給出他們的標(biāo)簽(卷毛比雄犬還是哈瓦那犬);
用這些剛剛給了標(biāo)簽的樣本訓(xùn)練深度網(wǎng)絡(luò) N;
把剩下那些沒有標(biāo)簽的圖像用 N 測試,得到預(yù)測值,還是挑出來那些「最難的」,「信息量最大的」樣本,你再給出他們的標(biāo)簽(卷毛比雄犬還是哈瓦那犬);
剛剛給了標(biāo)簽的樣本和原來有標(biāo)簽的樣本組成新的訓(xùn)練集,繼續(xù)用它們來訓(xùn)練深度網(wǎng)絡(luò) N;
重復(fù)步驟 3,4,直到 [?]
如 FIG.2 所示,每次循環(huán)都用不斷增加的標(biāo)記數(shù)據(jù)集去提升分類器的性能,每次都挑對當(dāng)前分類器比較難的樣本來人為標(biāo)記。
錢用光了;
當(dāng)前分類器對選出來的 hard samples 分類正確;
選出來的 hard samples 人類也無法標(biāo)記;??
以上三種情況都可以讓這個循環(huán)訓(xùn)練過程中斷,第一種就很無奈了,沒錢找人標(biāo)記了... 第二種情況和第三種情況的前提共識是?如果難的樣本都分類正確了,那么我們認為簡單的樣本肯定也基本上分類正確了,即便不知道標(biāo)簽。第三種情況,舉例來說就是黑白圖像分類,結(jié)果分類器模棱兩可的圖像是灰的... 也就是說事實上的確分不了,并且當(dāng)前的分類器居然能把分不了的樣本也找出來,這時我們認為這個分類器的性能已經(jīng)不錯的了,所以循環(huán)訓(xùn)練結(jié)束。
至此,主要講了傳統(tǒng)的 Active Learning 的思想,接下來會講講這篇 CVPR2017 論文的幾個工作點。
The way to create something beautiful is often to make subtle tweaks to something that already exists, or to combine existing ideas in a slightly new way.
-- "Hackers & Painters"
上面我講到了 Active Learning 的大概思路,如 Fig. 3 所示,是一個很有意思的概念,說實話很實用,我在 Mayo Clinic 實習(xí)的時候,每次遇到新的數(shù)據(jù)集,都會想著用一用這個方法,來讓給數(shù)據(jù)標(biāo)注的專家輕松一點...
Fig.3 暗的表示 unlabeled 的數(shù)據(jù),高亮的表示 labeled 的數(shù)據(jù),CNN 的結(jié)構(gòu)可以隨便挑 SOTA 的無所謂,CNN0 是拍 retrained from ImageNet,得到的第二列表示每個 image 對應(yīng)的 importance 指標(biāo),越紅的說明 entropy 越大,或者 diversity 越大,每次挑這些 important 的 sample 給專家標(biāo)注,這樣 labeled 的數(shù)據(jù)就變多了,用 labeled 的數(shù)據(jù)訓(xùn)練 CNN,得到新的更強的分類器了,再在 unlabeled data 上測試,挑出 entropy/diversity 大的樣本,交給專家去標(biāo)注,如此循環(huán)...
貌似前面講的算法沒留下什么問題啊,也就是說,只要學(xué)術(shù)視野夠開闊,這個 Active Learning 的技術(shù)完全可以直接用啦。但是實際上并不是這樣的,上面說的熵(Entropy)的確沒有什么嚴(yán)重的問題,但是多樣性(Diversity),在很多現(xiàn)實應(yīng)用中問題就會出現(xiàn)。
根據(jù)「Active batch selection via convex relaxations with guaranteed solution bounds」的描述,Diversity 是計算 labeled data 和 unlabeled data 之間的相似度,把和 labeled data 比較相似的作為簡單樣本,每次 active select 難樣本,也就是挑出來和 labeled data 不太像的出來。體現(xiàn)在矩陣上就是行是 labeled data,列是 unlabeled data,在它們組成的大矩陣中找出最優(yōu)的子矩陣。這個方法在理論上是可行的,但是實際應(yīng)用中,數(shù)據(jù)量(labeled 和 unlabeled)會非常大,這個矩陣會特別的大,導(dǎo)致求最優(yōu)解會很慢,或者根本得不出來最優(yōu)解。因此,我們并不在 image-level 上算 diversity。
由于標(biāo)記的醫(yī)學(xué)影像訓(xùn)練數(shù)據(jù)量和自然圖像的沒法比,Data Augmentation 是必須的環(huán)節(jié),我們就抓住了這個點來設(shè)計 Diversity 這個指標(biāo)。這里的假設(shè)是:經(jīng)過 data augmentation 后的 patches,從 CNN 出來的預(yù)測值應(yīng)該相對是一致的,因為它們的 truth 應(yīng)該還是一致的。比如一張貓的圖像,經(jīng)過數(shù)據(jù)擴充,得到的那些個 patch 所對應(yīng)的 truth 也應(yīng)該都是貓。
定義:對于來自同一幅 image 的 patch 集,如果它們的分類結(jié)果高度不統(tǒng)一了,那么這個 image 就是 Important 的,或者 hard sample。
需要展開解釋的兩點:
由于在 annotation 之前不知道 label,所以我們不能知道網(wǎng)絡(luò)的預(yù)測正確還是錯誤,但是我們可以知道預(yù)測統(tǒng)一還是不統(tǒng)一。所以比如一幅貓的圖,如果網(wǎng)絡(luò)的預(yù)測很統(tǒng)一都是狗,那么我們也認為這是一個 easy sample,不去 active select 它的。
結(jié)合 data augmentation 的優(yōu)點是我們可以知道哪些 patch 對應(yīng)什么 image,比較容易控制。這樣就可以在一個 image 內(nèi)算 diversity 了,每個 image 對應(yīng)一個矩陣,大小是一樣的,非常的簡潔,也容易控制計算量。
這樣的 diversity 就完美了嗎?并沒有... 讀者可以先猜猜哪兒又出問題啦,我在第五部分會指出來。
問題出在上面的假設(shè):經(jīng)過 data augmentation 后的 patches,從 CNN 出來的預(yù)測值應(yīng)該相對是一致的,因為它們的 truth 應(yīng)該還是一致的。
我們知道有幾種經(jīng)典的數(shù)據(jù)擴充方法:平移,旋轉(zhuǎn),縮放,形變,加噪聲等等。但是很有可能發(fā)生的是,經(jīng)過這些變化以后,得到的 patch 是無法分類的。舉例來講,Augmentation Lecture 講到的平移 crop,如果我們將它應(yīng)用到貓的分類問題中,很有可能得到這樣的訓(xùn)練樣本:
Fig.4 左圖是原始的圖像,中間的 9 個 patches 是根據(jù)平移變化的擴充得到的,restrictions: region must contain objects or part of the object 詳見這里,右圖是網(wǎng)絡(luò)得到的對應(yīng) patch 的預(yù)測值。
可以看出,在這個實例中,對于一個 candidate,網(wǎng)絡(luò)預(yù)測的一致性很低,套用 Diversity 的公式,Diversity 的值很大,也就是說,應(yīng)該被認為是 hard sample 挑出來。但是仔細觀察一下這九個 patches 就不難看出,即便是很好的分類器,對于中間圖中的 1,2,3,也是很難分出這個是貓... could be rat, rabbit, etc. 我們把像這三個 patch 的例子叫做從 data augmentation 帶來的 noisy label issue。而對于 4~6 的 patches,網(wǎng)絡(luò)很好地做出了分類,這很合情合理。所以我們把這種像 1,2,3 的 patches,由于隨機的數(shù)據(jù)擴充(Random Data Augmentation)帶來的干擾樣本稱為 noisy labels。Fig.4 只是一個很直觀的例子,其實在實際的數(shù)據(jù)集中會有很多這樣的案例。
我們給出的解決方法是:先計算 majority 的預(yù)測,然后在 majority 上面算 diversity,只要網(wǎng)絡(luò)的預(yù)測大方向是統(tǒng)一的,就是統(tǒng)一的。意思就是想個辦法把 Fig.4 中的三個非主流 0.1 扔掉。只抓住大方向,也就是 0.9——我們不希望 Fig.4 這種情況被當(dāng)作 important sample 挑出來,因為當(dāng)前的分類器實際上已經(jīng)可以分出來這幅圖的類別啦。
這個改進的數(shù)學(xué)表達也非常直觀,以 Fig.4 為例,為了知道大方向,我們計算它們的平均值,如果大于 0.5,大方向就是 label 1,反之大方向是 label 0,如果是前者,那么就從大到小取前 25% 的預(yù)測,其他的不要啦,如果是后者,就從小到大取前 25%,其他的不要啦。這樣 Fig.4 就只剩下三個 0.9,它們的 diversity 就非常小,也就不會被當(dāng)作 important sample 挑出來啦。成功解決了 data augmentation 帶來的 noisy label issue。
整體的算法流程可參見 Fig.5
Fig.5 Active Learning Algorithm
至此,主要講了這篇論文是怎樣成功的將 Diversity 這個重要的指標(biāo)引入到 Active Learning 中來,所有的 Active Selection 部分結(jié)束。
既然用了遷移學(xué)習(xí),那么一開始的 CNN 測試的效果肯定是一團糟,因為這個 CNN 是從自然圖像中學(xué)過來的,沒有學(xué)習(xí)過 CT 這種醫(yī)學(xué)影像,所以這個 loop 的啟動階段,Active Learning 的效果會沒有 random selecting 好。不過很快,隨著 CNN 慢慢地在 labeled 的 CT 上訓(xùn)練,Active Learning 的效果會一下子超過 random selecting。
接下來討論 Continuous fine-tuning 的細節(jié),隨著 labeled data 集變大,CNN 需要一次次地被訓(xùn)練,有兩種選擇,一是每次都從 ImageNet pretrained 來的 model 來遷移,二是每次用當(dāng)前的 model 上面遷移 (Continuous Fine-tuning)。方法一的優(yōu)點是模型的參數(shù)比較好控制,因為每次都是從頭開始 fine-tuning,但是缺點是隨著 labeled 數(shù)據(jù)量大增加,GPU 的消耗很大,相當(dāng)于每次有新的標(biāo)注數(shù)據(jù)來的時候,就把原來的 model 扔了不管,在實際應(yīng)用中的代價還是很大的。第二種方法是從當(dāng)前的 model 基礎(chǔ)上做 finetune,在某種意義上 knowledge 是有記憶的,而且是連續(xù)漸進式的學(xué)習(xí)。問題在于參數(shù)不好控制,例如 learning rate,需要適當(dāng)?shù)臏p小,而且比較容易在一開始掉入 local minimum。關(guān)于 Continuous Finetuning 的前期論文也是有的,需要更進一步的研究。
另外,如何能夠真正意義上去體現(xiàn)出 increamentally learning,只是這樣一個網(wǎng)絡(luò)結(jié)構(gòu)去不斷的學(xué)習(xí)嗎,還是隨著數(shù)據(jù)集的增加去讓網(wǎng)絡(luò)自適應(yīng)的變深,便復(fù)雜,都是我比較關(guān)心的問題。
乍一看,Active Learning 的工具很直觀,思想也很簡潔,但隨著博客討論的技術(shù)細節(jié)越來越深入,會出現(xiàn)很多的 open question 有待研究,因此,只能說我們的論文是 active learning 的一個引子。
本文只是從思想的角度來闡述這篇論文,至于后續(xù)的分析,結(jié)果和結(jié)論都在論文中詳細的 report 了。反正一句話來總結(jié),hin 好...
Find paper here.
Find poster here.
Find author here.
祝好,
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。
本專題其他文章