https://www.toutiao.com/i6694431849566962184/
这是专栏《AI初识境》的第2篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。
这一篇,我们就说说神经网络基础,包括简单历史,核心原理与技术。
作者&编辑 | 言有三
上一次我们讲述了人工智能的完整历史,自从图灵提出了“机器智能”,达特茅斯会议提出“人工智能”学科后,研究人员就开始活跃起来。
正所谓有人的地方就有江湖,人工智能的研究派系主要就是两大阵营。
第一大阵营,被称为符号派,他们用统计逻辑和符号系统来研究人工智能,采用自顶向下的研究思路,也就是要先看懂人工智能是什么,再去一步一步实现它。符号派用人工智能技术来证明公式,发明专家系统,代表人物有纽厄尔(Newell)、西蒙(Simon)等。
第二大阵营是统计派,现在的深度学习就属于这一派,这一派研究问题的方法就是仿造大脑,采用自底向上的思路。通过一个一个简单逻辑的搭建,搭建成一个足够复杂的系统后,系统就自然会有智能了。代表人物新时代的深度学习三大巨头Yoshua Bengio,Hinton、LeCun。
应该说,符号派的研究方法最早也更加直观,典型的例子是专家系统,它的缺陷也非常明显,必须先对所研究的问题有完整的理解,然后再通过知识编码,这对于达到一定复杂程度的问题来说根本不可能实现,不是所有知识都能一下子说出来原因的。就好比在图像中识别一只猫,到底怎样的一幅图片才是猫图,传统的图像描述算子就很难完全定义,保证覆盖到各类场景。
统计派的思路就更加务实,摆事实讲道理,通过统计学习的方法来归纳出知识,不再完全由人工干预,天然和大数据是契合的,这也是成功的必然性。
有学者一生站队在一派,也有的摇摆过,比如上次说到的马文·明斯基,就从最开始的统计派在第二次AI浪潮中转变成为了符号派,并成为了第二次低谷的重要推手。
anyway,现在是统计学派大放异彩的时候。
前面说了统计派是采用了模仿大脑的方式,人类花了亿万年的时间来进化,那生物的大脑究竟是如何处理视觉信息呢?
大脑的基本感知单元就是神经元,一个神经元所影响的刺激区域就叫做神经元的感受野,即receptive field,不同神经元感受野的大小和性质都不同。
感受野的研究来自于美国神经科学家哈特兰(Keffer Hartline)和匈牙利裔美国神经科学家库夫勒(Stephen W. Kuffler),1953年他们发现猫视网膜神经节细胞的感受野具有同心圆结构。
如上图包括了两种感受野,第一种感受野由作用强的中心兴奋区域和作用较弱但面积更大的周边抑制区域构成了一个同心圆结构,称为On型感受野,第二类感受野是由中心抑制和周边兴奋的同心圆构成,称为Off型感受野。当刺激On型感受野中心时,细胞就兴奋,如第一列第一排的图。刺激周边时,细胞就抑制,如第一列第二排的图,Off型图则反之。
不过尽管明白了感受野,视觉感知的机制仍然没有被得到更深刻地理解,直到视觉功能柱的发现。
加拿大神经生理学家David Hunter Hubel和瑞典神经科学家Torsten Nils Wiesel在20世纪50年代和60年代开始研究视觉机制,他们将图像投射到屏幕上,将测量神经元活动的电线插入猫的大脑,通过固定猫的头部来控制视网膜上的成像,测试生物细胞对线条、直角、边缘线等图形的反应。
研究显示有些细胞对某些处在一个角度上的线条、垂直线条、直角或者明显的边缘线,都有特别的反应,这就是绝大多数视皮层细胞都具有的强烈的方位选择性。不仅如此,要引起这个细胞反应,直线的朝向还只能落在一个很小的角度范围里,也就是该细胞的感受野内。这样以上两个研究就统一起来了。
从1960年到1980年,两人合作了20多年,细致科学地研究了人眼视觉的机制,因此他们被认为是现代视觉科学之父,并于1981年一起获得了诺贝尔生理学与医学奖。
这一项研究,直接催生了David Marr的视觉分层理论,也催生了计算机视觉学科,更是卷积神经网络的发源。
在生物学家,计算机科学家的共同努力下,大家摸清了人脑神经元的工作机制。
神经元之间相互连接,当某一神经元处于“兴奋”状态时,其相连神经元的电位将发生改变,若神经元电位改变量超过了一定的数值(也称为阈值),则被激活处于“兴奋状态”,向下一级连接的神经元继续传递电位改变信息。信息从一个神经元以电传导的方式跨过细胞之间的联结(即突触),传给另一个神经元,最终使肌肉收缩或腺体分泌。
神经元通过突触的连接使数目众多的神经元组成比其他系统复杂得多的神经系统。从神经元的结构特性和生物功能可以得出结论:神经元是一个多输入单输出的信息处理单元,并且对信息的处理是非线性的。
在这个基础上,就有科学家产生了模拟神经网络的想法。1943年McCulloch和Pitts提出了MP模型,这是一种基于阈值逻辑的算法创造的神经网络计算模型,由固定的结构和权重组成。
在MP模型中,某个神经元接受来自其余多个神经元的传递信号,多个输入与对应连接权重相乘后输入该神经元进行求和,再与神经元预设的阈值进行比较,最后通过激活函数产生神经元输出。每一个神经元均为多输入单输出的信息处理单元,具有空间整合特性和阈值特性。
其实MP模型就已经是感知器的原型了,只是没有真正在计算机上实现而已。
感知机(Perceptron)是Frank Rosenblatt在1957年提出的概念,其结构与MP模型类似,一般被视为最简单的人工神经网络,也作为二元线性分类器被广泛使用。通常情况下指单层的人工神经网络,以区别于多层感知机(Multilayer Perceptron)。尽管感知机结构简单,但能够学习并解决较复杂问题。
假设我们有一个n维输入的单层感知机,x1至xn为n维输入向量的各个分量,w1j至wnj为各个输入分量连接到感知机的权量(或称权值),theta为阈值,f为激活函数(又称为激励函数或传递函数),o为标量输出。理想的激活函数通常为阶跃函数或者sigmoid函数。感知机的输出是输入向量x与权重向量w求得内积后,经激活函数f所得到的标量。
单层感知器类似一个逻辑回归模型,可以做线性分类任务,但是不能做更复杂的任务。第二次AI浪潮中马文·明斯基在其著作中证明了感知器本质上是一种线性模型,只能处理线性分类问题,就连最简单的XOR(亦或)问题都无法正确解决。作为人工智能领域的开创者之一,这一声明也直接或间接促使神经网络的研究陷入了近20年的停滞。
不过就算在低谷期,1974年哈佛大学的Paul Werbos仍然证明增加一个网络层,利用反向传播算法可以搞定XOR问题。到了后来Rummelhart,McClelland以及Hinton在1986年正式在多层感知器(MLP)中使用BP算法,采用Sigmoid进行非线性映射,有效解决了非线性分类和学习的问题。
多层感知机(Multi-Layer Perceptron)是由单层感知机推广而来,最主要的特点是有多个神经元层。一般将MLP的第一层称为输入层,中间的层为隐藏层,最后一层为输出层。MLP并没有规定隐藏层的数量,因此可以根据实际处理需求选择合适的隐藏层层数,且对于隐藏层和输出层中每层神经元的个数也没有限制。
多层感知机的关键问题在于如何训练其中各层间的连接权值,
方法有一些不过大家最熟知的就是反向传播BP算法了。
反向传播算法的具体推导涉及大量的公式,实在不适合在公众里写,因此我们就不写了,大家随便找一本书都能找到资料,勤快的可以自己推导一遍。
这里给大家一个实际的案例来体会:
输出为y,损失函数为E。
假如某一时刻值如下:
那么我们可以计算E对Wh1的误差传播值为:
下次更新Wh1这个参数的时候就可以采用:
η就是学习率了,原理就是这样,一层一层推导下去就行了。
反向传播算法让多层感知器,或者说传统的全连接神经网络有了训练的手段,引发了神经网络的第二次热潮,虽然为期不长,毕竟当时算力和数据都很有限,但是全连接神经网络总算是正式起来了。
传统的BP神经网络在20世纪80年代左右流行,但是很快因为SVM等核方法的诞生而黯然失色。这是因为传统的BP神经网络有几个重大的缺陷。
(1) 首先是原理上的缺陷:BP神经网络仍然是有监督的传统机器学习方法,遵循着以下思路。
也就是说,不过是在最后面将SVM或者其他分类器换成神经网络,在大部分情况下其实没有什么优势,甚至增加了问题的复杂度。
提取的特征虽然是研究者们经过反复实验证明有效的特征,但仍然会一定程度上丢失了图像中的结构信息,从而丢失了一些对旋转扭曲等的不变性。而且要求输入的大小是固定的。为了学习到如偏移等微小的变化,需要有足够多的参数和足够多丰富的样本,最终学习到的权重,很可能在不同的位置处还会有非常相似的权重。
有人可能会说,直接把图像作为输入而不提取特征行不行?请接着往下看。
(2) 再一个就是结构上的缺陷:参数巨多,丢失空间信息。
全连接神经网络从BP算法提出开始,发展于90年代,那时候的计算机属于CPU时代,根本就无法撑起海量参数的计算。
如果一个隐藏层特征图像大小为100*100,输入层的特征图像大小为100*100,这意味着学习这一层需要100*100*100*100=10^8的参数。如果以32位的浮点数进行存储,就需要4*108的字节的存储量,约等于400MB的参数量。仅仅这样的一个网络层,其模型参数量已经超过了AlexNet网络的参数量,而100*100的特征图像分辨率,已经低于很多任务能够成功解决的下限。除了计算过程中需要存储的海量的参数,还有海量的计算,这些都超过了当时硬件的能力,因此大大限制了网络的大小,尤其是对于一些大的图像输入。
不管是历史局限性也好,还是神经网络有种种毛病,总之80年代后的20年间它不是主流。
不过在上个世纪90年代研究神经网络的学者们没有停止,经典的诸如LeNet5这样的网络被提出。
为什么是卷积神经网络呢?首先自然是要知道什么是卷积神经网络。
1,什么是卷积?
卷积在工程和数学上有非常多的应用,在信号处理领域中,任意一个线性系统的输出,就是输入信号和系统激励函数的卷积。放到数字图像处理领域,卷积操作一般指图像领域的二维卷积。
一个二维卷积的案例如上,在图像上滑动,取与卷积核大小相等的区域,逐像素做乘法然后相加。
例如原始图像大小是5*5,卷积核大小是3*3。首先卷积核与原始图像左上角3*3对应位置的元素相乘求和,得到的数值作为结果矩阵第一行第一列的元素值,然后卷积核向右移动一个单位(即步长stride为1),与原始图像前三行第2、3、4列所对应位置的元素分别相乘并求和,得到的数值作为结果矩阵第一行第二列的元素值,以此类推。
故卷积就是:一个核矩阵在一个原始矩阵上从上往下、从左往右扫描,每次扫描都得到一个结果,将所有结果组合到一起得到一个新的结果矩阵。
注意这里我们不区分卷积和互相关,它们的区别只在于权重算子是否进行了翻转。之所以不重视,是因为在机器学习中,卷积核是否翻转,并不影响算法学习。
2,为什么要用卷积来学习呢?
图像都是用方形矩阵来表达的,学习的本质就是要抽象出特征,以边缘检测为例。它就是识别数字图像中亮度变化明显的点,这些点连接起来往往是物体的边缘。
传统的边缘检测常用的方法包括一阶和二阶导数法,本质上都是利用一个卷积核在原图上进行滑动,只是其中各个位置的系数不同,比如3*3的sobel算子计算x方向的梯度幅度,使用的就是下面的卷积核算子。
如果要用sobel算子完成一次完整的边缘检测,就要同时检测x方向和y方向,然后进行融合。这就是两个通道的卷积,先用两个卷积核进行通道内的信息提取,再进行通道间的信息融合。
这就是卷积提取特征的本质,而所有基于卷积神经网络来学习的图像算法,都是通过不断的卷积来进行特征的抽象,直到实现网络的目标。
3,卷积神经网络的优势在哪?
前面说了全连接神经网络的原理和结构上的缺陷,而这正好是卷积的优势。
(1) 首先是学习原理上的改进,卷积神经网络不再是有监督学习了,不需要从图像中提取特征,而是直接从原始图像数据进行学习,这样可以最大程度的防止信息在还没有进入网络之前就丢失。
(2) 另一方面是学习方式的改进。前面说了全连接神经网络一层的结果是与上一层的节点全部连接的,100×100的图像,如果隐藏层也是同样大小(100*100个)的神经元,光是一层网络,就已经有 10^8 个参数。要优化和存储这样的参数量,是无法想象的,所以经典的神经网络,基本上隐藏层在一两层左右。而卷积神经网络某一层的结点,只与上一层的一个图像块相连。
用于产生同一个图像中各个空间位置像素的卷积核是同一个,这就是所谓的权值共享。对于与全连接层同样多的隐藏层,假如每个神经元只和输入10×10的局部patch相连接,且卷积核移动步长为10,则参数为:100×100×10×10,降低了2个数量级。
又能更好的学习,参数又低,卷积神经网络当然是可以成功了。
在卷积神经网络中,有几个重要的基本概念是需要注意的,这在网络结构的设计中至关重要。
(1) 感受野
直观上讲,感受野就是视觉感受区域的大小。在卷积神经网络中,感受野是CNN中的某一层输出结果的一个元素对应输入层的一个映射,即feature map上的一个点所对应的输入图上的区域,具体示例如下图所示。
如果一个神经元的大小是受到上层N*N的神经元的区域的影响,那么就可以说,该神经元的感受野是N*N,因为它反映了N*N区域的信息。在上图conv2中的像素点5,是由conv1的2*2的区域计算得来,而该2*2区域,又是由raw image中5*5的区域计算而来,所以,该像素的感受野是5*5。可以看出感受野越大,得到的全局信息越多。在物体分割,目标检测中这是非常重要的一个参数。
(2) 池化
有了感受野再来解释池化(pooling)也很简单,上图的raw image到conv1,再到conv2,图像越来越小。每过一级就相当于一次降采样,这就是池化。池化可以通过步长不为1的卷积实现,也可以通过pool直接插值采样实现,本质上没有区别,只是权重不同。
通过卷积获得了特征之后,下一步则是用这些特征去做分类。理论上讲,人们可以把所有解析出来的特征关联到一个分类器,例如softmax分类器,但计算量非常大,并且极易出现过度拟合(over-fitting)。而池化层则可以对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。
一般而言池化操作的池化窗口都是不重叠的,所以池化窗口的大小等于步长stride。如下图所示,采用一个大小为2*2的池化窗口,max pooling是在每一个区域中寻找最大值,这里的stride=2,最终在原特征图中提取主要特征得到右图。
除此之外,还有卷积核的大小,卷积的步长,通道的边界填充值等等,都是很好理解的基本概念,有一些以后会进行更加详细的剖析。
这一次就说到这,希望大家从此对神经网络和卷积神经网络(CNN)的基础概念不再有疑问。