深度学习笔记

机器学习,顾名思义当然是用机器来学习。本文完。

上面的话是开玩笑,各位客官不要走…

人工智能

人工智能其实不算新名词,在人类历史的长河中,就有过很多关于技艺高超的工匠制造人造人,并赋予智慧。现代的人工智能则始于古典哲学家用机械符号的观点来解释人类思考过程的尝试。

20世纪50年代,人类信心满满的开始了人工智能的征途,但是这趟旅程并不平坦,1973年美英两国政府停止了没有明确目标的人工智能项目的研究。七年后又受到日本政府研究规划的刺激,又恢复了拨款,但是在80年代末再次停止了拨款。人工智能的研究就这样在跌宕起伏中不断的前进。

时光荏苒,人类进入了21世纪,这次人工智能领域终于迎来了新的人生,计算机已经得到了充足的发展,计算能力与日俱增,曾经因为计算能力不足导致无法研究的项目和算法也可以得到重新的验证,当然除了计算能力提升带来的提升,更多的是幕后的工作者不断的改进和完善各种算法,对不同的课题进行长期深度的研究。

人工智能再次进入大众视野是2016年,来自Google公司的AlphaGo成功击败了韩国选手李世石,成为第一个在围棋上战胜人类的人工智能,立下了里程碑。在AlphaGo进行比赛前,人类还自信的认为机器无法在围棋赢得胜利(人类疯狂的奶自己…)。

AlphaGo采用了蒙特卡洛树搜索和两个深度神经网络结合的办法,蒙特卡洛树搜索是基于某种决策过程的启发式搜索算法,两个深度神经网络一个以估值网络来评估大量的选点,一个则以走棋网络来选择落子,在这种设计下,系统可以结合树搜索来长远推断,就像人脑一样评估落点,提高下棋能力。

人工智能、机器学习和深度学习的区别

我也对这三个名词产生过疑问,其实很简单:

  • 人工智能: 人工实现的智能
  • 机器学习: 一种人工智能的实现方法
  • 深度学习: 一种机器学习的实现方法

机器学习

机器学习是人工智能的一个分支,人工智能的研究历史中有一条以“推理”为重点,到以“知识”为重点,再到以“学习”为重点的自然、清晰的脉络。显然机器学习是是实现人工智能的一条途径,即以机器学习为手段解决人工智能中的问题。

机器学习在近30多年已发展为一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。很多推论问题属于无程序可循难度,所以部分的机器学习研究是开发容易处理的近似算法。

机器学习的应用

机器学习已广泛应用于数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA序列测序、语音和手写识别、战略游戏和机器人等领域。

机器学习的定义

机器学习有下面几种定义:

  • 机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习- 中改善具体算法的性能。
  • 机器学习是对能通过经验自动改进的计算机算法的研究。
  • 机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。

机器学习的分类

机器学习可以大概分为以下几类:

  • 监督学习:从给定的训练数据集中学习出一个函数,当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求是包括输入和输出,也可以说是特征和目标。训练集中的目标是由人标注的。常见的监督学习算法包括回归分析和统计分类。
  • 半监督学习: 介于监督学习与无监督学习之间。
  • 无监督学习: 与监督学习相比,训练集没有人为标注的结果。常见的无监督学习算法有生成对抗网络(GAN)、聚类。
  • 强化学习: 通过观察来学习做成如何的动作。每个动作都会对环境有所影响,学习对象根据观察到的周围环境的反馈来做出判断。

监督学习和无监督学习的差别在于训练数据是否人为标记,他们都有训练集,都有输入输出。

机器学习的算法

具体的机器学习算法有:

  • 构造间隔理论分布:聚类分析和模式识别
    • 人工神经网络
    • 决策树
    • 感知器
    • 支持向量机
    • 集成学习AdaBoost
    • 降维与度量学习
    • 聚类
    • 贝叶斯分类器
  • 构造条件概率:回归分析和统计分类
    • 高斯过程回归
    • 线性判别分析
    • 最近邻居法
    • 径向基函数核
  • 通过再生模型构造概率密度函数:
    • 最大期望算法
    • 概率图模型:包括贝叶斯网和Markov随机场
    • Generative Topographic Mapping
  • 近似推断技术:
    • 马尔可夫链
    • 蒙特卡罗方法
    • 变分法
  • 最优化:大多数以上方法,直接或者间接使用最优化算法。

人工神经网络

在机器学习中,目前应用最广泛的是人工神经网络(Artificial Neural Network,ANN),简称神经网络。是一种模仿生物神经网络的结构和功能的数学模型或计算模型,用于对函数进行估计和近似。神经网络由大量的人工神经元连结进行计算。大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统,通俗叫具备学习能力。

人工神经网络的组成

现代神经网络是一种非线性统计行数据建模工具,典型的神经网络具有以下三个部分:

  • 结构(Architecture): 指定了网络中的变量和它们的拓扑关系。例如,神经网络中的变量可以是神经元连接的权重(weights)和神经元的激励值(activities of the neurons)。
  • 激励函数(Activity Rule): 大部分神经网络具有一个短时间尺度的动力学规则,来定义神经元如何根据其他神经元的活动来改变自己的激励值。一般激励值依赖于网络中的权重(即该网络中的参数)。
  • 学习规则(Learning Rule): 学习规则指定了网络中的权重如何随着时间推进而调整。这一般被看做是一种长时间尺度的动力学规则。一般情况下,学习规则依赖于神经元的激励值。它也可能依赖于监督者提供的目标值和当前权重的值。例如,用于手写识别的一个神经网络,有一组输入神经元。输入神经元会被输入图像的数据所激发。在激励值被加权并通过一个函数(由网络的设计者确定)后,这些神经元的激励值被传递到其他神经元。这个过程不断重复,直到输出神经元被激发。最后,输出神经元的激励值决定了识别出来的是哪个字母。

在这里我推荐观看3Blue1Brown的三期视频。

深度学习之神经网络的结构 Part 1 ver 2.0

深度学习之梯度下降法 Part 2 ver 0.9 beta

深度学习之反向传播算法 上/下 Part 3 ver 0.9 beta


人工神经网络的基础

神经网络的构筑理念是受到生物(人或其他动物)神经网络功能的运作启发而产生的。人工神经网络通常是通过一个基于数学统计学类型的学习方法(Learning Method)得以优化,所以人工神经网络也是数学统计学方法的一种实际应用,通过统计学的标准数学方法我们能够得到大量的可以用函数来表达的局部结构空间,另一方面在人工智能学的人工感知领域,我们通过数学统计学的应用可以来做人工感知方面的决定问题(也就是说通过统计学的方法,人工神经网络能够类似人一样具有简单的决定能力和简单的判断能力),这种方法比起正式的逻辑学推理演算更具有优势。

和其他机器学习方法一样,神经网络已经被用于解决各种各样的问题,例如机器视觉和语音识别。这些问题都是很难被传统基于规则的编程所解决的。

对人类中枢神经系统的观察启发了人工神经网络这个概念。在人工神经网络中,简单的人工节点,称作神经元(neurons),连接在一起形成一个类似生物神经网络的网状结构。

人工神经网络目前没有一个统一的正式定义。不过,具有下列特点的统计模型可以被称作是“神经化”的:具有一组可以被调节的权重,换言之,被学习算法调节的数值参数,并且
可以估计输入数据的非线性函数关系
这些可调节的权重可以被看做神经元之间的连接强度。
人工神经网络与生物神经网络的相似之处在于,它可以集体地、并行地计算函数的各个部分,而不需要描述每一个单元的特定任务。神经网络这个词一般指统计学、认知心理学和人工智能领域使用的模型,而控制中央神经系统的神经网络属于理论神经科学和计算神经科学。

在神经网络的现代软件实现中,被生物学启发的那种方法已经很大程度上被抛弃了,取而代之的是基于统计学和信号处理的更加实用的方法。在一些软件系统中,神经网络或者神经网络的一部分(例如人工神经元)是大型系统中的一个部分。这些系统结合了适应性的和非适应性的元素。虽然这种系统使用的这种更加普遍的方法更适宜解决现实中的问题,但是这和传统的连接主义人工智能已经没有什么关联了。不过它们还有一些共同点:非线性、分布式、并行化,局部性计算以及适应性。从历史的角度讲,神经网络模型的应用标志着二十世纪八十年代后期从高度符号化的人工智能(以用条件规则表达知识的专家系统为代表)向低符号化的机器学习(以用动力系统的参数表达知识为代表)的转变。

神经网络在早期的进展非常缓慢,第一个问题是基本感知器无法解决异或问题,第二个问题是计算机没有足够的能力处理大型神经网络所需要的计算时间,直到计算机具备更强的计算能力前,神经网络的进展都一直很缓慢。

反向传播算法的出现

后来出现了关键的的进展: 在1975年由Paul Werbos提出的反向传播算法。该算法解决了异或的问题,还能更普遍的训练多层神经网络。反向传播算法在3Blue1Brown的第二期视频中有讲解,视频中采用了通俗易懂的方式来介绍反向传播算法是如何调整神经元的。

神经网络的又一个关键进展是显卡性能的提升。大家都知道CPU偏向于控制而非计算,这就造成早期处理训练神经网络的代价非常大,使用CPU来训练神经网络的速度非常慢,而现代图形处理器有强大的并行处理能力和可编程流水线,令流处理器也可以处理非图形数据。特别是在面对单指令流多数据流(SIMD)且数据处理的运算量远大于数据调度和传输的需要时,通用图形处理器在性能上大大超越了传统的中央处理器应用程序。现在我们可以轻易的使用Nvidia的CUDA方案或者OpenCL来编写代码,并使用显卡来进行计算。

多层前馈网络

一种常见的多层结构的前馈网络(Multilayer Feedforward Network)由三部分组成:

  • 输入层: 众多神经元接受大量非线性的信息,输入的信息被称为输入向量。
  • 隐含层: 是输入层和输出层之间众多神经元和链接组成的各个层面。隐含层可以有一层或多层。隐含层的节点(神经元)数目不定,但数目越多神经网络的非线性越显著,从而神经网络的强健性(robustness)(控制系统在一定结构、大小等的参数摄动下,维持某些性能的特性)更显著。习惯上会选输入节点1.2至1.5倍的节点。
  • 输出层: 在神经元链接中传输、分析、权衡,形成输出结果。输出的信息称为输出向量。

这种网络一般称为感知器(对单隐藏层)或多层感知器(对多隐藏层),神经网络的类型已经演变出很多种,这种分层的结构也并不是对所有的神经网络都适用。

理论性质

计算能力

多层感知器(MLP)是一个通用的函数逼近器,由Cybenko定理证明。然而,证明不是由所要求的神经元数量或权重来推断的。Hava Siegelmann和Eduardo D. Sontag的工作证明了,一个具有有理数权重值的特定递归结构(与全精度实数权重值相对应)相当于一个具有有限数量的神经元和标准的线性关系的通用图灵机。他们进一步表明,使用无理数权重值会产生一个超图灵机。

#### 容量

人工神经网络模型有一个属性,称为“容量”,这大致相当于他们模拟任何函数的能力。它与网络中可以存储的信息量有关,也与复杂性有关。

收敛性

模型并不总是收敛到唯一解,因为它取决于一些因素。首先,函数可能存在许多局部极小值,这取决于成本函数和模型。其次,在远离局部最小值时,优化方法可能无法保证收敛。第三,对大量的数据或参数,一些方法变得不切实际。在一般情况下,我们发现,理论保证的收敛不能成为实际应用的一个可靠的指南。

综合统计

在目标是创建一个普遍系统的应用程序中,过度训练的问题出现了。这出现在回旋或过度具体的系统中当网络的容量大大超过所需的自由参数。为了避免这个问题,有两个方向:第一个是使用交叉验证和类似的技术来检查过度训练的存在和选择最佳参数如最小化泛化误差。二是使用某种形式的正规化。这是一个在概率化(贝叶斯)框架里出现的概念,其中的正则化可以通过为简单模型选择一个较大的先验概率模型进行;而且在统计学习理论中,其目的是最大限度地减少了两个数量:“风险”和“结构风险”,相当于误差在训练集和由于过度拟合造成的预测误差。

一个小例子

现在作为深度学习入门的是手写数字识别,3Blue1Brown的三期视频就是基于此。

通过神经网络来学习如何识别手写数字,本质上就是人类通过算法来分解图像的信息,比如数字9,它可以认为是竖线和圆的组合,输出层是9,则隐含层需要处理竖线和圆,输入层输入的是手写9的全部像素,隐含层就是神经网络的核心,它需要只要竖线和圆又是由什么组成,最后一步步的分解为一个像素,再通过反向传播算法来训练和调节隐含层中的偏置和权值,最后整个网络就可以学习到正确的识别手写数字。

深度学习就是通过人工神经网络来告诉计算机结果是如何产生的,以及如何通过结果来调整网络结构,达到预测和处理未标记的信息。