<audio id="audio" title="42丨当我们谈深度学习的时候，我们都在谈什么？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/54/5e/541fcf4bf4b0ef0320f33b8b9eb32c5e.mp3"></audio>

在算法篇中，我们已经讲了数据挖掘十大经典算法，在实战篇中也了解了随机森林、逻辑回归的概念及工具使用。这些算法都属于传统的机器学习算法。你肯定听说过这两年很火的深度学习，那么机器学习算法和深度学习有什么关联呢？

在这篇文章中，我们会通过以下几个方面了解深度学习：

<li>
数据挖掘、机器学习和深度学习的区别是什么？这些概念都代表什么？
</li>
<li>
我们通过深度学习让机器具备人的能力，甚至某些技能的水平超过人类，比如图像识别、下棋对弈等。那么深度学习的大脑是如何工作的？
</li>
<li>
深度学习是基于神经网络构建的，都有哪些常用的网络模型？
</li>
<li>
深度学习有三个重要的应用领域，这三个应用领域分别是什么？
</li>

## 数据挖掘，机器学习，深度学习的区别是什么？

实际上数据挖掘和机器学习在很大程度上是重叠的。一些常用算法，比如K-Means、KNN、SVM、决策树和朴素贝叶斯等，既可以说是数据挖掘算法，又可以说是机器学习算法。那么数据挖掘和机器学习之间有什么区别呢？

数据挖掘通常是从现有的数据中提取规律模式（pattern）以及使用算法模型（model）。核心目的是找到这些数据变量之间的关系，因此我们也会通过数据可视化对变量之间的关系进行呈现，用算法模型挖掘变量之间的关联关系。通常情况下，我们只能判断出来变量A和变量B是有关系的，但并不一定清楚这两者之间有什么具体关系。在我们谈论数据挖掘的时候，更强调的是从数据中挖掘价值。

机器学习是人工智能的一部分，它指的是通过训练数据和算法模型让机器具有一定的智能。一般是通过已有的数据来学习知识，并通过各种算法模型形成一定的处理能力，比如分类、聚类、预测、推荐能力等。这样当有新的数据进来时，就可以通过训练好的模型对这些数据进行预测，也就是通过机器的智能帮我们完成某些特定的任务。

深度学习属于机器学习的一种，它的目标同样是让机器具有智能，只是与传统的机器学习算法不同，它是通过神经网络来实现的。神经网络就好比是机器的大脑，刚开始就像一个婴儿一样，是一张白纸。但通过多次训练之后，“大脑”就可以逐渐具备某种能力。这个训练过程中，我们只需要告诉这个大脑输入数据是什么，以及对应的输出结果是什么即可。通过多次训练，“大脑”中的多层神经网络的参数就会自动优化，从而得到一个适应于训练数据的模型。

所以你能看到在传统的机器学习模型中，我们都会讲解模型的算法原理，比如K-Means的算法原理，KNN的原理等。而到了神经网络，我们更关注的是网络结构，以及网络结构中每层神经元的传输机制。我们不需要告诉机器具体的特征规律是什么，只需把我们想要训练的数据和对应的结果告诉机器大脑即可。**深度学习会自己找到数据的特征规律！而传统机器学习往往需要专家（我们）来告诉机器采用什么样的模型算法，这就是深度学习与传统机器学习最大的区别。**

另外深度学习的神经网络结构通常比较深，一般都是5层以上，甚至也有101层或更多的层数。这些深度的神经网络可以让机器更好地自动捕获数据的特征。

## 神经网络是如何工作的

神经网络可以说是机器的大脑，经典的神经网络结构可以用下面的图来表示。

<img src="https://static001.geekbang.org/resource/image/06/b7/06d709117b776add64d1415ae209c0b7.jpg" alt=""><br>
这里有一些概念你需要了解。

**节点**：神经网络是由神经元组成的，也称之为节点，它们分布在神经网络的各个层中，这些层包括输入层，输出层和隐藏层。

**输入层**：负责接收信号，并分发到隐藏层。一般我们将数据传给输入层。

**输出层**：负责输出计算结果，一般来说输出层节点数等于我们要分类的个数。

**隐藏层**：除了输入层和输出层外的神经网络都属于隐藏层，隐藏层可以是一层也可以是多层，每个隐藏层都会把前一层节点传输出来的数据进行计算（你可以理解是某种抽象表示），这相当于把数据抽象到另一个维度的空间中，可以更好地提取和计算数据的特征。

**工作原理**：神经网络就好比一个黑盒子，我们只需要告诉这个黑盒子输入数据和输出数据，神经网络就可以自我训练。一旦训练好之后，就可以像黑盒子一样使用，当你传入一个新的数据时，它就会告诉你对应的输出结果。在训练过程中，神经网络主要是通过前向传播和反向传播机制运作的。

什么是前向传播和反向传播呢？

**前向传播**：数据从输入层传递到输出层的过程叫做前向传播。这个过程的计算结果通常是通过上一层的神经元的输出经过矩阵运算和激活函数得到的。这样就完成了每层之间的神经元数据的传输。

**反向传播**：当前向传播作用到输出层得到分类结果之后，我们需要与实际值进行比对，从而得到误差。反向传播也叫作误差反向传播，核心原理是通过代价函数对网络中的参数进行修正，这样更容易让网络参数得到收敛。

所以，整个神经网络训练的过程就是不断地通过前向-反向传播迭代完成的，当达到指定的迭代次数或者达到收敛标准的时候即可以停止训练。然后我们就可以拿训练好的网络模型对新的数据进行预测。

当然，深度神经网络是基于神经网络发展起来的，它的原理与神经网络的原理一样，只不过强调了模型结构的深度，通常有5层以上，这样模型的学习能力会更强大。

## 常用的神经网络都有哪些

按照中间层功能的不同，神经网络可以分为三种网络结构，分别为FNN、CNN和RNN。

**FNN**（Fully-connected Neural Network）指的是全连接神经网络，全连接的意思是每一层的神经元与上一层的所有神经元都是连接的。不过在实际使用中，全连接的参数会过多，导致计算量过大。因此在实际使用中全连接神经网络的层数一般比较少。

<img src="https://static001.geekbang.org/resource/image/c2/7a/c2bfd532360e5cc026aa12f45c86957a.jpg" alt=""><br>
**CNN**叫作卷积神经网络，在图像处理中有广泛的应用，了解图像识别的同学对这个词一定不陌生。CNN网络中，包括了卷积层、池化层和全连接层。这三个层都有什么作用呢？

**卷积层**相当于一个滤镜的作用，它可以把图像进行分块，对每一块的图像进行变换操作。

**池化层**相当于对神经元的数据进行降维处理，这样输出的维数就会减少很多，从而降低整体的计算量。

**全连接层**通常是输出层的上一层，它将上一层神经元输出的数据转变成一维的向量。

**RNN**称为循环神经网络，它的特点是神经元的输出可以在下一个时刻作用到自身，这样RNN就可以看做是在时间上传递的神经网络。它可以应用在语音识别、自然语言处理等与上下文相关的场景。

深度学习网络往往包括了这三种网络的变种形成，常用的深度神经网络包括AlexNet、VGG19、GoogleNet、ResNet等，我总结了这些网络的特点，你可以看下：

<img src="https://static001.geekbang.org/resource/image/49/9f/490ced74dc6cf70403e73c05f302449f.png" alt=""><br>
你能看出随着时间的推进，提出的深度学习网络层数越来越深，Top-5错误率越来越低。

你可能会问什么是Top-5错误率，实际上这些网络结构的提出和一个比赛相关，这个比赛叫做ILSVRC，英文全称叫做Large Scale Visual Recognition Challenge。它是一个关于大规模图像可视化识别的比赛，所基于的数据集就是著名的ImageNet数据集，一共包括了1400万张图片，涵盖2万多个类别。

表格中的AlexNet就是2012年的ILSVRC冠军，当时的Top-5正确率是84.7%，VGG和GoogleNet是2014年ILSVRC比赛的模型，其中GoogleNet是当时比赛的冠军，而VGG是当时比赛的亚军，它的效率低于GoogleNet。VGG有两个版本，VGG16和VGG19，分别是16层和19层的VGG网络，这两者没有本质的区别，只是网络深度不同。到了2015年，比赛冠军是ResNet，Top-5正确率达到了96.43%。ResNet也有不同的版本，比如ResNet50、ResNet101和ResNet152等，名称后面的数字代表的是不同的网络深度。之后ResNet在其他图像比赛中也多次拿到冠军。

## 深度学习的应用领域

从ImageNet跑出来的这些优秀模型都是基于CNN卷积神经网络的。实际上深度学习有三大应用领域，图像识别就是其中之一，其他领域分别是语音识别和自然语言处理。

这三个应用领域有一个共同的特性，就是都来自于信号处理。我们人类平时会处理图像信息，语音信息以及语言文字信息。机器可以帮助我们完成这三个应用里的某些工作。比如图像识别领域中图像分类和物体检测就是两个核心的任务。我们可以让机器判断图像中都有哪些物体，类别是什么，以及这些物体所处的位置。图像识别被广泛应用在安防检测中。此外人脸识别也是图像识别重要的应用场景。

Siri大家一定不陌生，此外还有我们使用的智能电视等，都采用了语音识别技术。语音识别技术可以识别人类的语音指令并进行交互。在语音导航中，还采用了语音合成技术，这样就可以让机器模拟人的声音为我们服务，Siri语音助手也采用了语音识别和合成的技术。

自然语言处理的英文缩写是NLP，它被广泛应用到自动问答、智能客服、过滤垃圾邮件和短信等领域中。在电商领域，我们可以通过NLP自动给商品评论打标签，在用户决策的时候提供数据支持。在自动问答中，我们可以输入自己想问的问题，让机器来回答，比如在百度中输入“姚明的老婆”，就会自动显示出”叶莉“。

<img src="https://static001.geekbang.org/resource/image/24/34/24fe2dae1682cdbd5aa4a92124d88234.png" alt=""><br>
此外这些技术还可以相互组合为我们提供服务，比如在无人驾驶中就采用了图像识别、语音识别等技术。在超市购物中也采用了集成图像识别、意图识别等技术等。

## 总结

今天我们大概了解了一下深度学习。深度学习也是机器学习的一种。我们之前讲解了数据挖掘十大经典算法，还有逻辑回归、随机森林算法等，这些都是传统的机器学习算法。在日常工作中，可以满足大部分的机器学习任务。但是对于数据量更大，更开放性的问题，我们就可以采用深度学习的算法，让机器自己来找规律，而不是通过我们指定的算法来找分类规律。

所以深度学习的普适性会更强一些，但也并不代表深度学习就优于机器学习。一方面深度学习需要大量的数据，另一方面深度学习的学习时间，和需要的计算资源都要大于传统的机器学习。你能看到各种深度学习的训练集一般都还是比较大的，比如ImageNet就包括了1400万张图片。如果我们没有提供大量的训练数据，训练出来的深度模型识别结果未必好于传统的机器学习。

实际上神经网络最早是在1986年提出来的，之后不温不火，直到ImageNet于2009年提出，在2010年开始举办每年的ImageNet大规模视觉识别挑战赛（ILSVRC），深度学习才得到迅猛发展。2016年Google研发的AlphaGo击败了人类冠军李世石，更是让人们看到了深度学习的力量。一个好问题的提出，可以激发无穷的能量，这是科技进步的源泉，也是为什么在科学上，我们会有各种公开的数据集。一个好的数据集就代表了一个好的问题和使用场景。正是这些需求的出现，才能让我们的算法有更好的用武之地，同时也有了各种算法相互比拼的平台。

<img src="https://static001.geekbang.org/resource/image/e8/b9/e88beadebefd5789efb08284193f65b9.png" alt=""><br>
今天我们聊了聊神经网络和深度学习，它们就像智能的黑盒子一样，通过训练可以帮我们处理各种问题，通过今天的学习，你能不能谈谈对深度学习工作原理的理解呢？以及深度学习都有哪些使用场景呢？

欢迎在评论区与我分享你的答案，也欢迎点击”请朋友读“，把这篇文章分享给你的朋友或者同事。


