对每个受试者进行了120次单独试验。如果受试者是酗酒者,所有试验都被标记为酒精中毒。所有试验均以256Hz采样,64个电极放置在受试者头皮上1秒。分类方法需要确定受试者是否被诊断为酒精中毒或是对照受试者。
— ::: tip 算法1 基于ANN方法
第一成分
对数据中的方差具有最大信息。 ::: warning 为什么使用PCA? EEG数据总是复杂和高维的,不适合直接用作分类模型的输入。减少维数的目的是允许最小的信息损失。在应用主成分分析后,大多数数据进入低维空间,适合将其用作深度学习或机器学习分类器的输入源。换句话说,由于EEG数据包含来自人类头皮上多个位置的记录,并且记录的信号由混合的脑活动组成,因此该方法用于计算独立分量,以帮助观察神经元活动的原始特征。 ::: 人工神经网络(ANN)是一个受大脑启发的系统,由输入层、中间层和输出层组成。本研究在两个单独的实验中使用了主成分分析方法结果中的30个主成分,然后使用原始脑电数据集中的64个通道。使用2层和4层拓扑结构的浅层和深层人工神经网络进行了实验
::: warning 为什么使用ANN? 具有两层或多层的多层神经网络(MLP)是前馈结构中最常用的技术,因为其训练过程快,易于实现. :::
模型A模型是PCA的结果加上一个简单的两层人工神经网络。第一层包含30个主成分作为输入神经元,还有一个中间层
包含50个神经元从输入中学习,节点使用tanh激活函数。最后,有一个输出层,其中1个节点对应于1个可能的酒精类或非酒精类。sigmoid输出层用于执行该分类。
模型B模型是一个简单的两层人工神经网络,从原始EEG数据中进行反馈。第一层包含64个通道作为输入神经元,还有一个中间层
包含100个神经元以从输入中学习,节点使用Relu激活函数。最后,有一个输出层,其中1个节点对应于1个可能的酒精类或非酒精类。sigmoid输出层用于执行该分类。
模型C模型是一个四层人工神经网络,从原始脑电数据中获取信息。第一层包含64个通道作为输入神经元,有三个中间层
包含100、50或32个神经元从输入中学习,节点使用Relu激活函数。具有1个节点的输出层对应于1个可能的酒精类或非酒精类。sigmoid输出层用于执行该分类。 ::: warning 为什么使用sigmoid函数? 对于最后一层使用S形函数的主要原因是,该函数的结果存在于0和1之间,因此对于必须预测概率作为结果的模型非常有用。 ::: ::: warning 为什么使用Relu函数? 对于中间层,ReLU函数在我们的ANN模型中的总体性能优于tanh,因为它比tanh的计算成本更低,并且与此架构中的tanh函数相比,ReLU更好地加速了模型的收敛。 :::
训练测试分割为20%的测试和80%的训练数据
在该步骤中,通过计算下面所示的两个步骤来计算每个层的激活。这些激活沿正向从输入层流向输出层,以生成最终输出。
z = weight ∗ input + bias
a = Activation Function (z)
So, for the first layer we calculate activation of hidden layer:
z1 = X ∗ W1 + b1
a1 = Tangh(z1)
And for the second layer which is output layer
z2 = a1 ∗ W2 + b2
output = Sigmoid (z2)
这一步骤的目的是通过对偏差和权重进行边际改变来减少最终或输出层中的误差。 使用误差项的导数计算这些变化。基于链式规则的微积分原理,增量变化被反向传递到隐藏层,在那里它们的权重和偏差发生相应的变化。这导致权重和偏差的调整,直到误差最小化。
使用从上述反向传播步骤接收的增量变化来更新权重和偏差。当对具有大量训练示例的多个时间段执行这些步骤时,损失减小到最小值。获得最终权重和偏差值,然后可用于对未看到的数据进行预测。当达到最大epoch数(我们的实验为100个)时,训练ANN过程停止,模型收敛,达到目标。
::: tip 算法2 基于LSTM方法
标签向量表示每个受试者的类别,除以1(酒精)或0(非酒精)。
该模型由两个完全连接的LSTM层、一个dropout层和一个dense层组成。
LSTM和dropout层用于从原始EEG信号中学习64个特征,dense层用于最终分类。
对80%的数据训练LSTM模型,并对20%的EEG数据进行测试。
研究表明,LSTM方法(算法2)取得了显著的改进(93.00%的准确率),并表明LSTM是一种鲁棒可靠的EEG信号分类器。ANN方法(算法1)的结果明显比LSTM方法(算法2)的结果差(86.00%精度);然而,LSTM并不比ANN快,其运行时间在所有模型中最高。实验结果还表明,将深度学习技术与手工特征提取方法相结合是不值得的。
隐藏神经元的数量=输出层的大小+2/3 × 输入层的大小
隐藏神经元的数量<输入层的大小×2