30到60分鐘的速成課,讓你了解人工智能的實際應用,以及它的缺陷。
人工智能已經成為現在的熱門詞匯,而醫療健康也是也是很有潛力的行業。AI最終會完全代替醫療人員嗎?或者它們會讓從業者從事更加有趣、更有價值的工作嗎?
醫學專家和研究人員不能一夜之間學會編程和數據分析,但他們需要了解AI究竟是什么、是如何工作的、現在達到了什么水平、將來會怎樣發展,以及數據科學家的工作是什么。這就是本文要講的內容,從中你會了解機器學習的基礎概念,例如交叉驗證和過度擬合,以及在實踐中最常見的困難和缺點。
我們會在文中講解如何建立一套算法,用核磁共振(MRI)數據估計大腦的生理年齡。你會學到如何用入門級線性回歸知識和高級深度神經網絡打造先進的算法,可以自動辨識暗示著大腦的年齡的特征,例如白質稀疏癥和大腦皮層萎縮。這篇文章面向所有讀者,即使你不是放射科醫生也沒關系,我們會從科學的角度,向大家展示大腦的生理年齡對理解神經退行性疾病是很有幫助的。在文章的最后,我們會證明,算法估計出患有阿爾茲海默癥病人的大腦年齡,比正常人老了六歲。
我們還發布了Colab筆記本,你可以執行代碼復現此過程,鏈接:colab.research.google.com/drive/1SWUcKT6bJLaTlxVLMvjHgLOD7Rdy3MQY#scrollTo=emyzNaHln9qa&forceEdit=true&offline=true&sandboxMode=true
機器學習概覽
在最近的一篇文章中,機器學習領軍人物Michael Jordan試圖給AI去神秘化:
“現在大多被稱作AI的東西實際上在過去幾十年都屬于機器學習。機器學習結合了統計學、計算機科學和很多其他學科,設計算法處理數據,進行預測,從而做出決定。”
事實上,對大腦年齡的估計可以看做是一種監督式的機器學習問題,這是數據科學家們很擅長的問題。監督式機器學習問題的目標就是創造一種算法,能夠在給定輸入X的情況下輸出Y。在這里,我們的X是MRI數據,Y是大腦年齡。機器學習算法關鍵的一點就是他們用真實世界的數據進行訓練,并非根據專家制定的規則進行設計。如果你能用X和Y解決醫學問題,那你也能成為半個數據科學家了。
遇到這樣的問題,數據科學家們采取的方法是一樣的:
獲取數據、清洗數據
分析數據、提取相關特征
設計一個驗證方案
用數據訓練算法、分析錯誤、解釋結果
不斷迭代,直至算法達到最佳性能
我們將對這些步驟一一講解,重點解釋最常用的機器學習工具,以及常見錯誤。
硬件、軟件和知識
機器學習的運用少不了對硬件環境的要求,如果你只有一臺筆記本電腦、用Excel操作的話,可能會很痛苦,因為這里的數據集體量很大,也很復雜(因為是3D圖像)。所以一臺好的機器可能需要如下配置:
一個可以存儲并快速下載的SSD硬盤:項目結束后我們可能有大約500GB的數據
大量的RAM(如128GB)
多核處理器(如32核)
軟件方面,我們用Python作為編程語言。
另外,數據科學需要你掌握一些理論知識,例如應用數學、統計學、算法以及編程經驗、數據庫管理等等。數據科學家可能來自不同領域,但經常需要分析或咨詢,在他們的工作中使用機器學習工具會非常有幫助。
數據收集
在這個項目里,我們用了兩個公開的數據集,A中包含了來自倫敦三家不同醫院的數據,有將近600名病人。數據集B包含了來自美國、中國和德國25家不同醫院的1200多名病人的數據。一份MRI數據可能包括了多張圖像,表示不同生理特征(T1、T2、FLAIR、DTI等等),稱為序列。在我們的實驗中,我們只用了最常見的T1序列。
這一部分對我們很容易,因為我們使用的數據集已經是經過管理的,是可用的。而且醫學圖像都是標準格式(DICOM)。
數據清洗
數據科學項目的開始就伴隨著數據清洗,這并不是最令人激動的緩解,并且還會很費時。為了清洗數據,研究者首先需要研究它。
數據集A中包含一個病人信息的電子表格以及含有大量MRI數據的壓縮文件夾。圖像以NlfTI格式存儲,NlfTI是DICOM的常見替代版本,每個項目都有自己的ID,可以在電子表格和MRI文件夾中找到。觀察數據后,我們發現了幾個問題:
有些項目有一個MlfTI文件夾,但并沒有在電子表格中出現過。
相反地,一些項目在電子表格中出現,但沒有在MlfTI中出現。
有些ID在電子表格中重復出現。
來源醫院的名稱并不在電子表格中顯示,而是在壓縮文件夾中隱藏。
一些NlfTI文件夾有問題,圖像的分辨率會很低,而且經過部分裁剪。
看起來數據一團糟,但是這個數據集還不算無藥可救,一些錯誤在醫學數據集中算是很常見的,通常是由于數據的轉換才造成了這樣的結果。我們在數據集B中也遇到了類似的情況、最后,我們從數據集A中獲得了563個“干凈”的對象,從數據集中獲取了1034個處理過的對象,仍然是較大規模的數據集。我們創建了另一個電子表格,有1597行,5列。每一列分別是ID、年齡、性別、MRI來源醫院和相關NlfTI文件路徑。具體表格可點擊鏈接查看:colab.research.google.com/drive/1SWUcKT6bJLaTlxVLMvjHgLOD7Rdy3MQY#scrollTo=emyzNaHln9qa&forceEdit=true&offline=true&sandboxMode=true
數據顯示,其中55%的研究對象為女性,最小的為18歲(我們在數據集中排除了兒童),最大的87歲。
數據處理
當我們打開NlfTI文件夾后,發現圖像之間的分辨率、立體像素值、視野、方向等差別很大。所以我們必須對它們進行規范化。
幸運的是,神經科學研究社區的研究人員曾開發過一些用于規范大腦MRI數據的軟件工具,我們選擇了ANTs以及一些自制的Python腳本,對每份MRI數據進行以下操作:
重新采樣:將每立體像素的分辨率設為1mm3
N4偏見域矯正:該步驟是去除圖像中的非生物信號。
制作統一的大腦圖像模板:將所有圖像轉換到相同的方向、調整成同樣的比例大小等等。
去除頭骨:我們要從圖像中移除顱骨,僅保留大腦,方便估計大腦的年齡。
立體像素密度歸一化:在MRI中,立體像素的密度值是隨機的(從0到100,或者從0到10000……)。我們使用了一種成為白條紋歸一化的技術,它會檢測白色物質的密度值,并將其設置為1。
這些操作都需要大量計算力,每個項目操作一遍需要5分鐘,所以要處理完整個數據集大約需要5天!
醫生有關大腦年齡都了解哪些知識
事實上,醫生對大腦年齡的了解并不多!讓醫生單從一張大腦圖像上判斷準確的生理年齡幾乎不可能。但是放射科醫生們知道MRI上正常大腦都具備哪些形態。在大腦衰老的過程中,有三個主要特征可以在MRI的T1序列上發現,如圖。
腦萎縮,圖中灰色部分的厚度會減少
出現腦白質疏松癥狀(leukoaraiosis)
由于腦萎縮,會導致腦室擴張,其中會積聚腦脊髓液
為了方便解釋,我們只對T1進行分析。實際上,放射科醫生在判斷腦齡時還會節課其他MRI序列。例如,在T2序列上的腦白質疏松癥狀更明顯,其他序列能幫助檢測某些與腦齡有關的結構特征。未來,功能性磁共振成像(fMRI)也許可以進一步提升腦齡判斷的準確性。
準備工作
從這里開始,就要進入算法部分了!
確定問題:用X預測Y
最初接觸機器學習,最好的實踐方法就是用簡單的基準算法對復雜問題進行了解。所以,我們決定先不使用3D圖像,而是用能夠反映它們內容的立體像素強度直方圖表示。
對于電腦來說,一份MRI就是由立體像素灰度的數值組成的3D網格,高值通常用黑色表示,低值用白色表示。一份圖像的直方圖就是這些值的直方圖。其中一個例子如下所示,x軸表示灰度的值從0到1,y軸表示每個值的總立體像素值。
檢測的核心思想是,同類組織的灰度值是相近的,所以為了確定灰色物質和白色物質的數量和占比,你可以計算二者有相似值的立體像素數量。
回到算法上,我們將輸入的X用向量(一串數字)替換,共有200個。用數學表示,即對于單一MRI,X=[X1,X2,…,X200],其中Xi是在第i個項目中立體像素的數量。我們把對MRI的具體描述稱為特征向量。機器學習算法的主要概念就是,這里沒有人類制定的規則告訴你如何將X輸出Y,而是他們可以用數據學習這些規則。這就是深藍(Deep Blue)和AlphaGo的主要區別之一。
更進一步,“訓練”算法,表示搜索一種函數F,算法F(X)可以進行預測,其中輸出的結果最接近真值Y。而“學習”就是一個優化問題,讓預測結果和真值之間的誤差達到最小。在我們的案例中,公寓1597對(X, Y)值,我們試著讓|F(X)—Y|的絕對值誤差最小。例如如果F(X)預測出年齡為23歲,而此時Y的實際值是21歲,絕對誤差就是2歲。
交叉驗證:分離訓練集和測試集
現在,我們要進入機器學習過程中的重要一步:如何判斷算法的有效性?機器學習解決這一問題的方法叫做交叉驗證(cross-validation)。我們隨機將數據集分成兩部分:訓練集和測試集(也叫做驗證集)。訓練集用來訓練算法,驗證集用來評估性能,看算法在從未見過的新數據上表現得怎樣。
難處在與,我們如何設置訓練集和測試集的比例,訓練集越大,算法性能就越好,因為接受訓練的數據更多。但是越大的測試集能反映出更可靠的性能,因為數據代表真實世界的情況。
這里我們運用了一種名為K-折交叉驗證的方法,隨機將數據集分為5部分,重復訓練5次,每次都將該數據集用作測試集,其他四個用作訓練集。這樣進行五次之后,模型會更加可靠。
但是在醫學研究中,僅有交叉驗證是不夠的,通常論文中的結果都被過度高估了,因為模型總在相同的數據集上多次迭代。所以,想要實際驗證算法,就要用外部獨立的數據集進行檢測。
選擇正確的模型
模型的種類有很多,為你的問題選擇正確的一種需要有一定的經驗。大部分人都是從簡單有效的方法開始的,所以這里,線性模型通常是一種好的選擇。
在線性模型中,F(X)是X的加權總和:F(X)=(W1X1)+(W2X2)+…+(W200*X200)+β。其中Wi是與Xi有關的權重,β是表示偏差的常量。
在線性回歸中,我們能用簡單的代數找到最佳可能權重Wi。我們用Scikit Learn Python包訓練線性模型。地址:colab.research.google.com/drive/1SWUcKT6bJLaTlxVLMvjHgLOD7Rdy3MQY#scrollTo=emyzNaHln9qa&forceEdit=true&offline=true&sandboxMode=true
當然,假設MRI直方圖和年齡之間的關系是線性的有些過于簡單。考慮到其中的非線性關系會讓預測更加準確。這里我們用刀的是流行的Gradient tree boosting。這是決策樹的一種形式,經過多次迭代可以減少誤差。通過這一模型,我們將平均絕對誤差減少到了5.71歲,與目前最佳結果4.16歲比較接近了。
常見陷阱
在交叉驗證中,我們將所有對象集合,隨機分出了訓練集和測試集。那么如果我們按醫院來源分會怎樣?最終我們發現線性回歸和Boosting模型的絕對誤差都增加了5到6歲。
下方的圖示表明,對數據進行更認真的分析,可以避免這樣的錯誤。可以看到,每個醫院病例的年齡分布,大多數醫院的患者年齡并不是平均分布的。
接下來,我們回執了每個醫院患者的平均直方圖:
每家醫院立體像素強度直方圖的平均曲線
從中我們得出結論:白色物質的變化與不同來源的醫院有關,而灰色物質的變化在各家醫院中都存在。所以有了這些特征,算法的目的就很明確了:
用直方圖判斷來源醫院
根據醫院的數據信息限定預測年齡的范圍
為了消除這種影響,我們決定返回到預處理的步驟,即立體像素值歸一化。我們從單一的只修正白色物質的方法,改變成加入了灰色物質的方法。現在,兩種物質都集中在直方圖中了,平均直方圖如下所示:
重新運行線性和非線性模型后,我們得到了更好地結果:
主要收獲
多花時間分析數據
從簡單方法開始分析
如果使用得當,非線性模型會很強大
在多中心研究中要十分注意交叉驗證,尤其是當每個病人有多個樣本,或者樣本尺寸很小時。最佳方法是由外部的或獨立的驗證集,只分割數據有時并不是好方法。
泛化和過度擬合
泛化是算法能在從未見過的數據上保持預測性能的能力之前的交叉驗證過程就是檢測模型從訓練數據到測試數據的泛化能力。
擬合表示模型表示數據的準確程度,如果算法在測試集和訓練集上的表現都不好,那么就叫“欠擬合”。如果在訓練集上表現很好,但測試集表現不好,就叫“過擬合”。
應對過擬合的方法有幾種:添加更多數據(增加樣本規模)、降低算法復雜程度、添加各種限制和規則、去除無用特征、如果出現過擬合就停止訓練等等。在我們的案例中,想要降低模型復雜程度,就只能對MRI的分辨率進行下采樣,獲得更小的圖像以及更少的立體像素。
可解釋的深度學習
我們用數據的方法提取了特征,研究能幫助我們進行年齡預測的方法。除此之外,深度學習采取的是另一種方法,即神經網絡,可以直接在原始數據上工作。
在我們的研究中,我們將每個MRI軸向維度的200張圖片減少到只有10張圖,這些圖像對應腦室中1cm的軸向區域,可以檢測到潛在的腦萎縮、腦室擴張和腦白質疏松癥。為了加快訓練,我們使用了高性能的圖形處理器GTX-1080Ti和TensorFlow Python庫加速訓練。
最終,我們設計出了一個簡單的、只有10層卷積層的網絡,它在隨機分割的數據集中的平均絕對誤差為4.57歲,在按照醫院劃分的數據中平均絕對誤差為6.94歲。之后我們用數據增強對模型進行改進。數據增強是指在數據集中加入少量干擾項,將圖片旋轉或縮放,從而讓網絡更穩定。
最終,我們將經過數據增強的CNN模型結果和在分割后的MRI上訓練的線性模型結果取平均值,與人類專家的合作結果相比較,最終表明我們的模型在表現上得到了提升。
結語
現在,我們已經可以用機器學習預測大腦年齡了,除此之外,這也有助于醫學家們了解阿爾茲海默癥這類的神經退行性疾病。不過,研究者在搭建分析模型時依然要小心,交叉驗證要采取合適的方法,才能保證結果的可靠。
-
人工智能
+關注
關注
1792文章
47528瀏覽量
239268 -
數據集
+關注
關注
4文章
1208瀏覽量
24754 -
深度學習
+關注
關注
73文章
5510瀏覽量
121349
原文標題:機器學習實戰:結合核磁共振數據估計大腦年齡
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論