12. 深度学习实践:应用篇

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/niaolianjiulin/article/details/79158014

尽管深度学习的目标是设计能够处理各种任务的算法,但截至目前,其应用仍需一定程度的特化,我们重点关注CV,语音识别,NLP,以及其他商业领域的应用。

1. 大规模深度学习

DL基于联结主义,大量神经元作用在一起往往能够表示智能。神经元数量必须很大。相比上个世纪80年代,如今NN的精度和任务复杂度进一步提升,一个关键因素是网络规模的巨大提升。但即便如此,NN的规模也仅和昆虫级别差不多。


每个神经元的联结量,已接近高级生物水平(数字表示对应年份的成果)

神经元的数量,达到昆虫级别,和人类仍差距很大

1.1 快速的CPU实现

传统的NN用单机CPU训练(那会儿也没啥用),如今看来不可取。在大规模使用GPU之前,研究者们通过设计一些特定的CPU上的操作来大大提升计算效率,例如调整定点运算等。

1.2 GPU实现

现代NN的实现基于GPU(图形处理器/显卡),其最初是为图形应用而开发的专用硬件。视频游戏系统的消费市场,刺激了GPU的发展,在游戏设计上的特性,很好的转到了NN的计算上来。

1.2.1 为何能从游戏转到NN上?

  • 并行化:视频游戏渲染需要快速、并行地执行计算。游戏环境和角色模型通过3D坐标实现,为了将其转化为2D显示器上的坐标,显卡需要并行地对许多矩阵执行乘法和除法。然后,显卡继续在每个像素上执行计算。这些计算是非常简单的,不涉及CPU常遇到的那种复杂分支运算等。例如,同一个刚体内的每个顶点都会乘上相同矩阵。各个计算过程完全独立,因此可并处处理。
  • 带宽高:游戏视频的计算过程中,还涉及处理大量内存缓冲,以及描述每一个需要被渲染对象的纹理的位图信息,这些要求使得显卡设计时,拥有高度并行特性,和很高的内存带宽。

NN算法所需要的性能特性是相同的。训练时通常不涉及大量分支运算和控制指令。计算中大量参数每次迭代都要更新,带来很大缓冲,内存带宽常为瓶颈。NN可被分为多个单独的神经元,并独立于同一层内其他神经元进行处理,带来并行。因此,GPU很适合NN的训练。

1.2.2 GPU的火爆

人们发现了GPU用于科学计算,发布了通用GPU,用显卡训练NN的风潮开始了。NVIDIA发布了CUDA编程语言。软硬环境的齐备,通用GPU成为训练NN的理想平台。

在GPU上写高效代码是一个难题。在GPU上获得良好性能所需技术和传统CPU不同,例如GPU中,大多数可写内存位置并不会被高速缓存,计算某个值两次往往比计算一次然后从内存中读取更快。GPU代码天生多线程,不同线程之间要仔细协调好。GPU中常见设定是一个组中的所有线程都同时执行同一指令,意味着难以执行分支操作。

为解决这个问题,人们建立了一个包含高效操作的软件库,如包含卷积和矩阵乘法,然后从库中调用所需的操作来建立模型。例如 ML库 Pylearn2 中的算法均基于调用Theano和cuda-convnet 提供的高性能操作来指定。分层好处在于,简化对多种硬件的支持,因为Theano程序可在CPU/Gpu模式下运行,无需改变调用方式。其他还包括TensorFlow,Torch等。

1.2.3 大规模的分布实现

把训练或者推断的任务,分摊到多个机器上实现。

  • 数据并行:每台机器跑一部分样本(每台都部署模型,多个安检口)
  • 模型并行:每台机器负责一部分模型(数据在各台上流动,训的训,推的推)

作者简要提了,不再赘述。

1.2.4 模型压缩

商业应用中,一个时间内存开销都小的推断算法,比训练算法更为重要。对不需个性化设计的应用,只需一次训练,然后成千上万用户使用,例如部署到手机上。减少推断所需开销的一个策略:模型压缩,用一个更小的模型取代原始耗时的模型。

了解下概念,不再赘述。

1.2.5 动态结构

加速数据处理系统的一种策略:动态结构。给定一个输入,系统可动态决定运行NN的哪部分。也被称为条件计算。由于模型结构中许多部分可能只跟输入的一小部分有关,只计算那些需要的特征可起到加速的目的。决策树模型就是动态结构的一个例子,它是一堆if-else的集合。借鉴过来,训练一个决策树,其中每个节点使用NN做出决策(1992年)。

1.2.6 专用硬件实现

自从NN研究以来,硬件设计者已在致力于加速NN的专用硬件实现。如近年来的FPGA的长足发展足以证明(有人用FPGA强大的计算能力来做NN训练)。在针对诸如手机等低功率设备开发新的硬件设计,并且想要用于DL的一般公众应用(如语音识别等)时,研究专用硬件能够进一步推动其发展。2015年研究表明,低精度实现的工作是一个方向。

2. 计算机视觉

视觉是一个对人类以及许多动物毫不费力,但对计算机充满挑战的任务。DL中常用标准基准任务包括对象识别和OCR。大多数CV中的深度学习往往用于对象识别或者某种形式的检测(复现人类能力)。

2.1 预处理

原始输入往往以深度学习架构难以表示的形式出现。CV通常只需要相对少的预处理。图像应该标准化,使得像素在相同并且合理的范围内。将图像格式化为具有相同比例,严格上说是唯一一种必要的预处理。然而,即使这种操作也并不总是必要的,一些现代CNN接受可变大小的输入,并可动态调整池化大小以保持输出大小的恒定。其他CNN模型具有可变大小输出,尺寸可随输入自动缩放,例如图像逐像素标注模型。

数据集增强,可看做是只对训练集预处理的方式,这是减少泛化误差一种极好方法。测试时可用的一个想法是:将同一输入的多个不同版本传给模型,在模型的不同实例上决定输出,这也可认为是集成方法。

其他一些预处理需要同时应用于训练集和测试集,目的是将每个样本置于更规范的形式,以便减少模型需要考虑的变化量,减少泛化误差,减小拟合训练集的模型大小。更简单的任务可通过更小的模型解决,更简单的模型泛化能力一般更好。

当使用大型数据集和大型模型训练时,预处理通常不必要,最好只让模型学习哪些变化性应当保留。例如,ImageNet数据集上的AlexNet系统(2012年)仅有一个预处理步骤:对每个像素减去训练样本的平均值。

  • 对比度归一化:对比度简单说就是图像中亮像素和暗像素之间差异的大小。全局对比度归一化(Global contrast normalization, GCN)和局部对比度归一化(local contrast normalization, LCN)
    这里写图片描述
  • 数据集增强:增加训练集的额外副本,来增加其大小,改进泛化能力。对象识别任务非常适合用这招。

3. 语音识别

自动语音识别,Automatic speech recognition, ASR。

将一段包含自然语言发音的声学信号投影到词序列上。传统做法以20ms为一帧分割信号,令 X = { x ( 1 ) , . . , x ( T ) } 表示语音的输入向量。令 y = { y 1 , . . , y N } 表示目标输出序列。语义识别任务构造函数 f ,能够在给定声学序列下计算最有可能的语言序列:
这里写图片描述

第一阶段:20世纪80年代至2012年,最先进的语音识别系统是HMM-GMM模型。HMM对音素序列建模,GMM对声学特征和音素之间的关系建模。尽管其一直在ASR中占据主导地位,语音识别仍然是NN成功应用的第一个领域。从20世纪80年代末期开始,大量语音识别系统使用了NN。1993年TIMIT成为音素识别的一个基准数据集。由于语音识别软件系统中复杂的工程因素,以及HMM效果不错,工业界没有迫切转向NN,更多是用NN为系统学习一些额外的特征。

DL时代:2009年开始,研究者搞了个无监督学习的DL方法,基于训练一个受限的玻尔兹曼机的无向概率模型,对输入数据建模。无监督的预训练用来构造一个深度FNN,每一层通过训练受限的玻尔兹曼机来初始化。此工作将音素识别错误率从26%降到了20.7%。紧接着转向了大规模词汇语音识别,不仅包含识别音素,还包含识别大规模词汇的序列。工业界兴奋起来。2017年底,用科大讯飞目前的语音识别转文字,很厉害,1小时音频转为文字,准确率很高,10分钟即可完成,仅需对部分标点,极个别文字修改下。

20世纪头十年,基于GMM-HMM的系统几乎停滞不前。DL掀起了新一波浪潮。2013年由学者提出用CNN来处理,时域和频域上复用权重,将输入频谱当成一个图像,一个轴是时间,一个轴是谱分量的频率。完全抛弃HMM转向end-to-end的DL系统是研究热点,2013年,一项突破是训练了一个LSTM RNN来做,将错误率降到了17%的新低。

4. 自然语言处理

Natural Language Processing, NLP。让计算机能够使用人类语言。代表性的应用就是机器翻译,计算机读取一种人类语言,用另一种人类语言表达出来。计算机可以读取C语言,JAVA语言等,但自然语言通常是模糊的,不遵循形式化的表述。难就在这里。

4.1 N-gram

语言模型,定义了自然语言中标记序列的概率分布。最早成功的语言模型基于固定长度序列的标记模型,称为n-gram:

这里写图片描述

该模型定义了条件概率。几十年来,N-gram模型是统计语言模型的核心模块,如Jelinek 1980的工作,这是吴军博士的老师,霍普金斯大学教授。《数学之美》中讲到,贾里尼克教授摒弃了前人做法,提出用统计概率模型来解决NLP的问题,取得很大成功。

4.2 神经语言模型

4.3 高维输出

4.4 结合N-gram和神经语言模型

4.5 神经机器翻译

之前,大多数机器翻译系统使用N-gram模型,而且包括最大熵语言模型,给定上下文中常见的词,预测下一个词。缺点是需要将序列处理为固定长度,而RNN允许可变的输入输出长度,登上舞台。

本书作者Bengio在神经语言模型中建树看起来颇深,文中引用不少他的论著。

NLP涉及较专业领域,不太熟悉,仅作了解。不再赘述。

5. 其他应用

本节介绍其他类型的应用,与前3个任务不同,属于NN正在扩展的研究领域。

5.1 推荐系统

两种主要应用:

  • 在线广告
  • 项目建议

提到了协同过滤,基于内容的推荐系统,强化学习等。

5.2 知识表示、推理和问答

NN在语言模型,机器翻译和NLP领域很成功,这些嵌入表示关于单个词语或概念的语义知识。研究前沿是为短语或者词语和事实之间的关系开发嵌入。搜索引擎已使用ML来实现这一目的,改进这些更高级的表示任重道远。

提到了关系、三元组、词义消歧等。

第二部分小结

这里写图片描述

介绍了涉及深度学习的现代实践,包括了所有非常成功的方法。这些方法使用代价函数的梯度寻找模型的参数,当具有足够的训练数据时,非常强大。

第三部分进入研究领域,旨在:用较少的训练数据执行更多样的任务,与第二部分相比,其中挑战更困难而且远未解决。

猜你喜欢

转载自blog.csdn.net/niaolianjiulin/article/details/79158014
今日推荐