欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

你不得不了解的深度学习知识(一)

程序员文章站 2024-03-14 12:24:16
...

你不得不了解的深度学习知识(一)

1 深度学习

你不得不了解的深度学习知识(一)

  • 深度学习是机器学习的一个分支(最重要的分支)
  • 机器学习是人工智能的一个分支

(1)大白话解释深度学习

假设深度学习要处理的信息是“水流”,而处理数据的深度学习网络是一个由管道和阀门组成的巨大水管网络。网络的入口是若干管道开口,网络的出口也是若干管道开口。这个水管网络有许多层,每一层由许多个可以控制水流流向与流量的调节阀。根据不同任务的需要,水管网络的层数、每层的调节阀数量可以有不同的变化组合。对复杂任务来说,调节阀的总数可以成千上万甚至更多。水管网络中,每一层的每个调节阀都通过水管与下一层的所有调节阀连接起来,组成一个从前到后,逐层完全连通的水流系统。

你不得不了解的深度学习知识(一)

那么,计算机该如何使用这个庞大的水管网络来学习识字呢?

比如,当计算机看到一张写有“田”字的图片,就简单将组成这张图片的所有数字(在计算机里,图片的每个颜色点都是用“0”和“1”组成的数字来表示的)全都变成信息的水流,从入口灌进水管网络。

你不得不了解的深度学习知识(一)

我们预先在水管网络的每个出口都插一块字牌,对应于每一个我们想让计算机认识的汉字。这时,因为输入的是“田”这个汉字,等水流流过整个水管网络,计算机就会跑到管道出口位置去看一看,是不是标记由“田”字的管道出口流出来的水流最多。如果是这样,就说明这个管道网络符合要求。如果不是这样,就调节水管网络里的每一个流量调节阀,让“田”字出口“流出”的水最多。

这下,计算机要忙一阵了,要调节那么多阀门!好在计算机的速度快,暴力的计算加上算法的优化,总是可以很快给出一个解决方案,调好所有阀门,让出口处的流量符合要求。

你不得不了解的深度学习知识(一)

下一步,学习“申”字时,我们就用类似的方法,把每一张写有“申”字的图片变成一大堆数字组成的水流,灌进水管网络,看一看,是不是写有“申”字的那个管道出口流水最多,如果不是,我们还得再调整所有的阀门。这一次,要既保证刚才学过的“田”字不受影响,也要保证新的“申”字可以被正确处理。

你不得不了解的深度学习知识(一)

如此反复进行,知道所有汉字对应的水流都可以按照期望的方式流过整个水管网络。这时,我们就说,这个水管网络是一个训练好的深度学习模型了。当大量汉字被这个管道网络处理,所有阀门都调节到位后,整套水管网络就可以用来识别汉字了。这时,我们可以把调节好的所有阀门都“焊死”,静候新的水流到来。

你不得不了解的深度学习知识(一)

与训练时做的事情类似,未知的图片会被计算机转变成数据的水流,灌入训练好的水管网络。这时,计算机只要观察一下,哪个出水口流出来的水流最多,这张图片写的就是哪个字。

(2)传统机器学习VS深度学习

a.传统机器学习和深度学习的相似点
你不得不了解的深度学习知识(一)

 在数据准备和预处理方法,两者是相似的。都可能对数据进行一些操作:数据清洗、数据标签、归一化、去噪、降维。

b.传统机器学习和深度学习的核心区别
你不得不了解的深度学习知识(一)

传统机器学习的特征提取主要依赖人工,针对特定简单任务的时候人工提取特征会简单有效,但是并不能通用。
深度学习的特征提取并不依靠人工,而是机器自动提取的。这也是为什么大家都说深度学习的可解释性很差,因为有时候深度学习虽然能有好的表现,但是我们并不知道他的原理是什么。

(3)深度学习的优缺点

你不得不了解的深度学习知识(一)

(4)四种典型的深度学习算法

你不得不了解的深度学习知识(一)

a.卷积神经网络-CNN

CNN的价值

  • 能够大数据量的图片有效的降维成小数据量(并不影响结果)
  • 能够保留图片的特征,类似人类的视觉原理

CNN的基本原理

  • 卷积层:主要作用是保留图片的特征
  • 池化层:主要作用是把数据降维,可以有效的避免过拟合
  • 全连接层:根据不同人物输出我们想要的结果

CNN的实际应用

  • 图片分类、检索
  • 目标定位监测
  • 目标分割
  • 人脸识别
  • 骨骼识别

b.循环神经网络-RNN

RNN 是一种能有效的处理序列数据的算法。比如:文章内容、语音音频、股票价格走势…

之所以他能处理序列数据,是因为在序列中前面的输入也会影响到后面的输出,相当于有了“记忆功能”。但是 RNN 存在严重的短期记忆问题,长期的数据影响很小(哪怕他是重要的信息)。

于是基于 RNN 出现了 LSTM 和 GRU 等变种算法。这些变种算法主要有几个特点:

  • 长期信息可以有效的保留
  • 挑选重要信息保留,不重要的信息会选择遗忘

RNN 几个典型的应用如下:

  • 文本生成
  • 语音识别
  • 机器翻译
  • 生成图像描述
  • 视频标记

c.生成网络-GAN

假设一个城市治安混乱,很快,这个城市里就会出现无数的小偷。在这些小偷中,有的可能是盗窃高手,有的可能毫无技术可言。假如这个城市开始整饬其治安,突然开展一场打击犯罪的“运动”,警察们开始恢复城市中的巡逻,很快,一批“学艺不精”的小偷就被捉住了。之所以捉住的是那些没有技术含量的小偷,是因为警察们的技术也不行了,在捉住一批低端小偷后,城市的治安水平变得怎样倒还不好说,但很明显,城市里小偷们的平均水平已经大大提高了。

警察们开始继续训练自己的破案技术,开始抓住那些越来越狡猾的小偷。随着这些职业惯犯们的落网,警察们也练就了特别的本事,他们能很快能从一群人中发现可疑人员,于是上前盘查,并最终逮捕嫌犯;小偷们的日子也不好过了,因为警察们的水平大大提高,如果还想以前那样表现得鬼鬼祟祟,那么很快就会被警察捉住。为了避免被捕,小偷们努力表现得不那么“可疑”,而魔高一尺、道高一丈,警察也在不断提高自己的水平,争取将小偷和无辜的普通群众区分开。随着警察和小偷之间的这种“交流”与“切磋”,小偷们都变得非常谨慎,他们有着极高的偷窃技巧,表现得跟普通群众一模一样,而警察们都练就了“火眼金睛”,一旦发现可疑人员,就能马上发现并及时控制——最终,我们同时得到了最强的小偷和最强的警察。

d.深度强化学习-RL

强化学习算法的思路非常简单,以游戏为例,如果在游戏中采取某种策略可以取得较高的得分,那么就进一步“强化”这种策略,以期继续取得较好的结果。这种策略与日常生活中的各种“绩效奖励”非常类似。我们平时也常常用这样的策略来提高自己的游戏水平。

在 Flappy bird 这个游戏中,我们需要简单的点击操作来控制小鸟,躲过各种水管,飞的越远越好,因为飞的越远就能获得更高的积分奖励。

这就是一个典型的强化学习场景:

  • 机器需要有一个明确的小鸟角色—代理
  • 需要控制小鸟飞的更远—目标
  • 整个游戏过程需要躲避各种水管—环境
  • 躲避水管的方法是让小鸟用力飞一下—行动
  • 飞的越远,就会获得越多的积分—奖励

你会发现,强化学习和监督学习、无监督学习 最大的不同就是不需要大量的“数据喂养”。而是通过自己不停的尝试来学会某些技能。

2 卷积神经网络 – CNN

卷积神经网络 – CNN 最擅长的就是图片的处理。它受到人类视觉神经系统的启发。

(1)CNN解决了什么问题?

在 CNN 出现之前,图像对于人工智能来说是一个难题,有2个原因:

  • a.图像需要处理的数据量太大,导致成本很高,效率很低
  • b.图像在数字化的过程中很难保留原有的特征,导致图像处理的准确率不高

a.需要处理的数据量太大

图像是由像素构成的,每个像素又是由颜色构成的。
你不得不了解的深度学习知识(一)

现在随随便便一张图片都是 1000×1000 像素以上的, 每个像素都有RGB 3个参数来表示颜色信息。

假如我们处理一张 1000×1000 像素的图片,我们就需要处理3百万个参数!

1000×1000×3=3,000,000

这么大量的数据处理起来是非常消耗资源的,而且这只是一张不算太大的图片!

卷积神经网络 – CNN 解决的第一个问题就是“将复杂问题简化”,把大量参数降维成少量参数,再做处理。

更重要的是:我们在大部分场景下,降维并不会影响结果。比如1000像素的图片缩小成200像素,并不影响肉眼认出来图片中是一只猫还是一只狗,机器也是如此。

b.保留图像特征

图片数字化的传统方式我们简化一下,就类似下图的过程:

你不得不了解的深度学习知识(一)

假如有圆形是1,没有圆形是0,那么圆形的位置不同就会产生完全不同的数据表达。但是从视觉的角度来看,图像的内容(本质)并没有发生变化,只是位置发生了变化。

所以当我们移动图像中的物体,用传统的方式的得出来的参数会差异很大!这是不符合图像处理的要求的。

而 CNN 解决了这个问题,他用类似视觉的方式保留了图像的特征,当图像做翻转,旋转或者变换位置时,它也能有效的识别出来是类似的图像。

那么卷积神经网络是如何实现的呢?在我们了解 CNN 原理之前,先来看看人类的视觉原理是什么?

(2)人类的视觉原理

深度学习的许多研究成果,离不开对大脑认知原理的研究,尤其是视觉原理的研究。

人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。下面是人脑进行人脸识别的一个示例:

你不得不了解的深度学习知识(一)

对于不同的物体,人类视觉也是通过这样逐层分级,来进行认知的:

你不得不了解的深度学习知识(一)

我们可以看到,在最底层特征基本上是类似的,就是各种边缘,越往上,越能提取出此类物体的一些特征(*、眼睛、躯干等),到最上层,不同的高级特征最终组合成相应的图像,从而能够让人类准确的区分不同的物体。

(3)卷积神经网络-CNN的基本原理

典型的CNN由3个部分构成:

  • a.卷积层
  • b.池化层
  • c.全连接层

卷积层负责提取图像中的局部特征;池化层用来大幅降低参数量级(降维);全连接层类似传统神经网络的部分,用来输出想要的结果。

你不得不了解的深度学习知识(一)

a.卷积-提取特征

卷积层的运算过程如下图,用一个卷积核扫完整张图片:

你不得不了解的深度学习知识(一)

这个过程我们可以理解为我们使用一个过滤器(卷积核)来过滤图像的各个小区域,从而得到这些小区域的特征值。

在具体应用中,往往有多个卷积核,可以认为,每个卷积核代表了一种图像模式,如果某个图像块与此卷积核卷积出的值大,则认为此图像块十分接近于此卷积核。如果我们设计了6个卷积核,可以理解:我们认为这个图像上有6种底层纹理模式,也就是我们用6中基础模式就能描绘出一副图像。以下就是25种不同的卷积核的示例:

你不得不了解的深度学习知识(一)

总结:卷积层的通过卷积核的过滤提取出图片中局部的特征,跟上面提到的人类视觉的特征提取类似。

b.池化层((下采样)--数据降维,避免过拟合

池化层简单说就是下采样,他可以大大降低数据的维度。其过程如下:

你不得不了解的深度学习知识(一)

上图中,我们可以看到,原始图片是20×20的,我们对其进行下采样,采样窗口为10×10,最终将其下采样成为一个2×2大小的特征图。

总结:池化层相比卷积层可以更有效的降低数据维度,这么做不但可以大大减少运算量,还可以有效的避免过拟合。

c.全连接层--输出结果

这个部分就是最后一步了,经过卷积层和池化层处理过的数据输入到全连接层,得到最终想要的结果。

经过卷积层和池化层降维过的数据,全连接层才能”跑得动”,不然数据量太大,计算成本高,效率低下。

你不得不了解的深度学习知识(一)

(4)CNN有哪些实际应用?

卷积神经网络 – CNN 很擅长处理图像。而视频是图像的叠加,所以同样擅长处理视频内容。下面给大家列一些比较成熟的应用:

  • 图像分类、检索

    图像分类是比较基础的应用,可以节省大量的人工成本,将图像进行有效的分类。对于一些特定领域的图片,分类的准确率可以达到 95%+,已经算是一个可用性很高的应用了。

    你不得不了解的深度学习知识(一)

  • 目标定位监测

    可以在图像中定位目标,并确定目标的位置及大小。

    你不得不了解的深度学习知识(一)

  • 目标分割

    简单理解就是一个像素级的分类。它可以对前景和背景进行像素级的区分、再高级一点还可以识别出目标并且对目标进行分类。

    你不得不了解的深度学习知识(一)

  • 人脸识别

    人脸识别已经是一个非常普及的应用了,在很多领域都有广泛的应用。

    你不得不了解的深度学习知识(一)

  • 骨骼识别

    骨骼识别是可以识别身体的关键骨骼,以及追踪骨骼的动作。

    你不得不了解的深度学习知识(一)

3 循环神经网络 – Recurrent Neural Network | RNN

(1)为什么需要RNN?独特价值是什么?

卷积神经网络-CNN已经很强大,但为什么还需要RNN呢?

卷积神经网络-CNN和普遍的算法大部分都是输入和输出的一一对应,也就是一个输入得到一个输出。不同的输入之间是没有联系的。

你不得不了解的深度学习知识(一)

但是在某些场景中,一个输入就不够了!

为了填好下面的空,取前面任何一个词都不合适,我们不但需要知道前面所有的词,还需要知道词之间的顺序。

你不得不了解的深度学习知识(一)

这种需要处理「序列数据 – 一串相互依赖的数据流」的场景就需要使用 RNN 来解决了。

典型的集中序列数据:

  • 文章里的文字内容
  • 语音里的音频内容
  • 股票市场中的价格走势
  • ……

(2)RNN的基本原理

传统神经网络的结构比较简单:输入层-隐藏层-输出层。如下图所示:

你不得不了解的深度学习知识(一)

RNN 跟传统神经网络最大的区别在于每次都会将前一次的输出结果,带到下一次的隐藏层中,一起训练。如下图所示:

你不得不了解的深度学习知识(一)

(3)RNN的具体案例

下面用一个具体的案例来看看 RNN 是如何工作的:

假如需要判断用户的说话意图(问天气、问时间、设置闹钟…),用户说了一句“what time is it?”我们需要先对这句话进行分词:

你不得不了解的深度学习知识(一)

然后按照顺序输入 RNN ,我们先将 “what”作为 RNN 的输入,得到输出「01」

你不得不了解的深度学习知识(一)

然后,我们按照顺序,将“time”输入到 RNN 网络,得到输出「02」。

这个过程我们可以看到,输入 “time” 的时候,前面 “what” 的输出也产生了影响(隐藏层中有一半是黑色的)。

你不得不了解的深度学习知识(一)

以此类推,前面所有的输入都对未来的输出产生了影响,大家可以看到圆形隐藏层中包含了前面所有的颜色。如下图所示:

你不得不了解的深度学习知识(一)

当我们判断意图的时候,只需要最后一层的输出「05」,如下图所示:

你不得不了解的深度学习知识(一)

RNN 的缺点也比较明显

通过上面的例子,我们已经发现,短期的记忆影响较大(如橙色区域),但是长期的记忆影响就很小(如黑色和绿色区域),这就是 RNN 存在的短期记忆问题。

  • RNN 有短期记忆问题,无法处理很长的输入序列
  • 训练 RNN 需要投入极大的成本

(4)RNN的优化算法

a.RNN到LSTM–长短期记忆网络

RNN 是一种死板的逻辑,越晚的输入影响越大,越早的输入影响越小,且无法改变这个逻辑。

LSTM 做的最大的改变就是打破了这个死板的逻辑,而改用了一套灵活了逻辑——只保留重要的信息。

简单说就是:抓重点!

你不得不了解的深度学习知识(一)

举个例子,我们先快速的阅读下面这段话:

你不得不了解的深度学习知识(一)

当我们快速阅读完之后,可能只会记住下面几个重点:

你不得不了解的深度学习知识(一)

LSTM 类似上面的划重点,他可以保留较长序列数据中的「重要信息」,忽略不重要的信息。这样就解决了 RNN 短期记忆的问题。

b.从 LSTM 到 GRU

Gated Recurrent Unit – GRU 是 LSTM 的一个变体。他保留了 LSTM 划重点,遗忘不重要信息的特点,在long-term 传播的时候也不会被丢失。

你不得不了解的深度学习知识(一)

GRU 主要是在 LSTM 的模型上做了一些简化和调整,在训练数据集比较大的情况下可以节省很多时间。

(5)RNN的应用和使用场景

只要涉及到序列数据的处理问题,都可以使用到,NLP 就是一个典型的应用场景。

你不得不了解的深度学习知识(一)

  • 文本生成:类似上面的填空题,给出前后文,然后预测空格中的词是什么。

  • 机器翻译:翻译工作也是典型的序列问题,词的顺序直接影响了翻译的结果。

  • 语音识别:根据输入音频判断对应的文字是什么。

  • 生成图像描述:类似看图说话,给一张图,能够描述出图片中的内容。这个往往是 RNN 和 CNN 的结合。

… 未完待续…