堆叠去噪自编码器在垃圾邮件过滤中的应用

时间:2022-08-17 02:46:01

堆叠去噪自编码器在垃圾邮件过滤中的应用

摘要:针对垃圾邮件数量日益攀升的问题,提出了将堆叠去噪自编码器应用到垃圾邮件分类中。首先,在无标签数据集上,使用无监督学习方法最小化重构误差,对堆叠去噪自编码器进行贪心逐层预训练,从而获得原始数据更加抽象和健壮的特征表示; 然后,在堆叠去噪自编码器的最上层添加一个分类器后,在有标签数据集上,利用有监督学习方法最小化分类误差,对预训练获得的网络参数进行微调,获得最优化的模型; 最后, 利用训练完成的堆叠去噪编码器在6个不同的公开数据集上进行测试。将准确率、召回率、更具有平衡性的马修斯相关系数作为实验性能评价标准,实验结果表明,相比支持向量机算法、贝叶斯方法和深度置信网络的分类效果,基于堆叠去噪自编码器的垃圾邮件分类器的准确率都高于95%,马修斯相关系数都大于0.88,在应用中具有更高的准确率和更好的健壮性。

关键词:堆叠去噪自编码器;垃圾邮件;分类;支持向量机;贝叶斯方法

中图分类号: TP393.098

文献标志码:A

0引言

电子邮件因为易于使用、速度快、沟通方便等原因,已经成为人们重要的联系方式,但与此同时,垃圾邮件的数量却急剧地增加:卡巴斯基实验室的研究发现,2014年第1季度的垃圾邮件数目占总邮件的66.34%;McAfee实验室2015年2月的威胁报告表明,2014年,垃圾邮件数量大概为31.2万亿,占该年邮件总量的69.02%。其中大部分垃圾邮件带有商业性质,但有些邮件可能会包含病毒和其他具有危害性质的内容,给用户带来精力的损耗和财力上的损失,文献[1]表明,由于垃圾邮件的原因,美国接近360万用户的损失高达32亿美元。大量的垃圾邮件同时造成带宽浪费和邮件系统超载。

垃圾邮件过滤方法用来解决上述问题。垃圾邮件过滤的目的是为了隔离垃圾邮件和合法邮件。一般的过滤方式包括:邮件客户端扩展和邮件服务终端过滤过程,简单邮件传送协议(Simple Mail Transfer Protocol,SMTP)和基于机器学习算法的方法是最常用的垃圾邮件过滤方法。一般来说,基于SMTP的过滤方法通常是指SMTP流量的检测、电子邮件交换路由验证和经过身份验证的SMTP会话。基于启发式规则的方法、黑名单/白名单的方法、协同垃圾邮件过滤也可以用来过滤垃圾邮件。机器学习方法包括邮件的分析和分类算法的部署。

文献[2]表明在诸多过滤方法中,机器学习算法获得更多的应用和更好的性能。贝叶斯过滤器因为计算效率高、过滤性能良好得到了广泛的应用,文献[3]比较了7个版本的贝叶斯过滤器,得出布尔朴素贝叶斯(Boolean Naive Bayes)、多项式布尔朴素贝叶斯(Multinomial Boolean Naive Bayes)、基本朴素贝叶斯(Basic Naive Bayes)具有较好的性能;文献[4]提出了一些方法用来改进朴素贝叶斯过滤器,提高了过滤器的准确率; 文献[5]将不同种类核函数和数据表示的支持向量机应用到垃圾邮件过滤中;文献[6]提出了混合Taguchi方法、Staelin方法来优化支持向量机参数的选择过程,并且提高了准确率。其他的诸如随机随林、人工神经网络、提升方法(boosting)和装袋(bagging)等方法也被应用到了垃圾邮件过滤。近年来随着社交网络、云计算、网格计算、语义网络等技术的发展,出现了许多基于上述技术的垃圾邮件分类器;随着垃圾邮件中图像的增加,出现了基于图像的垃圾邮件分类器,文献[7]对新技术和图像分类应用进行了介绍。文献[8]比较了不同的特征选择和降维技术对垃圾邮件过滤的影响。文献[9]研究表明:相对支持向量机(Support Vector Machine, SVM)、提升方法(boosting)、最大熵方法等“浅层学习”方法而言,深度学习所学得的模型中,非线性操作的层级数更多。 浅层学习依靠人工经验抽取样本特征,网络模型学习后获得的是没有层次结构的单层特征;而深度学习通过对原始信号进行逐层特征变换,将样本在原空间的特征表示变换到新的特征空间,自动地学习得到层次化的特征表示。

去噪自编码器(Denoising Autoencoder, DA)是深度学习中的变形结构,和受限玻尔兹曼机、自编码器[9](Autoencoder)一样作为深度学习架构中的训练模块,具有良好的学习数据集特征的能力。通过多个DA的堆叠可形成堆叠去噪自编码器(Stacked Denoising Autoencoder,SDA) [10]。SDA训练过程中的无监督学习过程和对数据的破坏过程,能进一步学习到数据集中的特征和数据结构,同时学习得到的隐含表示更适用于有监督分类。文献[11]的研究表明,在大部分情况下,SDA要优于深度置信网络[9](Deep Belief Network, DBN),并且因为SDA不需要吉布斯采样,所以训练更加容易。

本文将一个5层神经网络结构的堆叠去噪自编码器应用到垃圾邮件过滤,在6个公开数据集上进行测试,使用准确率、召回率和马修斯相关系数作为测量标准,与在垃圾邮件过滤中应用最为广泛的支持向量机算法、3种贝叶斯算法和DBN进行比较。结果表明,相对于其他几种算法:堆叠去噪自编码具有最好的平均性能和较好的预测能力。

1堆叠去噪自编码器

1.1去噪自编码器

自编码器 (Autoencoder) [9]的学习只是简单地保留原始输入数据的信息,并不能确保获得一种有用的特征表示。因为自编码器可能仅仅简单地拷贝原始输入,或者简单地选取能够稍微改变重构误差,却不包含特别有用信息的特征。为了避免上述情况,并且能够学习更好的特征表示,需要给数据表示一定的约束。去噪自编码器可以通过重构含有噪声的输入数据来解决该问题。

去噪自编码器所要实现的功能就是学习叠加噪声的原始数据,而它学习到的特征与从未叠加噪声的数据学到的特征几乎一样, 但去噪自编码器从叠加噪声的输入中学习得到的特征更具鲁棒性,并且可以避免自编码器遇到的上述问题,简单地学习相同的特征值。

去噪自编码器通过一个随机的映射变换x~qD(x′|x),对原始输入数据x进行“破坏”,从而得到一个有部分损坏的数据x′, 其中D表示数据集。

去噪自编码器由编码器(encoder)、解码器(decoder)和隐含层组成。编码器是输入x∈[0,1]d 的”破坏”版本x′到隐含表示 y∈[0,1]d′的映射,表示为:

y=fθ(x)=s(Wx′+b)(1

这个映射的参数集合是θ={W,b},s是一个非线性的函数,例如sigmoid,W是一个的d×d′权值矩阵, b是一个偏置向量。

解码器函数gθ′(y)将隐含表示映射回重构表示z∈[0,1]d,表示为:

z=gθ′(y)=s(W′y+b′)(2

这个映射的参数集合是θ′={W′,b′},逆映射的权值矩阵W′可被约束为权值矩阵W的转置:即W′=WT,被称为去噪自编码器捆绑权重。b′是一个偏置向量。

这样每个训练样例x(i)被映射成一个y(i)和一个重构表示z(i),然后通过不断地调准优化这个模型的所有参数,从而获得最小平均重构误差:

L(x,z)=x-z2(3)

使z尽可能地接近初始输入x,并且z是x′的函数。 定义联合分布函数为:

q0(X,X′,Y)=q0(X)qD(X′X)δfθ(X′)(Y)(4)

其中:X,X′,Y是随机变量,Y是X′的映射函数, q0(X,X′,Y)以θ为参数。这时就可以通过梯度下降算法最小化目标函数:

arg minθ,θ′ Eq0(X,X′)[L(X,gθ′(fθ(X′)))](5

去噪自编码器的结构图如图1所示。

图片

图1去噪自编码器结构

1.2堆叠去噪自编码器

深度神经网络可以分为3类:1)生成性深度结构,描述数据和相应类别的联合概率分布,如DBN; 2)区分性深度结构,提供对模式分类的区分性能力,通常描述数据的后验分布,如卷积网络和堆叠去噪自编码器; 3)混合型结构,目标是区分性的,但通常利用生成型结构的输出会更易优化。

通常情况下,由于网络权值的随机初始化,基于梯度的优化容易陷入局部最小值。文献[12]提出了一种新的贪婪逐层非监督算法来初始化深度学习网络,文献[10]使用此算法来初始化基于降噪自编码器的堆叠去噪自编码器。训练整个网络的参数后,在使用基于梯度的算法如梯度下降法来微调网络参数。SDA初始化方法的有效性[13]在多个数据集中得到验证。正如受限玻尔兹曼机的堆叠形成深度置信网络,去噪自编码器的堆叠可形成堆叠去噪自编码器。用叠加噪声输入训练每层网络的去噪能力,这样训练出来的每层编码器可作为一个具有容错性能的特征提取器,同时学习得到的特征表示具有更好的健壮性。

SDA 的网络结构如图2 所示。通过图1中的步骤首先破坏原始数据,然后最小化重构误差,训练第1层去噪自编码器,从而学习得到了编码器函数fθ。接下来使用此函数学习原始的数据(如图2(a)所示),得到的结果作为第2层去噪自编码器的输入,用来训练第2层的去噪自编码器(如图2(b)所示),从而学习到第2层的编码器函数f(2)θ。然后重复这一过程(如图2(c)所示),直至所有的去噪编码器层都已经训练完成为止。

图片

图2堆叠去噪自编码器的结构

为了让堆叠去噪编码器具有分类识别的功能,需要在堆叠自编码器神经网络的最后一个隐藏层之后加个sigmoid分类器,将整个神经网络训练成能完成分层特征提取和数据分类任务的多重感知器。然后利用有监督学习规则,在监督学习损失函数上使用梯度下降算法,实施微调,最小化预测目标的误差,不断调整整个网络的参数。微调结构如图3所示。

图片

图3分类深度网络的微调结构

2堆叠去噪自编码器实现

2.1堆叠去噪自编码器的参数更新

去噪自编码器的最终目的是找出模型最合适的参数,可以按照如下步骤更新参数。

初始化模型参数:输入数据、可视节点个数、隐层节点个数、输入数据破坏比例和更新的学习率(learning rate),权值矩阵和偏置向量;根据数据破坏比例,随机选取原始数据,将其值设置为0,达到破坏数据的目的;使用sigmoid函数计算输入数据的隐藏表示和重构表示;计算输入数据的重构误差;对重构误差使用梯度下降算法,更新参数。具体过程如算法1。

算法1Denoising AutoEncoder。

程序前

输入: X, n_vis, n_hid, c_r, l_r;

输出: W, b, b′。

X′=get_corrupted_input(X, c_r)

1

for iter from 1 to iteration

2)

Y=get_hidden_units(X′, W, b)

3)

Z=get_reconstruction_units(Y, W, b′)

4)

cost=get_cost(X, Z)

5)

for param in parameters(W, b, b′)

6)

gparam=get_gradient(cost, param)

7)

param=param-l_r * gparam

8)

end for

9)

end for

程序后

2.2堆叠去噪自编码器的预训练

在堆叠去噪自编码器的预训练步骤中,首先应该确定隐藏层的数目,一般情况下,使用3层的去噪自编码器构成深度学习网络来训练堆叠去噪自编码器;每一层都训练成去噪自编码器,并且通过最小化重构误差,更新参数10次以上。第i-1层的输出即为第i层的输入,这样通过自底向上的方式训练堆叠去噪自编码器。每一层的数据破坏比例和隐藏节点个数可以互不相同;最后获取整个网络的参数。训练步骤如算法2。

算法2Pretrain Step。

程序前

输入:X,n_layers, n_vis, n_hid[n_layers],c_r[n_layers], l_r[n_layers];

输出:dA_layers[n_layers], Y_out=X。

1

for i from 1 to n_layers

2)

X′=get_corrupted_input(Y_out,c_r[i])

3)

for iter from 1 to iteration

4)

Y=get_hidden_units(X′,W[i],b[i])

5)

Z=get_reconstruction_units(Y,W[i], b′[i])

6)

cost=get_cost(Y_out, Z)

7)

for param in parameters(W[i], b[i], b′[i])

8)

gparam=get_gradient(cost,param)

9)

param=param-l_r[i] * gparam

10)

end for

11)

end for

12)

Y_out=Y

13)

end for

程序后

2.3堆叠去噪自编码器的微调

在堆叠去噪自编码器的微调过程中,使用有监督学习方法优化从预训练步骤中获得的模型参数。由于最后一个隐含层只能输出原始数据的重构,因而不具有分类识别功能。为了让堆叠去噪编码器具有分类识别的功能,需要在完成微调的神经网络的输出层之后加入sigmoid分类器,将整个神经网络训练成能完成分层特征提取和数据分类任务的多重感知器。多重感知器的sigmoid层的参数和预训练步骤中去噪自编码器的sigmoid函数具有相同的参数,因此可以通过最小化多重感知器的预测错误来不断微调模型的参数。微调步骤作用在整个堆叠去噪自编码器过程。微调的过程如算法3。

算法3Fine Tuning Step。

程序前

input: train_batches, test_batches, iteration, l_r

1

while iter < iteration do

2)

for batch in train_batches

3)

cost=get_finetuning_cost(X)

4)

for i from 1 to n_layers

5)

for param in parameters(W[i], b[i], b′[i])

6)

gparam=get_gradient(cost, param)

7)

param=param-l_r[i]*gparam

8)

end for

9)

end for

10)

valid_error=get_valid_error(batch)

11)

if valid_error

12)

update best_valid_error

13)

test_error=get_test_error(test_batches)

14)

if test_error

15)

update best_test_error

16)

end if

17)

end if

18)

end for

19)

end while

程序后

3实验与分析

3.1数据集

3.1.1数据集描述

实验中使用了6个著名的、数据量比较大的、公开的数据集Enron[14]。其中Enron1、Enron2和Enron3的合法邮件占多数,而Enron4、Enron5和Enron6的垃圾邮件占多数。Enron数据集中正常邮件是从Enron公司的前员工的邮箱中收集的,垃圾邮件则有不同的来源。6个数据集的具体组成如表1。

3.1.2数据集预处理

1)分别从垃圾邮件文件夹和合法邮件文件夹,按照30%的比例随机选取文件,然后合起来作为测试集,剩余的70%合起来作为训练集。

2)分别对训练集和测试集进行分词处理,字母小写化和去除停用词。

3)将训练集和测试集表示为词频逆文档(Term FrequencyInverse Document Frequency, TFIDF)的向量形式。

4)使用特征值提取技术对特征值进行提取,选取3000个特征值作为实验特征。

3.2实验性能测量标准

比较出名的性能指标有垃圾邮件准确率(Spamming precision, Spr),垃圾邮件召回率(Spamming recall, Sre),合法邮件准确率(Legitimate email precision, Lpr),合法邮件召回率(Legitimate email recall, Lre),准确率(Accuracy, Acc)。在分类时,垃圾邮件的类标设置为1(正例),合法邮件的类标设置为0(负例)。其中分类的混淆矩阵(confusion matrix)如表2所示,真正例(True Positive, TP),假负例(False Negtive, FN),假正例(False Positive, FP),真负例(True Negtive, TN)。

表格(有表名)

文献[15]的研究表明,在机器学习的分类问题中,马修斯相关系数(Matthews Correlation Coefficient,MCC)是最好的性能测试指标之一。相比其他的指标,MCC对于准确率提供了更为平衡的测量。MCC值的返回值介于-1和+1之间:+1,表明是完美的预测;0,表明是随机的预测;-1,则表明是一个相反的预测。MCC的计算式如下:

MCC=TP*TN-FP*FN(TP+FP)(TP+FN)(TN+FP)(TN+FN)(6

MCC同时提供了相对合理的评价:现实情况下,垃圾邮件的数目要比合法邮件的数目更高,因此MCC可以自动调整一个假正例(即合法邮件分类为垃圾邮件)错误相对于一个假负例错误的严重程度,随着垃圾邮件相对于合法邮件的比例的上升,一个假正例错误会比一个假负例错误更加严重,即MCC值会降低。

3.3实验结果与分析

3.3.1隐藏层节点数目选择对实验的影响

由文献[10-11]中一系列的参数实验可以总结出,在大部分数据集上,SDA一般使用三层隐藏层就可以达到较优的效果,因此本文中使用三层的隐藏层。

首先指出,图4和图5中的最低点Acc值是0.7101。这种情况是SDA把所有的邮件都分类为垃圾邮件。图4中,350,650,950是第一层隐藏层的节点数目,30表示第三层隐藏层的节点数目;图5中,350,650,950是第一层隐藏层的节点数目,500表示第二层隐藏层的节点数目。

图4中,固定第一、三隐藏层的节点数目,SDA在数据集Enron 5上的Acc值随着第二层隐藏层节点数目的改变而变化。从图4中可看出,固定第一、三隐藏层节点数目时,当第二层节点个数过小或者过大时,Acc值会达到最低点0.7101,而第二层节点个数处于两者之间时,Acc值正常波动。第二、三隐藏层节点固定时,可以看出,当第一层的节点数目越大时,第二层隐藏层节点的数目受到的限制更大。

对于图4中出现的随着第二层隐藏层节点数目的增加,Acc值会降至最低,可以通过改变第三层隐藏层节点数目来改变。图5中,固定第一、二隐藏层节点的数目,SDA在数据集Enron 5上的Acc值随着第三层节点数目的改变而变化。可以看出,为了取得较优的结果,第一层隐藏层的节点数越多,第三隐藏层需要的节点数也越多。

3.3.2在6个数据集上的实验结果

为了书写方便,下面描述中,Basic表示基本朴素贝叶斯方法、Bool表示布尔朴素贝叶斯方法、MN Bool表示多项式布尔朴素贝叶斯方法。

在6个Enron 数据集上的实验结果如表3~8所示,其中加下划线的数据表示该实验中最大的MCC值。

表格(有表名)

表3Enron1上各个分类器的实验结果

分类器Sre/%Spr/%Lre/%Lpr/%Acc/%MCC

Basic91.3385.0993.4896.3692.860.831

Bool96.0051.6163.3297.4972.780.540

MN Bool82.6762.0079.3591.8280.310.578

SVM83.3387.4195.1193.7091.700.796

DBN91.5690.7596.1996.5494.850.875

SDA90.2292.9197.1896.0595.160.882

表格(有表名)

表4Enron2上各个分类器的实验结果

分类器Sre/%Spr/%Lre/%Lpr/%Acc/%MCC

Basic80.0097.5799.3193.5394.380.850

Bool95.3381.2592.4598.3093.190.836

MN Bool74.0098.2399.5491.7793.020.814

SVM90.6790.6796.8096.8095.230.875

DBN95.9891.6897.0298.6096.750.916

SDA95.9895.5698.4798.6297.830.943

表格(有表名)

表5Enron3上各个分类器的实验结果

分类器Sre/%Spr/%Lre/%Lpr/%Acc/%MCC

Basic57.33100.00100.0086.2788.410.703

Bool99.3399.3399.7599.7599.640.991

MN Bool62.00100.00100.0087.5889.670.737

SVM91.3396.4898.7696.8396.740.917

DBN96.4489.6795.8498.6396.000.903

SDA92.6799.2999.7597.3297.820.945

表格(有表名)

表6Enron4上各个分类器的实验结果

分类器Sre/%Spr/%Lre/%Lpr/%Acc/%MCC

Basic94.67100.00100.0086.2196.000.903

Bool98.00100.00100.0094.3498.500.962

MN Bool96.89100.00100.0091.4697.670.941

SVM98.89100.00100.0096.7799.170.978

DBN96.9697.9894.0091.1696.220.901

SDA99.9397.2691.5699.7697.840.942

表格(有表名)

表7Enron5上各个分类器的实验结果

分类器Sre/%Spr/%Lre/%Lpr/%Acc/%MCC

Basic89.6798.8097.3379.3591.890.825

Bool87.23100.00100.0076.1490.930.815

MN Bool94.29100.00100.0087.7295.950.909

SVM89.4099.7099.3379.2692.280.837

DBN96.3799.4498.6791.7497.040.931

SDA98.7399.4598.6796.9498.710.969

表格(有表名)

表8Enron6上各个分类器的实验结果

分类器Sre/%Spr/%Lre/%Lpr/%Acc/%MCC

Basic86.0098.9897.3369.8688.330.757

Bool66.8999.6799.3350.0075.000.574

MN Bool92.8997.2192.0081.1892.670.816

SVM89.7895.2886.6773.8690.050.727

DBN96.3798.5695.7589.7996.210.902

SDA99.0498.4595.3397.0698.110.949

通过观察6个数据集6种分类器的实验数据可以分析:在实验的大部分数据集上,SDA垃圾邮件过滤器的性能超过了其他几种分类器。同时在有些情况下SDA的过滤效果远远地优于SVM和NB分类器:比如在Enron6数据集上的结果表明,SDA的垃圾邮件召回率达到了99.04%,而SVM却只达到了89.78%。这意味着在Enron6数据集上,SDA要比SVM多识别9.26%的垃圾邮件,同时因为具有比SVM更好的合法邮件召回率,所以相对于SVM,SDA垃圾邮件过滤的总体性能提升要大于9%。在实际的应用中,这些差异将会非常重要。这种对比现象在数据集Enron1、Enron2、Enron3和Enron5也可以得到。在数据集Enron4上,SDA过滤效果稍逊于SVM,但是相差不大。

对于实验中所有朴素贝叶斯过滤器,实验数据表明它们之间达到了相似的结果,并且不具有太大的差异性。相对堆叠去噪自编码器过滤器和支持向量机过滤器在所有的数据集上的准确率(Acc)达到90%以上,而基于朴素贝叶斯方法的过滤效果要差些。

实验中的DBN的分类效果,总体上要优于其他4几种分类器,但是SDA的分类效果要稍微优于DBN。

表中的实验数据表明堆叠去噪自编码器在垃圾邮件过滤中具有更好的效果:在实验的所有数据集上,堆叠去噪自编码器的准确率(Acc)都高于95%;在实验的所有数据集上,堆叠去噪自编码器的MCC值都高于0.88,这表明堆叠去噪自编码器应用于垃圾邮件过滤中取得相对完美的预测。上述结果表明将堆叠去噪自编码器应用到垃圾邮件过滤中是可行的。

4结语

本文提出了一种新的基于堆叠去噪自编码器的垃圾邮件分类器。在6个著名的、数据量较大的、公开的数据集上进行测试,将实验结果同基于支持向量机和贝叶斯方法的垃圾邮件过滤器的结果进行比较。对比分析表明,本文所提出的垃圾邮件过滤器表现出更好的性能。特别是基于堆叠去噪自编码器的垃圾邮件分类器在6个数据集上具有最好的平均性能并且准确率(Acc)都高于95%。这些表明将堆叠去噪自编码器应用到垃圾邮件过滤中是可行的。

未来的工作将会集中在以下3个方面:1)如何更好地选择深度置信网络隐藏层数以及每层的单元个数,如何选择学习率等参数来提高算法的性能。2)在诸如TRE05、TRE06、TRE07等更大的数据集上进行更多的实验来验证实验结果,同时也希望同一些诸如Bogo filter、Spam Assassin等开源和商业垃圾邮件过滤器进行比较。3)应把垃圾邮件过滤看作是共同进化问题,因为垃圾邮件过滤器努力提高预测能力的同时,垃圾邮件递送者也不断地改变垃圾邮件内容的表现形式以达到欺骗过滤器的目的,因此一个有效的垃圾邮件过滤器应该能够有效地检测垃圾邮件特征的变化,从而不断地调整自身的规则。

参考文献:

[1]GARTNER. Gartner survey shows phishing attacks escalated in 2007; more than $3 billion lost to these attacks[EB/OL].[20150220].http:///it/page.jsp?id=565125.

[2]CORMACK G V. Email spam filtering: a systematic review[J]. Foundations and Trends in Information Retrieval, 2007, 1(4): 335-455.

[3]ALMEIDA T A, YAMAKAMI A. Advances in spam filtering techniques[M]. Berlin: Springer, 2012: 199-214.

上一篇:基于图形处理器的可变形部件模型算法的并行化 下一篇:广阔天地 砥砺前行