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

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

MIT 6.S191 不只僅是一門深度學習課程系列。在設計它時,咱們但願作的更多。咱們想要聽衆具有必須的實踐技能,部署本身的深度學習模型,並將其應用到課程以外倍感興奮、深受啓發的問題上。

因次,在這門課程的教學中,咱們選用了 TensorFlow。咱們設計了兩個基於 TensorFlow 的軟件 lab 做爲演講課程的補充,一個是經過循環神經網絡聚焦於音樂生成,另外一個則專一於醫療圖像的氣胸檢測。git

MIT 6.S191 的課程設計原則是儘量地易於上手,不只針對於不一樣背景不一樣水平的人,也針對於 MIT 社區內外的人。

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

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

經過 RNN 生成音樂

循環神經網絡(RNN)可能是應用於序列建模和預測任務,諸如從股票趨勢到天然語言處理,再到醫療信號識別(好比心電圖),範圍異常普遍。你能夠查看課程中的深度序列建模一節以瞭解 RNN 及其應用的相關背景知識。

RNN 一樣適用於音樂生成,能夠捕捉時序數據中的依賴關係。在第一個 lab 中,學生致力於編碼音樂文件數據集,界定 TensorFlow 中的 RNN 模型,並從中採樣以生成全新的音樂。算法

音樂生成 RNN 模型

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

該模型基於單個 LSTM 模塊,其中狀態向量追蹤兩個連續節點之間的時間依賴關係。在每一時間步,先前節點的序列被饋送進模塊,LSTM 最後單元的最後輸出饋送給全鏈接層。所以在先前全部時間步的節點給定的狀況下,咱們能夠輸出下一節點在時間步 t 上的機率分佈。下圖是這一過程的可視化。
預測序列中下一音樂節點的可能性

咱們爲學生提供構建 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 在每一個時間步輸出的下一個音符的機率分佈中隨機抽樣,而後使用這些樣本生成一首新歌。session

像之前同樣,咱們只給學生一個指導架構,定義採樣由其本身決定。
爲了提供已生成歌曲的一個採樣,咱們繼續並訓練模型,接着從中採樣生成新歌。試聽一下由已訓練模型生成的一個實例: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 可視化適用於在最終全鏈接層以前具備全局平均池化層的架構,其中咱們輸出最後一個卷積層上每一個單元的特徵映射的空間平均值。ide

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

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

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

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

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

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

(feature_maps, dense_weights) = extract_features_weights(model)複製代碼
在這裏,學生們須要將從最後的卷積層中提取的 Feature_maps 輸入,並從全鏈接層 dense_weights 輸入到 CAM 計算的函數中,而後定義上採樣過程。
氣胸陽性的胸透照片類激活圖

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

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

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

原文連接: medium.com/tensorflow/…
相關文章
相關標籤/搜索