JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

解碼器:從 LDA 到深度學習

腦機介面如何把大腦特徵轉換成一個選擇——先從一條簡單可靠的分界線開始,只有當資料真正需要時才動用深度網路。

解碼器是一次受過訓練的猜測

解碼器其實就是一個準備得非常充分的猜測者。你給它看大腦特徵——比如某人想像左手或右手運動時,特定節律裡的能量——並為每個樣本附上正確的標籤。它由此學到一條規則:面對新的特徵,哪個選擇最有可能?這就是一句話版的神經解碼

這些帶標籤的樣本來自一段簡短的校準環節:受試者按照提示完成指令,同時你進行記錄。這就是監督式機器學習——從帶標籤的資料中學習一個映射。這個映射的好壞,更多取決於乾淨的特徵和誠實的評估,而非模型有多花俏。

從簡單開始:LDA

線性判別分析(LDA)會畫出一條筆直的分界——在二維裡是一條線,在更高維裡是一個平面——把兩個類別分開。直覺上,它會找到一個方向,讓兩團樣本沿這個方向被推得最開,然後在那裡把它們分開。在特徵又少又乾淨時,它是一個極好的基線:快、穩,而且不容易被騙。

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

# X_train: features (trials x features), y_train: labels (e.g. left/right)
clf = LinearDiscriminantAnalysis()
clf.fit(X_train, y_train)        # learn the boundary from calibration data
y_pred = clf.predict(X_test)     # guess the class for new trials
scikit-learn 中一個完整的 LDA 解碼器:在校準試次上擬合,再對新試次進行預測。

SVM 及其同伴

支援向量機(SVM)同樣會畫一條分界,但它在意的是間隔。在所有能分開兩個類別的分界中,它會挑出兩側空白間隔最寬的那一條——也就是離每個類別最近樣本都盡量遠的那條邊界。這點額外的餘地,往往讓它在資料有限時更穩健。

當類別無法用直線分開時,SVM 還能藉助一種叫核函數的技巧,把邊界彎成曲線。和 LDA 一樣,它在又小又精選的特徵集上表現出色——所以它理應和 LDA 並肩放進你的基線工具箱。兩個都試試,讓誠實的驗證來決出勝者。

神經網路與深度學習

神經網路押的是另一種賭注。它們不需要你手工設計特徵,而是逐層自己學習特徵。一個卷積神經網路(CNN)可以接收相當原始的 腦電(EEG),並自行發現有用的模式——空間濾波器與頻段——無需別人告訴它。

誠實的代價是:這種靈活性很「餓」。深度網路有大量參數要擬合,所以需要海量帶標籤資料,才能勝過一個簡單基線。而一次典型的腦機介面校準,大概只能給你幾十到幾百個試次——通常遠遠不夠。在小資料集上,LDA 或 SVM 往往能與深度網路打平甚至更勝一籌。當你擁有大型、彙集起來的資料集時再動用深度學習,不要提前。

過擬合的陷阱

下面這個坑會絆倒所有人。在小資料集上,靈活的模型可能把雜訊背了下來,而不是學到訊號。它在自己訓練過的那些樣本上得分漂亮——然後一遇到真實、即時的大腦就崩盤。高高的離線準確率,是會騙人的。