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 往往能与深度网络打平甚至更胜一筹。当你拥有大型、汇集起来的数据集时再动用深度学习,不要提前。

过拟合的陷阱

下面这个坑会绊倒所有人。在小数据集上,灵活的模型可能把噪声背了下来,而不是学到信号。它在自己训练过的那些样本上得分漂亮——然后一遇到真实、实时的大脑就崩盘。高高的离线准确率,是会骗人的。