深度学习的应用与实践_算法

一、深度学习简介

深度学习,英文名称为Deep Learning,是近几年人工智能领域的主要研究方向。深度学习的主要任务是通过构建深度卷积神经网络(Deep Neural Network,DNN)和采用大量样本数据作为输入,人们最终会得到一个具有强大分析能力和识别能力的模型,该模型包含了DNN的构成参数以应用于实际工作。

由于深度学习依赖DNN这样一个参数量庞大且非线性的框架,使得对于它的研究充满了挑战和困难。然而,近几年的研究和应用表明,深度学习已经基本取代了先前相关技术,在图像识别,语音识别已经取得了非凡的突破,但这并不意味着深度学习已经发展成熟,它还需要研究者进一步的理论分析和应用实践。

1.深度学习的历史

谈及深度学习的发展历程,就如同各种理论被人们关注和忽视的历程一样,具有高低起伏。深度学习并不是近几年才提出的,而之所以受到大众熟知也是因为社交媒体的广泛传播才被又一次拉上台面。例如2016年的AlphaGo对战李世石的比赛,在那年甚至之前的年代里围棋一直被认为是机器与人之间算力较量的最后一个跨越,许多人认为李世石稳操胜券,而没想到人工智能最终更胜一筹。

最早的神经网络是1943年提出的MCP人工神经元模型,其在1958年被应用于感知器算法中,用于机器学习分类任务。然而,尽管这样的方法被证明是可收敛的,却因为被结构简单(线性模型),分类认为受限(二分类,复杂的任务无法正确分类)而使得神经网络的研究处于一次长达17年的低潮期。

在1986年,Hinton发明了BP算法,其由信号的正向传播和误差的反向传播两个过程组成,应用于多层感知器(MLP),并且采用Sigmoid进行非线性映射解决了之前非线性分类学习问题。所谓的BP算法,也就是在正向传播时将输入样本输入网络,经过隐层传递到输出层,输出值与期望值不同则进行误差的反向传播,而反向传播就是按原通路通过隐层传至输入层,将误差分摊各个神经单元,获得各层神经元的误差信号响应,修正各个神经单元的权重占比。最终,人们将得到一个较为适合的权重模型,其实际输出与期望输出的误差达到最低限度,可以被用于实际任务当中。

然而说到真正意义上的卷积神经网络,LeNet可以说算的上是现代使用深度学习的基石,其结构于1989年被LeCun提出,其在数字识别的效果也非常好。例如,现在很多AI入门人员都必须要经历的LeNet-5模型实现MNIST数据识别任务。可是这样的方法却并没有引起很大的关注,我想可能是因为科技发展和理论实践不相适应造成的,更何况神经网络缺少相应的严格数学理论支持(到现在这个问题还是存在),使得刚刚升起的胜利白帆又再一次降下。

尽管深度学习的研究再一次的处于低谷期,但并不意味着深度学习停滞不前。1997年,著名的长短期记忆网络(LSTM)被提出,其解决了一般循环神经网络(RNN)存在长期依赖问题,即相较于RNN解决了长序列训练过程中存在梯度消失和梯度爆炸问题。作为一个非线性模型,LSTM可用于构建大型DNN,在实际任务中,LSTM可被用于语音识别等方面。现如今我们可以利用多种深度框架对其进行复现,也算得上是对那时研究出该架构的人员的一种安慰。

值得一提的是在深度学习火热之前,统计学习方法占据上风,从1986年的决策树方法到2001年的随机森林,从1995年的线性SVM(支持向量机)到2000年的非线性的KernelSVM,以及一些著名的HMM,朴素贝叶斯等方法,它们也推进人类对于人工智能领域的实现,并且也可以和深度学习相辅相成。到现在,我们依旧可以使用DNN与类似SVM和CRF搭配进行分类任务,统计学习方法中一些指标也通常被作为设计网络合理性的评判标准。

2006年,Hinton又提出了解决DNN训练当中梯度消失解决方法,现在的研究者也依旧基本遵循这样的方法,即无监督预训练初始化权值和有监督参数微调。值得一提的是为了更好的调参用于快速精准训练,预训练模型以及优化器SGD和ADAM被广泛应用,也算的上是对这个方法提出的最好证明。

从2012年AlexNet参加ImageNet图像分类比赛碾压第二名SVM方法事件开始,深度学习才又渐渐被关注起来。与此同时,为了更好的实现深度学习机制,一些著名的深度学习框架也被提出,例如Caffe,TensorFlow,Pytorch,Keras,MXNet等,它们也随着计算机编程语言的发展被一一实现,现如今Python语言对其都有支持,我想这也是Python近几年火热的原因之一。再加上显卡近几年的快速发展,其在支持并行处理高效计算的能力得到提升,不仅扩大了游戏行业和影视行业的影响力,同时也使得深度学习的研究也得到了越来越多的企业关注(高效训练,大规模集群)。

除此之外,ResNet和DenseNet的提出,又再一次给搭建更深层次网络奠定基础。也因此越来越多的网络结构和理论研究基于前者被设计和实现,越来越多的应用和产品也被落地使用,在我看来,深度学习已经成为了科技生活中不可或缺的一部分,影响着身边的每一个人。

2.深度学习的革命性

作为一名从事深度学习研究的人员,在我看来深度学习的革命性就在于其已经被计算机技术实现,并且将理论应用于实际生活当中。

深度学习之所以近几年发展迅速,我认为是以下几点已经得到保证:环境搭建,数据处理,训练策略和评判标准。环境搭建是一件对于深度学习入门人员的噩梦,这样的噩梦似乎对之前擅长传统方法的研究人员也产生了影响。在之前不需要深度学习的年代,研究机器学习的人们或多或少都是利用纸笔以及少量的计算机技术实现研究,例如纸笔推导公式,Matlab画图,Lingo解方程等。但是随着深度学习的发展,对于计算机编程语言的了解以及计算机组成原理等知识成为了必要手段。现在的研究人员,不会Python,就不可能掌握深度学习框架,不会搭建WIndows和Linux环境,就不能高效地使用显卡进行训练,那么搭建深度网络就会成为空谈。数据处理不掌握Pillow和OpenCV,就不能对网络输入进行像素级的控制。特征图和参权重十分依赖输入,如果输入不进行相应的处理,其得到的效果可能不是很好,例如边缘问题和噪声问题都会影响整体的网络性能(因此需要排除外在的干扰因素,DNN不具备这样的能力,但是可以通过网络参数学习较大程度避免),使得预期效果变差。训练环节是深度学习较为耗时耗精力的部分,尽管我们有了像ADAM这样使网络快速收敛的优化器,但是其效果可能不如SGD这样的慢速的随机梯度下降优化器好,除此之外,初始参数设定也需要不断修改,属于“炼丹”的过程,即为耗时,但不管如何,没有前人对这些优化器的实现,我们到现在光是使用代码实现收敛就非常困难。当然,最后一个就是评价函数的使用,Python的scikit-learn的包集成了统计学习方法和机器学习模型等内容,易安装和上手,我们也不需要花费很大的工夫自己去实现。

到此,深度学习的基本工作难点都列举出来,试想如果没有计算机编程语言快速发展,没有计算机显卡并行处理以及多线程处理机制等功能的庇佑,深度学习也许还处于不受关注的阶段,只停留于理论,缺乏实验论证。

3.深度学习的开发平台

针对于非IT行业人士,以及不了解IDE人士,由于没有心理经历,没有适应时间,对于如何利用深度学习解决问题就成了很大的困难,因此为了解决这个普遍存在的问题,设计一个端到端一站式的平台很有必要。例如,华为就设计了ModelArts平台,其自动学习技术可基于用户的标注数据自动进行模型设计、参数调优、模型训练、模型压缩和模型部署。全流程无需任何代码编写和模型开发经验,零基础构建AI开发模型,满足智慧化场景中的一些实际需求。所谓无需代码编写指的是不需要人们去装环境加上编程语言学习来搭建整个网络,而是只需要进行手动数据标注即可,不需要自己进行数据预处理;训练模型参数调优也是一样的,这种非常复杂耗时的过程也不需要去自己完成,而是ModelArts自己去解决,总之大幅度降低研究AI入门的门槛。除此之外,ModelArts平台支持图片分类、物体检测、预测分析、声音分类4大特定应用场景,可以应用于电商图片检测、流水线物体检测等场景,这个就是深度学习的商业化体现。由于不是所有人都会深度学习,而且大部分的人学习AI初期都只是希望选择样本加上训练就可以得到很好的结果,因此像ModelArts这样的AI平台就可以作为大众的选择,自动化模型生成,高效而有秩序。

深度学习的应用与实践_大数据_02

二、深度学习领域

1.计算机视觉

(1)目标检测

目标检测(Object Detection)是当前计算机视觉和机器学习领域的研究热点之一,核心任务是筛选出给定图像中所有感兴趣的目标,确定其位置和大小。其中难点便是遮挡,光照,姿态等造成的像素级误差,这是目标检测所要挑战和避免的问题。现如今深度学习中一般通过搭建DNN提取目标特征,利用ROI映射和IoU确定阈值以及区域建议网络RPN统一坐标回归损失和二分类损失来联合训练。

(2)语义分割

语义分割(Semantic Segmentation)旨在将图像中的物体作为可解释的语义类别,该类别将是DNN学习的特征聚类得到。和目标检测一样,在深度学习中需要IoU作为评价指标评估设计的语义分割网络。值得注意的是,语义类别对应于不同的颜色,生成的结果需要和原始的标注图像相比较,较为一致才能算是一个可分辨不同语义信息的网络。

(3)超分辨率重建

超分辨率重建(Super Resolution Construction)的主要任务是通过软件和硬件的方法,从观测到的低分辨率图像重建出高分辨率图像,这样的技术在医疗影像和视频编码通信中十分重要。该领域一般分为单图像超分和视频超分,一般在视频序列中通过该技术解决丢帧,帧图像模糊等问题,而在单图像在中主要为了提升细节和质感。在深度学习中一般采用残差形式网络学习双二次或双三次下采样带来的精度损失,以提升大图细节;对于视频超分一般采用光流或者运动补偿来解决帧图像的重建任务。

(4)行人重识别

行人重识别(Person Re-identification)也称行人再识别,是利用计算机视觉技术判断图像或者视频序列中是否存在特定行人的技术。其广泛被认为是一个图像检索的子问题。核心任务是给定一个监控行人图像,检索跨设备下的该行人图像。现如今一般人脸识别和该技术进行联合,用于在人脸识别的辅助以及人脸识别失效(人脸模糊,人脸被遮挡)时发挥作用。在深度学习中一般通过全局和局部特征提取和以及度量学习对多组行人图片进行分类和身份查询。

2.语音识别

语音识别(Speech Recognization)是一门交叉学科,近十几年进步显著。除了需要数字信号处理,模式识别,概率论等理论知识,深度学习的发展也使其有了很大幅度的效果提升。深度学习中将声音转化为比特的目的类似于在计算机视觉中处理图像数据一样,转换为特征向量,与图像处理不太一样的是需要对波(声音的形式)进行采样,采样的方式,采样点的个数和坐标也是关键信息,然后对这些数字信息进行处理输入到网络中进行训练,得到一个可以进行语音识别的模型。语音识别的难点有很多,例如克服发音音节相似度高进行精准识别,实时语音转写等,这就需要很多不同人样本的声音作为数据集来让深度网络具有更强的泛化性,以及需要设计的网络本身的复杂程度是否得当等条件。

3.自然语言处理

自然语言处理(NLP)是计算机科学和人工智能领域的方向之一,研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。深度学习由于其非线性的复杂结构,将低维稠密且连续的向量表示为不同粒度的语言单元,例如词、短语、句子和文章,让计算机可以理解通过网络模型参与编织的语言,进而使得人类和计算机进行沟通。此外深度学习领域中研究人员使用循环、卷积、递归等神经网络模型对不同的语言单元向量进行组合,获得更大语言单元的表示。不同的向量空间拥有的组合越复杂,计算机越是能处理更加难以理解的语义信息。将人类的文本作为输入,本身就具有挑战性,因此得到的自然语言计算机如何处理就更难上加难,而这也是NLP不断探索的领域。通过深度学习,人们已经在AI领域向前迈出一大步,相信人与机器沟通中“信、达、雅”这三个方面终将实现。

深度学习的应用与实践_人脸识别_03

三、深度学习相关框架

武侠小说里面我们经常可以看到剑法高超的侠客手持长剑,而他们手中的“剑”名称不一,用法也不同,但却能凭此一较高下。深度学习也是一样,需要这样的“剑”来展现剑招和较量,而这些“剑”就是深度学习框架,没有这些框架,我们就不能实现深度学习任务。下面对一些框架进行简单介绍。

1.Caffe

全称是Convolutional Architecture for Fast Feature Embedding,它是一个清晰、高效的深度学习框架,核心语言是C++并支持命令行、Python和MATLAB接口,然而比较困难的是搭建环境和代码编写,由于Visual Studio版本更迭以及一些相关必备运行库的编译过程复杂问题,使得使用Caffe的研究人员相较于之前大幅度减少,而且如果希望模型可以在GPU训练,还需要自己实现基于C++和CUDA语言的层,这对于编程难度很大,更加对入门人员不友好。

2.TensorFlow

一经推出就大获成功的框架,采用静态计算图机制,编程接口支持C++,Java,Go,R和Python,同时也集成了Keras框架的核心内容。此外,TensorFlow由于使用C++ Eigen库,其便可在ARM架构上编译和模型训练,因此可以在各种云服务器和移动设备上进行模型训练,而华为云的多模态开发套件HiLens Kit已经利用TensorFlow这一特点具备了开发框架的搭载,外部接口的管理和算子库封装等功能,可一键部署和一键卸载。可以说TensorFlow使得AI技术在企业中得到了快速发展和广泛关注,也使得越来越多的人使用深度学习进行工作。然而,其缺点也很让人苦恼,一是环境搭建,二是复杂设计,让研究人员针对不断改变的接口有心无力,bug频出。然而,如果具有一个良好的开发平台,就可以解决这些显而易见的问题。例如,全面升级的华为云ModelArts 2.0一站式AI开发与管理平台,通过全流程的自动化升级已有的AI开发模式,让模型训练、模型管理、数据准备、模型推理全链条产生质的飞越。华为云ModelArts 2.0,一方面可以显著提升专业AI开发者的效率,让数据科学家、算法工程师们聚焦基础核心的算法研究与创新,释放他们的无限潜能。另一方面,也可以大幅降低初学者的门槛,让更多的AI爱好者可以快速掌握AI技能,为更多行业创造新价值。

3.PyTorch

前身是Torch,底层和Torch框架一样,Python重写之后灵活高效,采用动态计算图机制,相比TensorFlow简洁,面向对象,抽象层次高。对于环境搭建可能是最方便的框架之一,因此现如今基本上很多的论文都是PyTorch实现,代码和教程也非常多,对入门人员友好,计算速度快,代码易于阅读。许多企业如今使用PyTorch作为研发框架,不得不说PyTorch真的是一个非常厉害的深度学习工具之一。

4.Keras

类似接口而非框架,容易上手,研究人员可以在TensorFlow中看到Keras的一些实现,很多初始化方法TensorFlow都可以直接使用Keras函数接口直接调用实现。然而缺点就在于封装过重,不够轻盈,许多代码的bug可能无法显而易见。

5.Caffe2

继承了Caffe的优点,速度更快,然而还是编译困难,研究人员少,值得一提的是已经并入了PyTorch,因此我们可以在新版本的PyTorch中体会到它的存在。

6.MXNet

支持语言众多,例如C++,Python,MATLAB,R等,同样可以在集群,移动设备,GPU上部署。MXNet集成了Gluon接口,就如同torchvision之于PyTorch那样,而且支持静态图和动态图。然而由于推广力度不够使其并没有像PyTorch和TensorFlow那样受关注,不过其分布式支持却是非常闪耀的一点。

深度学习的应用与实践_人工智能_04

四、深度学习实际应用

1.计算机视觉

计算机视觉领域中不得不提到就是人脸识别,其就是利用计算机对人脸图像进行处理分析和理解,进行身份验证,和上文提到的行人重识别一样,都需要进行相似度比较和相似度查询,只不过区别是一个需要人脸信息(五官,关键点),而一个是整个行人信息(姿态,关键点)。现如今的人脸识别大部分都是闭源的,各个大企业都有自己专门的人脸识别系统和服务,开发人员如果 想要使用就需要调用接口API获取人脸的处理结果,自己去完成人脸识别会非常困难。首先就是数据集的获取,因为人脸信息是隐私,因此在这样的领域最好是公司企业级别去做比较合适,在拥有相关法律支持的情况下进行实验是合理的,当然也有一些公司会提供这样的人脸识别资源包来帮助开发人员,如华为云提供的人脸识别QPS资源包。

除此之外,文字识别(Optical Character Recognition,OCR)也是深度学习中一大应用之一,其就是将图片或扫描件中的文字识别成可编辑的文本,代替人工录入,提升业务效率。基本上分为三大类:通用类,证件类和票据类。通用类识别一般就是识别表格、图片、手写图片,网络图片和票据票证中的文字内容,智能定位坐标,进一步进行数据挖掘等操作。证件类识别一般指的是身份证、驾驶证、行驶证、护照和营业执照等文字识别,其中暗光、倾斜、过曝光等异常条件下识别是难点,深度学习通过对处于这些条件下样本进行特征学习可以有效的分类出正确的信息。票据类同样如此,通过深度学习识别地址和票价等信息,节省了大量的人工录入成本,可以达到高精度的识别要求。例如华为OCR服务就可以做到身份证识别、增值税发票识别、驾驶证识别等,通过使用这种方式我们就可以对各种图片各种形式的文字都可以进行操作,这便是人工智能深度学习带来的便利之处。

2.语音识别和自然语言处理

语音识别的应用就更加广泛了。例如微软从2012年开始,利用深度学习进行机器翻译和中文语音合成工作,其人工智能小娜背后就是一套自然语言处理语音识别的数据算法。诸如这样的人工智能已经通过更加复杂的网络结构和算法不断更新换代,性能也会比之前的效果更好。除了像小娜这样的人工智能,华为录音文件识别一句话识别实时语音转写同样可以接收来自人类语音信息,将其转化为文字以便进行自然语言处理。可以说这二者的结合使得人工智能与人类交流的距离又被拉进了一步。

五、总结

现如今,深度学习发展迅速,硕果累累,希望我们每个人可以善用深度学习推动社会教育和科技的发展,体会人工智能给我们带来强大效益。

互联互通社区

深度学习的应用与实践_人脸识别_05