AI、深度学习与计算机视觉
- 格式:pdf
- 大小:2.78 MB
- 文档页数:41
AI、深度学习与计算机视觉筑博智慧建筑研究中心1.前言人工智能的兴起、人工智能技术的突破给人类社会带来了深刻的变革,人工智能是犹如内燃机一样的“使能”技术,具有赋能其他技术的潜力。中国拥有世界最大的人口数量、市场容量、多维度的数据资源,人工智能的发展潜力得天独厚。然而,由于人工智能的原理涉及认知科学、数学、神经生理学、心理学、计算机科学、信息论、控制论等众多学科,其相关论文论著等又涉及大量的专业术语、数学公式、程序代码和外语,往往让人视为畏途、高不可及。本文旨在为有志于了解与学习人工智能的读者搭建一条栈道,助力登攀。计算机视觉是人工智能最重要和最成功的领域,因此本文以此为切入点。2.如何训练机器去学习2.1电脑与人脑传统上如果我们想让计算机工作,我们给它一串指令,然后它遵照这个指令一步步执行下去。有因有果,非常明确。但这样的方式在机器学习中行不通。机器学习接受的并不是你输入的指令,相反,它接受你输入的数据!也就是说,机器学习是一种让计算机利用数据而不是指令来进行各种工作的方法。这听起来非常不可思议,但结果上却是可行的。相关而不是因果的概念将是支撑机器学习能够工作的核心概念。机器学习与人类思考的经验过程是类似的,不过它能考虑更多的情况,执行更加复杂的计算。事实上,机器学习的一个主要目的就是把人类思考归纳经验的过程转化为计算机通过对数据的处理计算得出模型的过程。经过计算机得出的模型能够以近似于人的方式解决很多灵活复杂的问题。首先,我们需要在计算机中存储历史的数据。接着,我们将这些数据通过机器学习算法进行处理,这个过程在机器学习中叫做“训练”,处理的结果可以被我们用来对新的数据进行预测,这个结果一般称之为“模型”。对新数据的预测过程在机器学习中叫做“预测”。“训练”与“预测”是机器学习的两个过程,“模型”则是过程的中间输出结果,“训练”产生“模型”,“模型”指导“预测”。人类在成长、生活过程中积累了很多的历史与经验。人类定期地对这些经验进行“归纳”,获得了生活的“规律”。当人类遇到未知的问题或者需要对未来进行“推测”的时候,人类使用这些“规律”,对未知问题与未来进行“推测”,从而指导自己的生活和工作。
机器学习中的“训练”与“预测”过程可以对应到人类的“归纳”和“推测”过程。通过这样的对应,我们可以发现,机器学习的思想并不复杂,仅仅是对人类在生活中学习成长的一个模拟。由于机器学习不是基于编程形成的结果,因此它的处理过程不是因果的逻辑,而是通过归纳思想得出的相关性结论。
图1机器学习与人类学习比较2.2神经元我们模仿人类大脑,把人工神经网络看成是一种运算模型,由大量的节点(或称神经元)相互连接构成。一个生物的神经元通常具有多个树突,主要用来接受传入信息;而轴突只有一条,轴突尾端有许多轴突末梢可以向其他多个神经元传递信息。轴突末梢与其他神经元的树突产生连接,从而传递信号。该连接紧密程度是动态可变的,可称之为权重。近似地,我们可以用著名的“艾宾浩斯遗忘曲线”去理解,轴突与树突连接因信号传递而被激活,轴突与树突之间信号传递越频密则权重逐渐提高,反之则逐渐降低。人工神经网络的每个节点(神经元)代表一种特定的输出函数。每两个节点间的连接都代表一个通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出根据网络的连接方式、权重值和激励函数的不同而不同。神经元是人工神经网络的基本单元,是一个包含输入、输出与计算功能的模型。输入可以类比为神经元的树突,输出可以类比为神经元的轴突,而计算则可以类比为细胞核。图2所示的是一个典型的神经元模型:包含3个输入,1个输出,以及2个计算功能。注意中间的箭头线,这些线称为“连接”,每条连接线上都有一个“权重值”。
图2简单神经元如图3所示,一个神经网络的训练算法就是让权重的值调整到最佳,以使得整个网络的预测(或者分类)效果最好。4
图3训练网络激活函数我们知道在未加激活函数之前,基本神经元的输出值是各输入值的线性函数,其功能可以近似的理解为对输入数据的简单线性分类(在二维平面中体现为由一条分割线将二类数据分隔开;多维空间中体现为采用超平面(体)将不同类型的数据分隔)。然而,现实中的数据往往是非线性可分的。激活函数的引入使得简单神经元整体具备非线性特征,从而具备对输入数据的非线性处理能力。常用的激活函数包括Sigmoid函数和线性整流函数ReLU(RectifiedLinearUnit),近几年使用Sigmoid函数的人已经越来越少,主要原因是sigmoid函数会造成梯度消失。ReLU是目前应用较为广泛的激活函数,其优点为在随机梯度下降的训练中收敛很快,在输入为正数的时候,不存在梯度饱和问题,ReLU函数只有线性关系,不管是前向传播还是反向传播都比Sigmoid函数要快很多。图4Relu函数的图像和求导后的图像ReLU函数其实是分段线性函数,其表达式非常简单,就是y=max(x,0)。把所有的负值都变为0,而正值不变,这种操作被成为单侧抑制。(也就是说:在输入是负值的情况下,它会输出0,那么神经元就不会被激活。这意味着同一时间只有部分神经元会被激活,从而使得网络很稀疏,进而对计算来说是非常有效率的。)正因为有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性。2.3人工神经网络介绍完神经元我们再来看神经网络。
图5人工神经网络的构成上图中最左边的原始输入信息称之为输入层,最右边的神经元称之为输出层(上图中输出层只有一个神经元),中间的叫隐藏层。输入层(Inputlayer),众多神经元(Neuron)接受大量非线形输入讯息。输入的讯息称为输入向量。输出层(Outputlayer),讯息在神经元链接中传输、分析、权衡,形成输出结果。输出的讯息称为输出向量。隐藏层(Hiddenlayer),简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。如果有多个隐藏层,则意味着多个激活函数。在神经网络中,每个处理单元事实上就是一个逻辑回归模型(线性回归+sigmoid激活函数=逻辑回归),逻辑回归模型接收上层的输入,把模型的预测结果作为输出传输到下一个层次。通过这样的过程,神经网络可以完成非常复杂的非线性分类。事实上,神经网络的本质就是通过参数与激活函数来拟合特征与目标之间的真实函数关系。那么对深度神经网络而言,增加更多的层次有什么好处?答案是更深入的表示特征,以及更强的函数模拟能力。更深入的表示特征可以这样理解,随着网络的层数增加,每一层对于前一层次的抽象表示更深入。在神经网络中,每一层神经元学习到的是前一层神经元值的更抽象的表示。例如,在进行图像处理的深度神经网络中,第一个隐藏层学习到的是“边缘”的特征,第二个隐藏层学习到的是由“边缘”组成的“形状”的特征,第三个隐藏层学习到的是由“形状”组成的“图案”的特征,最后的隐藏层学习到的是由“图案”组成的“目标”的特征。通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。更强的函数模拟能力是由于随着层数的增加,整个网络的参数就越多。而神经网络其实本质就是模拟特征与目标之间的真实关系函数的方法,更多的参数意味着其模拟的函数可以更加的复杂,可以有更多的容量(capcity)去拟合真正的关系。然而,随着神经网络层数的增加,参数也增加了,在表示能力大幅度增强的同时,很容易出现过拟合现象,这点我们将在后续探讨。2.4模型训练构建神经网络之后,还需教导它如何工作。机器学习模型训练的目的,就是使得参数尽可能的与真实的模型逼近。具体做法是这样的,首先给所有参数赋上随机值,我们使用这些随机生成的参数值,来预测训练数据中的样本。一般来说解决这个优化问题使用的是梯度下降算法。梯度下降算法每次计算参数在当前的梯度,然后让参数向着梯度的反方向前进一段距离,不断重复,直到梯度接近零时截止。一般这个时候,所有的参数恰好达到使损失函数达到一个最低值的状态。梯度下降法的基本思想可以类比为一个下山的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;
图6.梯度下降法示意(二维与三维)在神经网络模型中,由于结构复杂,每次计算梯度的代价很大,因此还需要使用反向传播算法。反向传播算法是利用了神经网络的结构进行的计算。不一次计算所有参数的梯度,而是从后往前。首先计算输出层的梯度,然后是第二个参数矩阵的梯度,接着是中间层的梯度,再然后是第一个参数矩阵的梯度,最后是输入层的梯度。计算结束以后,所要的两个参数矩阵的梯度就都有了。优化问题只是训练中的一个部分。机器学习问题之所以称为学习问题,而不是优化问题,就是因为它不仅要求数据在训练集上求得一个较小的误差,在测试集上也要表现好。因为模型最终是要部署到真实数据场景。提升模型在测试集上的预测效果的主题叫做泛化(generalization),相关方法被称作正则化(regularization)。神经网络中常用的泛化技术有数据集扩增、dropout(节点失活)、正则化(Regularization)包括L1、L2正则化(L2regularization也叫权重衰减)等。一般来说更多神经元的神经网络可以表达更复杂的函数。然而这既是优势也是不足,优势是可以分类更复杂的数据,不足是可能会造成对训练数据的过拟合。过拟合(Overfitting)是指网络对数据中的噪声有很强的拟合能力,过度重视细节和特例。过拟合的后果就是使得训练模型丧失了泛化能力(对实际数据的适应性),因而丧失了正确处理能力。在图像处理领域,数据集扩增常用方法包括图像旋转、缩放、平移、镜像、亮度变化等;正则化会给所有参数乘以一个系数,共同计算损失函数,为了避免损失函数过高,模型参数的数量、数值都会缩小;节点失活(Dropout)(见图7)指的是在训练过程中,每次更新参数时将会随机断开一定百分比的输入神经元。而这里使用Dropout随机断开连接,就等于是削减了参数的数量,这种方式可以用于防止过拟合。
图7节点失活示意