引言
这篇论文描述了一个基于人工神经网络的签名验证算法。这个签名通过触摸板进行数据的收集。论文提出的网络结构被作者称为孪生时延神经网络。它之所以被称为孪生神经网络,是因为它由两个一摸一样的神经网络组成。在训练过程中,模型会去学习输入签名间的的相似性。模型被用作验证的时候,只有孪生网络的一半被用做前向推理。这半个网络的输出被当作原始签名的特征表示。验证过程就是将需要被验证的签名的特征表示向量与原始存储的特征表示进行比较,从而判断签名是否一致。
背景
这篇文章发表于1994年的NIPS上,分享读这篇文章的原因是:它是孪生网络最早提出的地方。
这篇文章提出的背景是:当时信用卡公司每年都会由于欺诈而损失大量的资金(在1991年, Mastercard 和 Visa 就损失了4.5亿美元)。
这篇文章就是为了构建一个基于NCR(AT&T公司的一个部门)5990签名采集器的签名验证系统,这个系统需要可以将用户的签名进行特征提取,提取处的特征对多不能超过80字节,一边可以存储在信用卡上。
NCR对于所开发系统的性能要求是:
- 至少99.5%的真实签名必须被接收;至少80%的伪造签名可以被检测出来。
- 系统可以在真实签名的接收率和伪造签名的检出率之间进行平衡调节。
- 个人签名的特征表示应在保持在80字节左右。
正文
数据集及其预处理
数据集
原始的数据集是由贝尔实验室以及NCR的研究人员搜集的,后来他们还在莱特州立大学让学生们生成了一些数据。这些签名都是通过5990签名采集器进行采集的。它可以采集:
- 笔是在和触摸板接触还是在未接触
- 签名字母运行的轨迹及所记录的轨迹点每个点的时间
5990每秒会采样200个点,每个签名的笔触点的数量在300~1500之间。
由于原始数据中很多都是在无人监督的情况下采集的,因此数据集中存在很多的噪音数据,所以论文中首先将数据经过如下步骤的处理:
- 真实签名的笔触点数量必须在首个签名的80%~120%之间,并且签名的字母必须是一样的。
- 伪造者必须伪造原始的真实签名,不能乱签,笔触点数量也必须在真实签名的80%~120%之间。
- 单人必须至少签6个以上的真实或者伪造签名。
签名预处理
在搜集到原始的数据之后,作者还进行了一些基本的数值化以及类似特征增强的工作,主要步骤如下:
- 笔与触控板接触时用1表示,没有接触用-1表示,用$pud$表示这个特征
- x坐标减去它的线性预测点的x位置,并且除以y的标准差
- y左边减去它的线性预测点的y位置,并且除以y的标准差
- 计算每一个点处的速度 $spd$
- 计算向心加速度 $acc-c$
- 计算切向加速度 $acc-t$
- 计算$cos\theta$
- 计算$sin\theta$
- 计算$cos\phi$
- 计算$sin\phi$
$acc-c$, $acc-t$, 角$\theta$, 角$\phi$的定义如下图所示:
上图中$(x(t-1), y(t-1)), (x(t), y(t)), (x(t+1), y(t+1))$为笔触点在$t-1, t, t+1$时刻的坐标。
网络结构
文中给出了两种神经网络结构,第一种神经网络给出了最好的性能,但是它的孪生子网络的输出不能满足特性向量的维数在80左右的要求;于是又有了第二种网络结构。
孪生神经网络的子网络是一个时延神经网络(Time Delay Neural Network)具体大家可以参考论文TDNN。这个网络结构对于孪生网络的理解没有影响。
学习模型的输入是两个签名,这两个签名通过两个完全一样的网络结构(孪生网络)处理之后得到了两个签名对应的两个特征向量。模型的优化目标是:
- 如果两个签名对应的是真实签名,那么两个输出的特征向量之间的距离应该很小
- 如果两个签名对应的不是真实签名,那么两个输出特征向量之间的距离应该很大
论文中使用余弦相似性来衡量两个向量之间的距离,余弦相似性计算公式如下:
其中$f1, f2$为两个向量, $\cdot$表示点积, $||$表示向量的长度。
第一种网络结构如下图:
第二种神经网络结构如下:
第二个神经网络的结构只画了一半,另外一半是完全一样的。
在实际使用中的工作流程是:首先用户的信用卡签名在办理的时候可以录入到系统中,存储在系统中的是签名对应的80字节左右的表征(通过训练好的网络得到)。
那么用户在使用信用卡需要验证签名的时候,只需要将采集到的用户的实时签名经过我们训练好的网络得到相应的向量表征,然后我们计算这个表征向量与我们数据库中记录的真实表征之间的相似性,通过这个相似性来判断两个签名是否一致。
采集卡采集到的用户签名的笔触点在300~1500之间,由于网络的输入大小是固定的(200)。因此,会从采集到的签名的笔触点中,采样出200个点来作为神经网络的输入。
训练与测试
训练
论文中进行了两轮训练。第一轮使用的数据没有经过我们前面提到的几个过滤步骤(比如过滤笔触点数量不在80%~120%原始数据之间的数据)。第二轮数据是经过过滤的数据并且包含更多的数据。
第一轮的训练结果如下:
第二轮的训练结果如下:
测试
测试结果比较多,我们只放出一个用第二轮训练的模型得到的一个结果,对更多结果感兴趣的可以去查看原论文。
从上图中,我们可以看出,如果要检测出80%的假冒签名,大约会引入7%左右的假阳率。
结束语
第二个网络结构最终的输出为19个单元,每个单元4个值,也就是最终每个签名可以用$19*4=76$个值表示(每个值4字节)。作者还测试了使用表二中的Network 6 可以省去50%的值,也就是指使用38个值就可以表征一个签名。更重要的是,这个38个值都使用一个字节表示并不会导致性能下降。这样就满足了存储空间在80字节左右的要求了。
文中从测试结果中还观察出了一些有趣的现象,比如很多判断错误的真实的签名是由于笔离开触控板的时间不规律造成的。感兴趣的同学可以参考原论文。
引用
[1] Signature Verification using a "Siamese" Time Delay Neural Network
更多推荐