前言
人工神经网络已经飞入寻常百姓家,也是这一波智能技术兴起的“始作俑者”,从专业的角度讲解神经网络的资料数不胜数,但是感觉都不太友好,要么偏于某个细分,要么过于晦涩,我就尝试着白话一下,抛砖引玉。
先说一个词,非线性。这是人工神经网络的主要特征。什么是非线性呢,举个例子,超市促销打折,原来一斤鸡蛋4块钱,两斤鸡蛋8块钱,这个增加的过程就是线性的,但是现在做活动,凡购买三斤以上的,按照原价开根号的结果(实际当然不可能这样算)收费,这种价格就是非线性了。也就是说本来按照数量和价格的关系作图是个直线,现在变成曲线了,甚至是不规则曲线了,那么就变成非线性了,粗略的先这么理解一下。现实生活中,绝大部分实际情况是非线性的,比如树叶形状、天气变化等等,线性情况往往是人为简化的结果。
之前脑科学的文章中提到过,智能的核心能力体现在对世界复杂信息的处理能力上,智能体通过信息的处理产生行为,作用于外部世界并获得有利于智能本体的反馈结果。当世界大部分情况是非线性的时候,当然就需要比较好的非线性信息处理能力,大脑有这个能力,但是人类发明的传统模型大都是线性的,做个简单的自动化处理还行,稍微复杂一些就要人手把手的带着做了,不具备独立工作的能力,算是辅助工具吧,比如数控机床、自动化生产线等等。
说清楚了非线性,再说人工神经网络,在神经网络之前也不是没有非线性模型,神经网络区别于之前非线性工具的主要特点就在于,这玩意可以自己独立用一些来自外部的信息就能把背后的非线性规律搞出来,专业的说法叫训练或拟合,而且很准确,这就省掉了人脑分析建立模型的过程,比如人脸识别、声音识别等,这个模型人类科学家们搞了很多年都没搞准,实在太复杂了。所以有了神经网络,人类就可以把收集到的十万百万甚至更多的数据直接扔给模型自己去学,是不是跟养孩子有点像了?
不过大家也别抱过多的幻想,现在的神经网络所能做到的事情还都非常简单且重复,就是所谓的比较“窄”,比如识别人脸、识别声音转换成文字等,而且所识别的数据都需要别人提供给他,在多任务方面远不如人,连简单的自己买菜做饭都不行呢。人类仍然是世界的绝对主宰,不用担心。
发展历程概要
最原始的神经元结构在上世纪初就已经搞清楚了,生物学家就把神经元的树突、轴突、细胞核那个图像都已经弄出来了,毕竟那时候已经有观察条件。但是人工神经网络的发展大概要从上世纪中叶算起,那时候的心理学家与数学家联手,搞出了神经元的数学表达,也就是现在所用的神经元模型,可见技术的核心快一百年没有更新了,其实科技进步挺慢的,远没有论文发表和媒体报道的那么神速和激动人心。
后来冯诺依曼本来想搞一下类脑计算机,没错就是设计咱们电脑的冯诺依曼,冯诺依曼当时提出了两种架构,指令存储式计算机和以简单神经元组成的再生自动机网络结构,前面那个结构就是咱们现在所用的计算机架构,后面那个是更类脑一些的架构,但是由于各种基础技术还不具备条件,导致类脑计算机远没有指令存储式计算机发展迅速,时至今日,伴随一些数据收集、芯片、数学等相关学科发展到了临界点,才触发了这一波AI热潮。所以点亮科技树是有顺序和条件的,不能光凭一腔热血。
上个世纪中叶,神经网络也曾经风靡一时,就是很多人都听说过的感知机,这个模型做线性分类玩的很溜,1968年AI大神明斯基专门有本书说这个技术,名字就叫《感知机》,但这本书更多的是批评这个技术的,通过数学分析指出了感知机的技术天花板,就是不能解决异或问题,所谓异或问题就是一个逻辑运算,定义相同则值为零,不同则值为一,形象的比方就是同性相斥异性相吸吧,这个主要限制了感知机对非线性问题的解决,大家觉得没前途然后感知机就凉凉了。
多层感知机网络虽然理论上能解决异或问题,但是大家当时还不知道怎么训练多层网络,后来深度学习之父辛顿把这个问题解决了,提出了反向传播的计算方法,复活了人工神经网络,后来这哥们因为在AI领域的各种重要发现还获得了图灵奖。题外说一下,辛顿是发明布尔代数那个布尔的后代,这一家子可是个学术望族,都可以单独聊一大篇了,所以啥都是有传承的,包括科学的精神,咱们国家好像在这方面还差一些,在经世济民方面比较厉害一些,就不多说了。
与此同时,随着计算机技术的快速发展,计算机逐渐普及和广泛应用,也诞生了IBM、微软等一票大公司,与此同时,计算机程序中已有的工具库慢慢不够用了,上世纪80年代,美国物理学家Hopfield倡导大家重新回到人工神经网络找找办法,或许有希望。然后就出现了众所周知的卷积神经网络CNN,也是人脸识别的核心模型,但从CNN的提出到火起来还等了十几年的时间,主要是受到数据和硬件性能的限制,CNN作为一种需要给出带标签训练数据的算法,问题越困难,模型就越复杂,需要的训练数据就越夸张,人脸这个事情还是等到李飞飞领导建立了一个百万级的图像数据集ImageNet时才逐渐被突破,当然这个数据集里不只是人脸,而且后来人脸识别模型的成熟化也不只是这个数据集的功劳,还有大量资本推动下的创业公司前赴后继。
说到这儿,时间线就已经到了21世纪了,这个时候在CNN之外,又出现了深度前馈网络,正则化、稀疏编码、循环神经网络、递归神经网络、LSTM长短时记忆、图神经网络、脉冲神经网络、深度强化学习等等各种各样的新模型,可以理解为各路炼丹师们(科学家和算法工程师们)在用计算机这个丹炉,配制的各种不同丹药,解决的问题不同,功效不同,但基本都是基于多层神经网络的架构在不断丰富和发展。
核心原理试阐
神经网络通常指的就是人脑的网状结构形式,组成的基本单元是神经元,连接方式主要通过突触,人脑的全脑神经元数量规模是这个星球上最为庞大的物种之一,高达近千亿个神经元之多。但人类应该不是最多的,毕竟体积方面还有更大的动物,比如非洲象据说高达2千多亿个神经元,但是如果按照智商高地的大脑皮层神经元数量计算,人类胜过非洲象很多了,而且人类的大脑皮层神经元数量还超过了蓝鲸近二十亿。
知乎一位匿名回答很好,“其实人类在数十万年的时间长度上脑规模已经没有什么太大的变化,脑这个玩意也就是个电脑硬件,CPU没变,但里面跑的Code在最近这几千年里面变化巨大,导致了巨大的行为变化。让一对博士生个孩子丢到野外长大,还是个野人,不会在野外‘生长出’哪怕初中的知识水平。”
神经网络在感知、判断、决策和控制问题,以及群体问题中都有很多实践,但是应该说主体成果还是集中于识别问题中,其他方面虽然有些进展,但还要算视觉识别方面较为成熟一些,我们就以此来举例说说。
如果直接一点说,神经网络本身在非线性的模式识别方面得天独厚,深度神经网络就像是一个巨大的分类器,可以把图像等视觉信息的分类问题进行精确处理。传统的方法通常要人类专家提前做好数学建模,对于某类图像给出明确的信号处理模型,然后计算机就能处理这类图像了。但是人脸在图像处理领域属于非常复杂的问题,不同的光线、角度、性别、年龄等等都对脸部图像有影响,建立好的模型非常难,但是神经网络通过强大的分层处理方式就做到了,分层处理这个事不是我说的,是图领奖获得者Lecun说的。他的原话是“DeepLearning = Learning HierarchicalRepresentations.”翻译过来就是 “深度学习等于学习多个分层的表示”。这个话怎么理解呢,咱们就一点点掰扯掰扯这个意思。
首先要说到的就是最基本的组件,神经元。
神经元可以简单的理解成一个类似于洗衣服的过程,往洗衣机里扔进去一些衣服(数据),一顿清洗(处理)之后会扔出来一些洗干净的衣服(结果),这个处理的过程通常成为模型或者函数。最早期的神经元模型叫MP模型,因为两个发明者的名字中各取了一个字母。借鉴了神经元的结构形式,结构如下。
MP的神经元模型结构简图
这里先不放数学公式了,旨在帮助感兴趣的童鞋入门了解,省的让大家头疼。这个东西长得就蛮像神经元的生物结构了,大家对比下感受下。
输入就像树突一样可以接收信号,输出就像轴突传递处理结果,而计算过程就像细胞核一样。MP的神经元模型中的连接线非常重要,每个连接线上还定义了不同的权值用于建模计算。
在MP的神经元模型里,函数F(x)是一种取符号的函数。这个函数主要作用就是判断最终输出是0还是1,就是最简单的分类问题,即给出了一种输入的组合,当输出分类为0时属于一种分类,为1的时候就算另一类。
神经元的结构至此就已经介绍清楚了,这就是各种神经网络最为基础也是最重要的组成元件,当然神经元的权重、连接数量和方式、处理函数都有很多种不同的组合方式,具有不同的效果。
有了基本的结构之后就该处理一个比较棘手的问题了,如何训练神经元。
最开始神经元的权重都是人为设置的,精度的调整也都靠人肉实现,这当然太低效了。但这个问题的解决已经来到了神经元模型发布的16年之后,由计算科学家提出了感知器模型及其训练方法,终于这个时候的神经元权重可以通过训练得到了。
经典感知器的结构是两层的神经元组成,第一层传递数据作为输入,不做计算,第二层做计算,而且可以做多输出,比如输出向量[a1,a2]等。但是这个时候的感知机由于只有一个真正意义上的计算层,咱们这里把计算层作为神经网络层数的计数标准,因此经典的感知机网络算是单层神经网络,这种网络只能处理线性分类问题,就是画条直线做个分类。无法做比较复杂的分类,比如下图这种它就干不了。
于是乎神经网络的研究沉寂了很多年,从感知机的发布时间算起,过了整整28年才来到了双层神经网络有效训练方法的发表,这个时候深度学习之父辛顿联合另外一名计算科学家发表了大名鼎鼎的反向传播BP算法,这个算法可以有效解决双层神经网络的训练问题,而双层神经网络又可以有效解决上图的那个非线性分类问题,就是要画个曲线才能完成的分类。理论上已经证明,双层神经网络可以无限逼近任意连续函数。怎么理解呢,简单说就是只要是连续曲线能分清楚的类别,双层神经网络都能搞定。
具体的双层网络模型和BP算法的基本思路就是首先神经网络中需要调整的参数用矩阵来表达和计算,这也就是为什么学习深度学习一定要掌握线性代数的原因了,因为矩阵运算来求解神经网络参数是数学上非常方便的方式。然后就是BP反向传播算法主要思想是用求导的方式计算偏差的梯度并使其逼近于0,将网络最终输出结果与真实值之间的差距在不同参数调整中进行传递,从而对参数进行自动化的调整使其越来越接近需要拟合的非线性数据分布。
至此,神经网络自身的核心要素基本齐备了,但是有个小插曲就是双层神经网络与SVM之争,当时由于算力和数据都有限,SVM以其不需调参、高效和可解释等优势,完虐双层神经网络,学术界一度对神经网络拒之门外,这个从很多神经网络早期论文中的对比试验都与SVM作比较就略见一斑。
时间来到21世纪,深度学习之父辛顿终于给大家带来了其颠覆之作深度信念网络,这个网络集成了Lecun在上世纪80年代发表的卷积核组件,改变了网络训练方式,并增加了网络层数,尤其是在李飞飞教授领导的ImageNet图像数据集的竞赛中取得了非常优异的成绩,自此,深度神经网络虽然仍然在可解释性、算力和训练数据等方面存在问题,但已名扬学术江湖,几乎达到了言必称深度学习的程度。
这里借用一下博客园博主计算机的潜意识的几张图看一下发展过程,比较清晰。
三起三落的神经网络(引用自博客园-计算机的潜意思-神经网络浅讲:从神经元到深度学习)
表示能力不断增强(引用自博客园-计算机的潜意思-神经网络浅讲:从神经元到深度学习)
发展的外在原因(引用自博客园-计算机的潜意思-神经网络浅讲:从神经元到深度学习)
从上面的图比较清楚的可以看到人工神经网络三起三落的发展过程,网络结构和核心组件的变化,以及相关性能的变化情况,这里暂不赘述了。
启示与展望
总的来说,人工神经网络随着数据和算力的提升,尤其是在辛顿、LeCun、Ng、Bengio等人的不断坚持下,获得了学术界的广泛认可和研究,但是当前仍然有很多问题没有解决,比如可解释性、算力门槛、数据门槛等,或许又会进入一次寒冬,或许会随着一些关键问题的突破再上一个台阶都说不定。这大概会与AI核心模型的进步、算力的突破以及虚拟化(含数据)技术的发展都有极大关系,但是终究来说,解开认知现象的科学奥秘,并通过计算科学来充分利用这个奥秘解决人类发展中遇到的问题,是一个比较确定的大趋势。
再说一说启示,从人工神经网络的发展过程还是有很多启示留给我们的。
首先,神经网络的提出与发展一直受到了神经科学的启发,比如神经元的结构受到生物神经元启发,ReLU函数的使用受到生物神经元对于激励的非线性响应现象启发、卷积核的使用受到大脑视觉机制的启发、注意力机制等等,当然这种启发都不是简单的模拟,而是从计算的角度建立可行的实现方式,就像飞行的模拟一样,建立合理的数学实现方式计算机才能够模拟。
其次,不要把神经网络过度神化。神经网络较为强大的非线性拟合能力是其核心特征,但是单独靠神经网络并不一定无往而不利,通常还要与其他组件进行有机的结合,比如决策问题还是要从状态转移的角度去和马尔科夫过程结合,形成深度强化学习等等。
最后,毕竟人工智能也好,神经网络也好,都是人类科技树攀爬过程中的一些分支,还有很多其他学科需要同步发展才能真正让科技走入社会,变成可以解决问题的成果,借用辛顿说过的话,“... provided that computers were fast enough, data sets were bigenough, and the initial weights were close enough to a good solution. All threeconditions are now satisfied.”。意思就是说,算力足够快、数据足够丰富和模型初始化足够好的情况下才有可能出现深度信念网络的重要突破,接下来人工神经网络的发展同样如此,不可偏废。算力方面的量子计算和类脑器件等,数据方面的大数据基础设施和管理等,都同样是非常重要的。
好了,关于人工神经网络咱们就聊到这,有很多专业知识都是点到为止,感兴趣的同学可以找专业课程和资料学习下,咱们只是投石问路,希望对大家有点帮助,如果觉得不错,请给咱们支持一下吧,分享、收藏、三连各种走起,在此多谢啦!