目录
本文粗略地记录一下各个神经网络的特点和发展,仅供抛砖引玉,如需了解详情,可以自行深入搜索。
神经网络 (Neural Network)
在出现多层神经网络之前,Frank Rosenblatt 在 1957 年就发明了一种名为 Perceptron 的神经结构,这种神经结构十分简单,可以用一条公式来概括,也就是 $$y = \sigma (\mathbf{W}\mathbf{x}+b)$$
它的结构也可以用下图表示:
尽管结构看起来十分简单,但却能完成较为复杂的线性二元分类问题。然而,其严重的缺陷是不能完成非线性的二元分类问题,例如异或问题。在此基础上,人们将其改进为具有多层结构的多层感知机,也就是现在所说的神经网络。
其特点是将上一层网络的输出输入到下一层网络中,使用非线性的激活函数(Activation)如著名的 \(\sigma (x) = \frac{1}{1+e^{-x}}\)、\(\tanh (x)\) 函数,或者是其后发明的 \(\mathbf{ReLU}\) 函数,赋予神经网络强大的非线性拟合能力。
改进后的多层神经网络有了质的飞跃,理论上可以拟合任何连续函数。
然而我们并不知道神经网络各层的具体参数,但是借助 BP 算法,我们可以使用已有的数据来训练神经网络,这种使用标注好的数据来训练网络也称作监督式学习(Supervised Learning)。
反向传播(Back Propagation)
给定神经网络的结构之后我们可以对其进行训练,也就是自动调整参数使得其能较好地拟合出数据中隐含的函数。其思想是给定一个损失函数(Loss Function)来衡量当前网络参数的好坏,然后通过求导,找出使损失函数下降最快的方向,并且依据这个标准更新已有的参数,当损失函数下降的幅度足够小,或者训练足够的次数时候,我们就可以停止训练,认为训练已经结束。
BP 算法是机器学习中最为重要的一个概念,它几乎广泛地应用于每一个神经网络的训练中,为了方便计算,计算机科学家利用计算图发明了自动求导的技术,使得人们可以专注于神经网络结构的部分,而不必太操心过多细节。著名的框架有 Google 的 TensorFlow
,Amazon 的 MXNet
和新兴的 pytorch
等等。由于 Python
语言编程方便,且多数机器学习框架也提供了 Python
接口,Python
成为了人工智能领域使用广泛的一种编程语言。
调参
尽管多数参数的学习是全自动的,但是仍有一些需要人工调整的参数来改善神经网络结构的学习性能,这些参数也称为超参数(Hyper Parameter),比如学习率(Learning Rate)\(\alpha\),它决定了参数更新的幅度,如果太小会造成学习过于缓慢,如果太大则会导致神经网络错过最优解,甚至朝着相反的方向学习。人们可以借助学习过程中一些标准的变化来调整参数,使得网络尽可能最优。
卷积神经网络(Convolutional Neural Network)
卷积神经网络,简称 CNN,顾名思义,网络中含有卷积这个操作。其最初由 LeCun 提出。当时人们想利用神经网络来解决图片识别问题,比如邮政编码的手写数字识别。如果将图片的每一个像素都当成特征输入到神经网络中,会造成参数过多的问题,而且训练效果也不如人意。卷积操作简单来讲就是用一个小的矩阵在图片上滚动然后按元素相乘,再将结果求和,便得到了一个新的图片。这样做的好处是参数共享,不仅减少了参数量、加快了学习速度,也使得神经网络可以学习到图片的一些共同特征。它的一种结构如下图所示:
其中除了卷积操作还包含了池化操作,可以起到一定的降维效果,同时最大池化也有特征强化的效果,它的操作和卷积类似,常见的有最大池化和平均池化两种,最常用的是最大池化。
在简单的 CNN 基础上,人们不停地改进,发明了 VGG-16
、GoogLeNet
、YOLO
、R-CNN
、Mask R-CNN
等等更深的、效果也更好的神经网络,其中有些网络不仅可以实现分类的功能,还可以对图片中的物体位置进行具体的标注。
CNN 也有类似艺术风格迁移的有趣的应用,可以将图片变成指定的艺术风格。CNN 在人脸识别任务上也表现得十分出色。
循环神经网络(Recurrent Neural Network)
循环神经网络,简称 RNN,则是一种循环式的神经网络。它主要用于随时间变化的序列问题,比如自然语言、语音识别等等。其特点是不断将自己的输出作为输入,以达到循环的效果。为了赋予其像人类一样的记忆力,人们发明了 LSTM
(长短时记忆)、GRU
(门控单元)等单元,改善学习效果。在此基础上,由于一个序列中的部分可能受到序列中不同位置不同程度的影响,比如英语中一个句子的谓语形式由主语、时态等等决定,所以人们引入了注意力模型(Attention),来让模型具有像人一样的注意力。
值得一提的是,基于神经网络的语音识别效果已经远远好于以前人们用一些数学模型手动构建的识别模型的效果了,可见神经网络的强大。
对抗生成网络(Generative Adversarial Network)
对抗生成网络,简称 GAN,是近年来比较有趣的神经网络之一。它可以用来“无中生有”,生成图片。它的特点是同时训练两个网络,一个生成者,一个识别者。生成者需要尽可能生成识别者不能识别为假图片的图片,而识别者则需要尽可能识别出生成者生成的假图片。训练的时候可以用真假图片混合输入的办法,来训练识别者,而生成者则根据识别者的反馈训练自己,十分有趣。
组合使用
不同的神经网络可以组合使用,比如我们可以组合 CNN 以及 RNN 来进行看图说话的任务。可以用 CNN 来提取图片的特征,然后 RNN 根据特征合成出一个句子。又或者两个 RNN 组合起来实现机器翻译。多种网络组合可以实现更多惊人的功能。
结语
机器学习或者深度学习正在蓬勃发展之中,尽管现成有不少的框架和模型可以使用,但其本质仍然是由微积分、线性代数、概率统计学构建的数学模型。万变不离其宗,学好数学物理,可以大大加深我们对机器学习的理解,同时帮助我们发明新的算法或者新的模型。希望看了本文的你可以对现在一些比较通用的机器学习模型有所了解。