1. 引言
近年来,随着大规模开放网络课程(Massive Open Online Courses, MOOC,以下简称慕课) [1] 和其它类型的E-learning方法的兴起,越来越多的知识交互活动,借由这些新的形式开展。如何借助新的技术手段,来提高相应的教学活动质量,具有重要的研究价值,同时也极具挑战。较传统的教学手段而言 [2] ,这类新兴的技术手段有很多优势,但与此同时也存在着一些新特性,需要加以认真考虑 [3] 。例如,授课教师往往与学生不在同一地点,从而使得教授者难以及时发现而如何加强教学活动中的交互质量,是评价慕课是否真正成功的重要依据。
众多已有的研究已经表明,情绪对学习的效果 [4] [5] 有着至关重要的影响。这也意味着,学习者的情绪会严重影响其知识掌握程度和总体学习目标。因此,对于以慕课为代表的E-Learning来说,有效教学活动的前提条件之一是教师能够快速响应学生的情绪变化。然而,如何在复杂的学习环境中准确、快速地理解学生的情感互动仍然是一项非常具有挑战性的任务。
利用人工智能技术来提高教学质量的需求吸引了相当多的研究者的兴趣 [6] [7] 。在许多尝试中,使用新的模式识别技术来检测学习者情绪变化的方法被认为是一种有效的方法。例如,在 [6] 中,我们提出了一种基于深度学习的方法来检测学习者面部表情,从而判断其情绪的变化。在 [7] 中,作者提出了一种基于AdaBoost的人眼状态检测方法,并使用该方法来判断学习者的情绪状态。AutoTutor [8] 研究项目希望检测和利用学习者的情绪,以加强学习和教学过程。在 [9] 中,构造了一个神经网络体系结构,能够处理语音中的面部特征、韵律和词汇内容的融合。Yau等人在其论文 [10] 中提出了一种鲁棒的人脸表情识别方法。
深度学习 [11] 是近年来在人工智能领域受到极大关注的创新性技术手段,这类方法较其他模式识别方法而言,具有的最大优点是能够自动抽取出非常高质量的特征,而高质量的特征是一个成功的情感识别系统的重要组成部分。
依据我们已有的研究成果,EM-DeSTIN [12] 方法在处理噪声图像时非常有效,而在E-Learning系统中获得的图像通常包含噪声,因此,使用EM-DeSTIN方法能够帮助我们准确地识别特定场景下参与者的情绪。但是,在交互学习的过程中,我们往往要求情绪识别系统具有较好的实时性,换句话说,现实世界中的E-Learning要求系统必须能够较快的识别出学习者的情绪变化。而现有的深度学习方法,尤其是深度时空推理网络,往往需要很长的训练时间。
因此,在本文中,我们利用了一种基于CUDA架构的深度时空推理网络 [13] ,CUDA-DeSTIN,来构建面向E-Learning环境的情感识别系统。该系统的特点在于,它不仅能够在高噪声的环境中工作,同时其学习速度较现有的方法也有了较大的提升,更加适合慕课等新兴的教学方法。
本文的其余部分整理如下。在第二节中,我们将简要介绍深空推理网络(DeSTIN)和CUDA技术,第三节我们介绍基于CUDA架构的深度时空推理网络CUDA-DeSTIN。在第四节中,我们将介绍实验内容以及实验结果。最后,在第五节中,我们将给出了一个简短的结论和未来的研究方向。
2. 背景知识
2.1. 深度时空推理网络
深度时空推理网络(Deep Spatio-Temporal Inference Network, DeSTIN) [14] 是一种尝试模仿人类视觉和听觉皮层的概念结构和动力学模型。DeSTIN的特殊优势在于它具有较为出色的时间数据处理能力,这种模型能够从较少量的训练实例中学习时空特征,并与外部认知软件系统进行交互。而这种能力对于,面向慕课的系统而言,尤其重要。
如图1所示,在宏观层面上,DeSTIN是一种分层结构的模型。其每一层(Layer)都被分为若干个2 × 2的区域。第N − 1层的某个2 × 2的区域会作为第 N层的一个节点(Node)的输入,而第 N层的四个节点又会与第N + 1层的一个特定节点相连。在DeSTIN网络的最底层,原始的图像数据会直接输入。可以将 DeSTIN网络中的每一层都理解为原始输入数据在特定层次上的抽象。在中间层每一节点都包着数量聚类中心(Centrino),而节点可以通过无监督学习产生与到本层的观察值特征。
在这样的结构中,每个节点输出在其所在层的信念状态,这些信念状态会包含输入数据中存在的空间和时间规律。该系统顶层的输出可以作为有监督学习算法(如神经网络,支持向量机(Support Vector Machine))的输入,从而进行有效的模式分类。
在图1所示的例子中,数字“9”被直接输入第四层(Layer 4),第四层是该系统的底层,包含64 = 8 × 8个节点,该层接受原始图像的像素作为输入,每个节点对应一个的4 × 4像素区域,每个节点对应的
像素区域不重叠,每个4 × 4的像素区域按照行优先的方式存储成一个16维的列向量,这个16维的列向量会作为该层输入数据。第四层的上一层是第三层(Layer 3),第三层包含16 = 4 × 4个节点,每一个节点接受第四层相对应的4 = 2 × 2个节点的输出作为输入,每个节点的对应的区域也是不重叠的。第三层的上一层是第二层(Layer 2),第二层包含4 = 2 × 2个节点,每一个节点接受第三层相对应的4 = 2 × 2个节点的输出作为输入,同样每个节点的对应的区域也是不重叠的。第一层(Layer 1)是该系统的顶层,它包含1 = 1 × 1个节点,该节点接受第二层4 = 2 × 2个节点的输出作为输入。该节点输出也就是DESTIN的输出是一个10维的向量,该向量可以作为有监督学习算法(如神经网络,支持向量机)的输入,从而进行有效的模式分类。
2.2. CUDA:可伸缩并行编程模型
CUDA (Computer Unified Device Architecture) [15] 是英伟达(NVIDIA)公司开发的一种并行计算架构 [15] 。这种架构的主要出发点在于,随着技术不断发展,GPU (Graphic Processing Unit)变的越来越强大,对于某些特定的计算任务,其能力已经远远超越了通用的CPU。在此情形下,CPU与GPU“协同处理”模式能够为我们带来更加高效的计算能力。
基于此,英伟达(NVIDIA)发明了CUDA并行计算架构。该架构通过利用GPU超强的处理能力,可以大幅度提升计算性能。CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
在CUDA的架构下,一个程序分为两个部份:宿主(host)端和设备(device)端 [15] 。宿主(Host)端是指在CPU上执行的部份,而设备(device)端则是在显示芯片上执行的部份。设备(device)端的程序又称为“kernel (核心)”。通常宿主(host)端程序会将数据准备好后,复制到显卡的内存中,再由显示芯片执行设备(device)端程序,完成后再由宿主(host)端程序将结果从显卡的内存中取回。不同类型的代码由于其运行的物理位置不同,能够访问到的资源不同,因此对应的运行期组件也分为公共组件、宿主组件和设备组件三个部分。更多有关CUDA的细节,读者可以参阅 [15] 。
3. CUDA-DESTIN
在这一节的前半部分,我们简要的介绍我们所提出的CUDA-DeSTIN [13] 的技术细节。然后,我们讨论,如何利用这种方法来进行面部表情的情绪识别。
3.1. CUDA-DeSTIN
简要地将,CUDA-DeSTIN就是利用CUDA的架构下,重新实现了DeSTIN,从而使得训练速度得到了极大的提升。
有几点需要说明的是,在CUDA-DeSTIN中,聚类中心的数据存储到全局内存(global memory)中,每一个线程在计算相似度时会用到该数据。DeSTIN中的一个节点(node)对应一个区块(block),每一个区块有一个共享(shared memory),其大小为16 kilobytes。第四层(Layer 4)中的每个节点的输入大小为16 × 4 = 64 bytes,第三层(Layer 3)中的每个节点的输入大小为100 × 4 = 400 bytes,第二层(Layer 2)中的每个节点的输入大小为64 × 4 = 256 bytes,第一层(Layer 1)中的每个node的输入大小为48 × 4 = 192 bytes。
每个区块(block)中的每一线程(thread)等同于CUDA-DeSIN中的一个聚类中心(centroid)。线程的数据,也就是聚类中心的每一维数据存储在全局变量(global memory)中,输入数据存储在区块(block)的共享内存(shared memory)中。然后计算相似度,并将结果存储到共享内存(shared memory)中。所有的线程计算完成之后,进入排序阶段。
在CUDA-DeSTIN中,采用的是快速排序(Quicksort),这种方法是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。最后优胜的聚类中心(winning centroid)会存储在全局内存(global memory)中,在更新优胜的聚类中心(winning centroid)时,该数据会被再次使用。有关CUDA-DeSTIN的更多细节可以参考文献 [13] 。
3.2. CUDA-DeSTIN的情绪识别方法
利用CUDA-DeSTIN来进行基于面部图像的情绪识别,大体可以分为训练阶段和识别阶段。训练 CUDA-DeSTIN的过程可以分为如下步骤:
1) CUDA-DeSTIN 中的每一层(除最底层外),从下一层获得其输出的belief作为观测值。
2) 通过聚类中心更新算法得到新的聚类中心,然后依据更新后的聚类中心,计算概率分布向量Belief,并将此概率分布向量作为输出,向上传输到父层作为父层的观察值。
3) 在进行在线类聚的同时,CUDA-DeSTIN也会将父层类聚的赢者信息反馈到本层,更新本层的PSSA表,从而起到父层对子层的指导作用。
4) CUDA-DeSTIN中的每一层都按照此流程进行,在金字塔顶端的belief就是输入图像的关键特征。
5) 利用最上层的 belief作为一种有标签的训练数据,训练支持向量机(Support Vector Machine, SVM),从而实现对相应的分类器的训练过程。
当完成了训练过程之后,我们就得到了一个能够识别不同面部情绪的分类器(一个训练好的SVM和一个训练好的CUDA-DeSTIN模型)。可以利用以下的步骤来实现识别过程:
1) 将要识别的面部图片输入到CUDA-DeSTIN中,由此获得一组Belief作为观测值。
2) 根据训练得到的类聚中心与PSSA (不需要进行类聚中心的更新),计算概率分布向量Belief,并将Belief传输到父层作为父层的观察值。
3) 按照上述的过程,在训练好的CUDA-DeSTIN的顶部,输出的Belief就是待识别图片的特征。
4) 将第三步得到的特征,送入已训练好的分类器SVM,实现情绪识别。
4. 实验
我们利用了AR人脸数据集1的一个子集来进行实验。该子集由100个人组成,每个人有26个灰度图像,分别是165 × 120像素和24位深度。这些图像可根据拍摄日期分成两组。我们以一组作为训练样本,另一组作为测试组。数据集的样本显示在图2中。
图2(a)中的图AR样本没有特定的情绪倾向;图2(b)表示微笑;图2(c)是生气,而是愤怒。为了模拟在慕课环境中,视频图像质量往往不高的情况,高斯噪声和盐和椒盐噪声被添加到训练样本中。对于高斯噪声,均值为0,方差分别设为0.01,0.06和0.1。对于椒盐噪音,噪音密度分别设定为0.01,0.1和0.5。
在我们的实验中,我们将CUDA-DeSTIN和DeSTIN的顶层两层输出作为输入特征来训练SVM,并使用训练的SVM对相同的测试样本进行分类分类。为了测试其他深层网络,我们选择了三种不同的方法:深信念网(DBN),卷积神经网络(CNN)和堆栈自动编码器(SAE)等于。这三种其他方法的源代码是从DeepLearnToolbox2获得的。
表1记录不同噪音环境下的实验结果。实验表明,该算法在处理低到中等噪声水平时具有较强的竞争力,即使在噪声较大的情况下,EM-DeSTIN也具有良好的性能。

Figure 2. Samples from the AR Dataset
图2. AR数据库中的样本

Table 1. Emotion Recognition of CUDA-DeSTIN, uniform DeSTIN, DBN, CNN and Autoencoder
表1. 五种不同深度系统的识别正确率
另外尤其需要说明的是,在Tesla上实现了基于CUDA-DeSTIN的面部情绪识别,训练时间只有1200秒(约0.3小时),而DeSTIN算法在2.4 GHz的CPU上训练需要50小时,速度提高了约166倍。在识别率在优的情况下,训练速度得到了极大的提升,这一特点,对于在线学习工具而言,具有至关重要的优势。
5. 总结
在本文中,我们提出利用一种CUDA加速的深度学习方法,来实现慕课教学中的情感识别。通常情况下,面向慕课的教学工具,必须考虑两个问题。首先,慕课环境下的视频图像往往具有较多的噪声,图像质量不高。其次,情绪识别必须具有较快的响应速度,也就是实时性必须较好。我们的方法的优点是在处理嘈杂的面部表情图片时,它具有较高的识别率。同时,该方法较原有的深度时空推理网络而言,训练速度得到了极大的提高。在未来,我们将进一步研究如何利用其它先进的智能方法 [16] [17] [18] [19] [20] 来为高质量的慕课教学服务。
致谢
感谢厦门大学信息科学与技术学院仿脑智能实验室为本研究提供了相关的代码,并协助进行了实验。
基金项目
此研究受到国家自然科学基金(No. 61673328)资助。
参考文献
NOTES
1http://www2.ece.ohio-state.edu/~aleix/ARdatabase.html
2https://github.com/rasmusbergpalm/DeepLearnToolbox