一門面向所有人的人工智慧公開課:MIT 6.S191,深度學習入門

機器之心發表於2018-04-09
文章選自Medium,機器之心編譯。
對初學者來說,有沒有易於上手,使用流行神經網路框架進行教學的深度學習課程?近日,麻省理工學院(MIT)正式開源了線上介紹性課程「MIT 6.S191:深度學習入門」。該課程包括一系列有關神經網路及其在序列建模、計算機視覺、生成模型和強化學習等方面的基本應用知識。
一門面向所有人的人工智慧公開課:MIT 6.S191,深度學習入門

MIT 6.S191 不僅僅是一門深度學習課程系列。在設計它時,我們希望做的更多。我們想要聽眾具備必須的實踐技能,部署自己的深度學習模型,並將其應用到課程之外倍感興奮、深受啟發的問題上。

因次,在這門課程的教學中,我們選用了 TensorFlow。我們設計了兩個基於 TensorFlow 的軟體 lab 作為演講課程的補充,一個是通過迴圈神經網路聚焦於音樂生成,另一個則專注於醫療影象的氣胸檢測。

MIT 6.S191 的課程設計原則是儘可能地易於上手,不僅針對於不同背景不同水平的人,也針對於 MIT 社群內外的人。

相應地,首個 lab 介紹 TensorFlow 基礎——構建和執行計算圖、sessions 以及在深度學習中常用的一般操作,同樣也會重點介紹 TensorFlow 最新的重大更新:Eager mode。

這些背景知識有助於學生在 TensorFlow 中構建音樂生成和氣胸檢測模型。

通過 RNN 生成音樂

迴圈神經網路(RNN)多是應用於序列建模和預測任務,諸如從股票趨勢到自然語言處理,再到醫療訊號識別(比如心電圖),範圍異常廣泛。你可以檢視課程中的深度序列建模一節以瞭解 RNN 及其應用的相關背景知識。

RNN 同樣適用於音樂生成,可以捕捉時序資料中的依賴關係。在第一個 lab 中,學生致力於編碼音樂檔案資料集,界定 TensorFlow 中的 RNN 模型,並從中取樣以生成全新的音樂。

音樂生成 RNN 模型

該資料集是一個流行音樂片段的集合,被編碼成向量格式以饋送給 RNN 模型。一旦資料被處理,下一步則是使用該資料集定義和訓練 RNN 模型。

該模型基於單個 LSTM 模組,其中狀態向量追蹤兩個連續節點之間的時間依賴關係。在每一時間步,先前節點的序列被饋送進模組,LSTM 最後單元的最後輸出饋送給全連線層。因此在先前所有時間步的節點給定的情況下,我們可以輸出下一節點在時間步 t 上的概率分佈。下圖是這一過程的視覺化。
一門面向所有人的人工智慧公開課:MIT 6.S191,深度學習入門
預測序列中下一音樂節點的可能性

我們為學生提供構建 RNN 模型並定義合適的計算圖的指導。再次,我們已經設計這些 lab,供有興趣的人使用,不管其有無 TensorFlow 經驗。

該 lab 首先致力於設定相關超引數,定義佔位符變數,初始化 RNN 模型的權重。學生接著定義其自己的 RNN(input_vec, weights, biases),它接受相應的輸入變數並定義一個計算圖。
Lab 允許學生試驗不同的損失函式,優化方案,甚至是準確度指標:

loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
   logits, labels))
optimizer = tf.train.AdamOptimizer(learning_rate)
true_note = tf.argmax(output_vec,1)  # identify the correct note
pred_note = tf.argmax(prediction, 1) # identify the predicted note
correct_pred = tf.equal(pred_note, true_note) # compare!複製程式碼

生成新音樂

樂趣並不止於構建和訓練 RNN!畢竟,該 lab 是關於音樂生成——剩下的是使用 RNN 實際地建立新音樂。

該 Lab 指導學生把一個種子饋送給已訓練的模型(畢竟如果沒有什麼開始的話,它無法預測任何新的音符!),接著使用已訓練的 RNN 迭代地預測每一個連續的音符。這相當於從 RNN 在每個時間步輸出的下一個音符的概率分佈中隨機抽樣,然後使用這些樣本生成一首新歌。

像以前一樣,我們只給學生一個指導架構,定義取樣由其自己決定。
為了提供已生成歌曲的一個取樣,我們繼續並訓練模型,接著從中取樣生成新歌。試聽一下由已訓練模型生成的一個例項:https://soundcloud.com/alexanderamini/mit-6s191-rnn-song。

生成更多逼真的音樂

你很可能已發現,這裡還有大量的提升空間。我們希望學生繼續通過我們提供的框架,除錯超引數,擴充資料集來生成更加悅耳的音樂。

氣胸檢測

第二個 lab 補充了課程中用於計算機視覺的深度學習一節。學生有機會在逼真的醫療影象資料集上使用 CNN 檢測疾病。特別地,學生使用一組真實的胸部 X 射線構建模型,檢測和分類被預測有氣胸的掃描,這種情況發生在肺與胸壁之間的空氣量異常的情況下。

我們把這一 lab 推進到分類之外,以嘗試解決可解釋性的問題——什麼是反映網路為什麼和如何把一個特定類別標籤分配給指定影象的量化指標。為解決這一問題,學生部署了一項稱之為類別啟用對映的特徵視覺化技術,以獲得對區分性影象區域的理解。

資料集

在這裡,我們使用了 ChestXRay 資料集的一個子集。顧名思義,這是一個大型 X 射線胸透照片資料集,並標有相應的診斷資訊。

鑑於它是一個基於真實世界資訊的資料集,其中含有大量噪音。在這裡,我們希望讓學生們能夠使用真實的資料,以便了解包裝和註釋資料會面臨的挑戰——特別是在計算機視覺的背景下。

一門面向所有人的人工智慧公開課:MIT 6.S191,深度學習入門
CNN 模型

學生們將使用與訓練的 CNN 模型展開氣胸疾病檢測任務;在這裡,我們不會讓神經網路保持黑箱狀態,而是會提供模型和訓練模型呼叫的程式碼,並希望以此能夠讓學習者充分參與整個實驗。此外,lab 還將實現成本和預測函式,以及 CNN 分類器的評估指標(如 ROC 曲線)。

一門面向所有人的人工智慧公開課:MIT 6.S191,深度學習入門
用於氣胸檢測的 CNN 架構

用 CAM 解釋 CNN 的輸出

這一 lab 的主要目的是應用類啟用圖(CAM)來解釋 CNN 的輸出。雖然目前已有很多用於影象分類的 CNN 模型資源,但我們發現很少有介紹可解釋性的 lab。但對於初學者而言,認識並接受深度學習侷限性是非常重要的——這些都是本 lab 的一部分,也是整個課程的一部分。將 CAM 結合到實驗中也為學生們提供了閱讀和上手實踐最新研究成果的機會,這會是一種非常有意義的體驗。

CAM 是一種視覺化圖片在 CNN 中最後的卷積層上被「注意」區域的方法。請注意,CAM 視覺化適用於在最終全連線層之前具有全域性平均池化層的架構,其中我們輸出最後一個卷積層上每個單元的特徵對映的空間平均值。

CAM 有效地高亮了輸入影象中分配特定類別標籤最重要的部分。也可以直觀地說:一個類的 CAM 是基於每個特徵圖,將影象分配給該類的重要性。CNN 中的特徵對映反映了影象中特定視覺圖案(即特徵)的存在。我們通過對特徵對映的重要性加權的特徵對映和來計算 CAM。因此,在重要通道中具有更大啟用的輸入影象的區域在 CAM 中被賦予了更大的權重,因此顯得「更熱」。

在氣胸分類器的背景下,這相當於強調胸透照片中識別(或未識別到)氣胸最為重要的那些畫素。

一門面向所有人的人工智慧公開課:MIT 6.S191,深度學習入門
最終特徵圖上的類啟用對映

為了進行具體說明,我們讓 F_k 代表 k-th 在卷積神經網路最後一個卷積層上的特徵圖,然後讓 w_k 代表 k-th 在特徵凸和全連線層上的權重。於是,用於氣胸檢測的類啟用圖為:

一門面向所有人的人工智慧公開課:MIT 6.S191,深度學習入門
在對最終的類啟用圖進行上取樣以後,我們可以把胸透照片中與氣胸檢測最相關的區域視覺化(至少是從神經網路的角度看)。

該 lab 從頭到尾演示了 CAM 在 TensorFlow 中計算和視覺化的整個過程。學生們需要定義函式來提取特徵圖,計算 CAM 的權重:

(feature_maps, dense_weights) = extract_features_weights(model)複製程式碼
在這裡,學生們需要將從最後的卷積層中提取的 Feature_maps 輸入,並從全連線層 dense_weights 輸入到 CAM 計算的函式中,然後定義上取樣過程。
一門面向所有人的人工智慧公開課:MIT 6.S191,深度學習入門
氣胸陽性的胸透照片類啟用圖

正如氣胸陽性的胸透照片示例所展示的那樣,CAM 最終可以視覺化為一張熱圖。

或許這個 lab 最有意思的部分是它所引發的討論。學生們需要仔細研究模型對輸入胸透照片進行錯誤分類的例項,CAM 在這些例項中的樣子,並思考自己可以對模型做出哪些修改來突破這些限制。構建一種可以「窺探」神經網路內部執行機制的演算法可以幫助激發學生們的好奇心,並讓他們體會到機器學習中可解釋性的重要性。

以上這些教學 Lab 都是 MIT 6.S191 系列課程所獨有的,授課者為本課程進行了專門設計。目前,所有 MIT 6.S191 課程的視訊都可以在網上免費觀看了。


相關文章