一、概述
为了教会女儿,引女儿入门AI,我一个月前才开始学习AI。因此买了人工智能书,报了网络课程,然后在youtube上找了很多资料,跟女儿一起慢慢理解人工智能到底是什么。
要理解AI,首先需要了解神经网络。说到神经网络,会给人很深奥的感觉,大家都还没有弄明白人体的神经网络原理,或者说只知道了神经网络的皮毛,然后就把这个词用在人工智能上,是不是觉得很高大上呢?说实在的,了解后会说人工智能其实和神经网络一毛钱关系都没有。AI是人类给计算机一种计算模型,基于多层的网状结构数学模型,人类认为大脑神经是地球上甚至宇宙里最成功最智慧的智能系统,因此赋予计算机人工智能神经网络名词,当然也是对人工智能最终发展成匹敌人类大脑的美好预期。
数学是一切学科的基础,机器学习中的神经网络,就是基于一些基本的数学理论,通过多层的构建,计算机通过自学习在不同层网络寻找数据的特征,最后总结出最有效的特征参数。当输入训练的数据越多,涵盖面越广,计算机最终得到的特征参数就精确,然后用这些精确的特征参数去帮助人类反推出真相,从而帮助人类进行正确的选择。从最近几周的学习上看,其实现在各种数学模型应用到的数学理论都是几百前人类就掌握的知识,显现出来的学习能力已经让人类震惊。如果能有更多的数学家参与到人工智能的基础研究中,能把现代数学理论应用到最前沿的人工智能模型构建中,那么我猜想一定会有翻天覆地的技术进步。呼吁数学家们多去了解人工智能领域,说不定将真正启动人类的第四次工业革命!
二、人工智能神经网络
上图是神经网络的经典解说图,输入层叫input layer,圆形节点是神经元,也是数据集,通过本层节点和下层节点之间的连线进行数据映射,每条线都关联一个数据处理权重(weight),从而把本层节点数据集转换到下层的节点。中间的网络层可以有多层,叫hidden layer。最终输出层,叫output layer。最简单的神经网络就是输入一串数据,然后直接输出一串的分类选择,这就是一层的神经网络。上图是4层的神经网络。
下面展现每个节点(神经元)的映射原理:
在上图种,a1...an是上层网络的神经元,通过映射函数
计算出下个节点的数据(其中b是偏移量)。根据输入数据的特征数量和下一层网络的输出特征数量,w权重是一个m*n的数据矩阵。上面的数学公式是个线性函数。在输入层中开始的w取值是随机选取,然后以此训练后,把训练结果与真实数据进行比较,从而获知此次选择的w权重推出结果的正确程度,然后再反推下次应该如何选择新的权重,以更加逼近正确程度。
人工智能训练有正向计算和反向验证,通过不断反复的训练(训练次数也叫epochs参数),最终得到的w和b参数为最能反应数据本质的参数,人类可以根据此w和b参数来反推给出其他数据的正确性。当前人工智能的大前提就是要有广泛的大数据支持,而且这些数据最好还要有标签,告诉计算机数据的正确标签,这样计算机才好衡量每次训练的w和b的正确程度。
现在最有名的图像标签数据集是由stanford李飞飞教授发起组织完成的imageNet。到2016年初,这个数据集共有约22000种物体分类和1400万张经过人工标签过的图片。世界上很多研究员基于这些数据集做图像人工智能识别研究,在2012年的imageNet图像识别竞赛中,深度学习CNN网络模型获得第一名,并大幅提高识别率。至2016年是国内团队取得imageNet竞赛的冠军,识别率已经超过了人类的眼睛!
最前沿的人工智能也在研究:如果给计算机的数据没有标签,计算机能通过自学习获得什么?中国古人云:道可道,非常道。“道”是洞悉一切奥妙变化的门径,计算机能否通过自我学习掌握“道”,从而触类旁通,掌握世间所有真理?
三、深度学习开源工具介绍
深度学习开源工具分为两类,一类是基础运行架构,就是支持神经网络搭建和计算的基础平台,主要有tensorflow、theno和caffe(caffe同时也是前端工具);另外一类是通过包装并提供友好的调用API,让更多的研究人员可以用到基础平台,主要有keras, tflearn, pycaffe等。在python中有研究人员大量累积的好用的开发包,因此这些前端工具一般都提供python的API。
最值得提的是tensorflow是谷歌开源的工具,是谷歌用钱堆出来的,云集诸位大神的杰作。因此一经推出,就获得江湖各界的拥护,大有一举拿下AI工具霸主地位的倾向。当然有很多研究人员还是基于傍大款的心态,有了靠山,一定用得不会太差。但是我的建议,大家还是要多去了解和看看各工具的优缺点,特别是像我这样的初学者,这样能更加加深对AI的理解,并找到切合自己习惯的工具。就像我20年前开发的一套平台系统,到了今日还有客户选择使用,如果从技术角度脚步看,可能不会选择,但是从工具角度出发,只要好用,对工作又帮助的,并不需要什么太高大上。
通过在网络课堂种了解tensorflow的架构,还有对tflearn的方便性,留下很深的印象。但是我还想看看其他工具如何,昨天选择从caffe开始。先是在mac下尝试安装,但是由于对第三方的软件包版本要求太过于严格,没有安装成功。最后选择在虚拟机Ubuntu 17.04中安装。安装后根据官网的mnist手写数字识别教程,成功配置网络文件。使用caffe工具做AI,基本不要写什么代码,就一次训练成功。但是在针对训练成功的模型做任意手写图片的predict识别时发生了困难。caffe官网提供的predict调用代码是基于matlab的,根据自己的理解转成python始终不行。然后从早上9点研究到晚上9点,终于琢磨到一个predict的python调用方式。然后兴冲冲地告诉女儿:经过研究我找到方法了。女儿回答说:别说得那么高大上,我看你就是在google中折腾了一天。