深度学习及神经网络学习总结

ps:我是在高一的时候第一次脑海中接触神经网络这个概念......,注意只是接触,一直扔到现在

1. 简介

神经网络和深度学习是由Michael Nielsen所写,其特色是:兼顾理论和实战,是一本供初学者深入理解Deep Learning的好书。

2. 感知器与sigmoid神经元

2.1 感知器(Perceptrons)

感知器工作原理:接收一系列二进制输入,经过特定的规则计算之后,输出一个简单的二进制。

计算规则:通过引入权重(weights)表示每个输入对于输出的重要性,则有

记w?x=∑jwjxj,b=-threshold,则有

其w是权重,b是偏差。

2.2
Sigmoid神经元(Sigmoid Neurons)

为了使学习变得可能,需要具备的【学习特征】:权重或偏差有较小的变化,导致输出也有较小的变化。如下图所示:

感知器网络存在的缺陷是:某个感知器较小的权重或偏差变化,可能导致输出在0与1之间进行翻转。所以包含感知器的网络不具备【学习特征】。

幸运的是:Sigmoid神经元具有此【学习特征】,即其较小的权重或偏差变化,导致其输出变化较小。

Sigmoid函数:

Sigmoid神经元输出:

感知器与sigmoid神经元的差别:

1) 感知器只输出0或1

2)sigmoid神经元不只输出0或1,而可输出[0,1]之间的任意值

3. 神经网络架构

3.1 手写数字识别

训练图像大小为28x28,每个训练图像有一个手写数字。

在输出层,如果第一个神经元被激活(即其输出接近1),则此网络认为此手写数字为0;

如果第二个神经元被激活(即其输出接近1),则此网络认为此手写数字为1;

其它以此类推。

3.2 算法描述

设x表示训练图像,则x是一个28x28=784维列向量。

表示输入图片x是数字6  

需要寻找一个算法来发现w和b,使其输出接近标签值,为了量化接近程序,定义如下成本函数:

w:所有权重的集合

b:所有偏差的集合

n:训练样本数

a: 输出向量(其值依赖x,w,b)

x:一幅训练图像

||v||:表示向量的范数,即向量的长度

C:二次成本函数(mean squared error or MSE)

如果接近于0,表示y(x)接近输出a,即学习效果很好。

此成本函数中,w和b为变量。

注:hidden layers和output layer中的每个神经元对应一个组w、b。

3.2.1 学习目标

如何找到满足要求的w和b:答案是梯度下降法(Gradient Descent)

1)最小化二次成本函数

2)检测分类的准确性

学习目标:在训练神经网络中,找到使二次成本最小的w和b的集合。

3.2.2 梯度下降更新规则

:表示学习速度(Learning
Rate)

此规则用于在神经网络中学习参数w和b。

3.2.3 算法推导(梯度下降法: gradient descent)

要求极小值,先讨论具有2个变量的简单情况,然后再推广:

为梯度向量,则有:

现在的问题是如何选择,使负数,则有:

则v的更新规则为:

按此规则,一步一步跌代,C值不断减少,直到全局最小值。

总之,梯度下降法是:重复计算梯度,然后向相反的方向移动(即下坡最快最陡的方向),如下图所示:

上面讨论了只有两个变量的情况,现在推广到m个变量的情况,对应公式如下:

3.2.4 随机梯度下降法(Stochastic Gradient Descent)

为不减少计算量,把n个学习样本分成很多组,每组有m个学习样本,每次只计算一个组,则有如下推导:

则w和b的更新规则为:

注:如果m=1,则为在线学习(online)。

3.2.5 w和b的数量

对于hidden layers和输出层的神经元,每个神经元对应一个w向量和一个b,w向量的维数是其输入神经元的数量。第一层神经元没有w和b,其值直接输出。

第一层就表示原始图像数据,这些数据不经任何处理,直接作为Xj参与第二层的运算,第二层首先基于每个Xj,计算其z(z=wx+b),然后计算出sigmoid(z),以此类推。直到最后一层,利用BP算法,先计算最后一层w和b的梯度,然后以此向前,直到计算出第二层的梯度为止。

4. BP算法(反向传播算法)

BP(Backpropagation Algorithm) :是一个计算成本函数梯度的算法。

需要基于每个训练样本计算每一层的w和b的梯度,从而更新每一层的w和b。

BP的真正目标:是计算每个样本的偏导数:

4.1 定义标记符号

则有激活值的如下公式:

函数向量化有如下形式:

即函数对向量的每个元素分别计算,然后生成对应的向量。

则上面的函数向量表示为:

,则有

4.2 公式推导过程

4.2.1 计算激活值

4.2.2 最后一层(L层)的二次成本函数

4.2.3 单个训练样本(x)的二次成本函数

4.2.4 定义误差

4.2.5 定义输出层误差

4.2.6 求最后一层(L层)激活值的偏导数

4.2.7 根据最后一层的误差计算前一层的误差

4.2.8 计算目标值

4.2.9 BP的四个基本方程式

4.3 证明四个基本议程式

4.3.1 证明BP1

4.3.2 证明BP2

4.4 BP计算过程

5. SGD(随机梯度下降)计算过程

6. 改进神经网络学习方法

理想地,期望我们的神经网络能从自己的错误中快速地进行学习。

神经元通过改变权重和偏差的来进行学习的学习速度由成本函数的偏导数()决定,所以学习速度慢的根本原因是:偏导数太小。

6.1 交叉熵成本函数

交叉熵成本函数定义如下:

对权重w的求导结果为(n为训练样本数):

根据上面的求导公式,则避免了在二次成本函数中由导致的学习速度慢问题。

6.2 推广交叉成本函数

把交叉成本函数推广到具有多个神经元的多层网络中,则交叉成本函数变为:

与二次成本函数相比,唯一不同的是的计算方法,其它计算方法完全相同。

6.3 交叉熵的含义

粗略地说,交叉熵是“不确定性”的一种度量。特别地,我们的神经元想要计算函数x-> y = y(x)。但是,它用函数x->a = a(x) 进行了替换。假设我们将a 想象成我们神经元估计为y = 1 的概率,而1-a 则是y = 0 的概率。那么交叉熵衡量我们学习到y的正确值的平均起来的不确定性。如果输出我们期望的结果,不确定性就会小一些;反之,不确定性就大一些。

6.4 Softmax(柔性最大值)

Softmax+log-likelihood(对数似然)成本函数:在现代图像分类网络中最常用。

Softmax为神经网络定义了一个新的输出层,即它的激活函数不再是Sigmoid,而是Softmax函数。

Softmax的每个神经元的输出都为正,且它们的和为1。所以Softmax层的输出可以看作一个概率分布。

与Softmax相比,Sigmoid层的输出不能形成一个概率分布,且没有一个直观、简单的解释。

6.4.1 Softmax如何解决学习速度慢的问题?

从以上梯度公式中可知,对于解决学习速度慢的问题:【Softmax输出层+对数似然成本函数】与【Sigmoid输出层+交叉熵成本函数】效果相当。

在二者间如何做出选择呢?

当你需要把输出当做概率解释时,则需要使用【Softmax输出层+对数似然成本函数】。

7. 过拟合和规范化

7.1 过拟合(Overfitting)

在神经网络中,过拟合(Overfitting)是一个主要问题。此问题在现代网络中特别突出,因为现代网络有大量的权重和偏差。为了进行有效的训练,我们需要一个检测是否过拟合的方法,以防止过度训练(Overtraining),并且我们还需要可以减少过拟合效果的技术。

最直接的检测过拟合的方法是:跟踪测试数据在训练过的网络中的准确性。如测试数据分类的准确性不再改善,我们应当停止训练;或测试数据分类的准确性和训练数据分类的准确性都不再改善,我们应当停止训练。

如果对训练样本过拟合,则其推广能力就差,导致对新的数据的预测或分类的准确性变差。

7.2 规范化(Regularization)-减少过拟合

增加训练数据是减少过拟合的方法之一。

规范化(Regularization)也是减少过拟合的方法之一。有时候被称为权重衰减(weight decay)或者L2 规范化。L2 规范化的思想是增加一个额外的项到成本函数中,这个项叫做规范化项。规范化的交叉熵如下:

>0是规范化参数(regularization parameter)

C0是原来常规的成本函数。 如果较小,我们期望最小化原始成本函数;如果较大,我们期望最小化权重。

则可得:

可进一步得到:

权重衰减因子:

针对小批量训练样本(m个),则有:

7.3 为什么规范化可以减少过拟合

权重越小,复杂度就越低;可以为数据提供更简洁更有力的解释。

当有异常输入时,小的权重意味着网络输出变化不大,即不易学习到数据中的局部噪声。总而言之,规范化网络基于训练数据的主要规律,从而创建一个相对简单的模型,并且拒绝学习训练数据中的噪声(异常数据)。这样强制网络学习数据的本质规律,并把学到的规律进行更好地推广。

8. 权重初始化

可加快学习速度。

假设输入层有1000个神经元,且已经使用归一化的高斯分布初始化了连接第个隐层的权重。如下图所示:

为了简化,设输入层一半神经元值为1,另一半为0。让我们考虑隐层神经元输入的带权和z:

其中500项消去了,因为对应的输xj 为0。所以z 是包含501个归一化的高斯随机变量的和,包含500个权重项和1个偏差项。因此z本身是一个均值为0、标准差为(方差为501)的高斯分布。它是一个非常宽的高斯分布,根本不是非常尖的形状:

注:

随机变量X服从一个数学期望为μ、方差为σ^2的高斯分布,记为N(μ,σ^2)。

正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。

标准正态分布服从N(0,1)

两个都服从正太分布的变量,例如X服从N(a,b),Y服从N(c,d),且X和Y相互独立,则有:

1)X+Y服从N(a+c,b+d)

2)X-Y服从N(a-c,b+d)

即两变量相加减时,期望相应加减,方差始终是相加。

从上图上可以看出|z|会变得很大,即z>>1或z<<-1。如果这样,隐层神经元的输出就会接近1或者0,即隐层神经元进入饱和状态了。即隐层神经元的输出将非常接近于0或1。在这种情况下,权重的修改对隐层神经元的输出激活值影响很小,从而对下一层的隐层神经元、直到对输出层的神经元的输出都很小,从而导致学习速度慢的问题。

(注:输出层神经元饱和于错误值也会导致学习速度慢的问题,这可以通过选择成本函数<如交叉熵>来避免,但选择成本函数的方法不能解决隐层神经元饱和的问题)

从以上分析可知,如果隐层神经元的权重服从N(0,1)分布,它将导致隐层神经元的激活值接近于0或1,并且导致学习速度下降,如何解决此问题呢?

通过选择更好的初始化权重和偏差可以解决此问题。

答案是:初始化权重服从N(0,1/)分布,偏差服从N(0,1)。其中表示此层神经元输入权重个数(即此隐层神经元的输入神经元个数,如上例中=1000)。权重之后为:,其服从N(0,3/2)。

方差的计算方法:500*1/1000+1=1500/1000=3/2。其图形非尖,如下图所示:

此神经元饱和的可能性很低,从而导致学习速度慢的可能性也很低。

9. 神经网络可以计算任何函数

“神经网络可以计算任何函数”的真正含义:

1)不是说一个网络可以被用来准确地计算任何函数,而是我们可以获得尽可能好的一个近似。通过增加隐层神经元的数量,可以提升近似的精度。

2)可以按照上面的方式近似的函数类其实是连续函数。如果函数不是连续的,也就是会有突然、极陡的跳跃,那么一般来说无法使用一个神经网络进行近似。

总而言之:包含一个隐层的神经网络可以被用来按照任意给定的精度近似任何连续函数。

10. 为什么训练深度神经网络比较困难?

对于学习算法,前面使用的是苦力般的学习方法(基于反向传播的随机梯度下降)来训练深度网络,这样产生的问题是:深度神经网络并不比浅层网络性能好太多。

其根据原因是:在深度网络中,不同层的学习速度差异很大。尤其是,
在网络后面层的学习速度很好的时候,前面层在训练时停滞不变,基本上学不到东西;或先前的层学习的比较好,但是后面层却停滞不变。其停滞不前的原因是学习速度下降了,学习速度下降与基于梯度的学习方法有关。

实际上,我们发现在深度神经网络中使用基于梯度下降的学习方法本身存在着内在不稳定性。这种不稳定性使得前面或者后面层的学习速度受到抑制。在真正理解了这些难点之后,我们就能够获得有效训练深度网络的更深洞察力。

在某些深度神经网络中,在我们在隐层BP的时候梯度倾向于变小。这意味着在前面的隐层中的神经元学习速度要慢于后面的隐层。在多数的神经网络中都存在着这个现象,这个现象也被称作是:消失的梯度问题(Vanishing
Gradient Problem)。

在前面层中的梯度会变得非常大,这叫做:激增的梯度问题(Exploding Gradient
Problem),这也没比消失的梯度问题更好处理。更加一般地说,在深度神经网络中的梯度是不稳定的,在前面层中或会消失,或会激增。这种不稳定性才是深度神经网络中基于梯度学习的根本问题。

10.1 消失的梯度问题的根本原因?

深度神经网络中的梯度不稳定性。

由于梯度的值小于1,在随机梯度下降算法中,前面层的梯度由后面层的梯度参与相乘,所以造成前面层的梯度很小,后面层的梯度依次变大。从而造成了梯度的不均衡性。

11. 卷积神经网络(CNN)

CNN(Convolutional neural networks):使用了一个特殊架构来进行图像分类。

它的三个基本概念为:局部感受野(Local receptive fields),共享权重(Shared weights),和混合(Pooling)。

11.1 基本概念

11.1.1 局部感受野

在之前的全连接网络中,输入被描绘成纵向排列的神经元,但在卷积神经网络中,把输入看作28 x 28的方形神经元排列。第一个隐层中的每个神经元只与输入图像的一个小区域(如5x5)连接,这个输入图像的小区域叫做隐层神经元的局部感受野(Local receptive fields)。如下图所示:

每个连接学习一个权重,且隐层神经元也学习一个总的偏差。即此隐层神经元正在对输入图像的此区域进行学习、了解。一个隐层神经元与一个局部感受野一一对应,即每个隐层神经元有:5x5个权重和1个偏差。

如上图所示,对于一个28x28的输入图像,如果局部感受野的大小为5x5,则第一个隐层中有24x24个神经元。

11.1.2 共享权重和偏差

每组24x24个隐层神经元使用相同的权重和偏差。即对于每组中的第(j,k)隐层神经元,其激活值为:

即每组有5x5个权得和1个偏差,其26个需要学习的参数。这表示第一个隐层中的所有神经元在输入图像的不同地方检测相同的特征。(图像具有平移不变性)

特征映射:从输入层到隐层的映射。

共享权重:定义特征映射的权重。

共享偏差:定义特征映射的偏差。

卷积核或滤波器:共享权重和偏差。

为了做图像识别,需要多个特征映射,且一个完整的卷积层由多个不同的特征映射组成,如下图包含三个特征映射:

上面20幅图像对应20个不同的特征映射(或滤波器、或卷积核),每个特征映射用5x5方块图表示,对应局部感受野的5x5个权重。白色表示小权重,黑色表示大权重。

共享权重和偏差最大的优点是:大大减少了网络中参数的数量。如全连接网络的参数是卷积网络参数的30倍左右。(卷积网络20个特征:20x26=520, 全连接20个隐层神经元:20x784=15680)

11.1.3 混合层

卷积神经网络除包含卷积层之外,还包含混合层(Pooling Layers),混合层在卷积层之后,它的职责是简化(总结)卷积层输出的信息。

混合层根据卷积层输出的所有特征映射,然后提炼出新的特征映射。

1)Max-Pooling

从2x2区域中找一个最大的激活值输出。

Max-Pooling是一个用于询问:是否在图像的一个区域内发现了指定的特征。

2)L2-Pooling

L2-Pooling就是计算矩阵2x2的2范数(先计算4个数的平方的和,然后开平方)。

L2-Pooing:是一个从卷积层提炼信息的方法。

11.1.4 完整的卷积神经网络

最后一层与前面一层是全连接,其连接数为:3x12x12x10。

卷积神经网络与全连接神经网络的架构不一样,但其目标是一样的, 它们的目标为:使用训练数据训练网络的权重和偏差,然后对输入的图像做出正确的分类。

时间: 2024-08-08 02:45:55

深度学习及神经网络学习总结的相关文章

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1

3.Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1 http://blog.csdn.net/sunbow0 Spark MLlib Deep Learning工具箱,是根据现有深度学习教程<UFLDL教程>中的算法,在SparkMLlib中的实现.具体Spark MLlib Deep Learning(深度学习)目录结构: 第一章Neural Net(NN) 1.源码 2.源码解析 3.实例 第二章D

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.2

3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.2 http://blog.csdn.net/sunbow0 第三章Convolution Neural Network (卷积神经网络) 2基础及源码解析 2.1 Convolution Neural Network卷积神经网络基础知识 1)基础知识: 自行google,百度,基础方面的非常多,随便看看就可以,只是很多没有把细节说得清楚和明白: 能把细节说清

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.3

3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.3 http://blog.csdn.net/sunbow0 第三章Convolution Neural Network (卷积神经网络) 3实例 3.1 测试数据 按照上例数据,或者新建图片识别数据. 3.2 CNN实例 //2 测试数据 Logger.getRootLogger.setLevel(Level.WARN) valdata_path="/use

深度学习之神经网络与支持向量机

深度学习之神经网络与支持向量机 引言:神经网络(Neural Network)与支持向量机(Support Vector Machines,SVM)是统计学习的代表方法.可以认为神经网络与支持向量机都源自于感知机(Perceptron).感知机是1958年由Rosenblatt发明的线性分类模型.感知机对线性分类有效,但现实中的分类问题通常是非线性的. 神经网络与支持向量机(包含核方法)都是非线性分类模型.1986年,Rummelhart与McClelland发明了神经网络的学习算法Back P

深度学习——人工神经网络再掀研究热潮

深度学习——人工神经网络再掀研究热潮 胡晓林 人工神经网络起源于上世纪40年代,到今天已经70年历史了.就像人的一生,经历了起起落落,有过辉煌,有过黯淡,有过嘈杂,有过冷清.总体说来,过去的20年中人工神经网络的研究不温不火,直到最近三五年,随着深度学习概念的提出,人工神经网络才又重新焕发生机,甚至再度掀起研究热潮.本文简述一下人工神经网络的“前世今生”,并简单展望一下它的未来. 第一个神经元模型是1943年McCulloch和Pitts提出的,称为threshold logic,它可以实现一些

2. 深度学习与神经网络基础

1. 人工智能.机器学习和深度学习的概念及关系 人工智能(Artificial Intelligence, AI)--为机器赋予人的智能,即计算机能够像人类一样完成更智能的工作. 机器学习是实现人工智能的一种手段.何为"学习"?"如果一个程序可以在任务T上,随着经验E的增加,效果P也可以随之增加,则称这个程序可以从经验中学习." 对传统机器学习而言,通常需要进行特征提取,而这并不简单.深度学习解决的核心问题之一就是自动地将简单的特征组合成更复杂的特征,并使用这些组合

《卷积神经网络的Python实现》PDF代码+《解析深度学习卷积神经网络原理与视觉实践》PDF分析

CNN正在革新几个应用领域,如视觉识别系统.自动驾驶汽车.医学发现.创新电子商务等.需要在专业项目或个人方案中利用复杂的图像和视频数据集来实现先进.有效和高效的CNN模型. 深度卷积网络DCNN是目前十分流行的深度神经网络架构,它的构造清晰直观,效果引人入胜,在图像.视频.语音.语言领域都有广泛应用. 深度学习,特别是深度卷积神经网络是人工智能的重要分支领域,卷积神经网络技术也被广泛应用于各种现实场景,在许多问题上都取得了超越人类智能的结果. <卷积神经网络的Python实现>作为深度学习领域

【神经网络和深度学习】笔记 - 第三章 如何提高神经网络学习算法的效果

文章导读: 1.交叉熵损失函数 1.1 交叉熵损失函数介绍 1.2 在MNIST数字分类上使用交叉熵损失函数 1.3 交叉熵的意义以及来历 1.4 Softmax 2. 过拟合和正则化 2.1 过拟合 2.2 正则化 2.3 为什么正则化可以减轻过拟合问题 2.4 正则化的其它方法 3. 参数初始化 4. 其它方法 4.1 随机梯度下降算法的改进 4.2 其它神经元模型 我们前面已经学习了反向传播算法,它是我们学习神经网络的基础.这一章将会介绍一系列的方法技巧来改善反向传播算法的效果,进而改善学

机器学习深度学习自然语言处理学习

机器学习/深度学习/自然语言处理学习路线 原文地址:http://www.cnblogs.com/cyruszhu/p/5496913.html 未经允许,请勿用于商业用途!相关请求,请联系作者:[email protected]转载请附上原文链接,谢谢. 1 基础 l  Andrew NG 的 Machine Learning视频. 连接:主页,资料. l  2.2008年Andrew Ng CS229 机器学习 当然基本方法没有太大变化,所以课件PDF可下载是优点. 中文字幕视频@网易公开课