很多科技媒体都把刚刚到来的2016年定义为人工智能年。刚刚在拉斯维加斯举行的CES也似乎也印证了这一点,大量的人工智能设备在展览上被展出,从无人机到机器人都避免不了人工智能技术。
在CES举行的前一周,著名前PHP程序员扎克伯格在自己的facabook页面上公布了自己2016年的年度挑战计划,作为Facebook CEO的扎克伯格准备DIY一个人工智能助手,他计划让人工智能助手可以让他通过语音控制家中的一切电子设备,还希望人工智能助手能够通过面部识别认识自己的朋友和家人,甚至是照看他才出生不久的女儿Max。
既然大家都在给2016年的人工智能打鸡血,难道你不应该也了解一下人工智能吗?了解一点人工智能至少能听懂小伙伴聊天,不至于一直活在2015年。
从了解人工神经网络开始了解人工智能是不错的选择。本文在尽量不堆砌大量数学公式和数学推导过程的条件下,让你对人工神经网络有一个初步的了解,当然为了能够解释清楚难免会列出程序伪代码和少量的数学公式。
人工智能一开始的目的就是通过技术手段模拟或者创造人类的智能,那么很自然的思路就是搞清楚人类大脑的结构和工作原理,然后建立数学模型,这样就可以通过数学运行来实现人工智能。
按照这个思路,通过对大脑孜孜不倦地研究,人们发现大脑是由无数个神经元连接组成。每个神经元接收信号经过一定处理然后输出给其他神经元或者效应器。每个神经元的输出信号只有兴奋或抑制两种,也就是说神经元会根据收到的信号要么输出兴奋信号要么输出抑制信号。神经元用于接收信号的部分被称作树突,树突可以接收多个其它神经或者感应器传递过来的信号。神经元用于输出信号的部分被称为轴突,轴突能够把神经元的输出通过信号传递给另一个神经元或者效能器。根据神经元的工作原理,人们建立了神经元的数学模型。
上图的左边是神经网络的生物学结构图,右侧是神经元的数学模型。从图中的数学模型可以看出,神经元的每个树突都有不同的权重w,神经元会把树突的输入值乘以对应的权重w,然后再把所有乘以权重后的值输值累加起来再加上一个与输入无关的值b(这个值被称为偏置值),最后传递给一个被称作激励函数的函数,激励函数的返回值就是神经元的输出。可以用下面的伪代码来表达神经元的数学模型。
1 | #假设神经元有4个树突,每个树突对应的权重分别为w0,w1,w2,w3 |
由于神经元的输出只有兴奋和抑制两种状态,我们可以用1来表示兴奋,用0来表示抑制,那么激励函数的输出值应该一个固定区间内。0~1这个区间是一个不错的选择,一般情况我们使用sigmoid函数作为激励函数。
sigmoid函数的输出值分布在0~1之间非常接近生物神经元的原理。不愿意看数学公式的可以看下面的Python代码。
1 | import math |
神经元的数学模型看起如此的简陋,能用来做什么呢?其实神经元的数学模型已经能够很好的模拟神经元的功能。生物神经元的主要作用就是能够识别输入的信号,所谓识别就是能够认识和区分输入信号的类别,通俗一点也就是能够进行分类。其实神经元的数学模拟也能够对数据进行分类。
接下来我们就用“费雪鸢尾花卉数据集”中的2条数据来验证神经元数学模型的作用。
花萼长度 | 花萼宽度 | 花瓣长度 | 花瓣宽度 | 鸢尾花品种 |
---|---|---|---|---|
5.3 | 3.7 | 1.5 | 0.2 | 0 |
7.0 | 3.2 | 4.7 | 1.4 | 1 |
上表数据分别是两种不同鸢尾花品种的数据,神经元可以根据鸢尾花花瓣的尺寸判断出鸢尾花的品种。我们把鸢尾花的花萼长度,花萼宽度,花瓣长度,花瓣宽度输入给神经元的4个树突,神经元的输出与阈值0.5比较,大于0.5为品种0的鸢尾花,大于0.5为品种1的鸢尾花。
神经元树突权重取值如下:
w0 | w1 | w3 | w4 | 偏置值 |
---|---|---|---|---|
0.03 | -1.8 | 2.1 | 1.9 | -0.05 |
利用上面定义的activation函数计算第1条数据:
1 | >>> activation(5.3*0.03+3.7*-1.8+1.5*2.1+0.2*1.9-0.05) |
计算结果小于0.5,第1条数据的品种为0
计算第2条数据:
1 | >>> activation(7.0*0.03+3.2*-1.8+4.7*2.1+1.4*1.9-0.05) |
计算结果大于0.5,第2条数据的品种为1
上面的计算已经很好的验证了神经元数学模型已经可以实现对数据的分类。一般情况下我们都会使用多个神经元组成一个神经元网络来实现对数据进行分类的功能。
现在还有一个疑问,首先,神经元树突的权重值w和偏置值b是怎么来的呢?其实权重和偏置都是通过机器学习的方式来获得。使用一个已经有分类结果的数据对神经网络进行训练从而获取权重值w和偏置值b。现在已经有多种训练神经网络的方法,BP神经网络是其中一种比较有效的神经网络训练方法,下篇文章我们将介绍BP神经网络。