验证码的诞生
1995年,互联网开启正式的商业化浪潮,大大小小的web站点和服务开始如雨后春笋般的出现,其中最受欢迎的当属网络邮箱服务。2000年后Yahoo邮箱迎来了用户使用量的暴增,用户量的蓬勃增长,也让许多人看到了新的商机,一种新的营销方式也迅速的蔓延开来。大量的营销广告邮件充斥在人们的邮箱当中,不仅仅是占用了有限的资源还让用户十分的反感。当你的邮件被淹没在大量垃圾邮件中时,邮箱还会被使用的几率会是多少呢?因此Yahoo迫切的想要解决这个问题,如果能够区分出注册邮箱账号的是真实用户还是注册机等软件程序,那么这个问题就能够得到根本性的缓解。
针对这个问题,2002年卡内基梅隆大学的计算机学生—路易斯·冯·安(Luis von Ahn) 和他的小伙伴设想一种让人和机器都参加的测试,这个测试是人容易完成而计算机却不容易完成的,这样就能区分人和机器,这个概念后面被正式称为全自动区分计算机和人类的图灵测试(Completely Automated Public Turing test to tell Computers and Humans Apart),简称CAPTCHA ,中文译为验证码。具体而言,他们想出设计一种能显示一组经过扭曲字母的图片程序,然后要求用户将正确的字母输入到回答框中,而当时的计算机程序却很难识别,从而阻止机器程序的访问。
这就是验证码诞生的过程,而且在此后长达十多年的时间内,这样一种字符验证码的方式一直延续。它们在解决像垃圾注册、撞库登录、恶意爬虫、恶意留言发帖等诸多场景中,能够帮助网站很好的阻挡机器程序,发挥了重要的作用。
平行世界里的AI
诞生与困境
现代意义上的人工智能的概念,诞生于 1956 年的达特茅斯会议。而此前的数年,人工智能的种子就已经开始萌芽。
1950年,阿兰·图灵创造了图灵测试来判定计算机是否智能,即如果一台机器能够与人类进行的对话(通过电传设备)而不能被辨别出其机器身份,那么称这台机器具有智能;
1952,IBM科学家亚瑟·塞缪尔开发了一个跳棋程序。该程序能够通过观察当前位置,并学习一个隐含的模型,从而为后续动作提供更好的指导。他创造了「机器学习」这一术语,并将它定义为:可以提供计算机能力而无需显式编程的研究领域。
当正式提出人工智能概念后,1957年,罗森·布拉特基于神经感知科学背景设计出了第一个计算机神经网络——感知机(the perceptron),它模拟了人脑的运作方式。3年后,维德罗首次使用Delta学习规则(即最小二乘法)用于感知器的训练步骤,创造了一个良好的线性分类器。然后,多年后的1969年,马文·明斯基提出了著名的XOR问题,指出感知机在线性不可分的数据分布上是失效的,此后神经网络的研究者进入了寒冬,整个人工智能领域也陷入了低潮,直到 80 年代才再一次复苏。
复苏
当时间来到80年代,得益于专家系统的流行,人工智能开始兴盛,同时机器学习的方法与理论也取得了不错的发展。
先看神经网络技术,几个标志性的突破为今天的深度学习奠定了基础:
1982 年 John Hopfield 提出了 Hopfield 网络,通过引用物理力学的分析方法,把网络作为一种动态系统并研究这种网络动态系统的稳定性;
1985年,Hinton和Sejnowski借助统计物理学的概念和方法提出了一种随机神经网络模型——玻尔兹曼机。一年后他们又改进了模型,提出了受限玻尔兹曼机;
1986年,Rumelhart,Hinton,Williams发展了BP算法,即多层感知器的误差反向传播算法。
与神经网络不同的另一个谱系中,Quinlan 于1986年提出了一种非常出名的被称为「决策树」的机器学习算法,更具体的说是ID3算法。顾名思义,决策树是基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制。它能以简单的规划和明确的推论找到更多的现实案例,而这一点正好和神经网络黑箱模型相反。在ID3算法提出来以后,研究社区已经探索了许多不同的选择或改进(如ID4、回归树、CART算法等),这些算法仍然活跃在机器学习领域中。
走向成熟
当进入到90年代后,之前看起来比较成功的专家系统由于成本太高以及其它的原因,商业上很难获得成功,人工智能再次进入短暂的低潮。但是即便是这样,经典机器学习的算法和理论仍然取得了很多关键突破,驱动人工智能在短暂的低潮之后即将迎来新的高潮。
支持向量机的提出
1995年,Vapnik和Cortes提出了支持向量机(Support Vector Machine)的机器学习算法,成为该领域的一个重大突破,因为它不仅实验效果非常亮眼,而且具备坚实的理论基础。特别是在2000年左右,又提出了带核函数的支持向量机,更是在众多机器学习任务中取得非常好的效果。相比神经网络模型的黑盒模型,它在理论方面从不同学科汲取养分,充分利用了凸优化、综合边际理论和核函数等丰富研究成果,因而成为机器学习中更受欢迎的流派。
集成学习的提升
除了SVM这种在算法理论层面的巨大突破之外,经典的决策树等算法模型在集成学习(Ensemble Learning)思想的加持下取得了巨大的提升。集成学习是通过训练若干个弱分类器,并通过一定的结合策略形成一个强分类器。该种方法大致可以分为两大类:Bagging 和 Boosting。
Bagging类型的算法,一般使用强学习器,其个体学习器之间不存在强依赖关系,因而一系列学习器可以并行生成,其代表算法就是2001由Leo Breiman提出的 Random Forest 随机森林,其个体学习器就是前面提到的经典决策树模型。
Boosting类型的算法,其主要目标为将弱学习器「提升」为强学习器,大部分Boosting算法都是根据前一个学习器的训练效果对样本分布进行调整,再根据新的样本分布训练下一个学习器,最后将一系列弱学习器组合成一个强学习器。这其中具有里程碑意义的当属AdaBoost算法,它是在1997年由Freund和Schapire提出,此后则还有GradientBoost等算法被相继提出。
神经网络的低谷
在SVM以及经典计算主义等机器学习算法突破的同时,神经网络却遭受到又一个质疑:通过Hochreiter等人1991年和Hochreiter等人在2001年的研究表明在应用BP算法学习时,神经网络模型算法中神经元饱和后会出现梯度损失(gradient loss)的情况。简单地说,在一定数量的epochs训练后,神经网络会产生过拟合现象,因此这一时期神经网络与SVM相比处于劣势,直到2006年由Hinton领衔的深度学习热潮兴起。
两者的关系
人工智能刚刚诞生的60年代,由于技术还未成熟,没能开始商业化。进入70年代后,专家系统模拟人类专家的知识和经验解决特定领域的问题,主要在医疗、化学、地质等领域取得成功,推动人工智能走入应用发展的新高潮。进入80、90年代后,当时以传统机器学习为主的AI技术,已经开始主要应用在图像处理、模式检测、风险识别等场景。
到验证码诞生的2002年,人工智能的发展已经走过了曲折但成果丰厚的近50年,在经典机器学习算法上取得了很多突破,但是在日后以深度学习著称的神经网络技术却始终未能展现出自己的强大优势。此时,对于验证码这个全新的场景,使用经典机器学习进行破解的成本太高,时机还未成熟。因此,可以说站在2000年刚开始的时间关口,验证码与人工智能几乎处于「平行世界」的关系。
尽管如此,两者却因为各自概念定义里最核心的图灵测试而注定将成为对手,产生激烈的交锋与融合。而对于验证码的设计而言,我们将会认知到一个最本质的底层逻辑,即人类与AI的能力差距是我们设计一款通用好用的验证码的空间,空间越窄就越困难。这也能够解释2000年之后随着人工智能技术进入新的发展高潮,此后十多年内验证码从未出现超越传统字符的形式,即使它已经严重不能满足最初的设想和目标。