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