先举一个简单的例子,如果我们需要让机器具备识别“狗”的智能:第一种方式是我们需要将狗的特征(毛茸茸、四条腿、有尾巴……)告诉机器,机器将满足这些规则的东西识别为狗;第二种方式是我们完全不告诉机器狗有什么特征,但我们给机器提供10万幅狗的图片,机器自个儿从已有的图片中学习到狗的特征,从而具备识别狗的智能。
其实,AI在实现时其本质上都是一个函数。我们给机器提供目前已有的数据,机器从这些数据里找出一个最能拟合(即最能满足)这些数据的函数,当有新的数据需要预测时,机器就可以通过这个函数去预测出这个新数据对应的结果是什么。
对于一个具备某种AI的模型而言,它有以下要素:“数据”+“算法”+“模型”,理解了这三个词及其之间的关联,AI的本质也就容易搞清楚了。
我们用一个能够区分猫和狗图片的分类器模型来辅助理解一下这三个词:
“数据” 就是我们需要准备的大量标注过是“猫”还是“狗”的图片。为什么要强调大量?因为只有数据量足够大,模型才能够学习到足够多且准确区分猫和狗的特征,才能在区分猫狗这个任务上表现出足够高的准确性。当然,在数据量不大的情况下,我们也可以训练模型,不过在新数据集上预测出来的结果往往就会差很多。
“算法” 指的是构建模型时我们打算用浅层的网络还是深层的网络,如果是深层的话,我们要用多少层,每层有多少神经元、功能是什么,等等,也就是在深度学习的网络架构中确定预测函数应该采用什么样的网络结构及其层数。
我们用Y=f(W,X,b)来表示这一函数,X是已有的用来训练的数据(猫和狗的图片),Y是已有的图片数据的标签(标注该图片是猫还是狗)。那么该函数中的W和b是什么呢?就是函数中的W(权重)和b(偏置),这两个参数需要机器学习后“自己”找出来,找的过程也就是模型训练的过程。
“模型” 指的是我们把数据带入到算法中进行训练(train),机器会不断地学习,当机器找到最优W和b后,我们就说这个模型训练好了,于是函数Y=f(W, X, b)就完全确定下来了。
然后,我们就可以在已有的数据集外给模型一幅新的猫或狗的图片,模型就能通过函数Y=f(W, X, b)算出来这幅图究竟是猫还是狗,这也就是该模型的预测功能。
简单总结一下: 不管是最简单的线性回归模型、还是较复杂的拥有几十个甚至上百个隐藏层的深度神经网络模型,其本质都是寻找一个能够良好地拟合目前已有数据的函数Y=f(W, X, b),并且我们希望这个函数在新的未知数据上也能够表现良好。
上面提到的科沃斯发布的DG70扫地机器人,只给它一只“眼睛”和有限个传感器,但却要求它可以识别日常家居物品:比如前方遇到的障碍物是拖鞋还是很重的家具脚,可不可以推过去?如果遇到了衣服、抹布这种奇形怪状的软布,扫地机器人还需要准确识别出来以避免被缠绕。
让扫地机器人完成图像识别大致需经过以下几个步骤:
(1)定义问题:根据扫地机器人的使用场景,需要识别家居场景中可能遇到的所有障碍物:家具、桌脚、抹布、拖鞋,等等。有了这些类别的定义,我们才可以训练一个多分类模型,针对扫地机器人眼前看到的物体进行分类,并且采取相应的规避动作。由于机器智能无法像人类一样去学习,去自我进化,去举一反三,因此当前阶段的机器智能,永远只能忠实地执行人类交给它的任务。
(2)收集数据与训练模型:接下来去收集数据并标注数据。现在的深度神经网络动不动就是几百万个参数,具有非常强大的表达能力,因此需要大量标注的数据。在收集了有关图片之后,还需要人工标注员一个一个地去判断这些图片属于上面已定义类别中的哪一类。因为标注需要人工来完成,所以这项工作的成本非常高,一个任务一年可能要花费上千万元。有了高质量的标注数据,才有可能有效驱动深度神经网络去“学习”真实的世界。
(3)这么复杂的人工智能运算在这个具体案例上是在扫地机器人上运行的。一方面是要保护用户的隐私,不能将用户数据上传到云端;另一方面,扫地是一个动态过程,很多运算对时效性要求非常高,稍有延迟扫地机器人就可能撞到墙壁了。
如上所述,就连简单的“识别拖鞋”都需要经过上面这么复杂的过程。所以,扫地机器人虽小,但其中涉及的技术堪比自动驾驶汽车涉及的技术。对于自动驾驶汽车来说,其信号收集的过程跟上面扫地机器人差不多。不过为了保证信号的精确程度,自动驾驶汽车除了图像视觉信号之外,车身会配备更多的传感器,用于精确感知周围的环境。