《神经网络与深度学习》邱希鹏 学习笔记 (1)

  • 完成进度
  • 第一章 绪论
    • 深度学习与神经网络
    • 人工智能
      • 图灵测试
      • 达特茅斯 *(Dartmouth)* 会议
      • 人工智能的研究领域
      • 人工智能发展历史
    • 机器学习
      • 传统机器学习的数据处理流程
    • 表示学习
      • 语义鸿沟
      • 特征表示的方法
      • 嵌入 *(Embedding)*
      • 表示学习与浅层学习
    • 深度学习
      • 深度学习数据处理流程
      • 端到端的学习
    • 神经网络
      • 人工神经网络
      • 神经网络发展历史
    • 自我理解
      • 人工智能 机器学习 深度学习 神经网络
      • 一些概念的理解
      • 第一章作业启发

完成进度

  • 第一章
  • 第二章 (1)

第一章 绪论


绪论概要介绍 人工智能机器学习深度学习

  1. 深度学习是一个机器学习问题,指从有限个样例中通过算法总结出一般性的规律,并可以应用到新的未知数据上。
  2. 深度学习采用的模型比较复杂,指样本的原始输入到输出目标之间的数据流经多个线性或非线性的组件。

深度学习与神经网络


深度学习
上文提及深度学习中的组件,因为每个组件都会对信息进行加工,并进而影响后续的组件,所以我们并不清楚深度学习所得到的结果每个组件的‘贡献’,即贡献度分配问题
贡献度分配问题在深度学习中十分重要,它关系到如何学习每个组件的参数。
神经网络
神经网络是人工神经网络 的简称,目前较好地解决了贡献度分配问题。
神经网络 是由人工神经元以及神经元之间的连接构成。其中,有两类特殊的神经元:一类用来接受外部的信息,一类用来输出信息。
神经网络可以看作是由一组参数控制的复杂函数,并用来处理一些模式识别人脸识别 语音识别的任务。

目前,深度学习很容易和神经网络混为一谈。这是因为由于神经网络很好地解决了贡献度分配问题,它成为了深度学习主要采用的模型。事实上,深度学习也可以采用其他模型,比如,深度信念网络还不了解

人工智能


人工智能 (Artificial Intelligence, AI ) ,简单来讲,就是让机器拥有人类的智慧,这也是我们长期的目标。

目前,随着神经科学、认知心理学等学科的发展,我们对大脑的结构有了一定的了解,但对大脑的智能是如何产生的,还知道的很少,我们不理解大脑的运作原理,以及如何产生意识、情感、记忆等功能。因此,通过“复制”人脑来实现人工智能是不切实际的。

图灵测试

1950年, 阿兰 · 图灵 (Alan Turing) 发表的论文 《Computing Machinery and Intelligence》 讨论了创造一种“智能机器”的可能性。

一个人在不接触对方的情况下,通过一种特殊的方式和对方进行一系列问答。如果在相当长时间内,他无法根据这些问题判断对方是人还是计算机。那么可以认为这个计算机是智能的。

图灵测试引导了人工智能很多研究方向。因为要使得计算机通过图灵测试,计算机就必须具备理解语言、学习、记忆、推理、决策等能力。这样,人工智能就延伸出了许多不同的子学科:机器感知 计算机视觉 语音信息处理学习 模式识别 机器学习语言 自然语言处理记忆 知识表示决策规划 数据挖掘等。

达特茅斯 (Dartmouth) 会议

1956年达特茅斯 (Dartmouth) 会议标志着人工智能学科的诞生。

在这次会议上,“人工智能”被提出作为本领域的研究名称,同时,人工智能的研究使命也被确定。

John McCarthy提出了人工智能的定义:

人工智能就是要让机器的行为看起来就像是人所表现出的智能行为一样。

人工智能的研究领域

目前,人工智能的主要研究领域大体可分为以下几个方面:

  1. 感知:模拟人的感知能力,对外部刺激信息进行感知和加工。主要研究领域包括:语音信息处理和计算机视觉等。
  2. 学习:模拟人的学习能力,主要研究如何从样例或从与环境的交互中进行学习。主要研究领域包括:监督学习、无监督学习和强化学习等。
  3. 认知:模拟人的认知能力。主要研究领域包括:知识表示、自然语言处理、推理、规划、决策等。

人工智能发展历史

推理期

1956年达特茅斯会议后,研究者对人工智能的热情高涨,之后的十几年是人工智能的黄金时期。

这一时期研究者开发出了一系列智能系统,比如几何定理证明器语言翻译器 等。这些初步的研究成果使得研究者对开发出具有人类智能的机器过于乐观,低估了实现人工智能的难度。

随着研究的深入,研究者意识到了对项目难度评估的不足,原来的乐观预期受到严重打击,人工智能的研究开始陷入低谷。

知识期

20世纪70年代,研究者意识到知识对于人工智能的重要性。特别是对于一些复杂的任务,需要专家来构建知识库。

在这一时期,出现了各种各样的 专家系统 (Expert System) ,并在特定的专业领域取得了很多成果。

学习期
为了解决诸如语言理解图像理解 等问题,研究者开始将研究重点转向让计算机从数据中自己学习。
事实上,“学习”本身也是一种智能行为。从人工智能的萌芽时期开始,就有研究尝试让机器来自动学习,也就是机器学习。机器学习的主要目的是设计和分析一些学习算法,让计算机可以从数据(经验)中自动分析并获得规律,之后利用学习到的规律对未知数据进行预测,从而帮助人们完成一些特定的任务,提高开发效率。
在人工智能领域,机器学习从一开始就是一个重要的研究领域,但直到1980年以后,机器学习因其在很多领域的出色表现,才逐渐成为热门学科。

机器学习


机器学习 (Machine Learning , ML) 是指从有限的观测数据中学习/猜测出具有一般性的规律,并利用这些规律对未知数据进行预测的方法。

机器学习人工智能的一个重要分支,并逐渐成为推动人工智能发展的关键因素。

浅层学习
传统的机器学习主要关注如何学习一个预测模型。
一般需要首先将数据表示为一组特征 (Feature),特征的表示形式可以是连续的数值、离散的符号或其他形式。
然后将这些特征输入到预测模型,并输出预测结果。
浅层学习的一个重要特点 是不涉及特征学习,其特征主要靠人工经验或特征转换方法来抽取。

传统机器学习的数据处理流程

当我们用机器学习来解决实际任务时,会面对多种多样的数据形式声音 图像 文本,不同数据的特征构造方式差异很大。对于图像,可以自然地表示为一个连续的向量;对于文本,因为其一般是由离散符号组成,并且每个符号都在计算机内表示为无意义的编码,很难找到合适的表达方式:因此,在实际任务中使用机器学习模型一般会包含以下几个步骤:

  1. 数据与处理:经过数据与处理,去除噪声等。
  2. 特征提取:从原始数据中提取出一些有效的特征。
  3. 特征转换:对特征进项一定的加工。
  4. 预测:机器学习的核心部分,学习一个函数并预测。

上述流程中,每步特征处理以及预测一般都是分开进行的,传统的机器学习主要关注构建预测函数

事实上,在实际操作过程中,不同预测模型的性能相差不多,反而特征处理部分对系统的准确性有至关重要的影响。

特征处理一般都需要人工干预完成,利用人类的经验来选取好的特征并最终提高机器学习系统的性能。因此,很多机器学习问题变成了特征工程

表示学习


接上文,为了提高机器学习系统的准确率,我们需要把输入信息转换为转换为有效的特征 / 表示

如果有一种算法可以自动地学习出有效的特征,并最终提高机器学习模型的性能,那么这种学习就叫做表示学习*(Representation Learning)*。

在表示学习中,有两个核心问题
“什么是一个好的表示”
“如何学习到好的表示”

对于“好的表示”,没有明确的标准,但一个好的表示一般具有以下优点:

  1. 具有很强的表示能力,即同样大小的向量可以表示更多信息。
  2. 使得后续的学习任务变得简单,即需要包含更高层的语义信息。
  3. 具有一般性。希望基于某个任务的来学习的表示学习方法可以容易地迁移到其他任务上。

语义鸿沟

表示学习的关键是解决语义鸿沟

语义鸿沟问题是指输入数据的底层特征和高层语义信息之间的不一致性和差异性。

特征表示的方法

以表示颜色为例:

局部特征

以不同名字来命名不同的颜色

局部表示又称离散表示符号表示

局部表示可以表示为one-hot向量:假设所有颜色的名字构成一个词表 υ\upsilonυ,词表大小为 | υ\upsilonυ |。我们可以用一个 | υ\upsilonυ |的one-hot向量来表示每一个颜色。

局部特征的优点

  1. 这种离散的表示方式具有很好的解释性,有利于人工归纳和总结特征,并通过特征组合进行高效的特征工程。
  1. 通过多种特征组合得到的表示向量通常是系数的二值向量,当用于线性模型时计算效率非常高

局部特征的不足之处

  1. one-hot向量的维数很高,且不能扩展。
  1. 不同颜色之间的相似度为0。
分布式特征

和局部表示相比较,分布式表示的向量维度较低。

只需要一个三维的稠密向量就可以表示所有颜色

嵌入 (Embedding)

承接上文,对嵌入有如下解释

使用神经网络来将高维的局部表示空间 R∣υ∣\mathbb{R}^{|\upsilon|}Rυ 映射到一个非常低维的分布式表示空间 RD,D≪∣υ∣\mathbb{R}^{D},D\ll|\upsilon|RD,Dυ。在这个低维空间中,每个特征不再是坐标轴上的点,而是分散在整个低维空间中。

嵌入的定义

将一个度量空间中的一些对象映射到另一个低维的度量空间中,并尽可能保持不同对象之间的拓扑关系。

表示学习与浅层学习

浅层学习

在传统的机器学习中,也有很多有关特征学习的方法主成分分析 线性判别分析 独立成分分析

传统的机器学习一般是通过人为地设计一些准则,然后根据这些准则来提取有效的特征。

特征的学习和最终预测模型的学习是分开进行的,因此学习到的特征不一定可以提升最终模型的性能。

表示学习

要学习到一种好的高层语义表示(分布式表示),通常需要从底层特征开始,经过多步非线性转换才能得到。

深层结构的优点是可以增加特征的重用性,从而指数级地增加表示能力。

表示学习的关键是构建具有一定深度的多层次特征表示。

深度学习


承接表示学习,为了学习一种好的特征,需要构建具有一定“深度”的模型,并通过学习算法来让模型自动学习出好的特征表示底层特征→中层特征→高层特征,从而最终提升模型的准确率。

深度”是指原始数据进行非线性转换的次数

深度学习即从数据中学习出一个“深度模型”的学习方法。

深度学习是机器学习的一个子问题,它的目的是从数据中自动学习到有效的特征表示。

深度学习数据处理流程

通过多层转换,可以把原始数据变成更高层次、更抽象的表示。

这些学习学到的表示可以替代人工设计的特征,从而避免“特征工程”。


深度学习需要解决的关键问题是贡献度分配问题

目前,深度学习采用的模型主要是神经网络模型,其主要原因是神经网络模型可以使用误差反向传播算法,从而可以比较好地解决贡献度分配问题。

端到端的学习

传统机器学习方法面对复杂任务需要将一个任务的输入和输出之间人为地切割成许多子模块/阶段,每个子模块分开学习。

这种学习方式有两个问题,这些问题增加了机器学习方法在实际应用中的难度:

  1. 每一个模块都需要单独优化,并且其优化目标和任务总体目标并不能一致。
  2. 错误传播,即前一步的错误会对后续的模型造成很大的影响。
端到端学习 (End-to-End Learning)

端到端学习又称端到端训练。

在学习过程中不进行分模块/分阶段训练,直接优化任务的总体目标。

在端到端学习中,一般不需要明确地给出不同模块/阶段的功能,中间过程不需要人为干预。

端到端学习的训练数据为“输入-输出”对的形式,无需提供其他额外信息。

神经网络


早期的神经科学家构造了一种模仿人脑神经系统的数学模型,称为人工神经网络,简称“神经网络”。
而在机器学习领域,神经网络是指由很多人工神经元构成的网络结构模型,这些人工神经元之间的连接强度是可学习的参数。

神经网络主要由大量的神经元以及他们之间的有向连接构成,因此,考虑三方面:

神经元的激活规则

神经元输入到输出之间的映射关系,一般为非线性函数

网络的拓扑结构

不同神经元之间的连接关系

学习算法

通过训练数据来学习神经网络的参数

人工神经网络

人工神经网络
人工神经网络是为模拟人脑神经网络而设计的一种计算模型,他从结构、实现机理和功能上模拟人脑神经网络。
人工神经网络由多个节点互相连接而成,可以用来对数据之间的复杂关系进行建模。
不同节点之间的连接被赋予了不同的权重,每个权重代表了一个节点对另一个节点的影响大小。
每个节点代表一种特定函数,来自其他节点的信息经过其相应的权重综合计算,输入到一个激活函数中并得到一个新的活性值。
从系统观点看,人工神经元网络是由大量神经元通过极其丰富和完善的连接而构成的自适应非线性动态系统。

早期的神经网络模型并不具备学习能力。

首个可学习的人工神经网络是赫布网络。它采用一种基于 赫布规则 的无监督学习。

感知器是最早的具有机器学习思想的神经网络,但其学习方法无法扩展到多层的神经网络上。

1980年左右,反向传播算法才有效地解决了多层神经网络的学习问题,并成为最为流行的神经网络学习算法。

神经网络发展历史

神经网络的发展大致经过五个时期。

模型提出(1943~1969)

这是神经网络发展的第一个高潮,在其期间,研究者们提出了许多神经元模型和学习规则。

  1. 1943年,心理学家Warren McCulloch和数学家Walter Pitts 最早描述了一种理想化的人工神经模型,并构建了一种基于简单逻辑运算的人工神经网络,这种神经网络称为MP模型
  1. 1948年,Alan Turing 提出了一种“B型图灵机”。它可以基于赫布法则进行学习。
  1. 1951年,McCullochPitts的学生Marvin Minsky建造了第一台神经网络机SNARC
  1. Rosenblatt [1958] 提出了一种可以模拟人类感知能力的神经网络模型,称为感知器,并提出了一种接近于人类学习过程(迭代、试错)的学习算法。
冰河期(1969~1983)

这是神经网络发展的第一个低谷期,在此期间,神经网络的研究处于长年停滞及低潮状态。

  1. 1969年,Marvin Minsky出版《感知器》一书,指出了神经网络的两个关键缺陷:一是感知器无法处理“异或”回路问题;二是当时的计算机无法支持处理大型神经网络所需要的计算能力。
  1. 1974年,哈佛大学的Paul Werbos发明反向传播算法 (BackPropagation, BP)
  1. 1980年,福岛邦彦提出了一种带卷积和子采样操作的多层神经网络:新知机 (Neocognition)
反向传播算法引发的复兴(1983~1995)

这是神经网络发展的第二个高潮期。在此期间,反向传播算法重新激发了人们对神经网络的兴趣。

  1. 1983年,物理学家John Hopfied提出了一种用于联想记忆的神经网络,称为Hopfied网络。由于其在旅行商路问题上取得了最好的结果,引起了轰动。
  1. 1984年, Geoffery Hinton提出了一种随机化版本的Hopfied网络,即玻尔兹曼机
  1. 1986年, David RumelhartJames McClelland对于联结主义在计算机模拟神经活动中的应用提供了全面的论述,并重新发明了反向传播算法。
  1. Geoffery Hinton [1986] 等将其引入到多层感知器中。
  1. LeCun[1989] 等人将反向传播算法引入了卷积神经网络,并在手写字体识别上取得了很大的成功。

梯度消失问题阻碍着神经网络的进一步发展,特别是循环神经网络。

  1. Schmidhuber [1992] 采用两步来训练一个多层的循环神经网络:1)通过无监督学习的方式;来逐层训练每一层循环神经网络,即预测下一个输出;2)通过反向传播算法进行精调。
流行度降低(1995~2006)

在此期间,支持向量机和其他更简单的方法在机器学习领域的流行度逐渐超过了神经网络。

在20世纪90年代中期,统计学习理论和以支持向量机为代表的机器学习模式开始兴起。

相较之下,神经网络的理论基础不清晰,优化困难,可解释性差等缺点更加凸显。

深度学习的崛起(2006~-)

在此期间,研究者逐渐掌握了训练深层神经网络的方法,使得神经网络重新崛起。

  1. 2006年,Hinton等人通过逐层预训练来学习一个深度信念网络,并将其权重作为一个多层前馈神经网络的初始化权重,再用反向传播算法进行精调。这种“预训练+精调”的方式可以有效地解决深度神经网络难以训练的问题。
  1. 随着深度神经网络在语音识别和图像分类等任务的巨大成功,以神经网络为基础的深度学习迅速崛起。

3.随着大规模并行计算以及GPU设备的普及,计算机的计算能力得以大幅提高。此外,可供机器学习的数据规模也越来越大。在强大的计算能力和海量的数据规模的支持下,计算机已经可以端到端地训练一个大规模神经网络,不需要借助预训练的方式。

自我理解


本书在开始给出了一张知识结构图

人工智能 机器学习 深度学习 神经网络

我对它们关系的理解
  1. 机器学习是在不知道智能行为背后原理的情况下直接借助数据实现人工智能的手段之一。
    在知道智能行为背后原理的情况下诞生的是专家系统
  1. 深度学习是自动从原始数据中提取特征并进行学习的机器学习。
    将特征提取与学习两个步骤分开,以人工干预的方式提取原始数据特征的机器学习称为特征工程
  1. 神经网络是实现深度学习的手段之一,而且深度学习目前主要采用神经网络进行学习,这是因为神经网络较好地解决了深度学习内部组件对最终结果的贡献度分配解释问题。
    其他深度学习使用的模型包括深度信念网络

一些概念的理解

嵌入 :将数据从局部表示向分布式表示转换的过程

贡献度分配问题:深度学习中把数据输入组件后,各个组件对最终输出结果的影响程度

one-hot向量: 在局部表示中,表示数据的向量只有在表示数据所属的维度为1,其余维度为零

第一章作业启发

9.建立矩阵a ,初始化为[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],输出(0,0),(1,2),(2,0),(3,1) (提示使用 b = np.array([0, 2, 0, 1]) print(a[np.arange(4), b]))

在不看提示时,a的shape为(4,3),我对实现的预想如下:

a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])temp = np.array([0,2,0,1])print(a[:,temp])

out:

[[ 1  3  1  2][ 4  6  4  5][ 7  9  7  8][10 12 10 11]]

了解提示后,完成代码及输出如下:

a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])temp = np.array([0,2,0,1])print(a[np.arange(4),temp])

out:

[ 1  6  7 11]

比较不同,发现第一个代码块是对整列进行处理。

《神经网络与深度学习》邱希鹏 学习笔记 (1)相关推荐

  1. 《神经网络与深度学习》邱希鹏 学习笔记(3)

    <神经网络与深度学习>邱希鹏 学习笔记(3) 完成进度 第二章 机器学习概述 线性回归 参数学习 偏差-方差分解 自我理解 概率 似然 先验 后验 参考文献 完成进度 - 第二章 (1) ...

  2. 《神经网络与深度学习》邱希鹏 学习笔记(4)

    <神经网络与深度学习>邱希鹏 学习笔记(4) 完成进度 第二章 机器学习概述 机器学习算法的类型 数据的特征表示 传统的特征学习 特征选择 特征抽取 深度学习方法 评价指标 理论和定理 P ...

  3. 《神经网络与深度学习》 邱希鹏 学习笔记(一)

    一.机器学习的基本要素 机器学习的基本要素: 模型 学习准则 优化算法 其中模型分为线性和非线性.学习准则有用损失函数来评价模型的好坏,还有经验风险最小化准则,大概意思就是在平均损失函数中获得最小的损 ...

  4. 《神经网络与深度学习》 邱希鹏 学习笔记(二)

    正则化 所有损害优化的方法都是正则化.增加优化约束,干扰优化过程 优化约束包括 L1/L2约束,数据增强 干扰优化包括 随机梯度下降 权重衰减 提前停止 在上式中 y ( n ) 为样本 n ,其展开 ...

  5. 【邱希鹏】nndl-chap2-linear_regression

    线性回归 问题描述 有一个函数 ,使得.现 在不知道函数 \(f(\cdot)\)的具体形式,给定满足函数关系的一组训练样本 ,请使用线性回归模型拟合出函数 \(y=f(x)\). (可尝试一种或几种 ...

  6. 神经网络与深度学习-课后习题

    <神经网络与深度学习-邱锡鹏>习题解答 https://github.com/nndl/solutions 面试锦囊之LR 面试篇--线性回归怎么问? 面试篇--SVM怎么问 面试篇--决 ...

  7. 神经网络与深度学习复习大纲

    第一章(问答题) 1.神经网络是什么?深度学习是什么? 神经网络:一种以(人工))神经元为基本单元的模型 深度学习:一类机器学习问题,主要解决贡献度分配问题 2.常用的深度学习框架是什么? Paddl ...

  8. 神经网络与深度学习理论,tensorflow2.0教程,cnn

    *免责声明: 1\此方法仅提供参考 2\搬了其他博主的操作方法,以贴上路径. 3* 场景一:神经网络与深度学习理论 场景二:tensorflow的安装 场景三:numpy包介绍 场景四:机器学习基础 ...

  9. 复旦邱锡鹏教授公布《神经网络与深度学习》,中文免费下载 | 极客头条

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」,购票请扫码咨询 ↑↑↑ 整理 | Jane 出品 | AI科技大本营 优质的人工智能学习资源一直是大家非常关注的,以往我们也推荐过很多 ...

最新文章

  1. EM算法 大白话讲解 没看懂 保存
  2. Android Volley彻底解决(三),定制自己Request
  3. spark匹配html字段,Apache Spark中的高效字符串匹配
  4. 基础设备----笔记
  5. CentOS 桌面启动无登录界面
  6. Python eval 与 exec 函数 - Python零基础入门教程
  7. 还在担心没有服务器做不了数据分析?这个免费资源看一下!
  8. Spring Framework源码编译,开始Spring源码学习
  9. 防止HALCON刷新图像窗口控件闪烁
  10. linux服务器磁盘陈列
  11. redis下载配置并简单测试(免安装版)
  12. PDF文件太大,教你一个方法让PDF文件变小
  13. NLP 实战 (5) | 标签、技能树和知识图谱
  14. 中国区边界shp文件以及STRM 90m DEM分享(百度云免费下载链接)
  15. 《场景革命》读书笔记
  16. 微信开发验证php,解析微信公众平台开发之验证步骤实例(PHP版)
  17. html5 input的type属性启动数字输入法
  18. DECODE函数常用语法
  19. AICodeHelper - AI编程助手
  20. maven多模块依赖导入失败以及私服下载包卡死

热门文章

  1. paddledet 训练旋转目标检测 ppyoloe-r 训练自己的数据集
  2. Altium Designer新手教程
  3. 一、区块链项目的基础架构
  4. (64)-- 爬取58同城网页信息
  5. iOS之 2020年最新苹果移动设备屏幕的大小和系统
  6. Day 2: On Your Choices
  7. native2ascii的使用技巧
  8. 信奥中的数学基础:分解质因数
  9. 【子集/组合/全排列】C语言框架
  10. STM32入门笔记(02):MDK Keil5 开发环境搭建及新建工程模板教程(SPL库函数版)