本文為 AI 研習社編譯的技術博客,原標題 :
From brain waves to robot movements with deep learning: an introduction.
作者 | Norman Di Palo
翻譯 | 狐不歸
校對 | 鄧普斯·傑弗 審核 | 醬番梨 整理 | 立魚王
原文連結:
https://towardsdatascience.com/from-brain-waves-to-arm-movements-with-deep-learning-an-introduction-3c2a8b535ece
神經系統是一個極為複雜的結構。你整個身體中的神經總長度超過十萬公裡,它們的每一部分都與你的脊髓和大腦相連。這個「網絡」傳輸著每一個控制人體運動的電脈衝信號。每一個指令都從你的大腦發出,大腦是一個由神經元構成更加神奇的的結構,神經元間通過電激活信號進行通信。理解和解釋腦電模式是神經科學家和神經生物學家的最大任務之一,但它也是一個非常具有挑戰性的任務。
一種記錄大腦活動的非侵入式的方法是腦電圖(EEG),這項技術通過放置在病人頭皮上的電極記錄大腦的電壓波動。通常會有大約30個這樣的電極被放置在頭皮周圍,以記錄腦電波的整體波動。總之,大腦活動與EEG信號之間的關係非常複雜,除了一些特定的實驗室試驗之外,人們對其了解甚少。由此,產生了一個巨大的挑戰:如何對這些EEG掃描結果進行「解碼」,從而通過非侵入式的腦機接口(BCI)控制機器人假肢或者其他設備。
作為一門強數據驅動的學科,在與深度學習相關的模式識別領域最近有了新的突破,創造出了一種新的使用神經網絡分析這些電信號的新方法。在這篇文章中,我們會看到有關這個主題的介紹:我們將會看到一個由Kaggle競賽提供的EEG數據,該競賽旨在檢測出哪一種EEG模式與特定的胳膊/手的姿勢相關,比如抓取或舉起物體。接著我們會設計一個神經網絡,在用不同的方法對數據進行預處理以後,對不同的動作進行分類。我同樣會展示一些大腦活動的數據可視化(圖像),使我們對手上的數據有大致的了解。這個領域的研究的最終目的是開發出一種用戶負擔得起且有用的假肢裝置,通過用大腦控制假體,幫助截肢者重獲輕鬆完成基本動作的能力。該技術同樣可以被應用於讀取肌肉電信號的活動,通過分析激活狀態的肌肉,對(使用者)想要進行的那種類型的動作進行解碼。
你可以在這個在線olaboratory Notebook上找到本文中的所有代碼,你可以在你的瀏覽器上直接運行代碼。Github連結請閱讀原文。
若你有Kaggle帳號,則可以免費下載數據。你即將看到,數據只由幾個.csv文件組成,這些文件分別是:
這些數據記錄了不同的受試者完成一個簡單的動作時的EEG信號,比如抓取或移動物體的動作。因此,數據集被劃分為不同的段,也被歸入不同的類目中。我們稍後在精確度預測時可以看到,腦電波的個體差異性很強,對於同一個人,模型可以以很高的準確率預測它所沒有見過的片段,但如果對一個新的受試者進行這樣的預測卻可能有較大難度。
因此我們的目標就是創建一個神經網絡,將讀取到的EEG信號作為輸入,輸出受試者想要完成的6種可能動作的概率分布。由於「沒有動作」本身不是6個類之一,我們可以將它單獨作為一類添加,或者將所有可能的輸出設定為0到1之間的值,使用一個閾值去決定某類動作是否被檢測到。如果所有動作的預測值都在閾值以下,我們就認為沒有動作發生。
[電極的位置,來源: https://www.kaggle.com/c/grasp-and-lift-eeg-detection/data]
我對這些電極上的活動做了一個動畫版的數據可視化。由於採樣頻率較高(500Hz),我使用簡單的3階低通濾波器對數據進行平滑,並用前100幀做了個動畫,也就是大約0.2秒的時間。
[前1/5秒內電極的活動]
我們還可以以2維熱圖的形式對數據進行可視化,縱軸是時間(從頂部開始向下),橫軸表示32個電極。
[EEG時態熱圖(時間從頂部開始一直往下)]
這同樣非常有用,我們即將看到,它會幫助我們完成時空卷積。
為了提升學習階段的效果,原始數據要先經過預處理。比如,EEG信號的採樣頻率很高,而要完成的動作的變化率在則相對較低,這會造成許多問題:數據變化得很快,而動作卻一直保持不變,這樣一來數據的波動就都會被視為噪聲。除此之外,時域的模型會接收到大量快速變化的數據,與此同時分類的輸出卻保持不變。
第一個可能的步驟是使用低通濾波器對數據進行濾波。即使是一個簡單的運行均值也會有效。通過這種方法,我們減少了數據的高頻變化,同時保留了更加有用的低頻結構,因為我們要分類的動作變化的頻率非常低(最高1Hz)。在此之後我們可以對數據進行下採樣,即每10100個點僅保留一個數據。這一操作也有助於降低時間維度和數據相關性,從某種意義上來說,使數據更有時間稀疏性。除此之外,許多其他預處理技術也可以被應用,但是為了這篇介紹的簡潔性,這裡不多贅述,現在開始設計我們的神經網絡。
處理時序數據,我們首先想到的結構之一就是循環神經網絡。
這些網絡具有動態結構,因此會有一個能夠對時態數據進行編碼的中間狀態,因此可以根據過去的輸入計算輸出。我在Keras中設計了一個LSTM網絡,並輸入具有時序結構的訓練數據。網絡的效果不錯,但在這個特別的例子裡,我更想展示,通常用於圖像處理的卷積神經網絡是如何在時態數據上做得很好的。
如前所述,從某種意義上說,我們實際上在處理的是時空數據。上文所展示的熱圖的縱軸表示的是時域上的變化,而橫軸展示的是不同的電極,幾乎所有相鄰的電極在人的頭皮上也是空間相鄰的。這意味著我們可以利用卷積來提取出有用的特徵。一個2D的核可以同時對時間和空間上的模式進行編碼。想像一個3*3的卷積核,它能夠在熱圖所描述的矩陣上,通過對三個不同的時間步長(3個核行)以及3和不同的電極(3個核列)進行加權來提取特徵。因此,一個具有多個卷積核的卷積神經網絡可以找到在有限的時間周期裡,電極的激活隨著受試者想要做的運動而變化的特徵。
我在Keras中實現了一個簡單的CNN網絡,檢查它在這組數據集上的表現。在這個在線Colaboratory Notebook上,你可以找到所有本文中的代碼,並直接在你的瀏覽器上運行。Github連結請閱讀原文。
為了檢查我們模型的效果,如Kaggle競賽中所建議的那樣,我們對模型的AUC分數進行檢查。如果你對AUC不太熟悉,可以查看這個清晰而直觀的解釋(連結)。你可以在在線筆記本中自己嘗試,在一個快速的訓練階段後,我們能夠達到約0.85的AUC分數。
通過訓練不同的網絡結構、採用預處理技術等手段,可以實現許多改進。但這個介紹性的概念驗證(POC)展示了神經網絡從這類數據中進行學習的卓越能力。
在這篇文章中,我們對腦電信號EEG做了介紹,這是一種非侵入式的、相對簡單的從使用者的頭皮上採集的有用信號。我們看到了一些直觀的數據可視化結果,以及怎樣使用神經網絡從中提取出諸如運動意圖這樣的特徵。我相信這個領域(機器人假體、腦機交互)會因為深度學習而有顯著快速的進步,數據科學技術、平臺和競賽也會更加廣闊、逐年發展。
這些技術的影響將是巨大的。擁有能夠以自然的方式控制的低成本的假肢,可以極大地改善數百萬人的生活。
我建議你們去看一看「共生項目」,這是個最近啟動的項目,一群有才華的人聚在一起,試著造出一個能夠用肌肉的活動控制的低成本智能假臂,以使得這類設備真正落地、普及。
關注我的Twitter,獲取我工作上的更多動態。更多: https://twitter.com/normandipalo
你可以在這個在線Colaboratory Notebook 上找到本文中的所有代碼,並且在你的瀏覽器上直接運行。
想要繼續查看該篇文章相關連結和參考文獻?
長按連結點擊打開或點擊底部【從腦電波到機器人運動——深度學習:介紹】:
https://ai.yanxishe.com/page/TextTranslation/1436
AI研習社每日推薦:雷鋒網雷鋒網(公眾號:雷鋒網)雷鋒網
CMU 2018 秋季《深度學習》課程將教你學習深度神經網絡的基礎知識,以及它們在眾多 AI 任務中的應用。課程結束後,期望學生能對深度學習有足夠的了解,並且能夠在眾多的實際任務中應用深度學習。
加入小組免費觀看視頻:https://ai.yanxishe.com/page/groupDetail/188