
1. 为什么EEG分类值得单独写一篇体系化梳理脑电信号分类这个方向我前后断断续续做了快六年从最早拿SVM硬怼手工特征到后来用CNN端到端跑原始时序再到最近两年折腾图神经网络建模电极间拓扑关系踩过的坑基本能写一本小册子。EEG数据分类这件事表面上看是给一段脑电信号打个标签但真正上手就会发现它牵扯的东西远比想象中杂信号本身是非平稳的、信噪比极低、被试间差异巨大、样本量往往还少得可怜。你随便拿一个在公开数据集上跑到95%准确率的模型换一批被试数据可能直接掉到60%这种落差在EEG领域太常见了。这篇内容我想做的事情很明确把EEG数据分类这个领域从任务定义、信号特性、传统方法、深度学习路线到评估体系做一次完整的分类学梳理。不是那种泛泛而谈的综述而是带着我实际做过什么、为什么这么选、哪里翻过车的视角来写。适合正在做EEG相关毕设的学生、刚转入脑机接口方向的工程师以及想了解深度学习在生理信号上怎么落地的朋友。读完你至少能搞清楚三件事EEG分类到底分哪些任务、每类任务适合什么模型、以及为什么你跑出来的结果可能不可信。关键词先摆在前面EEG、深度学习、CNN、RNN、GNN这五个词基本覆盖了当前EEG分类的主流技术栈。但我要提前说一句模型不是越新越好EEG这个领域的特殊性决定了很多时候一个设计得当的浅层CNN比堆了注意力机制的Transformer更稳。2. EEG分类任务的分类体系拆解2.1 按信号范式划分从运动想象到事件相关电位EEG分类任务的第一层分类维度我习惯按信号范式来切。这不是学术上的严格分类而是从工程落地角度最实用的切法因为不同范式对应的信号特性、预处理方式、甚至模型结构选择都完全不同。运动想象Motor Imagery, MI是最经典的一类。被试想象左手或右手运动对应大脑运动皮层区域会出现事件相关去同步/同步ERD/ERS现象。这类信号的核心频段在8-30Hzmu节律和beta节律是重点。MI任务的难点在于信号非常微弱而且被试间差异极大同一个人不同天的数据分布都可能漂移。我做过的一个二分类MI任务同一被试跨session准确率能从82%掉到67%这就是EEG的现实。事件相关电位ERP是另一大类典型代表是P300拼写器。这类信号的特点是时间锁定、波形相对稳定分类的关键在于捕捉特定时间窗口内的电位变化。P300任务因为信噪比相对好单次试验分类准确率能做到80%以上是EEG分类里比较容易出成果的方向。稳态视觉诱发电位SSVEP走的是频域路线。被试盯着不同频率闪烁的刺激枕区会出现对应频率的稳态响应。这类任务的分类本质是频率识别用FFT加简单分类器就能做到很高准确率深度学习在这里的边际收益其实有限。睡眠分期是另一个重要范式属于长时程EEG分类。按AASM标准分W、N1、N2、N3、REM五类难点在于类别不平衡严重N2占比最高N1最少和阶段转换的模糊性。异常检测类包括癫痫发作检测、异常波形识别等这类任务的特点是类别极度不平衡正常片段远多于异常片段评估指标不能只看准确率。范式核心频段典型通道主要难点推荐模型起点运动想象8-30HzC3/C4/Cz信噪比低、被试间差异CNN 数据增强ERP/P3000.1-20HzPz/Fz/Cz时间窗口对齐CNN或EEGNetSSVEP刺激频率及谐波枕区O1/O2/Oz频率分辨率FFT 浅层分类器睡眠分期0.5-30Hz全导联类别不平衡RNN/LSTM或时序CNN癫痫检测多频段病灶相关导联极端不平衡CNN 代价敏感损失2.2 按标签粒度划分从二分类到连续回归第二层分类维度是标签粒度。这个维度经常被忽略但它直接决定了损失函数设计和评估方式。二分类是最常见的比如左右手MI、癫痫有/无。二分类的问题在于容易过拟合而且很多论文报的准确率有水分因为如果数据不平衡全猜多数类也能有不错的结果。多分类比如睡眠五分期、多类MI左手/右手/双脚/舌头。多分类的难点是类别边界模糊尤其是相邻类别之间。睡眠分期里N1和N2的混淆率一直很高这是信号本身决定的不是模型不够好。多标签分类相对少见比如一个时间段内同时存在多种异常波形。这类任务需要用sigmoid输出加二元交叉熵而不是softmax。连续回归比如预测注意力水平、疲劳程度。这类任务把EEG分类扩展到了回归范畴评估用相关系数或RMSE而不是准确率。2.3 按建模层级划分从手工特征到端到端第三层维度是建模层级这也是深度学习介入后变化最大的地方。手工特征 传统分类器是早期主流。特征包括功率谱密度、共空间模式CSP、自回归系数、小波熵等分类器用SVM、LDA、随机森林。这套流程在数据量小的时候反而稳因为先验知识被显式编码进了特征里。我现在做小样本任务时还是会先跑一遍CSPSVM作为baseline如果深度学习模型跑不过这个baseline那说明模型设计有问题。端到端深度学习是当前主流。原始EEG信号直接喂给网络让网络自己学特征。CNN擅长提取局部时频模式RNN擅长建模时序依赖GNN擅长建模电极间的空间关系。这三者的组合是当前EEG分类的主流技术路线。混合方法是把手工特征和深度学习结合比如用CSP特征作为CNN的额外输入或者在深度学习模型后面接一个SVM。这类方法在实际项目中往往效果最好因为兼顾了先验知识和表示学习能力。3. 深度学习三大主力在EEG上的落地细节3.1 CNN为什么它是EEG分类的默认起点CNN在EEG分类里的地位有点像线性回归在机器学习里的地位——不是最强的但几乎总是第一个该试的。原因很简单EEG信号在时频图上有明显的局部模式而卷积核天生就是干这个的。但直接把图像分类那套CNN搬过来会出问题。EEG是时序信号不是自然图像卷积核的设计要区别对待。我一般推荐两种思路时域卷积是直接在原始时序上做一维卷积。卷积核沿时间轴滑动提取局部波形特征。这种方式的优势是保留了完整的时间信息适合ERP这类时间锁定任务。典型配置是卷积核大小设为采样率的1/4到1/2比如250Hz采样就用64到128的核。核太小抓不到波形核太大参数爆炸。时频卷积是先把EEG转成时频图用短时傅里叶变换或小波变换再用二维卷积。这种方式适合MI和SSVEP这类频域特征明显的任务。时频图的频率轴和时间轴分辨率要权衡我一般用窗长256点、重叠50%频率分辨率大概1Hz左右。EEGNet是这个方向最值得参考的轻量架构。它的设计思路很聪明先用一个时间卷积提取时域特征再用一个深度卷积depthwise convolution在每个特征图上独立做空间滤波最后用可分离卷积降维。整个模型参数量只有几千但在多个公开数据集上能打到和复杂模型接近的水平。我实测过EEGNet在BCI Competition IV 2a数据集上被试内分类能到75%左右跨被试大概60%出头这个数字不算惊艳但很扎实。注意CNN做EEG分类时批归一化BatchNorm的位置很关键。放在卷积之后、激活之前是标准做法但EEG数据批次间分布差异大BatchNorm的running statistics可能不稳定。小样本时建议用GroupNorm替代。3.2 RNN与LSTM时序建模的正确打开方式RNN在EEG分类里的角色主要是处理长时程依赖。睡眠分期是典型场景因为一个睡眠阶段往往持续几分钟判断当前epoch需要看前后文。但原生RNN有梯度消失问题实际用的都是LSTM或GRU。LSTM的门控机制能记住长时间跨度的信息适合睡眠分期这类任务。我做过的一个睡眠分期项目用双向LSTM加注意力机制在SHHS数据集上五分类kappa能到0.78左右比纯CNN高了大概5个百分点。RNN在EEG上的坑主要有两个。一是序列长度问题如果直接把整晚EEG当成一个序列序列长度上万LSTM根本训不动。正确做法是按epoch切分通常30秒一个epoch每个epoch提取特征后送入LSTM让LSTM建模epoch之间的依赖。二是双向RNN的在线部署问题双向LSTM需要看到完整序列才能输出实时场景下只能用单向。RNN和CNN的组合也很常见。用CNN做前端特征提取把每个时间窗口的输出作为LSTM的输入序列这种CNN-LSTM架构在EEG分类里表现稳定。我一般用3层CNN加2层LSTM的配置CNN负责局部特征LSTM负责时序整合。3.3 GNN把电极间关系建模成图GNN是最近几年EEG分类的热点核心思路是把电极看成图的节点电极间的功能连接看成边然后用图卷积聚合信息。这个思路很符合EEG的物理本质——大脑活动本来就是网络层面的。构建图的方式有两种。基于先验的图是按电极物理距离或标准脑区划分来连边比如国际10-20系统里相邻电极连边。这种方式简单但不够灵活。基于数据的图是从数据里学邻接矩阵比如用相位锁定值PLV或皮尔逊相关系数计算电极间连接强度再阈值化得到邻接矩阵。这种方式更贴合数据但计算量大。GNN在EEG上的典型架构是先用CNN或RNN提取每个电极的时序特征再用GCN在电极图上聚合空间信息最后接分类头。我试过在MI任务上用这种架构比纯CNN大概高2-3个百分点但训练时间翻倍参数量也大不少。所以GNN不是万能药数据量小的时候反而容易过拟合。模型类型优势劣势适用场景CNN局部特征提取强、训练快长时依赖建模弱ERP、MI、SSVEPRNN/LSTM时序建模强训练慢、难并行睡眠分期、长时程任务GNN空间关系建模强参数量大、需图构建多通道MI、脑网络分析CNNRNN兼顾局部与时序结构复杂睡眠分期、癫痫检测CNNGNN兼顾局部与空间训练成本高多通道分类任务4. 从原始信号到分类结果完整实操流程4.1 预处理去噪这一步决定上限EEG预处理的重要性怎么强调都不过分。我见过太多人模型调了半天最后发现是预处理没做好。原始EEG里的噪声来源主要有工频干扰50Hz或60Hz、眼电EOG、肌电EMG、心电ECG以及电极接触不良导致的漂移。带通滤波是第一步。根据任务选频段MI任务通常保留8-30HzERP保留0.1-20Hz睡眠分期保留0.5-30Hz。滤波器用FIR还是IIR我一般用FIR因为零相位特性不会引入时间偏移这对ERP任务很重要。阶数选采样率的2-3倍比如250Hz采样用500-750阶。陷波滤波去工频。50Hz陷波用IIR的notch滤波器Q值设30左右。但要注意如果后续要做时频分析陷波可能引入伪影这时候用频谱插值替代更好。伪迹去除是重头戏。ICA是最常用的方法把EEG分解成独立成分手动或自动识别眼电、肌电成分并剔除。手动识别需要经验自动识别可以用ICLabel这类工具。我一般先用ICLabel自动标注再人工复核一遍因为自动标注在低质量数据上会误杀。实操心得ICA分解前一定要先做1Hz以下的高通滤波否则慢漂移会严重影响分解质量。另外ICA对数据长度有要求少于5分钟的数据分解结果不稳定。重参考也影响结果。常见的有平均参考、乳突参考、Cz参考。平均参考适合大多数任务但如果电极数少比如少于32导平均参考可能引入偏差。乳突参考在听觉ERP任务里更常用。分段与基线校正是最后一步。按事件标记切分epoch通常取事件前200ms到事件后800ms。基线校正用事件前200ms的均值减去消除慢漂移。4.2 数据增强小样本问题的解法EEG数据量小是常态一个被试做100次试验就算不错了。数据增强是缓解过拟合的关键手段。加噪声是最简单的往信号里加高斯白噪声信噪比控制在5-20dB。这能提升模型鲁棒性但要注意别加太多否则信号被淹没。时间平移是把信号沿时间轴随机平移几个采样点。这对ERP任务要慎用因为会破坏时间锁定特性。对MI任务可以用。通道丢弃是随机把某些通道置零模拟电极脱落。这能提升模型对通道缺失的鲁棒性在跨数据集迁移时特别有用。切片混叠是把两个不同样本的片段拼接起来类似Mixup的思路。我试过在MI任务上用这种增强准确率提升了大概3个百分点。生成式增强是用GAN或VAE生成合成EEG样本。这个方向论文不少但实际效果参差不齐。我个人的经验是生成样本质量很难保证用不好反而引入噪声。小样本场景下传统的加噪声和平移增强性价比更高。4.3 模型训练从超参选择到防止过拟合训练EEG分类模型有几个超参特别关键。学习率我一般从1e-3开始用余弦退火或ReduceLROnPlateau调度。EEG数据噪声大学习率太大会震荡太小收敛慢。Adam优化器是默认选择weight decay设1e-4到1e-3。批大小受限于样本量通常设16或32。批太小梯度噪声大批太大泛化差。如果样本量实在小可以用梯度累积模拟大批。训练轮数要配合早停。EEG模型很容易过拟合我一般设100轮上限patience设15验证集损失不降就停。正则化方面Dropout是标配dropout率0.5左右。但EEG数据噪声大dropout太高会导致欠拟合我一般从0.3开始试。L2正则也常用系数1e-4。类别不平衡在异常检测任务里必须处理。方法有重采样过采样少数类或欠采样多数类、代价敏感损失给少数类更高权重、Focal Loss。我一般先用代价敏感损失简单有效。交叉验证在EEG里要特别注意。不能随机划分因为同一被试的样本高度相关。正确做法是留一被试交叉验证LOSO或者至少按被试划分训练测试集。我见过太多论文用随机划分报高准确率实际部署时完全不能用。4.4 评估准确率之外的指标EEG分类的评估准确率只是入门指标。不同任务要看不同指标。二分类看敏感度、特异度、AUC。AUC对类别不平衡不敏感是更可靠的指标。多分类看混淆矩阵、宏平均F1、kappa系数。kappa系数排除了随机猜测的影响在睡眠分期里是标准指标。连续回归看皮尔逊相关系数、RMSE。统计检验也不能少。被试间差异大单看平均准确率不够要做配对t检验或Wilcoxon检验报告p值和效应量。任务类型主指标辅助指标注意事项二分类AUC敏感度/特异度类别不平衡时看AUC多分类宏平均F1kappa系数看混淆矩阵找混淆类异常检测召回率精确率/F1漏检代价高时优先召回连续回归相关系数RMSE报告置信区间5. 常见问题与排查技巧实录5.1 模型不收敛或loss震荡怎么办这是最常见的问题。排查顺序我一般是这样的先看数据。把输入信号画出来确认没有全零通道、没有异常大值。我遇到过一次某个通道数据全是NaN导致整个batch的loss变NaN。检查数据归一化EEG信号幅度通常在微伏级要标准化到零均值单位方差。再看学习率。学习率太大loss会震荡太小收敛慢。可以跑一个学习率扫描从1e-5到1e-1对数间隔试。然后看批归一化。如果用了BatchNorm但批太小running statistics不稳定换成GroupNorm或LayerNorm试试。最后看模型初始化。EEG数据分布特殊默认初始化可能不合适。可以试试用数据统计量初始化第一层。5.2 训练准确率高但测试准确率低这是过拟合的典型表现。解法按优先级排增加数据增强。这是最有效的尤其是加噪声和通道丢弃。减小模型容量。EEG数据量小大模型必然过拟合。把层数减半、通道数减半试试。增加正则化。提高dropout率、增大weight decay。早停。这个必须做别等模型过拟合了才停。避坑技巧如果训练准确率接近100%但测试只有60%先别急着调模型检查一下数据划分是不是有问题。我见过有人把同一被试的数据同时放进训练和测试集这种泄漏会让结果虚高。5.3 跨被试准确率大幅下降这是EEG的固有难题。被试间差异来自头型、电极阻抗、大脑解剖结构等多方面。缓解方法有被试归一化。对每个被试的数据单独做标准化消除个体差异。域适应。用对抗训练让模型学到的特征在不同被试间对齐。这个方向论文很多但实际效果看数据。微调。在新被试上先用少量数据微调模型通常几十个样本就能显著提升。被试无关特征。设计模型时显式去除被试相关信息比如用被试对抗损失。我个人的经验是跨被试场景下简单模型加域适应比复杂模型不加域适应效果好。别一上来就上大模型。5.4 实时部署时的延迟问题如果做BCI在线系统延迟是硬指标。影响因素有窗口长度。分类窗口越长准确率越高但延迟越大。MI任务通常用2-4秒窗口ERP用0.5-1秒。模型复杂度。大模型推理慢实时场景要用轻量模型。EEGNet这类几千参数的模型推理延迟在毫秒级Transformer可能几十毫秒。预处理延迟。滤波和ICA都有延迟在线场景要用因果滤波ICA可以用滑动窗口近似。滑动预测。不要等窗口满了才预测用滑动窗口每100ms预测一次做多数投票平滑输出。问题现象可能原因排查方法解决方案loss变NaN数据异常值检查输入统计归一化、裁剪异常值训练震荡学习率过大学习率扫描降低学习率、加调度过拟合模型太大/数据太少对比训练测试曲线增强、正则、减容量跨被试差个体差异按被试分析归一化、域适应、微调实时延迟高窗口长/模型大测推理时间轻量模型、滑窗预测6. 技术选型的个人经验总结做了这么多EEG分类项目我最大的体会是别追新先跑通baseline。CSPSVM在MI任务上能到70%左右EEGNet能到75%复杂模型可能到78%但训练成本翻几倍。如果项目目标是发论文那可以堆模型如果是做产品稳定和可解释比多那两三个百分点重要得多。另一个体会是预处理和数据质量决定上限。我见过太多人花几周调模型结果发现是某个通道接触不良导致的数据质量问题。花时间在数据清洗和预处理上回报率远高于调模型。关于CNN、RNN、GNN的选择我的建议是先从CNN开始它是默认起点如果任务有明显时序依赖如睡眠分期加RNN如果通道数多且空间关系重要如多通道MI考虑GNN。但别一上来就三个都上复杂度上去了调试难度也上去了。最后说一个容易被忽略的点EEG分类的伦理和隐私。EEG数据包含大量个人生理信息做项目时要注意数据脱敏和合规使用。这不是技术问题但每个从业者都该有这根弦。这个方向后续还可以往自监督预训练走用大量无标签EEG数据预训练一个通用编码器再在下游任务上微调。这个思路在NLP和CV里已经验证了EEG领域刚起步是个值得关注的方向。