設計腦機接口的實踐指南(設計腦機接口的實踐指南是什么)
背景:BCI 是什么意思?
腦機接口(BCI)指的是將大腦與計算機連接起來的工具。過去十年間,業(yè)界對 BCI 的關注度迅速增長——一個典型例子就是,埃隆·馬斯克名下主要研發(fā)腦機接口技術(shù)的初創(chuàng)企業(yè) Neuralink 每次開新發(fā)布會都會引發(fā)輿論熱議[1]。Neuralink 可以在大腦中植入人造物來完成多種任務,諸如用思維來控制動作或直接在大腦中播放音樂等。
你會感到恐懼嗎?沒關系,這是很正常的。但在這篇文章中,我們將只關注一個簡單的 BCI 實現(xiàn),具體來說是用一個娛樂設備[2]記錄腦電波活動,即腦電圖(EEG)。這個實現(xiàn)不需要對人體做任何手術(shù)(也不會有疼痛或死亡風險)。雖然你(很遺憾)不能用它來收聽你最喜歡的樂曲列表,但可以實時觀看 BCI 佩戴者的情緒波動(只不過是以代碼的形式)。
一個用例:用 EEG Unicorn 估測情緒
如前所述,在本教程中我們將從想法一路走到具體的實現(xiàn),完成所有必要的步驟來設計一個處理具體任務的 BCI。作為示例,我們要做的 BCI 屬于情緒估測領域。這個應用旨在估計參與者的情緒狀態(tài)。
情緒 BCI 圖解。
如圖所示,這個管道的目的是將參與者的 EEG 信號作為輸入,并返回相應的 V-A 情感坐標圖。V-A 圖是一種應用于生物心理學的情緒坐標,其中 Valence(橫軸)代表愉快和不愉快(即積極和消極)的程度,而 Arousal(縱軸)代表興奮和平靜的水平?;谶@種表示,任何情感狀態(tài)均可表示為 VA 坐標平面上的一個點。
設計情緒識別 BCI 的關鍵步驟
具體而言,為設計和部署 BCI,我們必須遵循幾個關鍵步驟。
范式定義和信號記錄
首先我們要定義 BCI 的范式:我想對什么事物建模?或者想要估計哪些信息?我的應用程序的目的是什么?我是否想通過 BCI 來控制機械手/腳?我是要評估駕駛?cè)蝿罩旭{駛員/成員的警覺性嗎?是要預測疾病的發(fā)作幾率?還是檢測癲癇發(fā)作狀態(tài)?科學界對一些可以插入 BCI 的研究項目存在巨大興趣。
在本文的案例中,我們決定關注之前的一項研究工作,就是估計參與者觀看一些視頻時的情緒狀態(tài)[3]。這篇論文還提出了一個可以促進特定情緒狀態(tài)的視頻列表(我們對此非常感興趣!)。這些視頻的列表和對應的情緒都可以在 youtube 上找到,并列在注[4]中。
因此我們設計了一個實驗基準測試,包括在參與者觀看宣傳特定情緒的視頻時記錄他們的 EEG 信號。在我們的存儲庫中,腳本registration_pipeline.py給出了一段完成這一任務的代碼,用戶只需將他想要處理的視頻放在專用目錄中(或改變路徑)即可。
概要分析
有了上述基準測試,我們就可以完成腦電波信號的記錄工作了。這些信號最后將構(gòu)成訓練 ML 模型(甚至是 DL)所必要的數(shù)據(jù)集。
我們來做這個模型吧……等一下!在建成一個能夠從 EEG 信號中估計情緒的管道之前,我們必須提取信息來幫助模型處理數(shù)據(jù)。如果你有大量信號和/或可用的計算資源,跳過這一步也是可以的。但為了保持簡潔,我們考慮采用更自然簡單的模型來簡化復雜性。一種可能的提取信息的方法是基于腦電圖信號的頻率特性,也就是說“這個腦電圖片段是在高頻率還是低頻率范圍內(nèi)振蕩?”。過去,科學家們發(fā)現(xiàn),一些腦電圖信號是由幾個頻段組成的,每個頻段在特定的任務或行為中都會增強/減弱[4]。
- δ為深度睡眠,[0-4Hz]。
- θ表示昏昏欲睡,[4-7Hz]。
- α代表放松和閉目思考,[8-15Hz]。
- β代表積極思考和與專注相關的狀態(tài)[16-31Hz]。
- γ代表感受到更多壓力的狀態(tài)[32-50Hz]。特征提取的圖示。
按照這個過程,我們從每個 EEG 片段中提取了一個信息向量。這個過程的目的是提取信息,以便更好地處理生物醫(yī)學信號。這個步驟可以使用腳本outline_analysis.py的第一部分來處理。
最后(如果你還跟得上的話),你應該知道剩下的步驟是創(chuàng)建一個模型,用它從上面預計算的特征向量中估計情緒狀態(tài)(是快樂還是悲傷?)。這里為了讓我們的方法簡單易懂,我們考慮一個由決策樹組成的簡單模型。這種簡單方法背后的想法是尋找動態(tài)閾值來區(qū)分信息向量,例如第 i 個電極的高α貢獻對應于低 arousal,第 j 個電極的中等γ貢獻對應于高 valence,等等。
給出特征向量 X 和它的標簽 y,就可以創(chuàng)建一個名為 clf 的分類器(對應于決策樹)。該分類器可以通過以下幾行代碼輕松訓練。
from sklearn import treeclf = tree.DecisionTreeClassifier() # definition of the modelclf.fit(X, y) # training of the model...
復制代碼
在 outline_analysis.py 的第二部分給出了一個更完整的解釋,包括整個模型描述和訓練。訓練完這個簡單的決策樹后,可以用 joblib 庫來保存它。
...from joblib import dumpdump(clf, 'classifier_file_name')
復制代碼
實時實現(xiàn)
在訓練和保存模型之后,剩下的步驟是將各個部分合并在一起。
兩個聯(lián)合腳本必須并行工作:第一個腳本旨在記錄、處理和估計來自 EEG 的情緒狀態(tài)pylsl_emotion.py;第二個腳本會在圖形上顯示相應的情緒和對應的笑臉,如play_emotion.py所述。
嘗試一下
最后提一句:自己嘗試一下吧!上述代碼和自述文件都放到了Github上。你可以自己嘗試,或者為不同的模型或 EEG 耳機改編代碼。
了解更多軟件開發(fā)與相關領域知識,點擊訪問 InfoQ 官網(wǎng):https://www.infoq.cn/,獲取更多精彩內(nèi)容!