情绪分类Transformer

论文名称 Transformers for EEG-Based Emotion Recognition: A Hierarchical Spatial Information Learning Model
期刊 IEEE SENSORS JOURNAL 4.325/Q1
方法 提出了一种基于Transformers的模型,从电极级到大脑区域级分层学习区分性空间信息。在电极级空间学习中,采用–te–来整合不同大脑区域内的信息。其次,考虑到大脑区域在情绪识别中的不同作用,Transformers内的自我注意(–sa–)可以增强大脑区域的关联。在大脑区域级空间学习中,使用–te–来捕获大脑区域之间的空间相关性。
结论 与CNN、LSTM和DBN的准确度相比,DEAP和MAHNOB-HCI数据库中提出的HSLT的准确度分别提高了5%和6%以上。

分层空间学习Transformer(HSLT)简介

在这项工作中,我们提出了一种基于Transformer的模型,称为HSLT,通过鲁棒捕获从电极水平到大脑区域水平的EEG空间相关性来提取鉴别特征。HSLT的框架包括以下三个部分:

电极(electrode patches)的划分

受ViT中图像spitting的启发,我们将每个电极的PSD特征视为电极patch。根据神经科学中皮层的区域分类,我们将电极patch分成不同的簇。采用6秒长的滑动窗口,重叠50%来分割EEG数据 Img

电极级(Electrode-level)空间学习

不同脑区内的电极片分别输入到相应的–te–。它旨在整合大脑区域内的关键信息,为学习整个大脑的空间信息奠定良好的基础

脑域(Brain-region-level)空间学习

electrode-level –te–提取的潜在特征用作脑域patch.将patch并行输入到–te–以获得情感预测。–te–中的多头–sa–可以增强对大脑区域之间空间相关性的捕获。同时,它可以强调大脑的贡献区域。

此外,HSLT的所有–te–均采用可学习的pos_Embeding(==positional embedding==)和类标记(==class token==),以学习跨电极或大脑区域的基本位置信息,并分别聚合代表性信息。

Img

脑电特征提取与patch分割

对于每个脑电分段,我们从不同频带提取PSD特征。此外,PSD特征通过==Welch方法==获得,具有1秒长的Hamming窗。 \(w[n]=0.54-0.46 \cos \left(\frac{2 \pi n}{N-1}\right)\) 来自一个电极的PSD特征的聚集,表示为electrode patches.

补充

::: tip 汉明窗 为了处理信号,我们要对信号进行加窗,也就是一次仅处理窗中的数据。因为实际的语音信号是很长的,我们不能也不必对非常长的数据进行一次性处理。明智的解决办法就是每次取一段数据,进行分析,然后再取下一段数据,再进行分析。(分段截取数据) 怎么仅取一段数据呢?一种方式就是构造一个函数。这个函数在某一区间有非零值,而在其余区间皆为0.汉明窗就是这样的一种函数。它主要部分的形状像sin(x)在0到pi区间的形状,而其余部分都是0.这样的函数乘上其他任何一个函数f,f只有一部分有非零值。 ::: ::: tip Welch法 Welch功率谱密度就是用改进的平均周期图法来求取随机信号的功率谱密度估计的。Welch法采用信号重叠分段、加窗函数和FFT算法等计算一个信号序列的自功率谱估计(PSD)和两个信号序列的互功率谱估计(CSD)。 Img :::

–te–细节

Img

首先,使用==linear embedding==将电极贴片映射到恒定De大小的electrode patches。 根据公式我们可以得到patch embeddings的表示E \(E=\left[x_{E}^{c l s} ; x_{E}^{1} W_{E} ; x_{E}^{2} W_{E} ; \ldots ; x_{E}^{N} W_{E}\right]\) 类标记(class token)是一个额外的可学习的embedding,它可以聚合所有embedding的代表性信息

\[Z_{E}=E+E_{E}^{p o s}\]

我们利用了一维pos_Embeding$E_{E}^{pos} \in \mathbb{R}^{(N+1) \times D_{e}}$,其目的在于保留电极贴片或区域贴片的空间信息。结果$Z_E$用作–te–的输入。

表示 公式
给定电极片的表示 $X_{E}=\left[X_{E}^{1}, X_{E}^{2}, \ldots, X_{E}^{N}\right] \in \mathbb{R}^{N \times d}$
线性投影矩阵 $W_{E} \in \mathbb{R}^{d \times D_{e}}$
patch embeddings的表示 $E \in \mathbb{R}^{(N+1) \times D_{e}}$
表示electrode-level学习中的class token $x_{E}^{c l s} \in \mathbb{R}^{D_{e}}$
一维pos_Embeding $E_{E}^{pos} \in \mathbb{R}^{(N+1) \times D_{e}}$

::: tip 为什么是N+1? 由于ViT本身没有RNN结构,也没有Decoder,经过Attention的结果是一个size为(batch_size, patch_num, dim)的tensor,其中patch_num是切片数量。因此,需要求出ViT的向量C(实现MLP中进行分类)。那么,类比于Transformer中,注意力机制的Q、K、V向量并不是直接从每个训练集的batch中得到的,而是经过训练集的训练得到的。同理,我们也可以额外设立一个大小为(1,1,dim)的patch和其他patch训练,存储图片信息,实现全局信息的汇总。(想想没有RNN的Transformer这么干,ViT这么做也很合理) :::

::: tip 为什么需要添加位置编码呢?

首先咱们知道,一句话中同一个词,如果词语出现位置不同,意思可能发生翻天覆地的变化,就比如:我欠他100W 和 他欠我100W。这两句话的意思一个地狱一个天堂。可见获取词语出现在句子中的位置信息是一件很重要的事情。但是咱们的Transformer 的是完全基于self-Attention地,而self-attention是不能获取词语位置信息地,就算打乱一句话中词语的位置,每个词还是能与其他词之间计算attention值,就相当于是一个功能强大的词袋模型,对结果没有任何影响。 ::: ::: tip positional encoding怎么获取呢?

1.可以通过数据训练学习得到positional encoding。 2.《Attention Is All You Need》论文中Transformer使用的是正余弦位置编码。位置编码通过使用不同频率的正弦、余弦函数生成,然后和对应的位置的词向量相加,位置向量维度必须和词向量的维度一致。过程如上图,PE(positional encoding)计算公式如下: \(P E(p o s, 2 i)=\sin \left(\frac{p o s}{10000^{2 i / d_{\text {model }}}}\right)\) \(P E(p o s, 2 i+1)=\cos \left(\frac{p o s}{10000^{2 i / d_{\text {model }}}}\right)\)

符号 表示
pos 表示单词在句子中的绝对位置
dmodel 表示词向量的维度

::: ::: tip 为什么是将positional encoding与词向量相加,而不是拼接呢? 拼接相加都可以,假设只是本身词向量的维度512维就已经蛮大了,再拼接一个512维的位置向量,变成1024维,这样训练起来会相对慢一些,影响效率。两者的效果是差不多地,既然效果差不多当然是选择学习习难度较小的相加了。 :::

transformer块包括多头自我注意、层规范化和多层感知(MLP)。 多头自我注意(MSA)是自我注意的扩展,广泛应用于自然语言处理。 Img

::: tip 什么是Multi-Head Attention? Multi-Head Attention 很简单,就是在self-attention的基础上,对于输入的embedding矩阵,self-attention只使用了一组$W^Q,W^K,W^V$ 来进行变换得到Query,Keys,Values。而Multi-Head Attention使用多组$W^Q,W^K,W^V$得到多组Query,Keys,Values,然后每组分别计算得到一个Z矩阵,最后将得到的多个Z矩阵进行拼接。Transformer里面是使用了8组不同的$W^Q,W^K,W^V$ Img

::: 层归一化(LN)可以减少训练时间并提高泛化性能。在这里,我们给出了$L_e$作为电极级空间学习中的块数。–te–中的操作如下所示。

\[Z_{l_{e}}^{\prime}=M S A\left(L N\left(Z_{l_{e}-1}\right)\right)+Z_{l_{e}-1}\]

\(Z_{l_{e}}=M L P\left(L N\left(Z_{l_{e}}^{\prime}\right)\right)+Z_{l_{e}}^{\prime}\) \(l=1, \ldots, L\)

符号 表示
MSA 表示Multi-head Self-Attention
MLP 表示Multiple Layer Perception
LN 表示Layer Normalization
$Z_{le}^{‘}$ MSA的输出
$Z_{le}$ MLP的输出
L transformer堆叠的数量

::: tip 为什么要进行Normalize呢?

在神经网络进行训练之前,都需要对于输入数据进行Normalize归一化.

  1. 能够加快训练的速度。
  2. 提高训练的稳定性。 ::: ::: tip 为什么使用LN而不使用Batch Normalization(BN)呢? LN是在同一个样本中不同神经元之间进行归一化,而BN是在同一个batch中不同样本之间的同一位置的神经元之间进行归一化。 BN是对于相同的维度进行归一化,但是咱们NLP中输入的都是词向量,一个300维的词向量,单独去分析它的每一维是没有意义地,在每一维上进行归一化也是适合地,因此这里选用的是LN。 Img

:::

在electrode-level空间学习中,一个大脑区域内的electrode patches被并行输入到相应的–te–。根据电极的划分,有九个–te–,对应于大脑区域。由九个–te–获得的潜在特征$X_L$可以公式化为: \(X_{L}=\left[Z_{L_{e}}^{P F} ; Z_{L_{e}}^{F} ; Z_{L_{e}}^{L T} ; Z_{L_{e}}^{C} ; Z_{L_{e}}^{R T} ; Z_{L_{e}}^{L P} ; Z_{L_{e}}^{P} ; Z_{L_{e}}^{R P} ; Z_{L_{e}}^{o}\right]\)

要注意,$X_L$中每个元素的维数不相等。 原因是$PF、F、 C$脑区包含三个以上的电极,而其他脑区仅包含三个电极。为了保证相同的维数,将$Z_{L_{e}}^{P F}$、$Z_{L_{e}}^{F}$、 $Z_{L_{e}}^{C}$投影到4×De维数中。根据下面式子,我们得到了$X_R$用于大脑区域级空间学习。 \(\begin{aligned} X_{R}=& {\left[Z_{L_{e}}^{P F} W_{P F} ; Z_{L_{e}}^{F} W_{F} ; Z_{L_{e}}^{L T} ; Z_{L_{e}}^{C} W_{C} ; Z_{L_{e}}^{R T} ; Z_{L_{e}}^{L P} ; Z_{L_{e}}^{P}\right.} \\ &\left.Z_{L_{e}}^{R P} ; Z_{L_{e}}^{o}\right] \\=& {\left[X_{R}^{1}, X_{R}^{2}, \ldots, X_{R}^{9}\right] \in \mathbb{R}^{9 \times 4 \times D_{e}} }\end{aligned}\) 在大脑区域(brain-region)空间学习中,操作类似于电极级空间学习,操作可以表示为: \(Z_{R}=\left[x_{R}^{\text {class }} ; x_{R}^{1} W_{R} ; x_{R}^{2} W_{R} ; \ldots ; x_{R}^{9} W_{R}\right]+E_{R}^{p o s}\) \(Z_{l_{r}}^{\prime}=M S A\left(L N\left(Z_{l_{r}-1}\right)\right)+Z_{l_{r}-1} l_{r}=1, \ldots, L_{r}\) \(Z_{l_{r}}=M L P\left(L N\left(Z_{l_{r}}^{\prime}\right)\right)+Z_{l_{r}}^{\prime} l_{r}=1, \ldots, L_{r}\)

符号 表示
$W_R \in \mathbb{R}^{4 \times D_{e} \times D_{r}}$ 是线性投影的权重
$E_{R}^{pos} \in \mathbb{R}^{10 \times D_{r}}$ 是positional embedding
$Z_{lr}^{‘}$ MSA的输出
$Z_{lr}$ MLP的输出

最后的预测结果如下

\[\hat{y}=\sigma\left(W_{O} Z_{L_{R}}^{0}\right)\]
符号 表示
$\hat{y}$ 表示预测结果
$W_{O}$ 表示权重
$\sigma$ 表示sigmoid函数

训练

在五个频带上提取PSD特征,即θ频带(4-7 Hz)、慢阿尔法频带(8-10 Hz)、阿尔法频段(8-12 Hz)、β频带(13-30 Hz)和伽马频带(30-47 Hz)。因此,特征d的维数为5。

名称 数值/方法
特征d的维数 5
所有MSA模块和MLP模块中dropout 0.4
brain-region-level learning的linear embeding中dropout 0.1
优化器 adam optimizer+early stopping
batch大小 512
epoch 80
损失函数 交叉熵函数
标签处理 one-hot coding
超参数$L_e$ 2
超参数$L_r$ 2
超参数$D_e$ 8
超参数$D_r$ 16
超参数$D_h$ 64
超参数$k$ 16

结果

数据集评估

1-4的自我评估被视为"低等级",即低觉醒(LA)和低价值(LV)。 6-9的自我评估被视为"高级",即高觉醒(HA)和高价值(HV)。 根据该准则,我们将情感识别问题转化为==二元分类==(LA VS HA,LV VS HV)和==四类分类==(LALV VS LAHV VS HALV VS HAHV)。 Img

分类性能

采用==精度==(表示为Pacc)、==加权F1分数==(表示为Pf)和==科恩卡帕系数==(表示为Pck)来评估分类性能。 Img Img 在二元分类中,在DEAP数据库中,HSLT的==arousal and valence level==准确率分别达到65.75%和66.51%。同时,在MAHNOB-HCI数据库中,HSLT的准确率分别为66.20%和66.63%。与二值分类相比,四类分类的性能由于难度的增加而适当下降

与其他方法对比

Img 与CNN、LSTM和DBN的准确度相比,DEAP和MAHNOB-HCI数据库中提出的HSLT的准确度分别提高了5%和6%以上。此外,拟议的HSLT超过单层transformer达到4%。同样,单层transformer也优于这三种网络。此外,我们还重新实现了最新的时空EEG编码网络CNN-LSTM和DenseNet。与这两个网络相比,HSLT也略有改进。

消融研究/控制变量实验

理解系统中的因果关系是产生可靠知识的最直接方式(任何研究的目标)。==消融==是一种非常省力的方式来研究因果关系。 为了研究positional embedding(PE)和class token(表示为[CLS])的影响,我们采用了消融实验,结果见表XI和表XII。 Img

可以看出,当PE或[CLS]从HSLT中移除时,提议的HSLT的性能显著降低(超过5%)。此外,当PE和[CLS]都被去除时(降低超过6%),获得了最低的精确度。总之,这些结果表明,PE和[CLS]都有助于提高分类性能。

补充

embeding

简介

embedding就是用一个低维的向量表示一个物体,可以是一个词,或是一个商品,或是一个电影等等。

性质

  • embedding向量能使距离相近的向量对应的物体有相近的含义。比如 Embedding(复仇者联盟)和Embedding(钢铁侠)之间的距离就会很接近,但 Embedding(复仇者联盟)和Embedding(乱世佳人)的距离就会远一些。

  • Embedding还具有数学运算的关系,比如Embedding(马德里)-Embedding(西班牙)+Embedding(法国)≈Embedding(巴黎)

Embedding能够用低维向量对物体进行编码还能保留其含义的特点非常适合深度学习。在传统机器学习模型构建过程中,我们经常使用==one hot encoding==对离散特征,特别是id类特征进行编码,但由于==one hot encoding==的维度等于物体的总数,比如阿里的商品==one hot encoding==的维度就至少是千万量级的。这样的编码方式对于商品来说是极端稀疏的,甚至用multi hot encoding对用户浏览历史的编码也会是一个非常稀疏的向量。而深度学习的特点以及工程方面的原因使其==不利于稀疏特征向量的处理==.

  • embedding层,在某种程度上,就是用来降维的,降维的原理就是矩阵乘法。在卷积网络中,可以理解为特殊全连接层操作,跟1x1卷积核异曲同工

  • embedding的又一个作用体现了。对低维的数据进行升维时,可能把一些其他特征给放大了,或者把笼统的特征给分开了

  • 直观上看 embedding 相当于是对 oneHot 做了平滑,而 oneHot 相当于是对 embedding 做了 max pooling Img

Img Img embedding 作为一种新思想,他的意义包含以下几个方面:

  • embedding 表示,把自然语言转化为一串数字,从此自然语言可以计算;
  • embedding 替代 oneHot 极大的降低了特征的维度(天下人苦 oneHot 久矣);
  • embedding 替代协同矩阵,极大地降低了计算复杂度。

Img Img

原文链接

Transformer中的position encoding

把一个输入的句子拆开成每个token,把每个单独的token看成图里的一个node。如果只有attention机制但是没有PE的话,相当于是在每个node之间都连了边,连成了一张全连接图。所以只看输入输出的句子的话,实际上整个句子(Graph)所携带的信息和每个词(node)的顺序是无关的。因此我们要加入PE来让整个输入的信息是order variant的。并且这个PE需要具有平移不变性;单调性和对称性。2017年Attention is all you need paper里用的sinusoidal PE是用了三角函数的周期性来实现这三个性质的。后面其实还有了PE的很多变种,比如BERT就直接通过学习来实现adaptive encoding了 \(P E(p o s, 2 i)=\sin \left(\frac{p o s}{10000^{2 i / d_{\text {model }}}}\right)\) \(P E(p o s, 2 i+1)=\cos \left(\frac{p o s}{10000^{2 i / d_{\text {model }}}}\right)\) pos表示单词在句子中的绝对位置,pos=0,1,2…,例如:Jerry在"Tom chase Jerry"中的pos=2;dmodel表示词向量的维度,在这里dmodel=512;2i和2i+1表示奇偶性,i表示词向量中的第几维,例如这里dmodel=512,故i=0,1,2…255。

https://zhuanlan.zhihu.com/p/166244505

line embeding

怎么判断图的两个节点之间的相似性?paper作者从两方面出发:一阶相似性和二阶相似性

一阶相似性

一阶相似性其实就是指图中的两个节点有边相连,边的权重衡量的就是两个节点的相似程度,假设我们定义两个节点的联合概率为 \(p_{1}\left(v_{i}, v_{j}\right)=\frac{1}{1+\exp \left(-\vec{u}_{i}^{T} \cdot \vec{u}_{j}^{\prime}\right.}\) 而我们又知道其对应的经验概率为 \(\hat{p}_{1}(i, j)=\frac{w_{i j}}{W} , where W=\sum_{(i, j) \in E} w_{i j}\) 利用KL散度的公式并且忽略掉一些常数以后,我们就可以定义一阶相似性的损失函数为 \(O_{1}=-\sum_{(i, j) \in E} w_{i j} \log p_{1}\left(v_{i}, v_{j}\right)\)

二阶相似性

假如两个节点他们的邻居很相似,我们则称这两个节点二阶相似。如下图所示,虽然节点5和节点6之间没有边相连,但是他们的邻居都是一样的,则我们认为节点5和6也是相似的 Img 假如我们定义两个节点的条件概率为 Img 要对比两个节点的二阶相似性,其实对比的就是两个节点的条件概率分布的相似性。只要我们能够保证所有节点的条件概率和经验条件概率一致,那么这个embedding就可以很好地保存这两个节点的二阶相似信息。即

Img 得到二阶的损失函数为 Img 在现实中,我们一般采用负例采样的方法进行训练,即 Img 对比一阶和二阶相似性的损失函数,我们可以发现其实两者是非常相似的,只不过是二阶相似性每个节点有两个embedding,一个作为中心点的embeding和一个作为context时候的embeding。最终二阶使用的是作为中心点的embeding。

结合一阶相似性和二阶相似性

将一阶相似性训练得到的embedding和二阶训练得到的embedding拼接起来,就是最终这个节点的embedding形式。

三. 模型优化

(1)我们可以看到不管是一阶还是二阶的时候损失函数每条边都有个weight。为了加速模型收敛,训练的时候对边采取抽样的方式生成训练样本,每条边被抽中的概率为边的权重。

(2)对于邻居很少的节点,我们可以将节点的邻居的邻居作为该节点的邻居,对应的权重为 Img 然后将节点的权重进行排序,取出topN

class token

其目的:因为transformer输入为一系列的patch embedding,输出也是同样长的序列patch feature,但是最后要总结为一个类别的判断,简单方法可以用avg pool,把所有的patch feature都考虑算出image feature。但是作者没有用这种方式,而是引入一个类似flag的class token,其输出特征加上一个线性分类器就可以实现分类。其中训练的时候,class token的embedding被随机初始化并与pos embedding相加,因此从图可以看到输入transformer的时候,第0个位置补上一个新embedding,最终输入长度N+1.

所说的第n+1个token(class embedding)的主要特点是: (1)不基于图像内容; (2)位置编码固定。 这样做有以下好处: 1、该token随机初始化,并随着网络的训练不断更新,它能够编码整个数据集的统计特性; 2、该token对所有其他token上的信息做汇聚(全局特征聚合),并且由于它本身不基于图像内容,因此可以避免对sequence中某个特定token的偏向性; 3、对该token使用固定的位置编码能够避免输出受到位置编码的干扰。

ViT中作者将class embedding视为sequence的头部而非尾部,即位置为0。这样即使sequence的长度n发生变化,class embedding的位置编码依然是固定的,因此,更准确的来说class embedding应该是第0个而非第n+1个token。

Img

F1-score

Img

使用真阳性(TP)、假阴性(FN)、假阳性(FP)和真阴性(TN)来计算性能

  • 精确性Precision $=\frac{T P}{T P+F P}$
  • 召回率Recall $=\frac{T P}{T P+F N}$
  • 准确度Accuracy $=\frac{T P+T N}{T P+T N+F P+F N}$ EEG手部运动分类LSTM

    Kappa(cappa)系数

    Img Img ::: tip 简单例子 学生考试的作文成绩,由两个老师给出 好、中、差三档的打分,现在已知两位老师的打分结果,需要计算两位老师打分之间的相关性kappa系数: Img 从上面的公式中,可以知道我们其实只需要计算p0,pe即可:

Po = (10+35+15) / 87 = 0.689 a1 = 10+2+8 = 20; a2 = 5+35+5 = 45; a3 = 5+2+15 = 22; b1 = 10+5+5 = 20; b2 = 2+35+2 = 39; b3 = 8+5+15 = 28; Pe = (a1b1 + a2b2 + a3b3) / (8787) = 0.455 K = (Po-Pe) / (1-Pe) = 0.4293578 :::

模型解释

kappa计算结果为[-1,1],但通常kappa是落在 [0,1] 间

第一种分析准则–可分为五组来表示不同级别的一致性: |分数|分析| |–|–| |0.0~0.20|极低的一致性(slight)| |0.21~0.40|一般的一致性(fair)| |0.41~0.60|中等的一致性(moderate)| |0.61~0.80|高度的一致性(substantial)| |0.81~1|几乎完全一致(almost perfect)|