深度学习知识笔记

<你还会熟悉使用深度学习来解决数据问题的标准工作流程>
<对于未来或当前的机器学习从业者来说,重要的是能够从噪声中识别出信号,从而在过度炒作的新闻稿中发现改变世界的重大进展>
<到目前为止,深度学习已经取得了哪些进展?深度学习有多重要?接下来我们要做什么?>
<什么是人工智能、机器学习与深度学习>
<图灵还思考了这样一个问题:通用计算机是否能够学习与创新?他得出的结论是“能”>
<【机器学习系统是训练出来的,而不是明确地用程序编写出来的。】>
<【将与某个任务相关的许多示例输入机器学习系统,它会在这些示例中找到统计结构,从而最终找到规则将任务自动化。】>
<给定包含预期结果的示例,机器学习将会发现执行一项数据处理任务的规则>。
因此,我们<【需要以下三个要素来进行机器学习】>
<输入数据点>
<预期输出的示例>
<衡量算法效果好坏的方法。><【这个调节步骤就是我们所说的学习】。>
<机器学习和深度学习的核心问题在于有意义地变换数据,换句话说,在于学习输入数据的有用表示(representation)—这种表示可以让数据更接近预期输出。>
<什么是表示?这一概念的核心在于以一种不同的方式来查看数据(即表征数据或将数据编码)。>
<【机器学习中的学习指的是,寻找更好数据表示的自动搜索过程。】>
<【所有机器学习算法都包括自动寻找这样一种变换:这种变换可以根据任务将数据转化为更加有用的表示。>
<机器学习算法在寻找这些变换时通常没有什么创造性,而仅仅是遍历一组预先定义好的操作,这组操作叫作假设空间】>
<这就是机器学习的技术定义:在预先定义好的可能性空间中,利用反馈信号的指引来寻找输入数据的有用表示。>
<深度学习是机器学习的一个分支领域:它是从数据中学习表示的一种新方法,强调从连续的层(layer)中进行学习,这些层对应于越来越有意义的表示。>
<“深度学习”中的“深度”指的并不是利用这种方法所获取的更深层次的理解,而是指一系列连续的表示层。><【数据模型中包含多少层,这被称为模型的深度】(depth)。>
<神经网络的结构是逐层堆叠。>
<【将深度网络看作多级信息蒸馏操作:信息穿过连续的过滤器,其纯度越来越高】(即对任务的帮助越来越大)。>
<这就是深度学习的技术定义:学习数据表示的多级方法。>
<【深度神经网络通过一系列简单的数据变换(层)来实现这种输入到目标的映射,而这些数据变换都是通过观察示例学习到的】。>
<用术语来说,每层实现的变换由其权重来参数化(parameterize,见图1-7)。><【深度学习的意思是为神经网络的所有层找到一组权重值,使得该网络能够将每个示例输入与其目标正确地一一对应】。>
<这种调节由优化器(optimizer)来完成,它实现了所谓的反向传播(backpropagation)算法,这是深度学习的核心算法。>
<贝叶斯定理和统计学基础可以追溯到18世纪,你学会了这两点就可以开始使用朴素贝叶斯分类器了。>
<反向传播算法——一种利用梯度下降优化来训练一系列参数化运算链的方法>
<SVM通过两步来寻找决策边界。>
<将数据映射到高维表示从而使分类问题简化,这一技巧可能听起来很不错,但在实践中通常是难以计算的。>
<核函数是一个在计算上能够实现的操作,将原始空间中的任意两点映射为这两点在目标表示空间中的距离,完全避免了对新表示进行直接计算。>
<核函数通常是人为选择的,而不是从数据中学到的>——对于SVM来说,只有分割超平面是通过学习得到的。>
<随机森林适用于各种各样的问题,对于任何浅层的机器学习任务来说,它几乎总是第二好的算法。>
<随机森林迅速成为平台上人们的最爱,直到2014年才被梯度提升机所取代。>
<它使用了梯度提升方法,通过迭代地训练新模型来专门解决之前模型的弱点,从而改进任何机器学习模型的效果。>
<将梯度提升技术应用于决策树时,得到的模型与随机森林具有相似的性质,但在绝大多数情况下效果都比随机森林要好。>
<它可能是目前处理非感知数据最好的算法之一(如果非要加个“之一”的话)。>
<自2012年以来,深度卷积神经网络(convnet)已成为所有计算机视觉任务的首选算法。><更一般地说,它在所有感知任务上都有效。>
<深度学习发展得如此迅速,主要原因在于它在很多问题上都表现出更好的性能。但这并不是唯一的原因。深度学习还让解决问题变得更加简单,因为它将特征工程完全自动化,而这曾经是机器学习工作流程中最关键的一步。>
<先前的机器学习技术(浅层学习)仅包含将输入数据变换到一两个连续的表示空间,通常使用简单的变换,比如高维非线性投影(SVM)或决策树。>
<深度学习从数据中进行学习时有两个基本特征:第一,通过渐进的、逐层的方式形成越来越复杂的表示;第二,对中间这些渐进的表示共同进行学习,每一层的变化都需要同时考虑上下两层的需要。>
<具体而言,梯度提升机用于处理结构化数据的问题,而深度学习则用于图像分类等感知问题。>
<梯度提升机,用于浅层学习问题;深度学习,用于感知问题。><用术语来说,你需要熟悉XGBoost和Keras,>
<深度学习用于计算机视觉的两个关键思想,即卷积神经网络和反向传播>
<机器学习不是数学或物理学,靠一支笔和一张纸就能实现重大进展。它是一门工程科学。>
<2016年,Google在其年度I/O大会上展示了张量处理器(TPU)项目>
<关键问题在于通过多层叠加的梯度传播。随着层数的增加,用于训练神经网络的反馈信号会逐渐消失。>
<人们发现了更先进的有助于梯度传播的方法,比如批标准化、残差连接和深度可分离卷积。>
<深度学习不需要特征工程,它将复杂的、不稳定的、工程量很大的流程替换为简单的、端到端的可训练模型,这些模型通常只用到五六种不同的张量运算。>
<要理解深度学习,需要熟悉很多简单的数学概念:张量、张量运算、微分、梯度下降等。>
<引出张量和梯度下降的概念,>
<我们将使用MNIST数据集,它是机器学习领域的一个经典数据集>
<工作流程如下:>
<其次,网络学习将图像和标签关联在一起;>
<神经网络的核心组件是层(layer),它是一种数据处理模块,你可以将它看成数据过滤器。>
<要想训练网络,我们还需要选择编译(compile)步骤的三个参数。>
<优化器(optimizer):基于训练数据和损失函数来更新网络的机制。>
<在训练和测试过程中需要监控的指标(metric):本例只关心精度,即正确分类的图像所占的比例。>
<我们还需要对标签进行分类编码>
<训练精度和测试精度之间的这种差距是过拟合(overfit)造成的。过拟合是指机器学习模型在新数据上的性能往往比在训练数据上要差,它是第3章的核心主题。>
<仅包含一个数字的张量叫作标量(scalar,也叫标量张量、零维张量、0D张量)。>
<数字组成的数组叫作向量(vector)或一维张量(1D张量)。>
<向量组成的数组叫作矩阵(matrix)或二维张量(2D张量)。>
<张量是由以下三个关键属性来定义的>
<形状。这是一个整数元组,表示张量沿每个轴的维度大小(元素个数)>
<数据类型(在Python库中通常叫作dtype)。>
<此外,深度学习模型不会同时处理整个数据集,而是将数据拆分成小批量。>
<我们将一个2D张量与一个向量相加。如果将两个形状不同的张量相加,会发生什么?如果没有歧义的话,较小的张量会被广播(broadcast),以匹配较大张量的形状。>
<经常遇到的一种特殊的张量变形是转置(transposition)对矩阵做转置是指将行和列互换,>
<神经网络(或者任何机器学习模型)要做的就是找到可以让纸球恢复平整的变换,从而能够再次让两个类别明确可分。>
<通过深度学习,这一过程可以用三维空间中一系列简单的变换来实现,比如你用手指对纸球做的变换,每次做一个动作,>
<让纸球恢复平整就是机器学习的内容:为复杂的、高度折叠的数据流形找到简洁的表示。>
<下一步则是根据反馈信号逐渐调节这些权重。这个逐渐调节的过程叫作训练,也就是机器学习中的学习。>
<难点在于第四步:更新网络的权重。>
<一种更好的方法是利用网络中所有运算都是可微(differentiable)的这一事实,计算损失相对于网络系数的梯度(gradient),然后向梯度的反方向改变系数,从而使损失降低。>
<梯度(gradient)是张量运算的导数。它是导数这一概念向多元函数导数的推广。>
<将这一方法应用于神经网络,就是用解析法求出最小损失函数对应的所有权重值。>
<反向传播从最终损失值开始,从最顶层反向作用至最底层,利用链式法则计算每个参数对损失值的贡献大小。>
<你只需充分理解基于梯度的优化方法的工作原理。>
<学习是指找到一组模型参数,使得在给定的训练数据样本和对应目标值上的损失函数最小化。>
<整个学习过程之所以能够实现,是因为神经网络是一系列可微分的张量运算,因此可以利用求导的链式法则来得到梯度函数,这个函数将当前参数和当前数据批量映射为一个梯度值。>
<两个关键的概念:损失和优化器。将数据输入网络之前,你需要先定义这二者。>
<损失是在训练过程中需要最小化的量,因此,它应该能够衡量当前任务是否已成功解决。>
<优化器是使用损失梯度更新参数的具体方式,比如RMSProp优化器、带动量的随机梯度下降(SGD)等。>
<神经网络的核心组件,即层、网络、目标函数和优化器;>
<构建神经网络的详细原则,也会帮你建立直觉,明白对于特定问题哪些架构有用、哪些架构无用。>
<一旦确定了网络架构,你还需要选择以下两个参数。>
<请记住,你构建的所有神经网络在降低损失函数时和上述的人工智能一样无情。因此,一定要明智地选择目标函数,否则你将会遇到意想不到的副作用。>
<我们推荐使用TensorFlow后端作为大部分深度学习任务的默认后端,因为它的应用最广泛,可扩展,而且可用于生产环境。>
<与MNIST数据集一样,IMDB数据集也内置于Keras库。>
<你不能将整数序列直接输入神经网络。你需要将列表转换为张量。>
<对列表进行one-hot编码,将其转换为0和1组成的向量。>
<你可以将表示空间的维度直观地理解为“网络学习内部表示时所拥有的自由度”。>
<为了得到更丰富的假设空间,从而充分利用多层表示的优势,你需要添加非线性或激活函数。><relu是深度学习中最常用的激活函数,但还有许多其他函数可选,它们都有类似的奇怪名称,比如prelu、elu等。>
<最后,你需要选择损失函数和优化器。>
<配置自定义优化器的参数,或者传入自定义的损失函数或指标函数。>
<你看到的是过拟合(overfit):在第二轮之后,你对训练数据过度优化,最终学到的表示仅针对于训练数据,无法泛化到训练集之外的数据。>
<通常来说,你可以使用许多方法来降低过拟合,我们将在第4章中详细介绍。>
<进一步的实验>
<通常需要对原始数据进行大量预处理,以便将其转换为张量输入到神经网络中。>
<单词序列可以编码为二进制向量,但也有其他编码方式。>
<带有relu激活的Dense层堆叠,可以解决很多种问题(包括情感分类),你可能会经常用到这种模型。>
<随着神经网络在训练数据上的表现越来越好,模型最终会过拟合,并在前所未见的数据上得到越来越差的结果。><一定要一直监控模型在训练集之外的数据上的性能。>
<用密集连接的神经网络将向量输入划分为两个互斥的类别。但如果类别不止两个,要怎么做?>
<将标签向量化有两种方法:你可以将标签列表转换为整数张量,或者使用one-hot编码。>
<这种维度较小的层可能成为信息瓶颈,永久地丢失相关信息。>
<这种问题的损失函数几乎总是应该使用分类交叉熵。它将网络输出的概率分布与目标的真实分布之间的距离最小化。>
<处理多分类问题的标签有两种方法。>
<如果你需要将数据划分到许多类别中,应该避免使用太小的中间层,以免在网络中造成信息瓶颈。>
<注意不要将回归问题与logistic回归算法混为一谈。><令人困惑的是,logistic回归不是回归算法,而是分类算法。>
<对于这种数据,普遍采用的最佳实践是对每个特征做标准化,即对于输入数据的每个特征(输入数据矩阵中的列),减去特征平均值,再除以标准差,这样得到的特征平均值为0,标准差为1。>
<一般来说,训练数据越少,过拟合会越严重,而较小的网络可以降低过拟合。>
<回归问题使用的损失函数与分类问题不同。回归常用的损失函数是均方误差(MSE)。>
<同样,回归问题使用的评估指标也与分类问题不同。显而易见,精度的概念不适用于回归问题。><常见的回归指标是平均绝对误差(MAE)。>
<如果输入数据的特征具有不同的取值范围,应该先进行预处理,对每个特征单独进行缩放。>
<如果可用的数据很少,使用K折验证可以可靠地评估模型。>
<如果可用的训练数据很少,最好使用隐藏层较少(通常只有一到两个)的小型网络,以避免严重的过拟合。>
<在将原始数据输入神经网络之前,通常需要对其进行预处理。>
<如果数据特征具有不同的取值范围,那么需要进行预处理,将每个特征单独缩放。>
<随着训练的进行,神经网络最终会过拟合,并在前所未见的数据上得到更差的结果。>
<如果训练数据不是很多,应该使用只有一两个隐藏层的小型网络,以避免严重的过拟合。>
<如果数据被分为多个类别,那么中间层过小可能会导致信息瓶颈。>
<回归问题使用的损失函数和评估指标都与分类问题不同。>
<如果要处理的数据很少,K折验证有助于可靠地评估模型。>
<机器学习的核心难题:过拟合。>本章会将你对这些问题的直觉固化为解决深度学习问题的可靠的概念框架。我们<把所有这些概念、模型评估、数据预处理、特征工程、解决过拟合一整合为详细的七步工作流程,用来解决任何机器学习任务。>
<监督学习是目前最常见的机器学习类型。给定一组样本(通常由人工标注),它可以学会将输入数据映射到已知目标[也叫标注(annotation)]。>
<虽然监督学习主要包括分类和回归,但还有更多的奇特变体,主要包括如下几种。>
<图像分割(imagesegmentation)D给定一张图像,在特定物体上画一个像素级的掩模(mask)。>
<自监督学习是监督学习的一个特例,它与众不同,值得单独归为一类。>
<自监督学习是没有人工标注的标签的监督学习,你可以将它看作没有人类参与的监督学习。>
<自编码器(autoencoder)是有名的自监督学习的例子,其生成的目标就是未经修改的输入。>
<本书的重点在于监督学习,因为它是当前深度学习的主要形式,行业应用非常广泛。>
<在强化学习中,智能体(agent)接收有关其环境的信息,并学会选择使某种奖励最大化的行动。>
<目前,强化学习主要集中在研究领域,除游戏外还没有取得实践上的重大成功。>
<样本(sample)或输入(input):进入模型的数据点。>
<预测(prediction)或输出(output):从模型出来的结果。>
<目标(target):真实值。对于外部数据源,理想情况下,模型应该能够预测出目标。>
<类别(class):分类问题中供选择的一组标签。>
<标签(label):分类问题中类别标注的具体例子。>
<真值(ground-truth)或标注(annotation):数据集的所有目标,通常由人工收集。>
<小批量(mini-batch)或批量(batch):模型同时处理的一小部分样本(样本数通常为8~128)。>
<我们将数据划分为训练集、验证集和测试集。>
<过拟合,也就是说,随着训练的进行,模型在训练数据上的性能始终在提高,但在前所未见的数据上的性能则不再变化或者开始下降。>
<机器学习的目的是得到可以泛化(generate)的模型,即在前所未见的数据上表现很好的模型,而过拟合则是核心难点。>你只能控制可以观察的事情,所以能够可靠地衡量模型的泛化能力非常重要。后面几节将介绍<降低过拟合以及将泛化能力最大化的方法。>本节重点介绍<如何衡量泛化能力,即如何评估机器学习模型。>
<评估模型的重点是将数据划分为三个集合:训练集、验证集和测试集。>
<在训练数据上训练模型,在验证数据上评估模型。一旦找到了最佳参数,就在测试数据上最后测试一次。>
<开发模型时总是需要调节模型配置,比如选择层数或每层大小[这叫作模型的超参数(hyperparameter),以便与模型参数(即权重)区分开]。>
<这个调节过程需要使用模型在验证数据上的性能作为反馈信号,这个调节过程本质上就是一种学习:在某个参数空间中寻找良好的模型配置。>因此,<如果基于模型在验证集上的性能来调节模型配置,会很快导致模型在验证集上过拟合,即使你并没有在验证集上直接训练模型也会如此。>
<你的模型一定不能读取与测试集有关的任何信息,既使间接读取也不行。如果基于测试集性能来调节模型,那么对泛化能力的衡量是不准确的。>
<将数据划分为训练集、验证集和测试集可能看起来很简单,但如果可用数据很少,还有几种高级方法可以派上用场。><我们先来介绍三种经典的评估方法:简单的留出验证、K折验证,以及带有打乱数据的重复K折验证。>
<这个问题很容易发现:如果在划分数据前进行不同的随机打乱,最终得到的模型性能差别很大,那么就存在这个问题。>
<选择模型评估方法时,需要注意以下几点。>
<解决另一个重要问题:将数据输入神经网络之前,如何准备输入数据和目标?>
<数据预处理的目的是使原始数据更适于用神经网络处理,包括向量化、标准化、处理缺失值和特征提取。>
<这么做可能导致较大的梯度更新,进而导致网络无法收敛。>
<一般来说,对于神经网络,将缺失值设置为0是安全的,只要0不是一个有意义的值。网络能够从数据中学到0意味着缺失数据,并且会忽略这个值。>
<注意,如果测试数据中可能有缺失值,而网络是在没有缺失值的数据上训练的,那么网络不可能学会忽略缺失值。在这种情况下,你应该人为生成一些有缺失项的训练样本:多次复制一些训练样本,然后删除测试数据中可能缺失的某些特征。>
<这就是特征工程的本质:用更简单的方式表述问题,从而使问题变得更容易。它通常需要深人理解问题。>
<深度学习出现之前,特征工程曾经非常重要,因为经典的浅层算法没有足够大的假设空间来自己学习有用的表示。>
<良好的特征仍然可以让你用更少的资源更优雅地解决问题。>
<良好的特征可以让你用更少的数据解决问题。>
<过拟合存在于所有机器学习问题中。>
<学会如何处理过拟合对掌握机器学习至关重要。>
<机器学习的根本问题是优化和泛化之间的对立。>
<优化(optimization)是指调节模型以在训练数据上得到最佳性能(即机器学习中的学习),而泛化(generalization)是指训练好的模型在前所未见的数据上的性能好坏。>
<为了防止模型从训练数据中学到错误或无关紧要的模式,最优解决方法是获取更多的训练数据。>模型的训练数据越多,泛化能力自然也越好。<如果无法获取更多数据,次优解决方法是调节模型允许存储的信息量,或对模型允许存储的信息加以约束。><如果一个网络只能记住几个模式,那么优化过程会迫使模型集中学习最重要的模式,这样更可能得到良好的泛化。>
<这种降低过拟合的方法叫作正则化(regularization)。>
<始终牢记:深度学习模型通常都很擅长拟合训练数据,但真正的挑战在于泛化,而不是拟合。>
<要找到合适的模型大小,一般的工作流程是开始时选择相对较少的层和参数,然后逐渐增加层的大小或增加新层,直到这种增加对验证损失的影响变得很小。>
<dropout是神经网络最有效也最常用的正则化方法之一>
<如果没有噪声的话,网络将会记住这些偶然模式。>
<问题定义、评估、特征工程和解决过拟合。>
<一、定义问题,收集数据集>
<你的输入数据是什么?你要预测什么?>
<假设输出是可以根据输入进行预测的。>
<假设可用数据包含足够多的信息,足以学习输入和输出之间的关系。>
<二、选择衡量成功的指标>
<它应该直接与你的目标(如业务成功)保持一致。>
<对于类别不平衡的问题,你可以使用准确率和召回率。>
<三、确定评估方法>
<介绍了三种常见的评估方法。>
<留出验证集。数据量很大时可以采用这种方法。>
<K折交叉验证。>
<重复的K折验证。>
<四、准备数据>
<五、开发比基准更好的模型>
<关于损失函数的选择,需要注意,直接优化衡量问题成功的指标不一定总是可行的,有时难以将指标转化为损失函数,要知道,损失函数需要在只有小批量数据时即可计算(理想情况下,只有一个数据点时,损失函数应该也是可计算的),而且还必须是可微的(否则无法用反向传播来训练网络)。>
<六、扩大模型规模: 开发过拟合的模型>
<一旦得到了具有统计功效的模型,问题就变成了:模型是否足够强大?它是否具有足够多的层和参数来对问题进行建模?>
<要始终监控训练损失和验证损失,以及你所关心的指标的训练值和验证值。如果你发现模型在验证数据上的性能开始下降,那么就出现了过拟合。>
<七、模型正则化与调节超参数>
<请注意:每次使用验证过程的反馈来调节模型,都会将有关验证过程的信息泄露到模型中。>
<定义问题与要训练的数据。收集这些数据,有需要的话用标签来标注数据。>
<选择衡量问题成功的指标。你要在验证数据上监控哪些指标?>
<开发第一个比基准更好的模型,即一个具有统计功效的模型。>
<开发过拟合的模型。>
<基于模型在验证数据上的性能来进行模型正则化与调节超参数。许多机器学习研究往往只关注这一步,但你一定要牢记整个工作流程。>
<卷积神经网络,也叫convnet,它是计算机视觉应用几乎都在使用的一种深度学习模型。><你将学到将卷积神经网络应用于图像分类问题,特别是那些训练数据集较小的问题。>
<卷积神经网络在处理图像时可以高效利用数据(因为视觉世界从根本上具有平移不变性),它只需要更少的训练样本就可以学到具有泛化能力的数据表示。>
<卷积神经网络可以学到模式的空间层次结构><这使得卷积神经网络可以有效地学习越来越复杂、越来越抽象的视觉概念(因为视觉世界从根本上具有空间层次结构)。>
<如果你希望输出特征图的空间维度与输入相同,那么可以使用填充(padding)。>
<影响输出尺寸的另一个因素是步幅的概念。>
<虽然步进卷积对某些类型的模型可能有用,但在实践中很少使用。熟悉这个概念是有好处的。>
<为了对特征图进行下采样,我们不用步幅,而是通常使用最大池化(max-pooling)运算,你在第一个卷积神经网络示例中见过此运算。>
<最大池化的作用:对特征图进行下采样,与步进卷积类似。>
<最大池化是从输入特征图中提取窗口,并输出每个通道的最大值。>
<注意,最大池化不是实现这种下采样的唯一方法。>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值