0
| 本文作者: 嘉嘉 | 2022-09-27 11:44 | 專題:IEEE X ATEC科技思享會 |
IEEE x ATEC科技思享會是由專業技術學會IEEE與前沿科技探索社區ATEC聯合主辦的技術沙龍。邀請行業專家學者分享前沿探索和技術實踐,助力數字化發展。
隨AI技術的不斷深入發展,醫學人工智能應用如雨后春筍般迅速涌現,在醫療領域遍地開花。AI具有智能化、自動化的特點,能夠通過強大算力解鎖復雜數據、處理海量數據,在醫學變革過程中發揮著無與倫比的重要作用。IEEE x ATEC科技思享會第三期會議特邀四位嘉賓圍繞“AI驅動下的醫學變革—從生命科學到醫療管理”獨立TALK。
以下是香港科技大學(廣州)教授/博導、ATEC科技精英賽高級咨詢委員會專家褚曉文教授的演講《AutoML 在基于胸部 CT 影像的 Covid-19 輔助診斷中的應用》。

大家好,感謝IEEE x ATEC科技思享會邀請我參與本場“AI驅動下的醫學變革”的分享。我是來自香港科技大學(廣州)數據科學與分析學域的褚曉文教授,在加入港科大(廣州)之前,我一直在香港浸會大學計算機科學系工作。
今天我要跟大家分享的內容是《AutoML 在基于胸部 CT 影像的 Covid-19 輔助診斷中的應用》。首先我要感謝本項目的合作者,主要包括我在香港浸會大學的博士生賀鑫等人,杭州電子科技大學張繼勇教授團隊以及美國南加州大學的Ying Guohao。
今天的報告主要分四個部分:首先是對AutoML的一個簡單介紹,其次是可微搜索在CT影像分類中的應用,第三是基于進化算法的神經結構搜索的一點嘗試。最后再簡單介紹一下我們如何結合自動數據增強和神經結構搜索。
今天的報告內容主要基于以下四篇學術論文:第一篇是我們關于AutoML的一個綜述論文,適合對AutoML技術感興趣的初學者。第二篇是發表在AAAI2021的一篇論文,主要展示了如何用AutoML技術有效針對3D CT影像去尋找一個3D的CNN模型。第三篇是發表在今年MICCAI的論文,主要是介紹了一種基于多目標優化和進化算法的AutoML設計。最后一篇論文是我們近期對自動數據增強和神經結構搜索的一個結合。大家如果對其中的技術細節感興趣,可以參考一下。
首先,我們對AutoML做一個簡單介紹。

在過去的十幾年里,我們見證了基于深度學習,即深度神經網絡的蓬勃發展。深度學習在各種AI任務中都取得了令人振奮的成績,并廣泛應用到我們實際生活的方方面面。熟悉神經網絡的朋友們可以看出,在上圖中我們展示了五種不同的神經網絡結構。從單鏈的線性結構一直發展到今天有諸多分支和跨層結構的復雜網絡。這些網絡的設計大部分都是基于Trial and Error,是靠成千上萬的科研工作人員不斷通過人工試錯而發現的。
而基于數據驅動,機器學習方法一般都包括數據預處理、特征工程模型評估、模型選擇等若干階段。在傳統的機器學習領域,如何自動化的進行數據預處理、超參調優、模型選擇,都是非常經典的問題。
隨著深度神經網絡技術的繁榮和不斷突破,如何自動化的進行神經網絡結構的設計,也成為自動機器學習中一個非常重要且具有挑戰性的課題。這個問題我們通常稱之為神經結構搜索,即Neural Architecture Search。神經結構搜索主要有三個構件,分別是搜索空間(Search Space)、搜索策略(Search Strategy)和性能評估策略(Performance Estimation Strategy)。
搜索空間一般是基于一定的先驗知識和對具體問題的理解,大概制定一下神經網絡的拓撲結構。搜索策略則是要求在給定的搜索空間中如何去探索未知的網絡結構,希望能夠不斷找到一個更好的網絡。而性能評估策略就是如何對搜索到的網絡結構進行快速打分,即如何從一組結構中判斷出來哪一個結構是最好的。
接下來我們逐一對這三個構件做進一步介紹。
搜索空間(Search Space),它定義了NAS算法可以搜索的神經網絡的類型和拓撲結構。一般可以把一個網絡描述成一個有向無環圖DAG,圖中的每個節點代表了一個網絡層,而圖中的邊代表網絡之間的數據流向。除了輸入和輸出層,中間層可以有不同的類型,比如全連接層,各種的卷積、池化、激活函數層等等。而每種網絡層的類型又有其獨特的超參數需要考慮,在此就不一一贅述。
如果我們要對整個網絡結構進行端對端的搜索,那這個搜索空間會非常龐大。比如一個簡單的鏈條結構,如果我們要設計一個100層的網絡,而每一層有4種不同的算子選擇,那么整個搜索空間的大小就是4的100次方。

為了提高搜索效率,我們可以基于經驗對搜索空間進行一定的限定或者簡化。比如最流行的Resnet和Transformer模型等等,都是通過設計一個復雜的子模塊,然后將其堆疊而成。因此我們也可以把要搜索的網絡切分成基本的單元cell。然后每個單元里面又進一步分成若干個操作塊block。通過這些單元的堆疊形成更復雜的網絡。這樣我們就把搜索一個網絡的問題簡化為搜索一個單元的問題。在圖(b)的示例中,normal cell主要是進行一些常規的卷積操作,而reduction cell主要是用于下采樣的操作。
性能評估策略在NAS中有著舉足輕重的地位。如果能夠提高性能評估的速度,就可以在同樣的時間預算里面搜索一個更大的網絡空間,有利于我們找到一個更好的網絡結構。
然而如何把神經網絡的性能評估做到又快又準,是一個非常困難的問題。最早期大家都是基于Brute-Force的方法,把一個搜索到的模型訓練到收斂來判斷其性能。這個方法雖然比較準確,但是非常消耗資源。比如在cell這種小型的數據集上進行網絡搜索,一般都需要幾千個GPU hours。為了降低NAS對算力的需求,我們可以通過對數據降維或者對模型進行壓縮來大概估算這樣一個模型的性能。中國有句俗話叫三歲看老,所以也有學者提出來用Early stopping的策略來預判一個網絡模型的性能。
近年來,AutoML領域一個比較大的突破就是采用了這種Weight sharing權重共享的思路來加速性能評估。它的核心思想是訓練一個supernet的結構。這個supernet里的任何一個子圖都是一個潛在的subnet網絡結構。所以在這種方法里面,supernet的權重會被它所有的subnet共享。我們只需要訓練一個supernet就可以得到所有subnet的權重,從而對這個subnet做性能的評估。經驗表明,通過權重共享,通常可以把搜索的計算消耗從幾千個GPU hours降到幾十個甚至幾個GPU hours。因此這個方法也成為了目前AutoML一個主流的方法。
性能評估的手段。最后一個問題就是如何在龐大的搜索空間中有效的進行搜索。由于描述神經網絡的參數含有大量的離散數據,因此網絡搜索是一個離散且高維度的優化問題。很難去找最優解。通常我們都是使用一些迭代優化的思路,去嘗試提高搜索效果。具體而言,我們可以分為網格和隨機搜索、進化算法、貝葉斯優化、強化學習和基于梯度的算法等等。
這里我們大概介紹一下進化算法的思路。首先我們要制定一個把網絡結構編碼成二進制串的方案,然后我們會隨機初始化一組網格作為初始解。經過了一系列的選擇、交叉、變異和更新等步驟,進行不斷進化迭代,希望最終找到一組更好的網格結構,再從中進行重新訓練,得到一個最好的選擇。
這里我們再介紹另外一種非常流行的基于梯度優化的思路。它也是一個把離散優化的問題松弛到連續空間,這樣就可以利用梯度下降算法進行有效的搜索。我們這里提一下DARTS這個非常有影響力的工作,發表在ICLR2019年。

圖(a)代表了一個supernet的一個結構,每條邊代表著一些潛在的數據運算。這里每個問號代表它可能是五種或者十種不同的運算模式。當我有很多很多問號時,這就是一個非常復雜的組合優化問題。
而DARTS的思路就是同時考慮所有可能的運算。比如說我們每條邊有三種可能,分別用三種顏色來代表,我們這個supernet就包含了所有可能的運算,讓它們同時進行。但是每一條邊或者說每一個運算給它們賦一個概率值。比如說初始化的時候都是三分之一的概率,然后就可以對這個網絡進行訓練,包括這些權重值也是可以進行訓練的。最終可以得到一個不同值的一個權重。最后我們就選擇權重值最大的那條邊作為最終選擇的操作。
以上就是我們對AutoML的一個簡要介紹。接下來我們來討論如何把AutoML用于基于胸部 CT 影像的Covid-19輔助診斷當中。
在2019到2020年間,快速檢測新冠肺炎的手段還不是太成熟,一種是基于RT-PCR的病毒測試,一般需要四個多小時以上的時間才能夠得到測試結果。而另一方面,醫療影像學家通過對X光胸片和CT胸部影像的分析,也可以做新冠肺炎的診斷。在2020年的一個跟蹤研究中發現,通過對一千多例病人的分析表明,胸部CT影像對新冠肺炎的診斷有非常高的識別率和敏感度,是病毒檢測的一個有效補充手段。
因此很多計算機科學家開始研究如何利用深度學習的方法來協助新冠肺炎的智能檢測。

上面這張表總結了2020年的一些相關的工作,主要是一些相關的數據集。從早期2D的X-ray數據集到2D的CT數據集,到最后比較大規模的3D CT數據集。在這些數據集里面,NCP代表新冠肺炎,CP代表普通的肺炎,Normal代表正常的影像。但是由于大家使用的數據集都不太一樣,很難去對一個具體的深度學習方法做出一個公平又公正的判斷。
因此我們首先選取了三個比較大型的CT數據集作為我們的研究基礎,而且我們在這三個公開數據集上做了一些benchmark工作。第一個數據集是來自伊朗的Covid-CTset,這個數據集大概有526個樣本。第二個數據集是來自俄羅斯的MosMedData ,有1110個樣本。而第三個數據集是來自我們中國的CC-CCII數據,有4300多個CT樣本,是目前最大的一個公開數據集。
由于原始的數據集有不同的數據格式,也有不少的噪音和錯誤的數據。因此我們對數據集做了統一的預處理,并人工對數據做了一些清理工作,提高了數據質量。我們進一步以病人為單位,把數據集分割為訓練集和測試集。
我們這項工作的研究動機有三點。首先傳統的檢測方法比較耗時,因此我們希望利用深度學習技術來實現快速的新冠診斷。第二,已有的深度學習方法大部分都是基于二維的X-ray或者CT影像,無法充分利用3D CT影像信息,所以在性能上還有提升空間。第三,針對新冠檢測的3D卷積模型還比較少,因此我們希望利用自動機器學習技術來自動發現一些比較好的3D模型。為了驗證自動機器學習的性能,我們需要選取一些傳統的方法作為比對基準。

上圖是一個3D的深度神經網絡的工作流程,輸入是一個3D的CT數據集,包括N個CT scan。每一個scan都包含若干張二維CT影像。所以我們要先對每個scan進行采樣,保證每個scan的圖像數量是一樣的,然后進行數據預處理,得到一些批量的3D數據影像。再送到設計好的3D卷積網絡里面進行訓練。我們選了三個流行的3D卷積網絡作為我們的Baseline,包括ResNet3D101,DenseNet3D121以及MC3_18。
要使用AutoML,首先要清楚自己的目標和任務特征。比如我們做CT影像的分類任務,就需要我們的網絡具備3D空間數據的特征提取能力。同時考慮到新冠檢測對速度的要求,我們希望這個模型不要太龐大,訓練和推理的時間都要比較合理。

我們使用了supernet的設計來共享權重。我們的模型包括兩個部分,上圖中藍色部分是不需要搜索的,包括Stem層、全局平均池化層和最后的全連接層。中間有N個cells,即N個單元,這些是需要進行搜索的。每一個單元又包含若干個塊(blocks),每個block是依靠經驗設計出來的一組候選操作集,我們需要從中搜索不同的操作組合。
目前我們這個AutoML的方法涉及到一些額外的超參數,包括整個單元的數量N以及每個單元里block的數量Bi。這些參數都是依靠人工經驗進行設置的,希望以后有機會也能夠把這些參數自動化。通過控制每個block的candidate的數量,我們可以控制整個網絡參數的參數集的大小。
supernet設計里最重要的一個環節就是塊算子的設計對于網絡輕量化的追求。我們參考了2018年CVPR的文章《Mobilenetv2:Inverted residuals and linear bottlenecks》以mobile bottleneck convolution為核心框架,這個卷積MBConv屬于一種可分離的卷積設計,其特點就是計算量比較小。它分為三組操作。第一組是一個主點的1*1*1的卷積,外接一個3D BN操作,再加上一個ReLU6。第二組,最重要的就是一個3D的K*K*K的深度卷積。同樣后面要跟一個3D的BN操作和一個ReLU6操作。第三組又是一個主點的卷積,再接一個3D BN操作。最后這個模塊也包含一個跳連接的操作。

最終我們選取了8種不同的塊算子作為候選的運算集。這些candidate的大小從3*3*3到7*7*7,最后的3、4、6代表了從第一個卷積到第二個卷積之間一個擴散因子。整個搜索空間的大小還是非常大的。比如說我們有6個單元,一共有21個blocks,每個block有8個候選設計,那搜索空間的大小就是8的21次方。如果用傳統暴力訓練的方法是不太可能的。因此我們這個工作就采用了基于梯度的可微分搜索的策略。


下面簡單介紹一下可微分搜索的思路。我們搜索的目標是一個包含若干塊的單元,每個塊都要從事先制定好的操作里面選擇一種操作。這里我們用節點i和節點i+1代表兩個特征張量,它們對應著公式里的輸入X, i和i+1這兩個張量之間有若干條邊,每條邊對應了一個可能的操作。每條邊又有一個權重值Pk,通過SOFTMAX函數計算而來。因此這三個權重的和為一。最后張量i+1的操作,它的值是這三個操作的加權平均。
前面介紹的可微分搜索策略在訓練過程中的每次的前向和后向,都需要對所有的算子進行操作。因此它的復雜度隨著算子候選集的增大而增加。為了降低計算壓力,我們采用了一種采樣的思路,每次前向運算并不需要對所有的候選運算進行操作。而是從其中按照概率分布來選取一種算子進行操作。這里就用到了深度學習近年來一個非常流行的重參數的技巧叫做GUMBEL SOFTMAX,它使用了GUMBEL SOFTMAX函數來近似一個離散的GUMBEL MAX函數,使得一個離散的采樣技術和梯度下降算法能夠得以結合。

介紹完搜索策略,接下來介紹一下整體的訓練策略。我們把NAS定義為一個雙層優化問題,它有兩套未知的參數:第一個是神經網絡結構,用α來表示。第二個是一個具體網絡α自身的網絡參數,用Wα來表示。我們的優化目標就是希望最小化在一個給定的驗證集上的損失函數值,而其約束條件是這個參數Wα﹡,它是能夠最小化這個網絡α在給定的訓練集上的一個損失函數。
通常這種雙層的優化問題是使用一個交叉迭代的方法去解的。我們先固定一個網絡結構α,然后用訓練集來求解Wα﹡。我們又固定了這個Wα,通過驗證集來對網絡結構α進行調優。一直迭代下去,直到收斂。

在此,我們對整體的搜索和訓練過程再做一個總結。在搜索階段我們從搜索空間進行采樣,得到一個模型,然后訓練一個epoch記錄該模型以及它的性能。重復N次,最終得到N個不同的模型。進入到評估階段后,我們從N個模型中選出表現最好的K個模型,對這K個模型重新進行一個比較短期的訓練,再從中選取表現最好的一個,最后對我們選出來的模型進行一次完整的訓練。
我們在三個數據集上進行了測試。每個數據集我們得到了兩種不同大小的3D卷積網絡,分別稱之為3D-S和3D-L。每一組AutoML的實驗,我們大概需要花8個GPU hours,實際上我們是用了四張Nvidia V100的卡進行搜索,兩個小時就能完成一個搜索任務。

從上圖的實驗結果看,AutoML搜索到的模型,在Accuracy這個指標上是全面超過了三個手工設計的baseline了。另外我們發現我們輕量化的模型CovidNet3D-S,它的模型大小大概只有10MB左右,性能表現也非常不錯。
接下來我們再簡單介紹另外一種基于進化算法的AutoML技術。這個工作的創新點是結合了多目標優化來緩解在AutoML中的穩定性問題。
近期很多學者發現權重共享雖然能夠降低AutoML對計算資源的需求,但是它本身犧牲了模型性能評估的準確度。由于一個supernet的權重被其所覆蓋的所有subnets所共享,因此很多subnets之間如果有一些共享的邊,這些subnet之間就會互相影響。比如說你想優化這個subnet,那么就調整了它的參數,這樣就會對跟它有重疊的subnet帶來一些參數的變化。這些對subnets的影響是未知的。因此,我們會觀察到同一個subnet在訓練過程中的性能是不穩定的。比如它的loss值,有時上升有時下降,這樣可能會導致一些比較好的模型在早期就被淘汰掉。為了解決這個問題,我們引入了一個新的優化目標,叫做potential,希望這個優化目標能夠幫助去保持一些比較好的模型。

我們在搜索空間上的設計并沒有太多變化,主要還是基于MobileNetV2的結構。由于我們這回使用了進化算法,我們需要把網絡結構進行編碼。這個例子里面每個塊有五個不同的候選操作,因此每個塊的編碼就是一個五維的one-hot編碼,而整個網絡的二進制編碼就由這些五維的向量拼接而成。例如你有N個layer,那每個layer都是一個很短的code,N個layer就是由N個這樣的code拼接而成。
基于進化算法的神經結構搜索,主要包含以下幾個步驟:

首先我們有一個預熱的訓練階段,從中選取一組最好的初始模型來構建一個群體population,然后才可以進入進化的迭代。在每一次的進化周期,我們先從整個群體里面按照帕累托最優來選取一組模型subset,這個是作為我們的種子。然后再從中隨機選取一些模型隊進行交叉Crossover。希望這樣能夠引入一些新的進化,同時會對隨機選取的一些模型進行變異操作。
整體而言,我們進化算法是要在探索新的模型(exploration)跟充分利用已有模型(exploitation)之間取得一定的平衡。和已有的AutoML算法不同,我們采用了一個多目標的優化設計。已有的AutoML算法一般都是用subnet的性能來作為選擇條件。但是由于在漫長的訓練過程中,一個subnet的性能時好時壞,因此具有一定的隨機性和不穩定性。我們就把訓練過程中的每一個子網的性能都做一個記錄,記在F 向量里面。而E向量,就是他們對應的訓練的索引。
最后我們對收斂的曲線做了一個擬合,把它的線性擬合的斜率定義為它的potential。斜率比較高的時候,就代表它的收斂潛力比較大。所以我們就在我們的多目標設計里面,除了考慮一個模型在某一時刻的accuracy,同時也考慮它的歷史發展軌跡。
我們的實驗結果表明,經過多目標優化和進化算法結合以后,它能夠大幅提升搜索效率,尤其是和我們之前的CovidNet3D比較,在三個數據集上都有了較大的提升。
最后我們再介紹一下,近期我們如何把自動數據增強Data augmentation和神經結構搜索結合起來。在3D醫療影像的分類問題上有兩個常見的挑戰,包括模型設計的復雜性以及一般數據集比較小的問題。
我們知道醫療領域如果要對數據做高質量的標注,成本是非常高的。解決小數據集的問題,首選手段就是數據增強Data augmentation。但研究表明最優的數據增強策略往往依賴于數據集本身。所以近年來如何做自動的數據增強,也吸引了很多學者的注意。它的目的主要是對一個給定的數據集和學習任務來自動去尋找一個合適的數據增強策略。
我們提出了一個MEDPIPE(聯合流水線)的方案。我們利用自動機器學習的思路,把自動數據增強策略和自動的網絡結構搜索統一起來,主要是構建了一個統一的流水線。我們把數據增強策略DAP和NA做一個統一的網絡編碼,這樣就可以在同一個搜索空間下面對DAP和NA同時進行優化。

上面是MEDPIPE的一個概覽圖。
我們把數據增強策略,也用一個DAG圖來描述,這樣它就成為了整個網絡結構的一部分。后面跟前面介紹的一樣,后面網絡搜索的DAG圖是沒有變化的。

上圖是我們具體的一個設計,對數據增強策略,考慮到了不同的操作,包括Invert、V-Flip、H-Flip、Blur,還有Erase、Affine等。

上圖是我們對神經結構的一個搜索空間的設計,主要還是沿用了我們之前MBConv的一個設計。
有了搜索空間以后,我們要解決的搜索問題,被定義為一個雙層優化問題,在此不再贅述了。但是由于層數比較多,引入了數據增強以后,它的搜索空間大小變得更加復雜。因此我們有必要對這個訓練做進一步的優化。
我們采用的還是采樣的思路,叫單路徑采樣。從一個比較大的DAG圖里面,在前項和后項運算時,我們并不需要嘗試所有的運算。我們通過Gumbel Softmax來進行一個采樣的操作,通過Gumbel Softmax來把它的操作變成是可微分的。
上圖是我們實驗結果。我們看到在三種不同的數據集上,我們搜索到的數據增強的策略是非常不一樣的。這說明在不同的數據集上,的確需要設計不同的數據增強的方法。

上圖是我們結合數據增強和神經結構搜索得到的一些網絡模型,我們就稱之為MEDPIPE模型。和之前的沒有采用自動數據增強的網絡搜索方法相比,性能都有一個非常大的提升。
最后,我對今天的報告做一個總結,通過我們近兩年的研究表明,AutoML是一種非常有效的手段,可以在任意給定的數據集上搜索出比較高效的神經網絡模型。而以可微搜索算法為代表的權重共享等技術可以大幅降低AutoML對算力的需求。基于進化的搜索方法,可以幫我們搜索到一些更好的網絡結構。最后數據增強和網絡結構搜索相結合,可以進一步提高AutoML的效能。
然而,目前AutoML技術還依賴于一定的人工設計經驗,如何突破人工設計的約束來創造出有效的網絡結構,將是一個非常重要的發展方向。另外,如何快速而準確的評估一個網絡結構的性能,還需要更深入的研究。
雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知。