神经网络、有监督学习与深度学习从属于笔者的Deep Learning Specialization 课程笔记系列文章,本文主要记述了笔者学习 Andrew NG Deep Learning Specialization 系列课程的笔记与代码实现。
神经网络、有监督学习与深度学习
深度学习正在逐步地改变世界,从网络搜索、广告推荐这样传统的互联网业务到健康医疗、自动驾驶等不同的行业领域。百年前的电气革命为社会带来了新的支柱产业,而如今 AI 正是新时代的电力基础,驱动社会技术的快速发展。本课程的第一部分,关注于如何构建包括深度神经网络在内的神经网络以及如何利用数据训练该网络,课程的最后将会构建出可识别动物的深度神经网络。本课程的第二部分将会讲解更多有关于深度学习实践的相关资料,包括超参数调优、正则化、如何从 Momentum Armrest Prop 以及 AD Authorization 等算法中选择合适的优化算法。第三部分将会学习如何自定义机器学习项目,如何进行数据预处理、将数据应用到模型训练、提取交叉校验的训练集与验证集等内容。第四部分将会着眼于卷积神经网络 CNN,如何构建经典的 CNN 模型。在最后的第五部分,将会学习构建序列模型(Seq2Seq 等)以解决自然语言处理相关的任务;典型的序列模型包括了 RNNs、LSTM 等。
神经网络
深度学习往往关联于大规模神经网络的训练,本章我们即来了解下何谓神经网络。以经典的房屋价格预测为例,假设我们拥有六组房屋数据,每组包含了房屋的面积以及价格;我们希望寻找合适的函数来根据房屋的尺寸预测房屋价格。如果我们采用线性回归来解决这个问题,我们会画出一条 y = kx + b
这样的函数线,其形式如下黑色线所示:
我们知道房屋的价格不可能为负数,因此我们可以将使用 ReLU(Rectified Linear Unit)函数来描述尺寸与价格之间的关系,如上图蓝色线型所示。我们可以将该问题抽象为输入为房间的尺寸 x,输出为房间的价格 y,而某个神经元即为接受输入并且进行合适的运算之后输出目标值的函数:
如上图所示即是最简单的单元神经网络,而复杂的神经网络即是由无数的神经元分层连接堆叠而成。譬如实际的房屋价格会由尺寸、卧室数目、所属区域(Zip Code)以及社区的富裕程度影响。我们理想的神经网络即是能够自动帮我们构建隐层(Hidden Units),即输入单元之间的关系以进行最好地预测:
给定输入之后,神经网络的任务之一即是为我们自动构建隐层;每个隐层单元都会输入输入层的全部特征作为输入值。
有监督学习
神经网络的分类很多,不过截止到目前大多数的有价值的神经网络都还是基于机器学习中所谓的有监督学习(Supervised Learning)。在有监督学习中,我们的训练数据集中已知了特征与结果输出之间的对应关系,而目标就是寻找正确的输入与输出之间的关系表示。譬如目前最赚钱的深度学习应用之一,在线广告中就是输入有关于网站展示的信息以及部分用户的信息,神经网络会预测用户是否会点击该广告;通过为不同的用户展示他们最感兴趣的广告,来增加用户的实际点击率。下表即列举了几种常见的领域应用与它们的输入输出:
计算机视觉近年来也发展迅速,典型的应用之一即是图片标注;我们可能随机输入一张图片来寻找与它最相近的图片。语音识别则是能够将用户输入的语音数据转化为文字表述;机器翻译则是能将不同语言间的语句进行自由转化,譬如将某个英文段落转化为对应的中文表述。而在自动驾驶中,我们可能会输入某张从雷达中获取的车前图片,来判断路上其他车的相对位置。而对于这些不同的行业领域我们也需要应用不同类型的神经网络,譬如对上文提及的房价预测,我们就可以使用标准的神经网络;而对于图片应用则会优先考虑使用卷积神经网络(CNN)。
而对于序列数据,譬如随时间播放的音频流,其可以表示为一维的时间序列,我们通常会使用 RNN 来处理这个类型的数据。而在文本处理中,我们也常常将文本表示为字符序列,因此也往往会使用 RNN 来处理这个类型的数据。对于自动驾驶这样更为复杂的应用,我们可能会需要同时处理图片、文本等多种类别的数据,因此会使用混合网络架构。
模型训练中我们常见的另一组概念就是结构化数据与非结构化数据,结构化数据有点类似于关系型数据库中存放的数据;譬如上面介绍的房屋价格预测中,我们会拥有包含了尺寸、卧室数等列的数据表,这种形式的就是所谓结构化数据。结构化数据中每个特征,譬如房间尺寸、卧室数目、用户年龄等都有可解释的意义;而非结构化数据的典型代表,语音、文本或者图片,往往会使用像素值或者单个词作为特征向量的组成,这些特征值往往很难有实际意义的解释。人类经过长时间的进化之后能够较好地辨析非结构化数据,而利用深度学习技术,现在机器也在不断提升自身对于非结构化数据的辨析能力。
深度学习
深度学习背后的理论基础与技术概念已经出现了有数十年,本部分我们即来讨论为何直到近些年深度学习才得到了爆炸性的发展。我们可以用下图来描述数据集的大小与算法性能(准确率、推准率等)之间的关系:
对于支持向量机、Logistics 回归这样经典的机器学习算法而言,在数据量从零递增的初始阶段,其性能会不断提升;不过很快就会触碰到天花板,此时性能很难再随着数据集的增长而提升。而伴随着移动互联网时代的到来,我们能够从网站、移动应用或者其他安装在电子终端设备上的传感器中获取到海量的数据;这些数据在开启大数据时代的同时也为深度学习的发展提供了坚实的基础。我们在上图中也可以看出,越是大型的神经网络随着数据量的增加,其性能提升的越快,并且其性能天花板也是越高。
深度学习崛起的另一个重要基石就是计算能力的提升,这里不仅指新一代 CPU 或者 GPU 设备,还有是在许多基础优化算法上的革新,都使得我们能够更快地训练出神经网络。譬如早期我们会使用 Sigmod 函数作为神经网络的激活函数,随着 x 的增大其梯度会逐渐趋近于零,这就导致了模型收敛变得相对缓慢;而 ReLU 则能较好地避免这个问题,其在正无穷大时梯度值依然保持恒定。简单地从 Sigmod 函数迁移到 ReLU 即能够为模型训练带来极大的效率提升,这也方便了我们构建出更复杂的神经网络。