2012年, 加州山景城,Google秘密的X实验室,在Andrew Y.Ng的带领下,科学家们通过连接16000个处理器为机器学习建立了当时规模最大的神经网络, 检索了YouTube视频中分帧出来的千万张照片,任务只有一个: 找猫咪!
Neural Network不就是找猫咪吗?这么简单的任务需要这么多服务器? 一个三岁小孩都能轻松完成。对于人类来说这就是与生俱来的能力,扫一眼就知道是猫是狗,但是从程序员的角度来看这件事真的相当困难,按照传统的编程思路,可能先要定义猫的极度精细的特征,必须要非常精细,否则那么多的猫科动物如何区分? 然后再从图片抠出物体边缘进行对比,但是一来因为猫的大小品种颜色姿态角度各异,特征很难描述的准确,极度容易陷入各种异常和边界场景的泥沼之中。二来就算把识别猫的问题解决了,下次要识别狗或者其它物体怎么办? 事件万物难道都要抽象出其特征一一编码实现吗? 这根本就是不可能完成的任务,反正我是肯定写不出来这么复杂的代码的。
Google的方案具有跨时代意义,通过模拟人类大脑视觉皮层的运作方式准确地印证了生物学家的理论-单个神经元通过在大脑内接受的训练,获得识别物体的能力。不需要程序员找出猫的规律,只要为算法提供海量数据,喂给机器百万张照片,机器就能自我学习自动找出物体内在的规则从而辨别出猫,这才是以不变应万变的通用解决办法。
人类的视觉系统
大脑视觉皮层和神经元听上去比较玄乎,到底是什么东西? 我们先来简单科普一下人类的视觉系统: 人脑有一个初级视觉大脑皮层V1, 由1.4亿个神经元和数以百亿的神经元的连接线组成。当处理复杂图像的时候,还有一系列的视觉大脑皮层(V2, V3, V4, V5/MT, V6)层层加工,V1首先加工视觉信息,这一层的主要功能是识别点和不同角度的线来辨识物体,V2和V3不负责特定功能,而是协助V1对各种信息进行加工整合,完成高级的神经精神活动, V4主要负责辨别颜色,V5负责运动视觉,此后视觉信息兵分两路,主要分为视觉的背侧通路(Dorsal Pathway)与腹侧通路(Ventral Pathway)。简单来说,就是腹侧通路告诉我们“What”,背侧通路告诉我们“Where”。
Parallel visual pathways我们接着认识一下两种重要的人工神经元Perceptron(感知机) 和 Sigmoid神经元。
感知机
感知机是Frank Rosenblatt在1957年就职于Cornell航空实验室(Cornell Aeronautical Laboratory)时所发明的一种人工神经网络,这也是人工智能发展史上的一个里程碑事件。它可以被视为一种最简单形式的前馈式人工神经网络,属于二元线性分类器。
感知机是生物神经细胞的简单抽象。神经细胞结构大致可分为:Dendrite(树突), Synaptic Terminals(突触), Cell Body(细胞体)及Axon(轴突)。单个神经细胞可被视为一种只有两种状态的机器 - 激动时为‘是’,而未激动时为‘否’。神经细胞的状态取决于从其它的神经细胞收到的输入信号量,及突触的强度(抑制或加强)。当信号量总和超过了某个阈值时,细胞体就会激动,产生电脉冲。电脉冲沿着轴突并通过突触传递到其它神经元。
Neural Cell感知机接受x1, x2,...多个输入值,然后通过计算得出一个唯一的输出值。
Perceptron ModelRosenblatt引入了weight(权重)的概念,w1, w2,..., 通过判断x和w的乘积之和是否大于某个阈值来决定感知机的输出是0(非激活)还是1(激活). 用数学公式表达如下:
回忆一下我之前举的如何挑选榴莲的例子,这就相当于模拟了人脑做决策最简单的过程。当然人脑的决策过程没有这么简单,为了模拟更复杂的决策过程,感知机可以分为多层来实现。最左边一列是第一层感知机得出三个简单的决策,作为输入传递给更为复杂和抽象的第二层感知机,最终得出一个唯一的输出值。
Multi-layer Perceptron接下来我们引入挑榴莲例子中的bias(偏差)简化一下前面的公式(将threshold移到公式的左侧),显然bias越大越容易激活。现在可以回头看看生物神经细胞,其实这个激活函数就是模拟细胞体,权重就是模拟突触,bias就是模拟细胞激活阈值。
Sigmoid神经元
假设我们已经搭建了一个神经网络了,并给它指派一个任务: 扔给它多张手写数字图片的像素数据将十个不同的数字正确分类,希望它能通过学习来找到问题的解决方案。为了达成目标,机器学习的思路就是敏捷开发的理念,小步优化,快速迭代,它需要不断调整weight和bias来逐步逼近预期的输出值,而且必须保证weight和bias的微小变化也只会带来输出值的微小变化,否则机器就无法判断应该朝哪个方向去调整参数了。
感知机满足这些要求是有难度的,参数的微小调整可能会带来输出的质变,因为感知机的输出只有0和1两种结果。为了解决这个问题,另一种神经元Sigmoid出现了,它和感知机差别很小,就是输出值不再仅限0和1,可以是0到1之间的任何小数,比如0.342, 0.685,...
神经元从感知机的阶梯函数(左)变成了Simoid的线性函数(右),满足了输入值X轴微小变化仅带来输出值Y轴的微小变化。
我们用σ来表示Sigmoid函数σ(w⋅x+b),当z为正无穷大时σ无限逼近1,当z为负无穷大时σ无限逼近0.
为了看的更清楚可以把这个公式右边展开如下:
Reference:
1. How many computers to identify a cat? 16000 - by John Markoff
2. Motion perception in autism spectrum disorder - researchgate.net
3. Clever Algorithms: Nature-Inspired Programming Recipes - by Jason Brownlee PhD
4. Neural networks and deep learning - by Ronald Davis
网友评论