当前位置: 首页 > 科技观察

浅谈深度学习的基本概念和方法

时间:2023-03-16 23:45:41 科技观察

本文旨在为深度学习提供一个直观简洁的指南,涵盖深度学习的基本概念,不涉及很多数学和理论细节。当然,如果想做更深入的研究,数学肯定是必不可少的,但是这个系列主要是通过图片和类比来帮助初学者快速建立大局。核心概念机器学习(MachineLearning)在机器学习中,我们(1)读取数据,(2)训练模型,(3)使用模型对新数据进行预测。训练可以看作是一个模型在获得新数据时逐渐学习的过程。在每一步,模型都会进行预测并获得有关其准确性的反馈。以某种度量(例如与正确解决方案的距离)的错误形式的反馈用于纠正预测错误。学习是参数空间中的迭代过程:当你调整参数来纠正预测时,模型可能会再次出错。模型需要多次迭代才能具有良好的预测能力,这种“预测-修正”的过程一直持续到模型没有改进的余地为止。特征工程(FeatureEngineering)特征工程从数据中提取有用的模式,使机器学习模型更容易进行分类。例如,以一串绿色或蓝色像素区域为标准,判断一张照片是陆生动物还是水生动物。此功能对于机器学习模型非常有效,因为它限制了需要考虑的类的数量。在大多数预测任务中,特征工程是获得良好结果的必备技能。但是,由于不同的数据集有不同的特征工程方法,很难得出通用的规则,只能是一些一般的经验,这使得特征工程更像是一门艺术而不是一门科学。一个数据集中极其关键的特征在另一个数据集中可能没有用(例如,下一个数据集全是植物)。正是因为特征工程如此困难,科学家们才开发出自动特征提取的算法。许多任务已经可以自动化(比如物体识别、语音识别),特征工程仍然是复杂任务(比如Kaggle机器学习竞赛中的大多数任务)中最有效的技术。特征学习(FeatureLearning)特征学习算法在同一类中寻找共同的模式,并自动提取它们进行分类或回归。特征学习是由算法自动完成的特征工程。在深度学习中,卷积层极其擅长寻找图片中的特征并映射到下一层,形成非线性特征的层次结构,复杂度逐渐增加(例如:圆、边->鼻子、眼睛、脸颊)。最后一层使用所有生成的特征进行分类或回归(卷积网络的最后一层,本质上是多项逻辑回归)。图1:深度学习算法学习的分层特征。每个特征相当于一个过滤器,使用特征(如鼻子)对输入图像进行过滤。如果发现这个特征,对应的单元就会产生高激励,是后续分类阶段存在该类别的高指标。图1显示了深度学习算法生成的特征。这些特征的含义非常清楚的情况很少见,因为大多数特征通常是难以理解的,尤其是递归神经网络、LSTM或特别深的深度卷积网络。在深度学习(DeepLearning)中,在分层特征学习中,我们提取几层非线性特征并将它们传递给分类器,分类器综合所有特征进行预测。我们有意堆叠这些深层的非线性特征,因为层数少,无法学习到复杂的特征。从数学上可以证明,单层神经网络最能学习到的特征是圆和边,因为它们包含了一次非线性变换所能承载的最多信息。为了生成信息量更大的特征,我们不能直接操作这些输入,而是继续变换第一批特征(边和圆)以获得更复杂的特征。研究表明,人脑具有相同的工作机制:第一层神经,即视锥细胞接收信息的地方,对边缘和圆圈更敏感,而更深层的大脑皮层则对更复杂的结构敏感,例如人脸。层次特征学习诞生于深度学习之前,其结构面临着许多严重的问题,例如梯度消失——梯度在深层变得太小而无法提供任何学习信息。这使得层次结构的性能比一些传统的机器学习算法(如支持向量机)差。为了解决梯度消失的问题,让我们可以训练出几十层非线性层和特征,许多新的方法和策略应运而生,“深度学习”一词也由此而来。2010年代初期,研究发现在GPU的帮助下,激活函数具有足以训练深层结构的梯度流,自此深度学习开始稳步发展。深度学习并不总是与深度非线性层次特征相关联,有时与序列数据中的长期非线性时间依赖性相关联。对于序列数据,大多数其他算法只有最后10个时间步长的记忆,而LSTM循环神经网络(由SeppHochreiter和JürgenSchmidhuber于1997年发明)使网络能够倒退数百个时间步长以做出正确的预测。虽然LSTM已经隐藏了将近10年,但自从2013年与卷积网络结合后,其应用迅速增长。基本概念逻辑回归(LogisticRegression)回归分析预测统计输入变量之间的关系以预测输出变量。逻辑回归利用输入变量在有限个输入变量中产生输出,比如“得了癌症”/“没有得癌症”,或者图片的类型比如“鸟”/“车”/“狗”/“猫”/“马”。逻辑回归使用逻辑sigmoid函数(见图2)为输入值分配权重,以产生两个类别的预测(在多项逻辑回归中,它是多类别的)。逻辑回归很像非线性感知器或没有隐藏层的神经网络。主要区别在于,只要输入变量满足某些统计特性,逻辑回归就是可解释和可靠的。如果这些统计特性成立,则只需很少的输入数据即可生成非常稳健的模型。因此,逻辑回归在许多数据稀疏的应用中具有极高的价值。例如在医学或社会科学中,逻辑回归用于分析和解释实验结果。因为逻辑回归简单快速,对大数据集也很友好。在深度学习中,用于分类的神经网络中,最后几层一般是逻辑回归。本系列将深度学习算法视为特征学习的阶段,然后将其传递给逻辑回归作为分类的输入。人工神经网络(AritificialNeuralNetwork)人工神经网络(1)读取输入数据,(2)进行变换计算加权和,(3)对变换结果应用非线性函数计算中间状态。这三个步骤合起来称为一个“层”,转换函数称为一个“单元”。中间状态——特征——也是另一层的输入。通过这些步骤的重复,人工神经网络学习到很多层的非线性特征,最后将它们组合起来得到一个预测。神经网络的学习过程是产生一个误差信号——网络的预测值与期望值之间的差异——然后利用这些误差来调整权重(或其他参数),使预测更加准确。Kaiser:下面是几个词的分析,包括近几年的习惯变化。我认为没有必要深入研究它。单位(Unit)单位有时指的是一层中的激活函数,输入通过这些非线性激活函数进行变换,比如logisticsigmoid函数。通常一个单元连接多个输入和多个输出,也有更复杂的,例如包含多个激活函数并连接到非线性函数的长短期记忆(LSTM)单元,或最大输出单元,在一个特殊布局。LSTM通过输入的一系列非线性变换来计算最终输出。池化、卷积和其他输入变换函数通常不称为单元。人工神经元人工神经元——或称神经元——是“单元”的同义词,但表现出与神经生物学和人脑的密切联系。事实上,深度学习与大脑关系不大。例如,现在人们认为生物神经元更像是一个完整的多层感知器,而不是单个人工神经元。神经元是在去年AI寒冬期间引入的,目的是将最成功的神经网络与失败的感知器区分开来。然而,自从2012年深度学习取得巨大成功后,媒体经常用“神经元”这个词来谈事情,并将深度学习比作人脑的模仿。这对于深度学习领域来说实际上是误导和危险的。今天,“神经元”一词已被弃用,取而代之的是更准确的“单位”。激活函数(AcitivationFunction)激活函数读取加权数据(输入数据和矩阵乘法的权重),并输出数据的非线性变换。比如output=max(0,weight_{data})就是修改线性激活函数(本质上是把负值变成0)。“单元”和“激励函数”的区别在于单元可以更复杂,比如一个单元可以包含多个激活函数(比如LSTM单元)或者更复杂的结构(比如Maxout单元)。Kaiser:原文中的例子显然把简单的问题复杂化了,建议略过。线性激活函数和非线性激活函数的区别可以通过一组加权值之间的关系来体现:想象4个点A1、A2、B1、B2。点(A1/A2)和(B1/B2)很近,但A1和B1,B2很远,A2也很远。经过线性变换后,点之间的关系会发生变化,比如A1和A2很远,但同时B1和B2也很远。但是(A1/A2)和(B1/B2)的关系没有改变。而非线性变换则不同,我们可以增加A1和A2之间的距离,同时缩小B1和B2之间的距离,从而建立一个复杂度更高的新关系。在深度学习中,每一层的非线性激活函数都会产生更复杂的特征。而纯线性变换,即使有1000层,也可以用单层表示(因为一系列的矩阵乘法可以用一个矩阵乘法来表示)。这就是为什么非线性激活函数在深度学习中如此重要的原因。层(Layer)是深度学习更高级的基本单元。层是一个容器,它接受加权输入,通过非线性激活函数对其进行变换,并将其作为输出传递给下一层。一个层通常只包含一个激活函数、池化、卷积等,因此可以很容易地与网络的其他部分进行比较。第一层和最后一层分别称为“输入层”和“输出层”,中间的层称为“隐藏层”。卷积卷积是一种数学运算,表达了混合两个函数或两条信息的规则:(1)特征图或输入数据,与(2)卷积核混合形成(3)变换特征图。卷积通常也被认为是一个过滤器。卷积核(kernel)对特征图进行过滤,寻找某种信息。例如,卷积核可能只找到边缘并丢弃其他信息。图3:使用边缘检测卷积核对图像进行卷积。卷积在物理和数学中非常重要,因为他在时域和空间(位置(0,30),像素值147)和频域(幅度0.3,频率30Hz,相位60度)之间架起了一座桥梁。这个桥梁的建立是通过傅里叶变换:当你对卷积核和特征图都进行傅里叶变换时,卷积运算就大大简化了(积分变成了乘法)。图4:计算图像窗口在整个图像上滑动的卷积。原始图像(绿色)的图像窗口(黄色)乘以卷积核(红色字母)再相加得到特征图中的一个向量(ConvolvedFeature中的粉色单元)。卷积可以描述信息的扩散。例如,当你在不搅拌的情况下将牛奶倒入咖啡中,这就是扩散,可以用卷积来准确描述(像素向图像边缘扩散)。在量子力学中,这描述了当你测量一个量子的位置时,它处于特定位置的概率(像素位于边缘最高位置的概率)。在概率论中,作者描述了互相关,即两个序列的相似度(如果特征(如鼻子)中的像素与图像(如面部)重叠,则相似度高)。在统计学中,卷积描述了正常输入的加权移动平均值(边缘权重高,其他地方权重低)。还有很多其他不同角度的解释。Kaiser:这里的“缘”和之前的缘不同。原词是contour,指的是决策边界。比如人脸识别,人脸的轮廓就是轮廓,识别的重点。然而,对于深度学习,我们不知道卷积的哪种解释是正确的。互相关解释是目前最有效的:卷积滤波器是一个特征检测器,输入(featuremap)被某个特征(kernel)过滤,如果检测到该特征,那么输出就高。这也是图像处理中互相关的解释。图5:图像的互相关。卷积核倒过来,就是互相关。kernel可以理解为一个特征检测器,如果检测到,就会产生高输出(白色),否则就是低输出(黑色)。池化/子采样(Pooling/Sub-Sampling)池化过程从特定区域读取输入并将其压缩为单个值(子采样)。信息集中是卷积神经网络中的一个有用属性,这样输出连接通常会接收到相似的信息(信息通过漏斗流向下一个卷积层的正确位置)。这提供了基本的旋转/平移不变性。比如人脸不在图片中央,只是稍微偏移了一点,这应该不会影响识别,因为池化操作把信息导入到了正确的位置,所以卷积滤波器还是可以检测到人脸的。池化区域越大,信息被压缩得越多,从而形成一个更容易适应显存的“细长”网络。但是如果poolingarea太大,丢失的信息太多,预测能力也会降低。Kaiser:以下部分将前面列出的概念串起来,是全文的精华。ConvolutionalNeuralNetwork(CNN)卷积神经网络,或卷积网络,使用卷积层对输入进行过滤以获得有效信息。自动学习卷积层的参数,自动调整过滤器以提取最有用的信息(特征学习)。例如,对于通用物体识别任务,物体的形状可能是最有用的;对于鸟类识别人来说,颜色可能是最有用的(因为鸟类的形状相似,但颜色各不相同)。一般我们使用多个卷积层来过滤图像,每一层之后得到的信息越来越抽象(层次特征)。卷积网络使用池化层来实现有限的平移/旋转不变性(检测对象,即使它们不在通常的位置)。池化还可以减少内存消耗,从而可以使用更多的卷积层。最近的卷积网络使用inception模块,即1x1的卷积核,进一步减少内存消耗,加速计算和训练过程。图6:交通标志图像由4个5x5卷积核过滤,产生4个特征图,它们是“最大池化”的。下一层将10个5x5卷积滤波器应用于先前下采样的图像并在那里汇集。最后一层是全连接层,其中所有特征都被组合并传递给分类器(本质上是逻辑回归)。在Inception卷积网络中,inception模块旨在以更高的计算效率执行更深更大的卷积层。Inception使用一个1x1的卷积核来生成一个小的特征图。例如,192个28x28的featuremap经过64个1x1的卷积后可以压缩成64个28x28的featuremap。因为尺寸变小了,这些1x1的卷积后面可以接大的卷积,比如3x3、5x5。除了1x1卷积,maxpooling也用于降维。Inception模块的输出,所有的大卷积被拼接成一个大的featuremap,然后传给下一层(或inception模块)。