第二次作业:深度学习基础

绪论

1 从专家系统到机器学习

1.1 何为专家系统

一个专家系统需要具备专家水平的专业知识,且能进行有效的推理,它具有交互性和灵活性。对比于传统程序的组成(数据结构+算法),专家系统的组成主要是知识库和推理机。知识库从专家处获取相应的知识(如视频中提到的德语翻译专家),为推理机构建基本规则。推理机主要负责解释程序,调度程序,完成机器层面上的工作。而它的工作过程则需要知识库的规则加以引导。

1.2 专家系统的优劣

对于一个专家系统,它输出结果的精准度依赖于专家所提供的知识,因此不需要大量的数据,解释性也更强。但随着专家系统的投入使用,它的劣势的渐渐显现出来。首先程序的执行是基于知识库的规则的,因此需要设计大量的规则;其次,整个过程只由邻域专家来指导,客观性较差;除此之外,还有诸如可移植性差,学习能力差之类的毛病。

1.3 机器学习

在解决问题的过程中,如果我们将问题规模和规则复杂度作为两个参考因素,可以得到以下关系:

第二次作业:深度学习基础_第1张图片
当解决问题所需要的规则较少,但问题规模较大时,专家系统便可派上用场:利用少数的规则来处理大量的数据。但当问题规模不变,规则的复杂度上升时,专家系统已不在适用,这时候机器学习便派上用场了。
机器学习的最常用定义是:
计算机系统能够利用经验提高自身性能。
可操作定义:
机器学习的本质是一个基于经验数据的函数估计问题

1.3.1 机器学习如何学

模型:问题建模,确定假设空间
策略:从假设空间中学习/选择最优模型准则
算法:根据目标函数求解目标模型的具体计算方法

1.3.2 学习模型的分类

监督学习模型和无监督学习模型
半监督学习模型和强化模型

2 从传统机器学习到深度学习

2.1 比较

在专家系统中,由人工设计规则;
在传统的机器学习中,通过人工设计特征
在简单学习中,特征由系统自己进行训练
在深度学习中,特征可以组合成为更加复杂的的特征

第二次作业:深度学习基础_第2张图片

3 深度学习的能与不能

3.1 深度学习的能

1.学习能力强
从结果来看,深度学习的表现非常好,源自于它对多层特征的逐步深度学习。
2.覆盖范围广,适应性好
深度学习的神经网络层数很多,宽度很广,理论上可以映射到任意函数,所以能解决很复杂的问题。
3.数据驱动,上限高
深度学习高度依赖数据,数据量越大,他的表现就越好。

3.2 深度学习的不能

1.只能根据数据来学习,不会判断数据正确性。
深度学习可以在不理解数据的情况下模仿数据中的内容:它不会否定任何数据,不会发现社会上的偏见,而只是“学习数据”。
2.无法解释做出的决策。
深度学习给出的是非自然(合法)语言解释的结果。深度学习的代码容易获得,却很难为人类所理解接受,因为即使最好的数学家或其他算法也无法搞明白它。
3.计算量大,便携性低,硬件要求高
基于深度学习对算力的高要求,其对硬件资源的要求也相当的高。

深度学习概述

1 浅层神经网络

1.1 概念

首先需要先明确一下神经网络的结构,图示为两层神经网络,也可以称作单隐层神经网络(a single hidden layer neural network)。这就是典型的浅层(shallow)神经网络,结构上,从左到右,可以分成三层:

  • 输入层(input layer):竖向堆叠起来的输入特征向量。
  • 隐藏层(hidden layer):抽象的非线性的中间层。
  • 输出层(output layer):输出预测值。

注意:当我们计算网络的层数时,通常不考虑输入层。因此图中隐藏层是第一层,输出层是第二层

第二次作业:深度学习基础_第3张图片

1.2 生物神经元

第二次作业:深度学习基础_第4张图片

  1. 每个神经元都是一个多输入单输出的信息处理单元
  2. 神经元具有空间整合和时间整合特性
  3. 神经元输入分兴奋性输入和抑制性输入两种类型
  4. 神经元具有阈值特性
    • 1和2模拟多输入信号进行累加
    • 3权值w正负模拟兴奋和抑制,大小模拟强度
    • 4当输入和超过阈值时神经元被激活

对上述图片进行抽象的处理可抽象为一个黑箱模型

第二次作业:深度学习基础_第5张图片

黑箱模型还是具有一些问题

  1. 首先是不知道黑箱中的函数结构就不能为我们所用,
  2. 其次是输入输出与黑箱的关系也无法量化。

因此考虑将上述结构简化,首先把树突到细胞核的阶段简化为线性加权的过程其次把突触之间的信号传递简化为对求和结果的非线性变换,那么上述模型就变得清晰了:

第二次作业:深度学习基础_第6张图片

1.3 单层感知器

上面的抽象出来的神经元模型实际就是一个感知器的模型,对这个模型在进行符号化,就是单层感知器的模型

第二次作业:深度学习基础_第7张图片

单层感知器的训练过程:

第二次作业:深度学习基础_第8张图片

但是单层感知器只对线性可分问题具有分类的能力

1.4 多层感知器

多层感知器在单层感知器的基础上引入了隐含层,能够解决非线性分类的问题。

第二次作业:深度学习基础_第9张图片

多层感知机也叫人工神经网络除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构如图。

多层感知机层与层之间是全连接的,多层感知机最底层是输入层,中间是隐藏层,最后是输出层。

  1. 输入层:输入数据。
  2. 隐藏层:首先它与输入层是全连接的,假设输入层用向量X表示,则隐藏层的输出就是f(W1X+b1),W1是权重(也叫连接系数),b1是偏置,函数f 可以是常用的sigmoid函数或者tanh函数
  3. 输出层:隐藏层到输出层可以看成是多类别逻辑回归(softmax回归)

1.5 反向传播

首先来一个反向传播算法的定义(转自维基百科):反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。 该方法对网络中所有权重计算损失函数的梯度。 这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。

可将前向传播与反向传播结合理解

  • 前向传播

第二次作业:深度学习基础_第10张图片

省略中间过程,最后输出的y就是本次前向传播神经网络计算出来的结果(预测结果),但这个预测结果不一定是正确的,要和真实的标签(z)相比较,计算预测结果和真实标签的误差(δ ),如下:

第二次作业:深度学习基础_第11张图片

省略中间过程

第二次作业:深度学习基础_第12张图片

  • 反向传播

    • 下面开始利用反向传播的误差,计算各个神经元(权重)的导数,开始反向传播修改权重

第二次作业:深度学习基础_第13张图片

第二次作业:深度学习基础_第14张图片

到此为止,整个网络的前向,反向传播和权重更新已经完成,明确,“正向传播”求损失,“反向传播”回传误差。同时,神经网络每层的每个神经元都可以根据误差信号修正每层的权重

1.6 梯度消失

在了解梯度消失之前,应该先了解一下梯度下降的概念,在上述反向传播中还有两个问题没有解决

  1. 误差E有了,怎么调整权重让误差不断减小?
  2. E是权重w的函数,何如找到使得函数值最小的w。

这里的解决就是梯度下降,可以理解为一个链式求导的过程。然后开始梯度消失的概念

  • 梯度消失的根源:深度神经网络和反向传播
  • 梯度消失的原因:
    • 一是在深层网络
    • 二是采用了不合适的损失函数

第二次作业:深度学习基础_第15张图片

可以理解为不同的层学习的速度差异很大,表现为网络中靠近输出的层学习的情况很好,靠近输入的层学习的很慢,有时甚至训练了很久,前几层的权值和刚开始随机初始化的值差不多

2 神经网络到深度学习

深度学习是机器学习(Machine Learning,ML)领域中一个新的研究方向。**更为复杂的神经网络,**它使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。深度学习是一类模式分析方法的统称,就具体研究内容而言,主要涉及三类方法:

  • 基于卷积运算的神经网络系统,即卷积神经网络(Convolutional Neural Network,CNN)。
  • 基于多层神经元的自编码神经网络,包括自编码(Auto Encoder)以及近年来受到广泛关注的稀疏编码两类(Sparse Coding)。
  • 以多层自编码神经网络的方式进行预训练,进而结合鉴别信息进一步优化神经网络权值的深度置信网络(DBN)。

2.1 逐层预训练

**起因:**逐层预处理的产生背景就是因为梯度消失的问题,由于梯度消失,即输出层的错误在反向传播
的过程中会显著地越来越小,所以靠近输入层的层的梯度就接近0, 所以这些层的参数就会得不到更新。而只有靠近输出层的那几层的参数得到了很好的更新。

**逐层:**一层一层的训练,一次只训练一层,所以你完全可以在本来已经预训练好的模型后面再加一层,因为这新加的一层的训练只需要它前面的最后一层的数据,前面其他层的参数都是fixed固定的。只处理好当前的任务,让当下的子任务达到最优,即使这样做并不会使得全局最优。一次只把一层训练好,训练到完美优秀。

**预训练:**基于浅层模型总是比深层模型好训练的一个假设。所以才把整个网络的训练分解为多个子任务,一次训练一层。

2.2 自编码器

自动编码器是一种无监督的数据维度压缩和数据特征表达方法。在大部分提到自动编码器的场合,压缩和解压缩的函数是通过神经网络实现的。一个简单的自编码器结构如下所示:

第二次作业:深度学习基础_第16张图片

可以看到上述结构只有一个隐藏层,从输入到隐藏层即为Encoder(编码器),从隐藏层到输出即为Decoder(解码器)。
  一提到降维,首先想到的肯定是主成分分析(PCA),PCA具体原理可以参考:降维基础知识(样本均值、样本方差、中心矩阵)与PCA(最大投影方差,最小重构代价,SVD分解)
  那么自编码器这么简单的结构如何达到降维的目的呢?我们知道,一个最简单的自编码器(上图所示)只有三层结构,编码器将输入进行编码,变成中间结果,中间结果再经过解码器还原,这种输入等于输出的结构没有什么实际意义。对于上述结构,如果我们只看左边部分,即编码器的部分,就很容易理解降维的原理:隐藏层神经元的数目远低于输入层,那么我们就可以用更少的特征(神经元)去表征输入数据,从而到降维目的。

2.3 受限玻尔兹曼机

受限波尔兹曼机(Restricted Boltzmann Machines,RBM)是一类具有两层结构、对称连接且无自反馈的随机神经网络模型,层间全连接,层内无连接。我们知道玻尔兹曼机的是全连接的,这里我们对比一下看看:

第二次作业:深度学习基础_第17张图片

二者最大的区别在输入层和隐层的连接方式上,BM模型是全连接的而RBM是相互独立的,他们的区别就在这里,那么为什么计算量会差别那么大呢?在概率中我们知道BM模型的输入和隐层的概率计算肯定是联合概率,因为他们各自有联系而RBM的概率虽然函数联合概率,但是因为独立,可以单独计算每个神经元的概率,然后相乘,进而达到计算量小的目的,另外就是RBM的学习算法是对比散度即CDCD算法,学习速度很快
RBM到DBN(深度信念网络)

一个DBN模型由若干个RBM堆叠而成,最后加一个监督层。训练过程由低到高逐层训练:

  1. 最底部RBM以原始输入数据训练
  2. 将底部RBM抽取的特征作为顶部RBM的输入继续训练
  3. 重复这个过程训练尽可能多的RBM层
  4. 基于监督信息通过全局优化算法对网络进行微调,使模型收敛

浅层神经网络和深度学习的对比

浅层结构算法:其局限性在于有限样本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定制约。深度学习可通过学习一种深层非线性网络结构,实现复杂函数逼近,表征输入数据分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力。(多层的好处是可以用较少的参数表示复杂的函数)

深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。

参考资料:

“反向传播算法”过程及公式推导(超直观好懂的Backpropagation)

详解机器学习中的梯度消失、爆炸原因及其解决方法

逐层贪婪预训练(解决梯度消失的第一个成功方案,但现在除了NLP领域外很少使用)

学习感想

邱琦

机器学习适用于问题复杂度高,规模大,数据足够多的问题。机器学习主要通过建立模型,确定目标函数,以及求解模型参数来完成。它的基本特点,是试图模仿大脑的神经元之间传递,处理信息的模式。其中深度学习的三要素是算法、算例、数据,他一来于大数据,但是数据的误差会使最后生成的模型效果差强人意,对于效果不好的模型,需要重新训练,这个过程中也可能要改变其中的网络结构,也可能要改变训练次数等各种因素,所以可以说机器学习目前还是未知性比较大的领域。

宋子昂

近些年来,类似深度学习、人工智能、机器学习等的话题度直线飙升,在最初,我对于这三个词语还是一知半解的,通过视频的学习以及课下的了解,我逐渐搞清了这三者之间的联系:机器学习是实现人工智能的一种技术方法,而深度学习是机器学习这门技术的子集。深度学习相比较于机器学习来讲,其更高级,深度学习通过多层神经网络结构,将底层属性逐步“进化成”我们能够看懂理解的高级属性。深度学习需要的前提依赖有很多,比如数据量必须要大,硬件设施(GPU)要强。深度学习是非常难以调试的,而且其模型训练的时长通常比较长。深度学习过程中最重要的就是模型的构建,其中还有很多函数和算法、线性变换、非线性变换等。我认识到得到深度学习的训练结果是相当不容易的,但要弄清楚中间的过程,形成一套理论体系是更加复杂的。在深度学习这条路上还需持续不断的学习。深度学习的应用也越来越多了,涉及的领域也是非常广泛,同时,深度学习也需进一步的改进与提高,其有着模型的杂度高、迁移能力差、算法不稳定等缺点,相信在业界人士和科技人员的不懈努力下,这些小缺陷会慢慢改善,只能任重而道远!

李智杰

通过对视频课程的学习对人工智能的发展和现状,深度学习的概念方法以及激活函数等有了初步的理解和认识,深刻感受到了机器学习在其发展变化中逐渐体现出的巨大力量以及深度学习逐渐在我们生活中展现的巨大作用。然而对其中的许多知识还并不了解,渴望在今后的学习中,能够通过自己动手加深这方面的收获。

韦境

人工智能这个学科,它和其他的一些短期的投资风口和短期的热点不太一样。它经过 60 多年的发展,已经有一个庞大的、真正的知识体系。而高水平的人工智能人才稀缺,这是一个世界性的问题。作为计算机科学与技术专业的大学生,我们应当深刻了解人工智能的发展历史,并大胆展望它的未来,同时巩固自己的知识基础,将来成为高水平的人工智能人才。同时也要清楚的一点是,人工智能不是一切的答案,不要盲目地神话人工智能的优点,要看清人工智能的局限性和不足,才能避免自己的思维过于狭隘。

陈江栋

一门新技术的产生说明有着目前技术难以解决的问题,而深度学习的发展极大的推动着人工智能的进步,深度学习的概念源于人工神经网络的研究,但是并不完全等于传统神经网络。不过在叫法上,很多深度学习算法中都会包含"神经网络"这个词,比如:卷积神经网络、循环神经网络。所以,深度学习可以说是在传统神经网络基础上的升级,约等于神经网络。假设深度学习要处理的信息是“水流”,而处理数据的深度学习网络是一个由管道和阀门组成的巨大水管网络。网络的入口是若干管道开口,网络的出口也是若干管道开口。这个水管网络有许多层,每一层由许多个可以控制水流流向与流量的调节阀。根据不同任务的需要,水管网络的层数、每层的调节阀数量可以有不同的变化组合。对复杂任务来说,调节阀的总数可以成千上万甚至更多。水管网络中,每一层的每个调节阀都通过水管与下一层的所有调节阀连接起来,组成一个从前到后,逐层完全连通的水流系统。

陈晓政

区别于传统的浅层学习,深度学习的不同在于:
1.强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;
2.明确了特征学习的重要性。也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更容易。与人工规则构造特征的方法相比,利用大数据来学习特征,更能够刻画数据丰富的内在信息。
深度学习不能:
1.算法输出不稳定,容易被“攻击”;
2.模型复杂度高,难以纠错和调试;
3.模型层级复合程度高,参数不透明 ;
4.端对端训练方式对 数据依赖性强,模型增量性差;
5.专注直观感知类问题,对开放性推理问题无能为力;
6.人类知识无法有效引入进行监督,机器偏见难以避免。
通过观看视频,我也了解了与深度学习相关的单层和多层感知器、万有逼近定理、梯度消失问题、自编码器、受限玻尔兹曼机(RBM)等原理。这些相关原理是我第一次接触,理解不太深刻,但也还是学到了很多新知识。

问题

邱琦

对于机器学习中训练的结果不好,应该如何通过现有条件去判断应该调整哪种影响因素继续去训练,还是说每种方向都试一试。

宋子昂

像循环神经网络和前馈神经网络是层级越多越好吗,多少个层级能达到最好的效果,这样的一个最优效果的层数我们是否可以找到呢

李智杰

玻尔兹曼机相关概念

韦境

螺旋数据分析相关原理

陈江栋

卷积在CNN模型中具体是起到了什么作用?
神经网络为什么需要卷积层、池化层、全连接层这样的架构,可以进行别的架构吗?

陈晓政

深度学习存在算法输出不稳定,容易被攻击的问题,那么应该如何提高算法稳定性?

代码联系

pytorch基础

pytorch练习中提供了比较常见的应用。pytorch主要应用于深度学习领域,可以看作是加入了GPU支持的numpy,也可以被当作一个拥有自动求导功能的强大的深度神经网络。

第二次作业:深度学习基础_第18张图片

此处的@运算符为矩阵乘,出错原因为一个张量内的数据类型为float,而另一个是整数,可以看到之前的定义

第二次作业:深度学习基础_第19张图片

对于直接定义的张量,pytorch默认为float。这里使用arange产生数据,数据类型是整数。另外,使用range产生数据,数据类型为float。两个方法很像,但产生数据的数据类型不同。
对于两个不同数据类型的张量进行操作时,应将张量转换为相同的数据类型

第二次作业:深度学习基础_第20张图片

螺旋数据分类

先将绘图函数下载到本地:

第二次作业:深度学习基础_第21张图片

引入基本的库,然后初始化重要参数:

第二次作业:深度学习基础_第22张图片

初始化 X 和 Y。 即特征矩阵、样本标签。 X是一个 NxC 行, D 列的矩阵。C 类样本,每类样本是 N个,所以是 N*C 行。每个样本的特征维度是2,所以是 2列。在 python 中,调用 zeros 类似的函数,第一个参数是 y方向的,即矩阵的行;第二个参数是 x方向的,即矩阵的列。下面所示代码看为3000个样本的特征的初始化过程:

第二次作业:深度学习基础_第23张图片

通过函数进行可视化数据的操作:

第二次作业:深度学习基础_第24张图片

之后构建线性模型来进行分类训练:

第二次作业:深度学习基础_第25张图片

其中使用 print(y_pred.shape) 可以看到模型的预测结果,为[3000, 3]的矩阵。每个样本的预测结果为3个,保存在 y_pred 的一行里。值最大的一个,即为预测该样本属于的类别;score, predicted = torch.max(y_pred, 1) 是沿着第二个方向(即X方向)提取最大值。最大的那个值存在 score 中,所在的位置(即第几列的最大)保存在 predicted 中。例如把第10行的情况输出:

第二次作业:深度学习基础_第26张图片

展示构建的训练模型:

第二次作业:深度学习基础_第27张图片

从上面图示可以看出,线性模型的准确率最高只能达到 50% 左右,对于这样复杂的一个数据分布,线性模型难以实现准确分类,对此我们再进行两层神经网络的构建并进行分类训练:

第二次作业:深度学习基础_第28张图片

构建完成后,输出训练结果:
第二次作业:深度学习基础_第29张图片

观察输出的图示可以发现,我们的训练模型准确率已经非常高了。基本可以达到90%了,所以构建两层神经网络分类是比较成功的。

你可能感兴趣的:(深度学习,人工智能,机器学习)