算法工程师修仙之路:Python深度学习(二)

深度学习基础

什么是深度学习


深度学习之前:机器学习简史

  • 深度学习不一定总是解决问题的正确工具:
    • 有时没有足够的数据,深度学习不适用;
    • 有时用其他算法可以更好地解决问题。

概率建模

  • 概率建模(probabilistic modeling)是统计学原理在数据分析中的应用。它是最早的机器学习形式之一,至今仍在广泛使用。其中最有名的算法之一就是朴素贝叶斯算法。

  • 朴素贝叶斯是一类基于应用贝叶斯定理的机器学习分类器,它假设输入数据的特征都是独立的。 这是一个很强的假设,或者说“朴素的”假设,其名称正来源于此。

  • 另一个密切相关的模型是 logistic 回归(logistic regression,简称 logreg),它有时被认为是现代机器学习的“hello world”。logreg 是一种分类算法,而不是回归算法。

早期神经网络

  • 贝尔实验室于1989年第一次成功实现了神经网络的实践应用,当时 Yann LeCun 将卷积神经网络的早期思想与反向传播算法相结合,并将其应用于手写数字分类问题,由此得到名为 LeNet 的网络,在 20 世纪 90 年代被美国邮政署采用,用于自动读取信封上的邮政编码。

核方法

  • 核方法(kernel method)是一组分类算法,其中最有名的就是支持向量机(SVM,support vector machine)。

  • SVM 的目标是通过在属于两个不同类别的两组数据点之间找到良好决策边界(decision boundary)来解决分类问题。

    • 决策边界可以看作一条直线或一个平面,将训练数据划分为两块空间,分别对应于两个类别。
    • 对于新数据点的分类,你只需判断它位于决策边界的哪一侧。
  • SVM 通过两步来寻找决策边界:

    • 将数据映射到一个新的高维表示,这时决策边界可以用一个超平面来表示(如果数据是二维的,那么超平面就是一条直线);
    • 尽量让超平面与每个类别最近的数据点之间的距离最大化,从而计算出良好决策边界(分割超平面),这一步叫作间隔最大化(maximizing the margin)。这样决策边界可以很好地推广到训练数据集之外的新样本。
  • 核方法

    • 将数据映射到高维表示从而使分类问题简化,这一技巧可能听起来很不错,但在实践中通常是难以计算的。这时就需要用到核技巧(kernel trick,核方法正是因这一核心思想而得名)。
    • 其基本思想是:要想在新的表示空间中找到良好的决策超平面,你不需要在新空间中直接计算点的坐标,只需要在新空间中计算点对之间的距离,而利用核函数(kernel function)可以高效地完成这种计算。
    • 核函数是一个在计算上能够实现的操作,将原始空间中的任意两点映射为这两点在目标表示空间中的距离,完全避免了对新表示进行直接计算。
    • 核函数通常是人为选择的,而不是从数据中学到的——对于 SVM 来说,只有分割超平面是通过学习得到的。
  • SVM的优点与缺点

    • SVM 刚刚出现时,在简单的分类问题上表现出了最好的性能。当时只有少数机器学习方法得到大量的理论支持,并且适合用于严肃的数学分析,因而非常易于理解和解释, SVM 就是其中之一。
    • SVM 很难扩展到大型数据集,并且在图像分类等感知问题上的效果也不好。
    • SVM是一种比较浅层的方法,因此要想将其应用于感知问题,首先需要手动提取出有用的表示(这叫作特征工程),这一步骤很难,而且不稳定。

决策树、随机森林与梯度提升机

  • 决策树(decision tree)是类似于流程图的结构,可以对输入数据点进行分类或根据给定输入来预测输出值。

  • 随机森林(random forest)算法引入了一种健壮且实用的决策树学习方法,即首先构建许多决策树,然后将它们的输出集成在一起。随机森林适用于各种各样的问题,对于任何浅层的机器学习任务来说,它几乎总是第二好的算法。

  • 梯度提升机(gradient boosting machine)

    • 梯度提升机是将弱预测模型(通常是决策树)集成的机器学习技术。
    • 它使用了梯度提升方法,通过迭代地训练新模型来专门解决之前模型的弱点,从而改进任何机器学习模型的效果。
    • 将梯度提升技术应用于决策树时,得到的模型与随机森林具有相似的性质,但在绝大多数情况下效果都比随机森林要好,它可能是目前处理非感知数据最好的算法。

深度学习有何不同

  • 深度学习发展得如此迅速,主要原因在于它在很多问题上都表现出更好的性能。但这并不是唯一的原因。深度学习还让解决问题变得更加简单,因为它将特征工程完全自动化,而这曾经是机器学习工作流程中最关键的一步。

  • 先前的机器学习技术(浅层学习)仅包含将输入数据变换到一两个连续的表示空间,通常使用简单的变换,比如高维非线性投影(SVM)或决策树。但这些技术通常无法得到复杂问题所需要的精确表示。因此,人们必须竭尽全力让初始输入数据更适合用这些方法处理,也必须手动为数据设计好的表示层。这叫作特征工程。

  • 利用深度学习,你可以一次性学习所有特征,而无须自己手动设计。这极大地简化了机器学习工作流程,通常将复杂的多阶段流程替换为一个简单的、端到端的深度学习模型。

  • 在实践中,如果连续应用浅层学习方法,其收益会随着层数增加迅速降低,因为三层模型中最优的第一表示层并不是单层或双层模型中最优的第一表示层。

  • 深度学习的变革性在于,模型可以在同一时间共同学习所有表示层,而不是依次连续学习(这被称为贪婪学习)。通过共同的特征学习,一旦模型修改某个内部特征,所有依赖于该特征的其他特征都会相应地自动调节适应,无须人为干预。

  • 一切都由单一反馈信号来监督:模型中的每一处变化都是为了最终目标服务。这种方法比贪婪地叠加浅层模型更加强大,因为它可以通过将复杂、抽象的表示拆解为很多个中间空间(层)来学习这些表示,每个中间空间仅仅是前一个空间的简单变换。

  • 深度学习从数据中进行学习时有两个基本特征:

    • 通过渐进的、逐层的方式形成越来越复杂的表示;
    • 对中间这些渐进的表示共同进行学习,每一层的变化都需要同时考虑上下两层的需要。
  • Kaggle 上主要有两大方法:梯度提升机和深度学习。

    • 梯度提升机用于处理结构化数据的问题,而深度学习则用于图像分类等感知问题。
    • 梯度提升机用于浅层学习问题,深度学习用于感知问题。
    • 使用前一种方法的人几乎都使用优秀的 XGBoost 库,它同时支持数据科学最流行的两种语言:Python 和 R。
    • 使用深度学习的 Kaggle 参赛者则大多使用 Keras 库,因为它易于使用,非常灵活,并且支持 Python。

猜你喜欢

转载自blog.csdn.net/faker1895/article/details/87296998