前一段时间我为大家介绍了创造未来的新技术,谈到了5G和人工智能。有个小朋友就对我说:他对人工智能特别感兴趣,小时候就特别喜欢看《终结者》《机械公敌》等电影,但是他始终不明白:
为什么机器能像人类一样思考呢?
其实,人工智能早已不是科学幻想,它是一种已经应用到我们生活方方面面的技术。例如,为了应对新冠疫情,许多公司安装了人脸识别系统,在进行肺炎筛查的时候,需要快速诊断肺部CT影像,在路上开车违章,会被电子眼抓拍罚款…这里的人脸识别、CT影像识别、车牌识别,统统用到了人工智能。除此之外,手机上的各种语音助手软件、智能音箱、美颜软件、短视频平台的推荐机制、电子邮件的防垃圾邮件系统,也都是人工智能的应用。在未来我们要实现的自动驾驶、智慧工业等领域,人工智能也是不可或缺的。如果把人工智能从我们的生活中剥离,人类恐怕要退回三十年前。
今天,我们就来聊聊人工智能的话题,我希望通过今天的讲解,让大家了解人工智能和神经网络的基本工作原理。
人工智能并不是一个新生的科学概念。在上古时代,东西方文明中都出现了人造人的神话。到了二十世纪30-50年代,由于神经生物学、计算机科学、数学等学科的发展,人工智能第一次进入了科学家的视野。
1950年,英国计算机科学家图灵提出了一个问题:
机器会思考吗?
图灵提出了一种测试机器智能的标准——图灵测试:一个人C通过文字等方式与另一个人A和一个计算机B交流,他能否通过一连串的问题区分A和B哪个是人,哪个是计算机?如果人类无法区分出A和B,就称计算机通过了图灵测试。
图灵预言:到2000年时,计算机在经过五分钟的提问之后,就会骗过30%的人类,让人相信对方是真实的人类,而非计算机。图灵测试每年都会举办,在2014年时终于有一个人工智能软件被33%的人类认为是一个13岁的小男孩,通过了图灵测试,这个软件叫做尤金·古斯特曼。
顺便一说,在计算机科学领域的世界最高奖叫做图灵奖,就是以图灵的名字命名的,它被称为计算机界的诺贝尔奖。图灵曾经在二战时帮助英国制造计算机破译德军密码,许多人认为他是盟军赢得战争的法宝之一,这段故事也被拍摄成电影《模仿游戏》。
到了1956年,美国计算机科学家马文·明斯基,约翰·麦卡锡以及信息论的奠基者香农等人,召开了达特茅斯会议。在这次会议上,人们创造出了人工智能这个词。从那次会议开始,人工智能也进入了大发展时代。
后来,明斯基和麦卡锡都因为在人工智能领域的贡献获得了图灵奖。而香农已经不需要图灵奖了,他的名字被命名到通信理论方面的诺贝尔奖上,那就是香农奖。
从此之后的几十年中,由于算法和算力的限制,人工智能几经起落。直到1997年,IBM的人工智能程序“深蓝”战胜了雄据国际象棋霸主12年的卡斯帕罗夫,人工智能迎来了第三次大发展。
从那之后的二十多年,在人工智能算法方面,涌现出许多灵魂人物,例如被誉为深度学习之父的多伦多大学的计算机学家杰弗里·辛顿,他将反向传播算法(BP)引入了人工智能领域。纽约大学计算机科学家杨立昆,他最著名的工作是卷积神经网络(CNN)。他们俩连同加拿大蒙特利尔大学计算机学家约书亚•本吉奥共同获得了2018年的图灵奖。
经过众多科学家的努力,在特定的领域——例如图像识别,人工智能的识别率已经超过了人类。在语音识别,智能翻译等领域,人工智能也有长足的应用。现在我们上网,遇到看不懂的外文,只要按一下翻译就能变成汉语了。去国外旅游,也可以双方用一个人工智能软件就能交流了。
计算机到底是如何做到这一点的呢?说到底,这是一个数学问题。我们首先来举一个例子:
如何预测房屋的成交价格?
也许我们每个人都有一种简单判断:大城市比小城市房子值钱,市区房子比郊区房子值钱,学区房比非学区房值钱…那么,你能用数学关系把它表示出来么?
比如:在最简单的模型下,我们考虑房屋的价格与面积有关。我们有了一些房屋的面积,以及它们的成交价格,把数据(xi,yi)画在一张图上,如下:
从图形上看,我们发现房价和面积接近于正相关,我们希望获得一个函数关系,使它尽量准确的表示出房价y与面积x的关系,最简单的关系就是直线y预=wx+b。其中w是直线的斜率,b是直线的截距。参数w和b的值不一样,这条直线就能在平面内改变位置。
我们希望每一个数据点都能在直线上,但是实际上,这往往是做不到的,通过函数关系预测的房价yi预和实际房价yi之间总有差别。我们用 描述这个差别:把每一个数据点真实的价格y与输出的价格y预做差,再把这些差别做平方和。
如果损失函数特别小,就说明我们的函数最贴近实际的数据,这就是一个好的回归分析。我们的目的就是要寻找合适的参数w和b,使得误差函数J最小。在数学上,这叫做最小二乘法,在高斯和勒让德时代人们就找到了通过方程求解参数w和b的方法。
不过,如果参数特别多,高斯的方程算法就不是那么方便了,人们提出了一种逐步趋近的方法——。通过一次次的逼近,找到小的损失函数和最优的参数。
具体来讲:损失函数J其实是参数w和b的函数。我们定性的画出损失函数随着参数的变化规律,它有可能存在一个最低点,我们希望寻找这个最低点。
大家看:在参数取适当值、损失函数最小的时候,损失函数是不随着参数而变化的,或者说损失函数对这个参数的梯度(导数)为零;如果参数取的不当,损失函数会随着参数的变化而变化,梯度(导数)不为零。而且,梯度(导数)越大,往往表示距离损失函数最低点越远。
于是,我们首先预设一对参数wi和bi,然后使用算法进行迭代:
当然,房屋的价格并不只取决于面积。我们可能有更多的输入数据。例如每一个房子都有面积参数x1、城市参数x2、房屋年龄x3、位置参数x4,那么我们可以假设价格是这四个参数的线性组合:
此时,我们就有了5个参数k1…k4和b,我们要做的就是不停的通过求解梯度来调整参数,找到最合适的那一组,使得预测的结果与已知数据之间的误差函数最小。只是刚才,我们是在二维平面上寻找损失函数的最小值,这时我们是在一个五维空间中寻找损失函数的最小值。
输入数据、进行计算、调整参数,这个过程就称之为机器学习或者训练。假如最后找到或者逼近了最优解,训练就结束了。如果还没有找到,就需要调整参数和模型。其实,这和人类的学习过程非常相似,皮亚杰关于认知发展理论中的同化和顺应过程,就是这样的一个过程,老话说吃一堑长一智,也是这个问题。只是现在我们用数学的方法把它表现出来了。
从本质上讲,人工智能问题就是通过这种一点点调整参数的方法,寻找一个函数,能够从输入的值尽量准确的获得输出值。实际的机器学习问题,要比刚才的例子复杂的多,比如房价不光与面积大小有关,还与距离市中心远近、房龄长短、楼层情况、物业水平、周边工厂学校医院情况、汇率、甚至人口结构等等因素相关,而且很有可能不是线性关系。在图像识别问题上,一幅图就有上百万个像素,也就是上百万个输入参数。
为了应对这些复杂的问题,科学家们设计了神经网络算法,你在网上搜索人工智能、机器学习、深度学习等关键词时,可能经常会看到这张图,这就是一张神经网络图,其中每一个圆圈叫做一个神经元。
神经网络的开创来源于人类对生物大脑的认识。人脑中有数百亿个神经元细胞,每个神经元细胞前方有有树突用于接收信号,当树突收到刺激时,神经元会判断这个刺激大小,如果刺激足够大,神经元就会决定通过神经递质或者电信号的方法,通过突触将信号传给下一级。
1943年,美国神经科学家沃尔特·皮茨(WalterPitts)和沃伦·麦卡洛克(Warren SturgisMcCulloch)分析了人类神经元的结构,他们提出:人脑的神经元是一个多输入、单输出系统,而且输出只有两种:0或者1。如果输出是0,就表示上一级神经元不向下一级传递信号;如果输出是1,就表示上一级神经元向下一级传递信号。用计算机可以模拟人类的大脑,这就是所谓的人工神经网络。
他们提出了最早的人工神经元模型
——M-P模型。
这个模型的操作流程是:
1、给定输入参数x1——xn,将它们线性组合起来获得函数值y
2、把函数值y放进一个非线性的激活函数中,获得一个0到1之间的值f(y)。经常使用的激活函数叫做sigmoid函数,它的表达式和图像如下所示。
3、获得的激活值越小,向下级传递信号的概率越低;激活值越大,向下级传递信号的概率越大。
通过这样一番操作,我们就能把一堆输入数字变成0或者1的输出。只要选择的参数合适,我们就能让计算机帮助我们做一些判断题。比如,我们给计算机去一幅图,这是一幅有25个像素点的纯黑白图像,我们要让计算机判断这个图像代表的是不是字母X。
计算机并不能像我们一样一眼看出图像内容,它只认识数字。这张图有25个像素点,每个像素点要么是黑色,要么是白色,相当于有25个输入,每个输入端要么是0,要么是1。于是,这张图片对计算机来讲,就是一个5*5的数字矩阵。
如果是灰度图或者彩色图片又如何呢?灰度图片中的每一个像素点可以用0-255之间的一个数字表示,相当于一个8位的二进制数字;如果是彩色图,每个像素点需要用RGB三个颜色的饱和度来表示,数据量再扩大三倍……但无论如何,
将图片代表的数字输入神经网络的输入层,数据依次流过隐层,传递到输出层,输出值只有两种可能:0或者1,输出0表示计算机认为这不是X,输出1表示计算机认为它是X,这就完成了机器识别过程。
在训练时,我们把许多图片输入系统,并且告诉计算机正确的结论,这样计算机就能求出误差函数——这个误差函数与刚才预测房价的函数形式不同,但是原理都是类似的:模型越接近实际,误差函数就越小。通过梯度下降法,计算机会一次次调整参数,不断减小误差函数,最终获得一组最优解,这时,训练就完成了。以后,你给我一副图片,我都能判断个字母是不是X了。
如果只是判断一张图是不是X,也许一层神经元也就够了。然而,现实当中我们利用人工智能翻译文章,需要认识几千个文字或者单词,并理解语法,判断含义。只有一层神经元,没法处理现实世界如此复杂的问题。其实,人脑中的神经元有许多层,每一层神经元又有多个神经细胞,于是人工智能也仿照这个结构,做了多层(深度)神经网络。
多层神经网络的隐层是多层神经元,每一层中又有许多个神经元,相邻两层之间的神经元两两之间都有连接,所以这种神经网络也称为全连接网络,它能处理更加复杂的问题,于是,机器就能像人一样,可以思国思家思社稷,赏花赏月赏秋香了。
不过,全连接网络最大的问题是复杂度太高。举例来讲,如果还是判断刚才的图是不是X的问题,有25个输入参数。假设隐层有3层,每层有25个神经元,这样,就有大约2000个参数需要优化。大家注意,这还是一个只有25像素的简单黑白图片。实际上,每一副图像的像素点成千上万,又有RGB三种颜色,在实际训练时又需要使用大量图片进行训练,在以前的计算能力下,几乎是不可能完成的任务,这也是之前人工智能陷入低谷的原因之一。
后来,辛顿引入了,这种算法的意思是:在优化时,无需对所有参数同时进行优化,只要首先考虑最后一层的参数,优化过后再看前一层参数,如此反复进行训练即可。他的工作实现了图像让人工智能进入了第三次热潮。
显而易见,人工智能的算法如此复杂,程序员不可能每次都从零开始编辑,这就好像厨师做菜不能从种菜开始,工人盖房子不能从烧砖开始一样。一些基础的代码和逻辑应该是已经编辑完成,可以直接调用的,这就是所谓的人工智能框架。
最近几年,由于人工智能大火,许多公司都开发了自己的人工智能框架,比较流行的是谷歌开发的TensorFlow,和Facebook开发的PyTorch等等。在人工智能时代开发框架,就好像在移动互联网领域开发通讯标准一样,会具有基础性、全行业的战略优势。
随着中国计算机和互联网技术的发展,对人工智能的需求量越来越大。于是,华为也开发了自己的开源人工智能框架:MindSpore,它是华为昇腾AI解决方案中的一环。
它的主要特点有:
01 自动并行。通过一条语句声明,MindSpore就会帮你完成分布式并行能力。而现有的框架,大多需要数据工程师手动写分布式并行的策略。
02 更快的参数优化。在进行参数优化时,传统梯度下降算法是一阶优化,相当于匀速找到目标。MindSpore可以实现二阶优化,相当于加速找到目标,某些场景下可以比传统算法训练时间缩短20%以上。
03 云、边缘、端全场景协同。也就是利用MindSpore框架开发的程序,既可以用在云计算中心,也可以用在手机、电视等智能终端,也能用在例如自动驾驶汽车等边缘侧。例如手机打字的时候,人工智能可以实现自动纠错和联想,自动驾驶时,人工智能可以对信号进行实时判断,这些都无需每次都回传云计算中心。
04 更好的信息安全。MindSpore可以实现信息脱敏,也就是把加密的信息上传云端进行训练,数据和模型都是脱敏的,就算别人拿到了数据,也不知道数据内容是什么。就算拿到了模型,也不知道模型怎么用。这在人脸识别等有安全需求的领域非常有用。
华为也建设了类似于Github的代码社区MindSpore社区(https://gitee.com/mindspore),并与中国各地高校联合,鼓励高校教师和学生使用MindSpore框架,构建自己的人工智能代码库。
全场景AI计算框架MindSpore,作为AI根技术之一,是AI技术皇冠上的明珠。上层应用有了开发框架就不难了,随便一个学生都能开发app。从框架开源到AI开发平台的产业化升级,意味着华为全栈全场景AI的软硬件骨干已经全部投入业界实践,成为全球AI开发者的能力组成部分。
这一回,我为大家介绍了人工智能的发展史、梯度下降算法、神经网络、AI框架等基本概念。下一回,我还想和大家聊聊在人工智能领域重要的应用场景——图像识别的具体实现,为大家介绍目前非常流行的卷积神经网络,欢迎关注哦!
李永乐老师全新科普专栏已经发布啦!用70期节目解读科普经典著作。李老师将会带着你沿着伽莫夫的足迹,用每天几分钟的时间了解数学、物理、生物、和宇宙的奥妙,现在已经更新到58期,快快点击了解一下!