前言
初入学习人工智能领域,为方便对该领域有一个快速清晰的认识,因此收集了相关资料并整理了各位前辈们在此领域的研究现状。由浅入深、循序渐进理解什么是深度学习和神经网络,二者的联系和区别是什么,以及什么是人工神经网络、卷积神经网络等。无需技术背景也可以有一个比较全面清晰的认识。同时也介绍一下TensorFlow、Caffe、Pytorch等深度学习框架和目前工业界深度学习应用比较广的领域。
1. 人工智能、机器学习、深度学习
在介绍深度学习之前,先和大家介绍一下AI和Machine Learning,才能理清AI、Machine Learning、Deep Learning三者之间的关系。
1.1 人工智能是什么
1956年8月,在美国汉诺斯小镇的达特茅斯学院中,几位科学家在会议上正式提出“人工智能”这一概念,这一年也被称为人工智能元年。在此之前,人类已经制造出各类各样的机器如汽车、飞机等,但这些机器都需要经过人来操作使用,无法自己具备操作的能力。科学家探讨能不能制造出一个可以像人类大脑的一样思考的机器,拥有人类的智慧,这就是人工智能。同时科学家们也对AI未来的发展畅想了三个阶段:
大家在电影上看到的各种AI都是强人工智能,但目前我们仍处在弱人工智能阶段,什么时候进入强人工智能阶段未知。强人工智能阶段,机器可以完美媲美人脑,像人类一样有情感地、批判性地去思考。同时可以快速学习,拥有极强的自学能力。
那么如何实现人工智能,实现人工智能的方法是什么?
1.2 机器学习是什么
实现人工智能的方法我们统称为“机器学习”。同样是1956年的美国达特茅斯会议上,IBM的工程师Arthur Samuel正式提出“Machine Learning”这个概念,1956年真的是特殊的一年。
机器学习既是一种实现AI的方法,又是一门研究如何实现AI的学科,你可以理解为和数学、物理一样的学科。机器学习,简单来说就是从历史数据中学习规律,然后将规律应用到未来中。国内大家一致推荐的,南京大学周志华教授的机器学习教材西瓜书里面如此介绍机器学习。
机器学习是机器从历史数据中学习规律,来提升系统的某个性能度量。其实人类的行为也是通过学习和模仿得来的,所以我们就希望计算机和人类的学习行为一样,从历史数据和行为中学习和模仿,从而实现AI。
简单点讲,大家从小到大都学习过数学,刷过大量的题库。老师和我们强调什么?要学会去总结,从之前做过的题目中,总结经验和方法。总结的经验和方法,可以理解为就是机器学习产出的模型,然后我们再做数学题利用之前总结的经验和方法就可以考更高的分。有些人总结完可以考很高的分,说明他总结的经验和方法是对的,他产出的的模型是一个好模型。
既然有了机器学习这一方法论,科学家们基于这一方法论,慢慢开始提出各类各样的算法和去解决各种“智能”问题。就像在物理学领域,物理学家们提出各种各样的定理和公式,不断地推动着物理学的进步。牛顿的三大定律奠定了经典力学的基础。而传统机器学习的决策树、贝叶斯、聚类算法等奠定了传统机器学习的基础。
1.3 深度学习是什么
但是随着研究的不断深入,传统机器学习算法在很多“智能”问题上效果不佳,无法实现真正的“智能”。就像牛顿三大定律,无法解释一些天文现象。在1905年,爱因斯坦提出“相对论”,解释了之前牛顿三大定律无法解释的天文现象。同样2006年,加拿大多伦多大学教授Geoffrey Hinton对传统的神经网络算法进行优化,在此基础上提出了Deep Neural Network的概念,他们在《Science》上发表了一篇Paper,引起Deep Learning在学术界研究的热潮。(paper原文:http://www.cs.toronto.edu/~hinton/science.pdf)
2012年Geoffrey Hinton老爷子的课题组,在参加业界知名的ImageNet图像识别大赛中,构建的CNN网络AlexNet一举夺得冠军,且碾压第二名(SVM方法)。也正是因为该比赛,Deep Learning引起了工业界的关注,迅速将Deep Learning引进到工业界的应用上。深度学习技术解决了很多传统机器学习算法效果不佳的“智能”问题,尤其是图片识别、语音识别和语义理解等。某种程度上,深度学习就是机器学习领域的相对论。
将人工智能和机器学习带到一个新高度的技术就是:Deep Learning。深度学习是一种机器学习的技术。
同时大家应该听到过一大堆的“学习”名词:机器学习、深度学习、强化学习等等。在这里面机器学习是“爸爸”,是父节点;其他都是它“儿子”,是子节点。AI、Machine Learning和Deep Learning的关系可以通过下图进行描述。
让机器实现人工智能是人类的一个美好愿景,而机器学习是实现AI的一种方法论,深度学习是该方法论下一种新的技术,在图像识别、语义理解和语音识别等领域具有优秀的效果。
那么深度学习到底是一门什么技术?“深度”到底代表什么?
2. 深度学习与神经网络
2.1 生物神经网络
介绍深度学习就必须要介绍神经网络,因为深度学习是基于神经网络算法的,其实最开始只有神经网络算法,上文也提到2006年Geoffrey Hinton老爷子提出Deep Learning,核心还是人工神经网络算法,换了一个新的叫法,最基本的算法没有变。学过生物的都知道神经网络是什么?下图是生物神经网络及神经元的基本组成部分。
人类的大脑可以实现如此复杂的计算和记忆,就完全靠900亿神经元组成的神经网络。那么生物神经网络是如何运作的?可以参照下图:
通过神经元接收外界信号,达到一定阈值,触发动作电位,通过突触释放神经递质,可以是兴奋或抑制,影响突触后神经元。通过此实现大脑的计算、记忆、逻辑处理等,进行做出一系列行为等。同时不断地在不同神经元之间构建新的突触连接和对现有突触进行改造,来进行调整。有时候不得不感叹大自然的鬼斧神工,900亿神经元组成的神经网络可以让大脑实现如此复杂的计算和逻辑处理。
2.2 深度学习概述
深度学习(Deep Learning)最早是由 Hinton 等在2015年提出的概念,深度学习作为机器学习的一种,能够胜任许多复杂的任务。它从提出至今已经有了长足的发展,在各个领域和学科有广泛的应用(侯宇青阳等,2017)。
深度学习可以从广泛的数据中提取特征进行学习,典型的应用有文字识别,语音识别和图像识别,各种新的深度学习网络层出不穷,各个领域的应用也逐渐成熟。在实际应用领域,“深度学习”这一名词指的是训练神经网络,使其学习特征并完成不同任务,而神经网络这一结构也出现了各种各样的分支,但万变不离其宗,神经网络的基本结构和原理总体没有太大变化。作为深度学习的起源,人工神经网络经过了长时间的发展,经过了低谷和高潮发展期,随后出现了卷积神经网络,彻底的改变了深度学习领域的格局。
2.3 人工神经网络
科学家们从生物神经网络的运作机制得到启发,构建了人工神经网络。其实人类很多的发明都是从自然界模仿得来的,比如飞机和潜艇等。下图是最经典的MP神经元模型,是1943年由科学家McCulloch和Pitts提出的,他们将神经元的整个工作过程抽象为下述的模型。
x_1,x_2,x_3,x_n:模拟生物神经网络中来自其他神经元的输入;
ω_1,ω_2,ω_3,ω_n:模拟生物神经网络中每个神经元对外接收的突触强度不同,所以外界接收的输入乘以一定权重;
Σ-Sum:模拟生物神经网络中神经元对外接收的信号进行累加汇总;
Bias:模拟生物神经网络中神经元的一般敏感性。每个神经元的敏感性不同,所以需要一定的偏差来调整汇总值;
Activation Function:模拟生物神经网络中信号累积到一定程度产生的动作电位,当累积到一定程度就会“激活”动作电位。实际使用时我们一般使用Sigmoid函数;
Output:模拟生物神经网络中神经元对外释放的新的信号;
现在我们知道了最简单的神经元模型,我们该如何使用该模型从历史数据中进行学习,推导出相关模型?
人工神经网络(Artificial Neural Network)是模拟人脑神经细胞工作原理所构造的网络结构,人工神经网络自上世纪 80 年代以来兴起,成为人工智能领域的热点。
人工神经网络仿照人脑神经系统的工作方式,利用数学模型对神经网络进行抽象化表述,按照不同的方式将其相连接,构建复杂网络。人工神经网络与人类神经相似,是由人工神经元组成的。
2.3.1 人工神经元
人工神经元这一概念是由美国神经生理学家Mcculloch和数学家Pitts在1943年提出的,他们提出的人工神经元模型叫做 M-P 神经元(Mcculloch et al.,1943)。人工神经网络的结构为大量神经元相互连接构成,其中的每个神经元被称为一个节点,神经元是人工神经网络中的最小单位。M-P 神经元的结构下图所示:
图:M-P神经元结构 由上图可以看出 M-P 人工神经元的输入为来自不同神经元的信号 x1,x2和x3,通过神经元的两个函数 g(x)和f(x)进行计算,最后将结果 y进行输出。
人工神经网络中每一个神经元都有着特定的计算函数和输出函数,这两个函数分别叫做整合函数(Combination Function)和激活函数(Activation Function),其中整合函数把来自不同神经元的输入值进行整合计算变为一个综合信号,然后通过激活函数将综合信号进行计算,产生激活信号并将其输出。
目前常用的整合函数主要分为加权求和型函数(Weight Sum Function),此函数被广泛的应用在整合函数中。它将输入值按照不同的权值进行加权求和。计算完成后的结果要经过激活函数的激活,常用的激活函数有阈值函数(Threshold Funtion),线性函数(Linear Function),逻辑 S 型函数(Logistic Sigmoid Function)和线性修正单元函数(Rectified Linear Unit Function),激活函数的目的为对整合函数的结果进行计算生成反馈输出值,将线性关系转化为非线性关系。
7
由图1可以看出 M-P 人工神经元的输入为来自不同神经元的信号 x1,x2和x3,通
过神经元的两个函数 g(x)和f(x)进行计算,最后将结果 y进行输出。
人工神经网络中每一个神经元都有着特定的计算函数和输出函数,这两个函数分别
叫做整合函数(Combination Function)和激活函数(Activation Function),其中整合函数
把来自不同神经元的输入值进行整合计算变为一个综合信号,然后通过激活函数将综合
信号进行计算,产生激活信号并将其输出。
目前常用的整合函数主要分为加权求和型函数(Weight Sum Function),此函数被广
泛的应用在整合函数中。它将输入值按照不同的权值进行加权求和。计算完成后的结果
要经过激活函数的激活,常用的激活函数有阈值函数(Threshold Funtion),线性函数
(Linear Function),逻辑 S 型函数(Logistic Sigmoid Function)和线性修正单元函数
(Rectified Linear Unit Function),激活函数的目的为对整合函数的结果进行计算生成反
馈输出值,将线性关系转化为非线性关系。
2.3.2 人工神经网络模型
神经网络是由神经元相互连接组成的网络,在人工神经网络中根据人工神经元不同的连接方式和信息传递的路径,人工神经网络大致分为两种类型,他们是前馈神经网络(Feedforward Neural Network)和反馈神经网络(Feedback Neural Network)。
在前馈神经网络中,不存在信息的回路,信息的传输是逐层向前的,从前一层神经元到下一层神经元直至输出,在此过程中包括跨层传递,但是不存在信息回流的情况。
而在反馈神经网络中,信息的传递是有回路的,信息可以由输出的位置传递回输入位置。
(1)前馈神经网络
前馈神经网络的结构明了,各层神经元排列规则,每层神经元只接收来自上一层输入值或神经元的输入,只把自己的输出传递给下一层神经元或输出结果,每一层不会收到后续层的反馈信号。前馈神经网络发展较早,由于其结构简单,逻辑性很强,发展速度较快,并且在多种场景都得到了广泛应用。最早的前馈神经网络为Frank Rosenblatt 提出的感知机,它就是一种简单的前馈神经网络。前馈神经网络是一种典型的单向结构,如果将整个前馈网络看作一个整体,那么它就是一个只包含一次处理的包含输入输出的结构。前馈神经网络根据隐含层的数量分为单层前馈网络和多层前馈网络,单层前馈神经网络只包含一个隐含层,神经元之间不存在跨层连接,输入信息经过隐含层直接进入输出层处理输出。而多层前馈神经网络有多个隐含层,多层前馈神经网络中存在跨层传输,多层前馈神经网络的结构如下图所示。
图 多层前馈神经网络
由上图可知前馈神经网络结构较为简单,但是通过多层神经元的非线性处理,前馈神经网络有很强的学习能力,可以处理复杂的非线性问题。常见的前馈神经网络有反向传播(Back Propagation)网络,径向基函数(Radial Basis Function)网络和感知机(Perceptron)等。
(2)反馈神经网络
反馈神经网络是一种网络结构中存在回路的神经网络,因为回路的存在使得其结构相比前馈神经网络更加复杂。在反馈神经网络中每一层的输出都可以作为前置神经元的输入,根据此特性反馈神经网络可以根据下层的输出来对本层或上层的参数进行调整,具有很强的优化计算能力。反馈神经网络的构如下图所示。根据下图可知在反馈神经网络中有着反向的数据传递,每层神经元可根据输出和输入的信息进行权值调整等工作,因此反馈神经网络在进行学习时可以不断的对自身的神经元进行调整,使其适合不同的任务,由此反馈神经网络的适应能力较强。但由于反馈神经网络结构中环路的存在,需要给反馈神经网络设置一个结束点或平衡点,即反馈神经网络的某输出达到一定要求后停止后层神经元对前层的反馈,将最终结果输出并结束网络的运行。常见的反馈神经网络有 Jeffrey L. Elman 提出的Elman网络(Elman,1990)和 John J. Hopfield等提出的 Hopfield网络(Hopfield et al.,985),其中 Elman网络的结构类似多层前馈神经网络,但它在隐含层中加了一个承接层,它可以将网络当前时刻隐含层的输出记录,经过延迟后反馈到隐含层的输入;在Hopfield网络中,每一个神经元都是跟其他神经元相互连接的,整个网络处在全连接状态,一个神经元的输出会反馈回它的输入位置,整个网络处在不断的变化中,若整个网络处于逐渐收敛状态,最终它会达到动态平衡,此时的输出值就是稳定的输出。
2.3.3人工神经网络原理
人工神经网络因为其对复杂问题的较好适应性和学习能力,在各个领域广泛应用。
人工神经网络的神经元结构决定了非线性问题的处理能力,相较于之前的信息处理方法有了很大的进步,随着科技的不断发展人工神经网络与其他技术逐渐结合有了更深层次的应用。人工神经网络的主要功能是建立解决实际问题的模型,而具体到神经元的角度就是不断地优化神经元的权值。
人工神经网络的第一步工作就是进行训练,在此步骤中需要的训练数据为输入输出一一对应的,网络根据输入输出信息调整自身的神经元权值,使其不断收敛,直至输出最终模型。但在实际的任务中,有些数据是无法给出确定输出值的,这时需要人工神经网络根据输入和给定的规则进行学习。
在上述叙述中,给定输入输出数据,让网络进行学习的方法叫做有监督学习(Supervised Learning);而只给定输入数据,再给网络提供学习规则的方法叫做无监督学习(Supervised Learning)。
在有监督学习任务中,最常见的任务是分类和回归。在分类任务中,首先要把分类数据进行分类,每种分类对应不同的标签,将多个分类标签和分类数据作为输出和输入值训练网络,网络在训练过程中会不断通过调整网络权值而找到所给数据和特征标签之间的关系,并向此关系不断收敛,最终给出可以解释分类数据和标签之间的合理模型。
前苏联学者Vaonik 等提出的支持向量机(Support Vector Machine)是一种有监督学习网络,它是一种可靠的线性分类方法,通过学习训练数据和分类标签,支持向量机会生成一个超平面,以此对数据进行分类(Vaonik et al.,1963)。而在回归任务中,人工神经网络需要根据给定的输入数据和输出数据计算最佳的映射算法,使输入数据能很好的映射到输出数据上。
无监督学习在处理分析聚类问题中广为应用,无监督学习需要训练数据和给定的规则进行训练,网络根据数据和规则学习数据之间的联系,网络不断收敛直至输出最佳的预测模型,使其符合给定规则。
在无监督学习中最重要的一条学习规则莫过于 Hebb 等提出的 Hebb 学习规则,它的具体内容为根据网络神经元的输入和输出值来调整神经元权值。按照此规则学习的网络能对数据进行分类,根据对不同数据的认识程度划分类别,此特点与人类的认识能力非常相似。无监督学习的典型应用就是聚类,典型的聚类算法有K均值聚类算法(K-means clustering algorithm),它的规则为计算数据之间的欧氏距离,欧氏距离小的说明两个数据是一类,根据此规则不断计算数据之间的距离,直至完成所有数据的分类。
人工神经网络为仿照神经系统的工作方式抽象出的人工网络结构,并且具有自适应和自学习功能,但在理论和技术的不断发展中,传统人工神经网络的缺点逐渐显现,例如无法有效处理大规模数据,处理时间过长,而且随着网络程度的加深会出现局部优化和梯度消失问题。2006 年 Hinton 等将人工神经网络的深度加到了 7 层,深度网络的概念产生(Hinton et al.,2006),卷积神经网络也由深度学习网络的发展得到了快速发展。
2.4 卷积神经网络概述
卷积”(convolution)一词是分析数学中的一种运算,是一种积分变换的方法,使用卷积计算的神经网络就叫做卷积神经网络(Convolutional Neural Network,CNN)。
卷积神经网络大致在上世纪 80 年代起源,1980 年日本学者 Kunihiko Fukushima 提出了Neocognitron 模型(Fukushima,1980),他构造了一个具有特征提取能力的深度神经网络,此网络的功能与卷积神经网络类似,因此被认为是卷积神经网络研究的开始。1987年Alexander Waibel 等提出了时间延迟神经网络(Waibel et al.,1987),是第一个是真正意义上的卷积神经网络。在此之后不断有新的卷积神经网络被提出,随着计算机设备的性能逐渐提高,卷积神经网络的结构逐渐复杂深度不断加深。
从 2012 年后卷积神经网络的发展速度大幅加快,网络性能逐渐提升,卷积神经网络在语义分割和目标检测等领域得到应用,逐渐成为图像表征学习和表征问题处理的主流方法(严春满等,2021)。卷积神经网络作为人工神经网络的一种,它的大体结构和人工神经网络一致,卷积神经网络在隐藏层之前加入了特征提取的结构,这个结构的主要内容就是卷积神经网络中的卷积和池化等运算。
2.4.1 卷积核
在图像处理领域,卷积核(Convolution kernel)是在图像处理时分配给像素相邻区域的空间权重矩阵,应用在卷积神经网络的特征提取部分。卷积核通过滑动窗口操作与图像的不同区域逐个进行卷积计算,计算完成后就能更清晰的发现图像中的某些特征。在卷积神经网络中卷积核是卷积层中重要组成部分,卷积核具有卷积核大小,步长等参数,以适应不同的处理任务。
2.4.2卷积层
卷积层在卷积神经网络中的作用为图像特征提取,结构为多组卷积单元组成的卷积集合。在每个卷积单元进行卷积操作时,卷积核会对输入图像进行一遍扫描,输出的图像每一个像素只与输入图像的某一部分有关,而输出图像的尺寸仅与卷积核大小有关,因此在卷积神经网络中一个卷积单元中的参数只有卷积核的参数。基于卷积神经网络卷积层的结构,卷积层有两个最主要的特点,局部连接与权值共享。局部连接是指卷积层中每一层节点仅与它的上层节点的某一部分相连接,权值共享指卷积层中的卷积操作中多组卷积核共用同一组参数。通过局部连接和权值共享,卷积神经网络大大减少了网络参数,相较于全连接的神经网络,卷积神经网络提高了性能,同时避免了过拟合问题,连接数和参数的较少也进一步促进了神经网络深度的拓展。
输入数据经过卷积层的特征提取后由激活函数进行激活,此时输入图像的特征被较好的保留下来,但这些特征中存在大量冗余信息,因此卷积层的输出会进入池化层,进行下一步的处理。
2.4.3池化层
池化层一般位于卷积神经网络中卷积层之后,池化层的主要作用是将来自卷积层的特征信息进行筛选,去除冗余信息,进一步精简特征,从而进一步减少网络参数,提高网络性能。池化层的运算较为简单,它的工作就是对输入特征图进行下采样(Downsampling)操作,池化层常用的池化方法有最大池化(Maximum Pooling)和平均池化(Average Pooling).
2.4.4全连接层
全连接层相当于前馈人工神经网络中的隐含层,它位于卷积层和池化层之后,全连接层和卷积层的结构非常相似,它的主要组成结构也是卷积单元,全连接层在卷积神经网络中的作用是对特征进行分类。来自池化层的特征图在到达全连接层后,每个特征图会与它相同尺寸的卷积核进行卷积操作,这些特征图经过卷积操作后变成了一个多维向量,将每个向量进行求和操作就得到了特征向量,为了使特征向量具有非线性,在特征向量进入下一层之前还需要经过激活函数的激活。
在卷积神经网络中往往有不止一层的全连接层,若一个全连接层的前层为全连接层,它会将上层的特征向量与大小为 1×1 的卷积核进行卷积操作,输出本层的特征向量,最终输出的特征向量中的值就代表了输入图像中各种特征的类别。
2.5 何为”深度“
上文我们已经介绍了人工神经网络经典的MP模型,那么在深度学习里面我们使用的是什么样的神经网络,这个”深度“到底指的是什么?其实就是如下图所示的,输入层和输出层之间加更多的”Hidden Layer“隐藏层,加的越多越”深“。
最早的MP神经网络实际应用的时候因为训练速度慢、容易过拟合、经常出现梯度消失以及在网络层次比较少的情况下效果并不比其他算法更优等原因,实际应用的很少。中间很长一段时间神经网络算法的研究一直处于停滞状态。人们也尝试模拟人脑结构,中间加入更多的层”Hidden Layer“隐藏层,和人脑一样,输入到输出中间要经历很多层的突触才会产生最终的Output。加入更多层的网络可以实现更加复杂的运算和逻辑处理,效果也会更好。
但是传统的训练方式也就是我Part 2.2里面介绍的:随机设定参数的初始值,计算当前网络的输出,再根据当前输出和实际Label的差异去更新之前设定的参数,直到收敛。这种训练方式也叫做Back Propagation方式。Back Propagation方式在层数较多的神经网络训练上不适用,经常会收敛到局部最优上,而不是整体最优。同时Back Propagation对训练数据必须要有Label,但实际应用时很多数据都是不存在标签的,比如人脸。
当人们加入更多的”Hidden Layer“时,如果对所有层同时训练,计算量太大,根本无法训练;如果每次训练一层,偏差就会逐层传递,最终训练出来的结果会严重欠拟合(因为深度网络的神经元和参数太多了)。
所以一直到2006年,Geoffrey Hinton老爷子提出了一种新的解决方案:无监督预训练对权值进行初始化+有监督训练微调。
归纳一下Deep Learning与传统的神经网络算法最大的三点不同就是:
训练数据:传统的神经网络算法必须使用有Label的数据,但是Deep Learning下不需要;
训练方式不同:传统使用的是Back Propagation算法,但是Deep Learning使用自下上升非监督学习,再结合自顶向下的监督学习的方式。对于监督学习和非监督学习概念不清楚的读者可以阅读我上文引用的强化学习文章,里面有详细介绍。
层数不同:传统的神经网络算法只有2-3层,再多层训练效果可能就不会再有比较大的提升,甚至会衰减。同时训练时间更长,甚至无法完成训练。但是Deep Learning可以有非常多层的“Hidden Layer”,并且效果很好。
(想了解更多细节的可以阅读:https://blog.csdn.net/zouxy09/article/details/8775518)
不管怎么样Deep Learning也还是在传统神经网络算法基础上演变而来的,它还是一种基于神经网络的算法。今天已经是2021年了,深度学习在很多领域得到了广泛的应用,而且和很多其他学习也结合起来一起使用,比如深度强化学习,有种物理化学专业的赶脚。
MIT讲解了Deep Learning最新的一些研究和应用,详情可以关注这个B站视频:https://www.bilibili.com/video/BV1vg4y1B7Nz
3. 深度学习框架
大家了解深度学习和神经网络以后,相信大家也经常听到如下的英文单词:Tensorflow、Caffe、Pytorch等,这些都是做什么的了。Tensorflow是Google旗下的开源软件库,里面含有深度学习的各类标准算法API和数据集等,Pytorch是Facebook旗下的开源机器学习库,也包含了大量的深度学习标准算法API和数据集等。Caffe是贾扬清大神在UC Berkeley读博士时开发的深度学习框架,2018年时并入到了Pytorch中。
因为深度学习发展至今,很多算法都已经是通用的,而且得到过验证的。那么有些公司就希望将一些标准算法一次性开发好,封装起来,后面再使用时直接调用引入即可,不需要再写一遍。就像大家小时候学习英文一样,英文字典有牛津版本的,也有朗文版本的。对于收录的英文单词,英文单词如何使用,如何造句等,已经有了标准的用法。我们只需要查阅这些字典即可,而Tensorflow、Caffe、Pytorch做的其实也就是计算机届的牛津、朗文英文大词典。国内百度目前也有自己的深度学习框架Paddle-Paddle。
目前一般是学术界用Pytorch较多,Pytorch更适合新手入门,上手快。工业界用Tensorflow较多,更适合工业界的落地和部署等。
4. 深度学习在工业界主要应用领域
目前深度学习应用最广泛的就是传统机器学习算法解决不了的领域或者是效果不佳的领域:视觉、自然语言和语音识别领域。当样本数量少的时候,传统机器学习算法还可以通过一些结构化特征组合在一起然后区分出来。比如区分汽车和摩托车,可以通过轮子数量。但对于人脸,千万张人脸相似的太多,已经完全无法通过鼻子、头发、眼睛这些简单的特征组合进行区分。需要探索更多更复杂的特征,组合在一起才能将千万张人脸区分开来。
所以这时候就需要Deep Learning构建多层神经网络,探索组合更多的特征,才能识别区分千万级别甚至亿万级别的人脸。这在传统神经网络算法和机器学习算法是完全实现不了的。当然实现上述功能,也是因为现阶段有了更多的数据可以进行训练,同时有了更好的算力可以快速完成训练。传统的CPU进行训练,可能训练几个月都训练不出来结果。GPU的出现和改进加速了上述训练过程。
目前应用最广的一些领域:
CV(Computer Vision 简称CV):计算机视觉领域。随处可见的人脸识别、物体识别和文字识别OCR。广泛应用于安防领域,同时零售行业也在通过CV技术实现线下门店的数字化。目前国内头部公司就是CV四小龙:商汤、旷视、云从、依图;
NLP(Natural Language Processing):自然语言处理领域。目前整体的NLP技术还是不够成熟,无法实现人们设想的机器人可以完全智能对话,机器人目前只能做一些简单的信息提取和检索整合的事情。NLP目前也是最难做的,同样一句话可能会有不同种意思。人有时都很难理解,更何况机器。目前国内头部公司主要是百度和达观;
ASR:语音识别领域。目前国内独一档就是科大讯飞,尤其是能够做到很多地方方言的精准识别。语音识别目前主要主要用在语音客服上,有时候大家接到的推销电话其实背后都是电话机器人打的。电话机器人能够完全和用户进行对话,一定程度上也需要NLP的技术,因为它需要理解用户的意思。
Autopilot:自动驾驶其实也是CV的衍生领域,目前世界上做自动驾驶最好的其实还是汽车公司比如特斯拉。因为没有车,自动驾驶想获得训练数据都很困难。没有车,自动驾驶技术想实验都跑不通。目前国内百度差不多算第一档。
推荐:传统的推荐都是用GBDT+LR模型来做的,目前深度学习在推荐领域也得到了广泛的应用。
5. 参考资料
[1]黄子琦. 基于深度学习麦穗识别的小麦估产研究[D].山东农业大学,2022.DOI:10.27277/d.cnki.gsdnu.2022.001057.
https://zhuanlan.zhihu.com/p/459993916
[1]李海洋. 基于图像处理和深度学习的麦穗识别与系统实现[D].河南农业大学,2021.DOI:10.27117/d.cnki.ghenu.2021.000046.
等