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