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

 2018-04-08 13:00:18.0

  • 課程鏈接:http://introtodeeplearning.com/

  • 課程視頻:https://www.youtube.com/watch?list=PLtBw6njQRU-rwp5__7C0oIVt26ZgjG9NI&v=JN6H4rQvwgY

  • 課程 GitHub:https://github.com/aamini/introtodeeplearning_labs

MIT 6.S191: MIT 關於深度學習算法及其應用的官方入門課程

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 上的概率分佈。下圖是這一過程的可視化。

預測序列中下一音樂節點的可能性

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

該 lab 首先致力於設置相關超參數,定義佔位符變量,初始化 RNN 模型的權重。學生接着定義其自己的 RNN(input_vec, weights, biases),它接受相應的輸入變量並定義一個計算圖。

Lab 允許學生試驗不同的損失函數,優化方案,甚至是準確度指標:

 
   
   
   
  1. loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(

  2.    logits, labels))

  3. optimizer = tf.train.AdamOptimizer(learning_rate)

  4. true_note = tf.argmax(output_vec,1)  # identify the correct note

  5. pred_note = tf.argmax(prediction, 1) # identify the predicted note

  6. 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 射線胸透照片數據集,並標有相應的診斷信息。

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

CNN 模型

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

用於氣胸檢測的 CNN 架構

用 CAM 解釋 CNN 的輸出

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

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

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

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

最終特徵圖上的類激活映射

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

在對最終的類激活圖進行上採樣以後,我們可以把胸透照片中與氣胸檢測最相關的區域可視化(至少是從神經網絡的角度看)。

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

 
   
   
   
  1. (feature_maps, dense_weights) = extract_features_weights(model)

在這裏,學生們需要將從最後的卷積層中提取的 Feature_maps 輸入,並從全連接層 dense_weights 輸入到 CAM 計算的函數中,然後定義上採樣過程。

氣胸陽性的胸透照片類激活圖

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

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

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

原文鏈接:https://medium.com/tensorflow/mit-6-s191-introduction-to-deep-learning-24994d705aca

文章來源:機器之心