🚀 Introduction
一、什么是神经网络 Neural Network
我们常常用深度学习这个术语来指训练神经网络的过程。有时它指的是特别大规模的神经网络训练。那么神经网络究竟是什么呢?
💬 让我们从一个房价预测的例子开始讲起。
假设你有一个数据集,它包含了一些房子的信息(房屋面积),并且知道房屋价格。这时,你可能会利用线性回归拟合一个根据房屋面积预测房价的函数:
但是,我们知道价格永远不会是负数。因此,我们需要这个拟合直线最终在 0 结束:
💡 从趋近于零开始,然后变成一条直线。这个函数被称作 ReLU 激活函数,它的全称是 Rectified Linear Unit 修正线性单元。
我们把房屋的面积作为神经网络的输入(我们称之为 x),通过一个节点(神经元)即房价预测函数(蓝色折线),最终输出了价格(我们用 y 表示)。
下图就是最简单的神经网络:
值得一提的是,上图神经元的预测函数(蓝色折线)在神经网络应用中比较常见。我们把这个函数称为 ReLU 函数,即线性整流函数(Rectified Linear Unit),形如下图所示:
上面讲的只是由单个神经元(输入x仅仅是房屋面积一个因素)组成的神经网络,而通常一个大型的神经网络往往由许多神经元组成,就像通过乐高积木搭建复杂物体(例如火车)一样。比如基于房屋面积和卧室数量,可以估算家庭人口,基于邮编,可以估测步行化程度或者学校的质量:
实际上,上面这个例子真正的神经网络模型结构如下所示:
二、神经网络的监督学习(Supervised Learning with Neural Networks)
目前为止,由神经网络模型创造的价值基本上都是基于监督式学习(Supervised Learning)的。监督式学习与非监督式学习本质区别就是是否已知训练样本的输出y。在实际应用中,机器学习解决的大部分问题都属于监督式学习,神经网络模型也大都属于监督式学习。下面我们来看几个监督式学习在神经网络中应用的例子。
首先,第一个例子还是房屋价格预测。根据训练样本的输入x和输出y,训练神经网络模型,预测房价。
第二个例子是线上广告,这是深度学习最广泛、最赚钱的应用之一。其中,输入x是广告和用户个人信息,输出y是用户是否对广告进行点击。神经网络模型经过训练,能够根据广告类型和用户信息对用户的点击行为进行预测,从而向用户提供用户自己可能感兴趣的广告。
第三个例子是计算机视觉(computer vision)。电脑视觉是近些年来越来越火的课题,而电脑视觉发展迅速的原因很大程度上是得益于深度学习。其中,输入x是图片像素值,输出是图片所属的不同类别。
第四个例子是语音识别(speech recognition)。深度学习可以将一段语音信号辨识为相应的文字信息。
第五个例子是智能翻译,例如通过神经网络输入英文,然后直接输出中文。除此之外,
第六个例子是自动驾驶。通过输入一张图片或者汽车雷达信息,神经网络通过训练来告诉你相应的路况信息并作出相应的决策。至此,神经网络配合监督式学习,其应用是非常广泛的。
我们应该知道,根据不同的问题和应用场合,应该使用不同类型的神经网络模型。例如上面介绍的几个例子中:
对于一般的监督式学习(房价预测和线上广告问题),我们只要使用标准的神经网络模型就可以了。
而对于图像识别处理问题,我们则要使用卷积神经网络(Convolution Neural Network) 即 CNN。
而对于处理类似语音这样的序列信号时,则要使用循环神经网络(Recurrent Neural Network)即 RNN。还有其它的例如自动驾驶这样的复杂问题则需要更加复杂的混合神经网络模型。
CNN 一般处理图像问题,RNN 一般处理语音信号。他们的结构是什么意思?如何实现 CNN 和 RNN 的结构?这些问题我们将在以后的课程中来深入分析并解决。
三、(非) 结构化数据 (Un)Structured Data
你可能也听说过机器学习对于结构化数据和非结构化数据的应用:
结构化数据意味着数据的基本数据库。例如在房价预测中,你可能有一个数据库,有专门的几列数据告诉你卧室的大小和数量,这就是结构化数据。意思是每个特征,比如说房屋大小卧室数量,或者是一个用户的年龄,都有一个很好的定义。
非结构化数据是指比如音频,原始音频或者你想要识别的图像或文本中的内容。这里的特征可能是图像中的像素值或文本中的单个单词。
从历史经验上看,处理非结构化数据是很难的,与结构化数据比较,让计算机理解非结构化数据很难,而人类进化得非常善于理解音频信号和图像,文本是一个更近代的发明,但是人类真的很擅长解读非结构化数据。
神经网络的兴起就是这样最令人兴奋的事情之一,多亏了深度学习和神经网络,计算机现在能更好地解释非结构化数据,这是与几年前相比的结果,这为我们创造了机会。许多新的令人兴奋的应用被使用,语音识别、图像识别、自然语言文字处理,甚至可能比两三年前的还要多。
四、为什么神经网络会流行 Why is Deep Learning taking off
如果说深度学习和神经网络背后的技术思想已经出现数十年了,那么为什么直到现在才开始发挥作用呢?接下来,我们来看一下深度学习背后的主要动力是什么,方便我们更好地理解并使用深度学习来解决更多问题。
❓ 深度学习为什么这么强大?下面我们用一张图来说明。如下图所示,横坐标 x 表示数据量(Amount of data),纵坐标 y 表示机器学习模型的性能表现(Performance):
上图共有4条曲线。其中:
最底下的那条红色曲线代表了传统机器学习算法的表现,例如是 SVM,logistic regression,decision tree 等。当数据量比较小的时候,传统学习模型的表现是比较好的。但是当数据量很大的时候,其表现很一般,性能基本趋于水平。
红色曲线上面的那条黄色曲线代表了规模较小的神经网络模型(Small NN)。它在数据量较大时候的性能优于传统的机器学习算法。
黄色曲线上面的蓝色曲线代表了规模中等的神经网络模型(Media NN),它在在数据量更大的时候的表现比Small NN更好。
最上面的那条绿色曲线代表更大规模的神经网络(Large NN),即深度学习模型。从图中可以看到,在数据量很大的时候,它的表现仍然是最好的,而且基本上保持了较快上升的趋势。
值得一提的是,近些年来,由于数字计算机的普及,人类进入了大数据时代,每时每分,互联网上的数据是海量的、庞大的。如何对大数据建立稳健准确的学习模型变得尤为重要。传统机器学习算法在数据量较大的时候,性能一般,很难再有提升。然而,深度学习模型由于网络复杂,对大数据的处理和分析非常有效。所以,近些年来,在处理海量数据和建立复杂准确的学习模型方面,深度学习有着非常不错的表现。然而,在数据量不大的时候,例如上图中左边区域,深度学习模型不一定优于传统机器学习算法,性能差异可能并不大。
🚩 所以说,现在深度学习如此强大的原因归结为三个因素:
Data
Computation
Algorithms
其中,数据量的几何级数增加,加上 GPU 出现、计算机运算能力的大大提升,使得深度学习能够应用得更加广泛。另外,算法上的创新和改进让深度学习的性能和速度也大大提升。
💬 举个算法改进的例子,之前神经网络神经元的激活函数是 Sigmoid 函数,后来改成了ReLU函数。之所以这样更改的原因是对于 Sigmoid 函数,在远离零点的位置,函数曲线非常平缓,其梯度趋于 0,所以造成神经网络模型学习速度变得很慢。然而,ReLU 函数在 x 大于零的区域,其梯度始终为 1,尽管在 x 小于零的区域梯度为0,但是在实际应用中采用 ReLU 函数确实要比 Sigmoid 函数快很多。
💧 构建一个深度学习的流程是首先产生 Idea,然后将 Idea 转化为 Code,最后进行 Experiment。接着根据结果修改Idea,继续这种 Idea 👉 Code 👉 Experiment 的循环,直到最终训练得到表现不错的深度学习网络模型。如果计算速度越快,每一步骤耗时越少,那么上述循环越能高效进行。