深度网络概览

深度网络概览

Contents

 [hide]
  • 1 概述
  • 2 深度网络的优势
  • 3 训练深度网络的困难
    • 3.1 数据获取问题
    • 3.2 局部极值问题
    • 3.3 梯度弥散问题
  • 4 逐层贪婪训练方法
    • 4.1 数据获取
    • 4.2 更好的局部极值
  • 5 中英文对照
  • 6 中文译者

概述

在之前的章节中,你已经构建了一个包括输入层、隐藏层以及输出层的三层神经网络。虽然该网络对于MNIST手写数字数据库非常有效,但是它还是一个非常“浅”的网络。这里的“浅”指的是特征(隐藏层的激活值 \textstyle {a}^{(2)})只使用一层计算单元(隐藏层)来得到的。


在本节中,我们开始讨论深度神经网络,即含有多个隐藏层的神经网络。通过引入深度网络,我们可以计算更多复杂的输入特征。因为每一个隐藏层可以对上一层的输出进行非线性变换,因此深度神经网络拥有比“浅层”网络更加优异的表达能力(例如可以学习到更加复杂的函数关系)。


值得注意的是当训练深度网络的时候,每一层隐层应该使用非线性的激活函数 \textstyle f(x)。这是因为多层的线性函数组合在一起本质上也只有线性函数的表达能力(例如,将多个线性方程组合在一起仅仅产生另一个线性方程)。因此,在激活函数是线性的情况下,相比于单隐藏层神经网络,包含多隐藏层的深度网络并没有增加表达能力。


深度网络的优势

为什么我们要使用深度网络呢?使用深度网络最主要的优势在于,它能以更加紧凑简洁的方式来表达比浅层网络大得多的函数集合。正式点说,我们可以找到一些函数,这些函数可以用 \textstyle k 层网络简洁地表达出来(这里的简洁是指隐层单元的数目只需与输入单元数目呈多项式关系)。但是对于一个只有 \textstyle k-1  层的网络而言,除非它使用与输入单元数目呈指数关系的隐层单元数目,否则不能简洁表达这些函数。


举一个简单的例子,比如我们打算构建一个布尔网络来计算 \textstyle n 个输入比特的奇偶校验码(或者进行异或运算)。假设网络中的每一个节点都可以进行逻辑“或”运算(或者“与非”运算),亦或者逻辑“与”运算。如果我们拥有一个仅仅由一个输入层、一个隐层以及一个输出层构成的网络,那么该奇偶校验函数所需要的节点数目与输入层的规模 \textstyle n 呈指数关系。但是,如果我们构建一个更深点的网络,那么这个网络的规模就可做到仅仅是 \textstyle n 的多项式函数。


当处理对象是图像时,我们能够使用深度网络学习到“部分-整体”的分解关系。例如,第一层可以学习如何将图像中的像素组合在一起来检测边缘(正如我们在前面的练习中做的那样)。第二层可以将边缘组合起来检测更长的轮廓或者简单的“目标的部件”。在更深的层次上,可以将这些轮廓进一步组合起来以检测更为复杂的特征。


最后要提的一点是,大脑皮层同样是分多层进行计算的。例如视觉图像在人脑中是分多个阶段进行处理的,首先是进入大脑皮层的“V1”区,然后紧跟着进入大脑皮层“V2”区,以此类推。


训练深度网络的困难

虽然几十年前人们就发现了深度网络在理论上的简洁性和较强的表达能力,但是直到最近,研究者们也没有在训练深度网络方面取得多少进步。 问题原因在于研究者们主要使用的学习算法是:首先随机初始化深度网络的权重,然后使用有监督的目标函数在有标签的训练集 \textstyle \left\{ \left( x_{l}^{\left( 1 \right)},{​{y}^{\left( 1 \right)}} \right),...,\left( x_{l}^{\left( {​{m}_{l}} \right)},{​{y}^{\left( {​{m}_{l}} \right)}} \right) \right\} 上进行训练。例如通过使用梯度下降法来降低训练误差。然而,这种方法通常不是十分奏效。这其中有如下几方面原因:


数据获取问题

使用上面提到的方法,我们需要依赖于有标签的数据才能进行训练。然而有标签的数据通常是稀缺的,因此对于许多问题,我们很难获得足够多的样本来拟合一个复杂模型的参数。例如,考虑到深度网络具有强大的表达能力,在不充足的数据上进行训练将会导致过拟合。


局部极值问题

使用监督学习方法来对浅层网络(只有一个隐藏层)进行训练通常能够使参数收敛到合理的范围内。但是当用这种方法来训练深度网络的时候,并不能取得很好的效果。特别的,使用监督学习方法训练神经网络时,通常会涉及到求解一个高度非凸的优化问题(例如最小化训练误差 \textstyle \sum\nolimits_{i}{||{​{h}_{W}}\left( {​{x}^{\left( i \right)}} \right)-{​{y}^{\left( i \right)}}|{​{|}^{2}}},其中参数 \textstyle W 是要优化的参数。对深度网络而言,这种非凸优化问题的搜索区域中充斥着大量“坏”的局部极值,因而使用梯度下降法(或者像共轭梯度下降法,L-BFGS等方法)效果并不好。

梯度弥散问题

梯度下降法(以及相关的L-BFGS算法等)在使用随机初始化权重的深度网络上效果不好的技术原因是:梯度会变得非常小。具体而言,当使用反向传播方法计算导数的时候,随着网络的深度的增加,反向传播的梯度(从输出层到网络的最初几层)的幅度值会急剧地减小。结果就造成了整体的损失函数相对于最初几层的权重的导数非常小。这样,当使用梯度下降法的时候,最初几层的权重变化非常缓慢,以至于它们不能够从样本中进行有效的学习。这种问题通常被称为“梯度的弥散”.


与梯度弥散问题紧密相关的问题是:当神经网络中的最后几层含有足够数量神经元的时候,可能单独这几层就足以对有标签数据进行建模,而不用最初几层的帮助。因此,对所有层都使用随机初始化的方法训练得到的整个网络的性能将会与训练得到的浅层网络(仅由深度网络的最后几层组成的浅层网络)的性能相似。


逐层贪婪训练方法

那么,我们应该如何训练深度网络呢?逐层贪婪训练方法是取得一定成功的一种方法。我们会在后面的章节中详细阐述这种方法的细节。简单来说,逐层贪婪算法的主要思路是每次只训练网络中的一层,即我们首先训练一个只含一个隐藏层的网络,仅当这层网络训练结束之后才开始训练一个有两个隐藏层的网络,以此类推。在每一步中,我们把已经训练好的前 \textstyle k-1  层固定,然后增加第 \textstyle k  层(也就是将我们已经训练好的前 \textstyle k-1  的输出作为输入)。每一层的训练可以是有监督的(例如,将每一步的分类误差作为目标函数),但更通常使用无监督方法(例如自动编码器,我们会在后边的章节中给出细节)。这些各层单独训练所得到的权重被用来初始化最终(或者说全部)的深度网络的权重,然后对整个网络进行“微调”(即把所有层放在一起来优化有标签训练集上的训练误差).


逐层贪婪的训练方法取得成功要归功于以下几方面:


数据获取

虽然获取有标签数据的代价是昂贵的,但获取大量的无标签数据是容易的。自学习方法(self-taught learning)的潜力在于它能通过使用大量的无标签数据来学习到更好的模型。具体而言,该方法使用无标签数据来学习得到所有层(不包括用于预测标签的最终分类层)\textstyle {​{W}^{\left( l \right)}} 的最佳初始权重。相比纯监督学习方法,这种自学习方法能够利用多得多的数据,并且能够学习和发现数据中存在的模式。因此该方法通常能够提高分类器的性能。


更好的局部极值

当用无标签数据训练完网络后,相比于随机初始化而言,各层初始权重会位于参数空间中较好的位置上。然后我们可以从这些位置出发进一步微调权重。从经验上来说,以这些位置为起点开始梯度下降更有可能收敛到比较好的局部极值点,这是因为无标签数据已经提供了大量输入数据中包含的模式的先验信息。


在下一节中,我们将会具体阐述如何进行逐层贪婪训练。


中英文对照

深度网络 Deep Networks
深度神经网络 deep neural networks
非线性变换 non-linear transformation
激活函数 activation function
简洁地表达 represent compactly
“部分-整体”的分解 part-whole decompositions
目标的部件 parts of objects
高度非凸的优化问题 highly non-convex optimization problem
共轭梯度 conjugate gradient
梯度的弥散 diffusion of gradients
逐层贪婪训练方法 Greedy layer-wise training
自动编码器 autoencoder
微调 fine-tuned
自学习方法 self-taught learning

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OpenCV 例程200篇】18. 图像的掩模加法(mask)

专栏地址:『youcans 的 OpenCV 例程 200 篇』 文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】18. 图像的掩模加法 图像掩模(image mask),也常被写成 “图像掩膜”,是…

【OpenCV 例程200篇】19. 图像的圆形遮罩

专栏地址:『youcans 的 OpenCV 例程 200 篇』 文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】19. 图像的圆形遮罩 图像掩模(image mask),也常被写成 “图像掩膜”,是…

【OpenCV 例程200篇】20. 图像的按位运算(cv2.bitwise)

专栏地址:『youcans 的 OpenCV 例程 200 篇』 文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】20. 图像的按位运算 函数 cv2.bitwise 提供了图像的位运算,对图像的像素点值按位操作,快速高效…

栈式自编码算法

栈式自编码算法 Contents [hide]1 概述2 训练3 具体实例4 讨论5 中英文对照6 中文译者 概述 逐层贪婪训练法依次训练网络的每一层,进而预训练整个深度神经网络。在本节中,我们将会学习如何将自编码器“栈化”到逐层贪婪训练法中,从而预训练…

【OpenCV 例程200篇】21. 图像的叠加

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】21. 图像的叠加 两张图像直接进行加法运算后图像的颜色会改变,通过加权加法实现图像混合后图像的透明度会改变,都不能实现图像的叠加。 实现图像的叠加,需要综合运用图像阈值…

微调多层自编码算法

微调多层自编码算法 Contents [hide]1 介绍2 一般策略3 使用反向传播法进行微调4 中英文对照5 中文译者 介绍 微调是深度学习中的常用策略,可以大幅提升一个栈式自编码神经网络的性能表现。从更高的视角来讲,微调将栈式自编码神经网络的所有层视为一个…

【OpenCV 例程200篇】22. 图像添加非中文文字(cv2.putText)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】22. 图像添加非中文文字 函数 cv2.putText() 用于在图像上绘制文本字符串,即添加文字。 OpenCV 不支持显示中文字符,使用 cv2.putText() 时添加的文本字符串不能包含中文字符…

自我学习

自我学习 今天让我们来完成自我学习的代码。完成这个代码需要结合稀疏自编码和softmax分类器,具体的可以看我以前的博客。依赖MNIST DatasetSupport functions for loading MNIST in MatlabStarter Code (stl_exercise.zip) 第一步:生成相应的输入和测试数据集这需要…

【OpenCV 例程200篇】23. 图像添加中文文字(ImageDraw.Draw)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】23. 图像添加中文文字 OpenCV 不支持显示中文字符,使用 cv2.putText() 时添加的文本字符串不能包含中文字符(包括中文标点符号)。在图像中添加中文字符&#xff0…

【OpenCV 例程200篇】24. 图像的仿射变换(cv2.warpAffine)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】24. 图像的仿射变换 几何变换的可以分为等距变换、相似变换、仿射变换和投影变换。在很多书籍中把等距变换、相似变换都称为仿射变换,常见的仿射变换包括平移、旋转、缩放、翻转、斜切等…

从自我学习到深层网络

从自我学习到深层网络 在前一节中,我们利用自编码器来学习输入至 softmax 或 logistic 回归分类器的特征。这些特征仅利用未标注数据学习获得。在本节中,我们描述如何利用已标注数据进行微调,从而进一步优化这些特征。如果有大量已标注数据&a…

【OpenCV 例程200篇】25. 图像的平移(cv2.warpAffine)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】25. 图像的平移 平移是物体位置在水平和垂直方向的移动。 像素点 (x,y) 沿 x 轴平移 dx、沿 y 轴平移 dy,可以由以下公式描述: [x~y~1]MAT[xy1],MAT[10dx01dy001]\begin{bmat…

JavaScript 灯泡暗亮

程序解说:点击灯泡之后切换灯泡明暗; 点击暗的灯泡的时候灯泡会随之发亮,并且下方会输出灯泡打开时间, 点击亮的灯泡的时候灯泡会随之熄灭,并且下方会输出灯泡关闭时间. 点击图片亮暗发生变化(准备两张图片…

【OpenCV 例程200篇】26. 图像的旋转(以原点为中心)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】26. 图像的旋转(以原点为中心) 图像以原点 (0, 0) 为中心、顺时针旋转角度 θ 进行旋转操作,可以由以下公式描述: [x~y~1]MAR[xy1],MAR[cosθ−sinθ0s…

电脑滑动关机

如何让你的电脑可以像手机一样滑动关机 只需点击下拉,让你享用更快更炫酷的关机方法(滑动关机) 新建一个记事本(滑动关机.txt) 打开滑动关机.txt文件,在该文件中写入 slidetoshutdown 代码段并保存文件。…

php里面的MySql

php里面的MySql SQL 是一种标准 - 但是... SQL是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。SQL语句用于取回和更新数据库中的数据。SQL可与数据库程序协同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase以及其他数据…

【OpenCV 例程200篇】27. 图像的旋转(以任意点为中心)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】27. 图像的旋转(以任意点为中心) 图像以任意点 (x0, y0) 为旋转中心、顺时针旋转角度 θ 的旋转操作,可以先将原点平移到旋转中心 (x0, y0) ,然后按照原…

OC里面的类

OC里面的类 类的定义 不指定方法的返回值 -(id)initWithObject:(id)obj; - initWithObject:obj; 省略返回值时,默认的类型是id,也就是上面两条等价,在c语言中默认是int 接口 类公开给外部的,关于使用这个类的消息叫接口。 类的定…

人员信息管理

使用Jsp Servlet Tomcat 实现对sqlServer数据库中人员信息的管理:(MVC架构) 准备相应的数据库 链接数据库 实现对数据库中人员信息的增删改查 页面总体效果如下所示: 点击删除之后会删除掉选中的这一行只显示剩下几行内容&a…

【OpenCV 例程200篇】28. 图像的旋转(直角旋转)cv2.rotate

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】28. 图像的旋转(直角旋转) 旋转角度为 90,180,270 度时,可以用 cv2.rotate(src, rotateCode) 函数实现,该方法实际上是通过矩阵…