走在大街上,人脑可以轻易地辨认出哪个是猫哪个是狗。尽管是差别很大的两只猫,小孩也能轻易地辨认出它们都属于猫。人类大脑视觉处理区域能很快地从少量图像中学到一类事物的特征,并在以后碰到其他图像时处理成相同的信息。
深度学习就是一项模仿人类大脑的机器学习技术。模拟神经元接受信号,处理信息,再输出信息的过程,去学习样本数据的内在规律,对更多样本进行分类和预测。比如人脸识别,首先检测一副图片上是否包含一些特征,再从低层到高层逐步探索出更精细复杂的特征。传统的浅层学习是让人来提取特征,机器负责分类和预测。而深度学习最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。
神经网络是深度学习的一种方式。
如今关于神经网络的研究呈爆发式增长,比如适合图像识别的卷积神经网络,适合语音识别的长短期记忆网络。而最经典的是多层感知器(MLP),下面简单介绍。
将一副图像理解为几百个几千个呈现不同颜色的像素的集合。用一个值来表示颜色的不同,比如纯白就是1.00,纯黑就是0,我们称这些数字为‘激活值’。把所有这些像素排列成一条直线,就组成了神经网络的第一层。而最后一层就是需要输出的结果:0到9的十个数字。
这十个也有自己的激活值,代表着被输出的可能性。中间则有很多隐藏层。神经网络最关键的运算就是上一层的激活值怎样决定下一层的激活值,就像上一个神经元的激发,会怎样让下一个神经元被激发。
人类识别数字往往是把数字拆分成几个部分去识别,所以我们希望倒数第二层能输出拆分的这些部件,这些部件按照激活值拼凑在一起或许就能得到我们想要输出的数字了呢。而在倒数第三层,我们继续把部件拆分成更小的部件,比如几条短边。
给第一层每个像素赋予一个权重,w1,w2,w3,w4......,求第一层所有激活值的加权和(w1a1+w2a2+w3a3+.......+wnan)。如果想要识别一条短边,就给短边周围的像素赋予负的权重,给短边自己的像素赋予正的权重,这样加权和就能达到最大。
加权和是任意大小的数,但我们希望下一层激活值仍然在0到1范围内。这时候需要一个函数将加权和映射到0到1 之间,就是逻辑斯蒂曲线。再加一个偏置值,让它达到你规定的加权和之后才会激发:在加权和后面加一个负数即可。每两层之间都有自己的偏置和权重参数。
人工手动调节这些参数太麻烦,我们希望网络设计一个算法,在神经网络训练大量数据时算法去调整这些参数。一开始因为参数不准确,神经网络输出的结果会很糟糕,而代价函数会告诉你输出结果的糟糕程度(求差的平方和)。下一步就是让代价函数的值最小化。怎样求一个有成千上万个参数的函数的最小值呢?随便挑一个值,看看往哪个方向移动下降最快(沿函数梯度的负方向走),最后一定会逼近一个局部最小值。这个算法称为反向传播算法。每训练一个样本数据,权重和偏置值就更新一次,结果也会越来越接近真实结果。但实际深度学习算法中,每一层识别的不是那么理想的有形状的短边,而是没什么规律的图。
BP算法是神经网络的核心,利用它才实现了真正超越基于人工规则的系统。才能让机器自己从大量训练样本中学习出规律,对接下来进行预测。但BP算法也有一些问题,比如梯度越来越稀疏,容易收敛到局部最小值,只能训练有标签的数据。
2006年之前纽约大学提出卷积神经网络,接下来,基于自编码的深度学习网络,基于稀疏编码的深度学习网络相继提出。2011年,微软和谷歌提出用DNN技术降低语音识别错误。2012年,DNN技术在图像识别领域也取得惊人的突破。
语音,图像,自然语言处理是深度学习算法应用最广泛的三个领域。它可以识别手写体,识别人脸,识别大规模图像数据集,视频分类,从原音频种识别出特殊的声音。世界上各种人工智能任务,其实都可以像神经网络一样一层层拆分。2013年百度成立首个研究院,其中重点方向就是深度学习。可以说,深度学习是机器学习的新浪潮。