作者:宇信教育 祝森
眼下最热门的ICT技术,人工智能绝对可以排在前列。
2016年谷歌Alpha Go与围棋世界冠军李世石上演"世纪人机大战",将人工智能(AI)的关注度推到了前所未有的高度,到如今随处可见的刷脸支付、AI音箱、扫地机器人,以及各大顶级公司都在投入的无人驾驶研究,背后都有人工智能技术在做支撑。预计2025年,全球企业对AI的采用率将达86%。AI的崛起将深刻改变企业的业务模式和价值创造模式。
人工智能的底层模型是"神经网络"(neural network)。许多复杂的应用(比如模式识别、自动控制)和高级模型(比如深度学习)都基于它。学习人工智能,一定是从它开始。
人为什么能够思考?原因在于人体的神经网络,其中思考的基础是神经元,如果能够"人造神经元"(artificial neuron),就能组成人工神经网络,模拟思考。一直以来,科学家都希望模拟人的大脑,造出可以思考的机器。上个世纪六十年代,科学家提出了最早的"人造神经元"模型,叫做"感知器"(perceptron),直到今天还在用。
人工神经网络,简称神经网络(Artificial Neural Network,ANN):是由人工神经元互连组成的网络,它是从微观结构和功能上对人脑的抽象、简化,是模拟人类智能的一条重要途径,反映了人脑功能的若干基本特征,如并行信息处理、学习、联想、模式分类、记忆等。
如图,我们可以初步理解神经网络模型是一个包含输入,输出与计算功能的模型。输入可以类比为神经元的树突,输出可以类比为神经元的轴突,计算则可以类比为细胞核。
作为AI技术的底层技术,为什么神经网络的提出已久,但近几年才大放光芒?这是因为神经网络等算法需要巨大算力来支撑。在2016年的那场人机大战中,谷歌DeepMind公司共消耗了1202颗CPU和176颗GPU的计算资源,Alpha Go的浮点运算能力是1998年IBM深蓝战胜象棋冠军时的3万倍之多,所以当前超高的运算能力是支撑AI技术发展的重要推手。
人工智能目前最成熟的应用方向之一是图像识别,它是实现如何让机器理解图像中的内容的AI技术,而其中神经网络对图像识别技术发展起到了突出的作用。
接下来我们通过一个简单的例子来更好的理解神经网络。
当一张图片输入到电脑中,它通常是一种三维数组的形式,第一维度我们通常称为Height,第二维度我们称为Width,这两个维度构即图像被计算机分割采样的尺寸,也就是通常所说的分辨率(如一张分辨率为1920*1080的图像,表示这幅图像是由1920*1080个点组成),第三维度称为Channel也就是通道,通常以RGB作为通道,表示图像每个划分的点的色彩,也就是他们分别在红,绿、蓝三原色域上的取值,如下图:
我们的任务是,搜集大量相关的照片(即有些图片是猫,有些不是猫,比如是小狗),并对已知照片的结果做标记(这个动作也叫打标签):是猫的图片记做1,不是猫的记做0,如下图。
让计算机识别已有标签图片的信息,建立一套识别模式,再用这套识别模式判断新输入的图片是不是猫,这就是一个简单的图像识别问题。
到此我们可以将上述任务转化为:对一批三维数组进行层层计算、转换、压缩,最终输出每个三维数组是0或1的过程,而神经网络就是完成这个过程的计算模型之一,也是目前比较出色的。
一个典型的神经网络模型包含有输入、输出,以及中间代表计算功能的隐藏层,如下图,图中各个层级之间的关系用箭头线表示,称为"连接",每一个连接都代表计算过程中的一个权重与偏差,也就是模型的参数。
结合上图我们继续概括下神经网络算法进行图像识别的过程:每个图像对应的三维数组在计算机中被处理成数字矩阵,也就是特征矩阵,也可以看成是一系列的向量(矩阵的每一行或每列可以看成一个向量),这里简化为只有三个向量X1,X2,X3作为输入特征,它们们被当作神经网络的输入层。输入层后面是隐藏层,由一个个神经元构成,它们代表着获取的信息。最后一层是输出层,一般是用来产生预测值的,此任务中输出的是一个0或者1。其中每个"连接"是通过样本特征矩阵和权重矩阵进行矩阵相乘,然后加上偏差形成的,并且也是下一层的输入。
此时我们可以进一步总结上述任务:一个图片是否是猫的识别问题,其实就是训练一个好的神经网络,训练的意思就是让权重和偏差的值不断调整到最佳,以使得整个网络的预测效果最好。
接下来我们来说明神经网络算法是如何让计算机训练出"一套"好的权重和偏差的。首先我们来了解下神经网络中神经元是如何形成的。
我们用X代表输入层,也就是x1、x2、x3构成的特征矩阵,用W代表权重矩阵,用b代表偏差,前面讲过我们通过样本特征矩阵和权重矩阵进行矩阵相乘WX,然后加上偏差b(参数值)形成每一个"连接", 用z代表矩阵相乘加上偏差的结果,即z=WX+b,这样的线性组合结果只能划分线性关系,而现实世界转化来的分类问题大多是非线性的。因此神经网络中引入激活函数的概念,实现对非线性问题的划分,这样极大的扩充了神经网络的分类能力。
我们展示一个常用的激活函数:sigmoid函数,如下图表示的是sigmoid函数对输入变量X在[-6,6]区间上的映射。
激活函数基本上都是非线性的,如果没有激活函数会发生什么呢?
线性组合z=WX+b其实就是在多维空间(X有多少个特征,多维空间就是多少维)里切一刀,如下图,我们无法通过线性切割把二维空间不同的两类标识分开,引入激活函数就相当于将z=WX+b再进行一次非线性转化,形成一个曲线,把这个多维空间里的样本点进行分割。
实际中的神经网络的每一个神经元都是由线性函数和激活函数构成。如下图。
我们再用σ代表激活函数,α带表了经过激活函数处理的矩阵,则每一个神经元的形成过程可以表示为下图:
神经网络的训练过程就是一个个神经元形成的过程。
我们把隐藏层比较多(大于2)的神经网络叫做深度神经网络(Deep Neural Network,DNN),深度学习,就是使用深度神经网络架构的机器学习方法。通常来说隐藏层越多,我们分类的效果就越好(但计算量也更大)。如下图表示隐藏层越多,形成的非线性划分效果越精准。
最后我们来揭示计算机是如何训练一个个神经元的,也就是确定神经元的权重W和偏差b值的过程。初始化时随机指定一些w和b的值,不断读取打过标签的图像输入模型,就可以对w和b进行校正。
随机初始化一般不会有多好的表现,我们需要选择一个损失函数L,它表示当前每一次迭代计算中目标输出与实际输出之间的误差,是关于W和b作为的函数,也是评价模型训练好坏的标准。
自然地,损失函数的值越小表面该模型的效果越好,所以神经网络的训练过程,就转化为的求解该损失函数L的一组解(W和b),使其达一个比较小的值的过程,而这一组得出的解就是最终的神经网络的参数值W和偏差b。找到了神经网络中的全部参数w和b,也就形成了一个明确的神经网络模型。
那么怎样求得损失函数的最小值以及其对应的w和b呢?这其实是一个解方程组的过程,计算机通常是如何求解方程的呢?核心思想是迭代,当前主流的迭代方法是梯度下降。
梯度下降方法的主要思想:想象你在一个山峰上,在不考虑其他因素的情况下,你要如何行走才能最快的下到山脚?当然是选择最陡峭的地方,这也是梯度下降法的核心思想:它通过每次在当前最陡峭的方向向下"迈"一步,来逐渐到达山脚。
数学上,梯度指向函数增长最快的方向,可以通过对损失函数求导获得。这个最陡峭的方向,就是梯度向量的负方向。
损失函数对应的所有取值结果可以看成一个多维空间中的"山体表面"(也就是有权重W和b作为自变量与输出结果一起构成的多维空间曲面),让损失函数沿着负梯度的方向进行搜索,不断迭代更新参数,最终使得损失函数最小化。
如上图所示,那么现在模型的训练问题就变为:明确自己现在的位置(可能是任意位置),然后求梯度,然后沿着与梯度相反的方向去走,一步一步下降直到接近最小值,最终找到这个曲面上的最小值,同时就找到了对应曲面最小值的位置坐标(也就是w和b的值),也就获得了整个神经网络的全部参数,这样一个神经网络就训练完成,接下来我们可以输入新的图片,通过这个神经网络来输出结果0或1,即图片是否是猫这样一个识别问题了。
如上就是给大家介绍的神经网络的基本知识,包括神经网络的定义,关键概念和形成过程,希望大家能够共同进步,体会人工智能的奥妙。
作者简介
祝森,华为授权培训合作伙伴宇信教育讲师,具有丰富的教学和项目经验,曾开发人脸识别、物体检测、大数据电商平台等项目,对人工智能,智能计算,鲲鹏,大数据技术有较深的理解。