03 在大数据与深度学习中蝶化的人工智能(第5/8页)

计算机神经网络生长与深度学习

由于传统人工智能一味依赖科学家输入的规则模型,导致它只有在解决一些规则比较清楚的问题时才比较有效,比如击败卡斯帕罗夫的“深蓝”就是这样一种“人工智能”。当面对识别一张图片这类人类在婴儿阶段就能学会的简单问题时,这类人工智能却无计可施,因为这种认知类问题只有一个模糊的概念,没有清楚简单的规则。而计算机神经网络的特点就是它不需要人类提前告知规则,它会自己从海量的基础数据里识别模式(规则)。

顾名思义,神经网络类似人类大脑,由一个个神经元组成,每个神经元和多个其他神经元连接,形成网状。单个神经元只会解决最简单的问题,但是组合成一个分层的整体,就可以解决复杂问题。

Geoffrey Hinton认为,传统的机器学习方法只利用了一层芯片网络,在遇到真正复杂的问题时,处理效率就会变得十分低下。深度学习的最核心理念是通过增加神经网络的层数来提升效率,将复杂的输入数据逐层抽象和简化。也就是说,将复杂的问题分段解决,每一层神经网络就解决每一层的问题,这一层的结果交给下一层去进行进一步处理。

有一层神经网络,就可以找到简单的模式;有多层神经网络,就可以找出模式中的模式。以人脸识别为例,神经网络的第一层只专注于边长几十个像素之类的图像区域,从中识别出一些形状(形状就是模式)——眼睛、鼻子、嘴巴等。再把这些已经识别出的形状交给下一层神经网络,下一层网络在已有的识别结果里,又发现了更大的模式——眼睛、鼻子、嘴巴可以组合成人脸。如果描述得更数学一点,当下流行的深度神经网络可分为应对具有空间性分布数据的CNN(卷积神经网络)和应对具有时间性分布数据的RNN(递归神经网络,又称循环神经网络)。

CNN往往用于图像识别,正如上文描述的,网络的第一层被训练成可以完成这样一个“小目标”——识别图像中局部的独立模块,如一个方块、一个三角形,或者一个眼睛。在这一层,人类输入大量图片数据,只为让该层神经可以辨别基本的局部图形“边缘”,即一个像素旁边没有任何东西。接下来的每一层都在前一层得出的信息中寻找更高层次的模式。这种方法模拟了人眼组合信息的方式,丢弃次要细节,优先识别出某种显著模式。如几个小块和一个圆圈合在一起成为一张脸,不论它出现在图像中的什么位置,人眼会首先注意这张脸,而不是平均注意图像的所有部分。

RNN则往往用于语音识别和自然语言处理。因为语音和语言是一种按照时间分布的数据,下一句的意义和上一句有关。RNN网络可以记住历史信息。假设我们需要开发一个语言模型,用前面的句子预测后面的词汇。给定“I was born in China in 1976. My college major is mathematics. I speak fluent_____”这句话的最后一个词显然是Chinese(汉语),这对人类很简单,计算机神经网络则需要能够调取到之前的“China”(中国)信息才能做到,这就需要有一种循环设计,使神经网络能够具有一种时间上的深度。

深度神经网络大大优化了机器学习的速度,使人工智能技术获得了突破性进展。在此基础上,图像识别、语音识别、机器翻译等都取得了长足进步。语音输入比打字快得多,机器翻译让我们基本可以看懂一篇外文资讯,图像识别则早已可以凭借一张少年时期的照片就在一堆成人照片中准确找到这个人,甚至可以把很模糊的照片恢复成清晰且准确的照片。

基于深度学习的人工智能和过去的人工智能原理不同,但与我们所了解的数据挖掘有相似的逻辑:先得到结果,反向寻找模式。这个过程被称作训练。

我们用简单的数学知识就能把机器学习、训练和深度学习的基本思维方式解释清楚。

这个方法堪比数学领域的哥白尼式倒转,以简单函数为例可以很好地说明这个倒转。

过去我们解决数学问题,一般是先知道公式(函数),然后输入数据,求出结果。就以y=ax+b这种类型的函数为例。比如,已知y=2x+1,令x=1,可以求出y=3。这里x就是“输入”,得到的y就是“输出”。

更高阶一点的数学能力是知道公式和输出,要把输入值求出来,比如已知y=2x+1,令y=5,求x。

再进阶一步,就触摸到了机器学习。当我们不知道a、b这些系数,但是知道y和x的值,需要把a和b求出来,也就是已知输入和输出,要把函数系数求出来。在y=ax+b这个函数里,我们只需要知道两组x、y的值就能确认a和b。

更进一步,假设我们有一组输入和输出数据,但完全不知道函数的形式,又该怎么办呢?这就需要构造函数。比如,已知x=2,y=5,求f(x)。这在输入和输出数据很少的情况下是无法计算的,f(x)可能是2x+1,也可能是1x+3,甚至是x2+1,以及无数种其他情况。但是如果x和y的数量充足,数学家就能通过“逼近计算”方法,不断调整公式权重,近似求得这个函数。

问题来了,现代生产和生活中产生的数据都无比巨大复杂,如果要从中求得蕴含的函数就需要非常“高能”。人类的脑力已经无法胜任,但是可以把这项工作交给计算机。拟合函数就在这里大显神通。深度学习神经网络模拟了人脑的神经节点,每个节点实际上就是一个函数调节器,无数函数彼此交叉连接起来。通过数学上的矩阵、优化、正则式等各种方法,深度学习过程不断调整着每个函数系数的权重,在数据充分、构造原理合适的情况下,不断演化的函数会越来越准确地拟合大部分数据,于是我们就可以通过这套函数来预测尚未发生的情况。这个过程就是我们所说的“训练”。

吴恩达在谷歌工作的时候,领导团队训练出了著名的计算机识猫系统。

如果用老式的符号式人工智能方法来编程,那么人类首先要对猫进行细致的定义,如尖耳朵、圆眼睛、直胡须、四条腿、长尾巴……把这些特征定义转化为函数输入计算机,然后向计算机展示一张图片。电脑就会分解图片中不同的元素,然后再将这些元素和程序中的规则进行比对。符合尖耳朵、圆眼睛、直胡须、四条腿、长尾巴等特征,那么这就是一只猫。