深度学习算法原理——栈式自编码神经网络

注:最近打算将UFLDL教程重新看一遍,其实里面有很多关于神经网络以及深度学习的知识点很有用,但是只是学习深度学习的话有一些内容就有点多余,所以想整理一个笔记,记录下神经网络到深度学习的一些知识点。整个教材已经非常好,网上有原版的英文版,也有翻译的中文版,这个只是自己的学习笔记,对原来教程中的内容进行了梳理,有些图也是引用的原来的教程,若内容上有任何错误,希望与我联系,若内容有侵权,同样也希望告知,我会尽快删除。

这个笔记主要分为以下几个部分: - 神经网络 - 自编码器与稀疏性 - Softmax回归 - 自我学习 - 深度网络 - 其他,如PCA

五、深度网络

1、深度网络的概述

前面的网络形式最多是三层的网络结构,即输入层,一个隐含层和一个输出层,这是一个“浅”层的网络结构。

网络结构中的“浅”值的是隐藏层的个数,即特征生成的网络层数。

我们知道,每一个隐藏层可以对上一层的输出进行非线性变换,这样,每增加一个隐藏层就可以计算出更加复杂的特征表示,那么,使用“深”层的神经网络将会比使用“浅”具有更好的表达能力。

使用深度网络最主要的优势在于:它能以更加紧凑的方式来表达比浅层网络大得多的函数集合。这样,对于图像,就能够学习到“部分-整体”的分解关系。深度网络是一种层次的网络结构模型。

但是简单的增加网络中隐含层的数量对于训练整个网络模型具有一定的难度,主要表现在:

  • 带标签样本数据的获取。对于带标签的样本是非常稀缺的。
  • 局部极值的问题。对于深度网络,其误差函数是一个高度非凸的函数,具有很多的局部极值。
  • 梯度弥散的问题。利用梯度法求解最优解时,在误差的反向传播的过程中,梯度会变得急剧减小。这就造成了整体的损失函数相对最初的几层的权重的导数非常小。这样,最初几层的权重变化非常缓慢。

通常对于深度网络,可采用逐层贪婪的训练方法,即每次训练一个只包含一个隐层的网络,训练完成后再训练下一个隐层,依次类推下去。在每一层的训练过程中,可以使用有监督的训练方法,也可以使用无监督的训练方法。最终将逐层训练得到的参数用来初始化整个网络的权重,最后对整个网络进行“微调”。

对于逐层训练的方法,主要有两方面的好处:

  • 可以使用无监督的训练方法,相比较有监督的训练方法,数据较为容易获取。
  • 可以获得更好的局部极值,因为在初始化的过程中,生成的权重已经在较好的位置上,微调可以较容易的获得较好的局部极值。

2、栈式自编码神经网络

2.1、栈式自编码神经网络的结构

自编码器的结构如下图所示:

2.2、栈式自编码神经网络的训练过程

下面以分类为例,对整个训练过程进行描述,首先将原始的输入x(k)作为输入训练第一个自编码神经网络,如下图所示:

此时,对于每一个训练样本x(k)便能得到其隐含层的输出h(1)(k),将这个隐含层的输出作为第二个自编码器的输入,继续训练第二个自编码器,可以由下图表示:

将整个过程连接在一起便可以由下图表示出来:

栈式自编码神经网络具有强大的表达能力,这主要得益于其层次的特征表示。通过一层一层的特征学习,可以学习到特征之间的层次结构。在上述的自编码神经网络的分类中,可以丢弃第二个自编码器的“解码”过程,直接将隐含层的输出作为Softmax回归的输入。

2.3、栈式自编码器的微调过程

微调是深度学习的一种策略,可以提高栈式自编码神经网络的性能。在微调的过程中,将整个栈式自编码神经网络的所有层都看成一个模型,统一对模型中的参数进行修正的过程。

进行全局微调的通用的方式是对误差进行反向传播,利用前面在神经网络中的推导:

3、线性解码器

4、卷积神经网络

前面介绍的神经网络模型都是全连接的网络,全连接是指当前层的每一个节点与前一层的所有节点之间都存在着相连的边。对于输入节点而言,若输入节点的个数较少,那么利用全连接的方式影响并不是太大,若是输入节点的个数变得很多,此时利用全连接的方式,需要学习的参数会变得特别多,举个简单的例子,如上面的自编码器,输入层是666个输入节点和一个偏置节点,隐含层是4个隐层节点,此时需要训练的参数个数是4∗6+4=28个参数,若此时增加到12个输入节点,隐含层的节点个数不变,此时需要训练的参数个数为4∗12+4=52个参数,需要训练的个数急剧扩大。

为了解决这样的问题,可以对隐含单元和输入单元之间加上限制条件:每个隐含单元仅仅只和一部分的输入单元相连接。

以上的思想称为部分连接,也称为稀疏连接,部分连接的思想受启发于生物学里面的视觉系统结构。视觉皮层的神经元是局部接受信息的。

4.1、卷积神经网络的卷积操作

自然图像有一个性质:一部分的统计特性与其他部分是一样的。

利用这样的性质,可以将一部分学习的特征应用在另一部分上。为了获得卷积特征,需要对一部分的数据进行卷积运算,具体过程如下图所示:

4.2、卷积神经网络的池化

在通过卷积操作得到的特征后,其特征的维数很大,很容易出现“过拟合”的情况,通常可以对特征进行聚合统计,聚合统计的方法主要有求平均值或者最大值,这个过程也被称为池化(Pooling)。下面的过程解释了池化的具体过程。

通过卷积操作和池化的操作,我们便得到了特征,将特征应用在各种分类器中,如Softmax回归中,便能对样本进行分类。

这里只是简单介绍了卷积和池化的过程,更多的卷积神经网络的知识可以见以后的专题。

若需要PDF版本,请关注我的新浪博客@赵_志_勇,私信你的邮箱地址给我。

参考文献

1、英文版:UFLDL Tutorial

2、中文版:UFLDL教程

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏fangyangcoder

Andrew Ng机器学习课程笔记(四)之神经网络

http://www.cnblogs.com/fydeblog/p/7365730.html

881
来自专栏机器之心

深度 | 图像语义分割的工作原理和CNN架构变迁

更具体地讲,语义图像分割的目标在于标记图片中每一个像素,并将每一个像素与其表示的类别对应起来。因为会预测图像中的每一个像素,所以一般将这样的任务称为密集预测。

2060
来自专栏机器学习算法与Python学习

深度学习必须理解的25个概念

1616
来自专栏机器学习算法与Python学习

机器学习(15)之支持向量机原理(一)线性支持向量机

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 前言 支持向量机(Support V...

3916
来自专栏张俊红

一些算法的小结

总第54篇 算法目的:分类、预测 算法分类:监督型、非监督型 算法的核心:你有什么数据、你要解决什么问题 ---- 01|线性回归: 1、什么是回归 回归,指...

3354
来自专栏机器学习与自然语言处理

Stanford机器学习笔记-8. 支持向量机(SVMs)概述

8. Support Vector Machines(SVMs) Content 8. Support Vector Machines(SVMs)   ...

34612
来自专栏绿巨人专栏

机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能

3848
来自专栏人工智能LeadAI

深度学习中的损失函数总结以及Center Loss函数笔记

图片分类里的center loss 目标函数,损失函数,代价函数 损失函数度量的是预测值与真实值之间的差异.损失函数通常写做L(y_,y).y_代表了预测值,y...

6735
来自专栏编程

深度学习中的损失函数总结以及Center Loss函数笔记

目标函数,损失函数,代价函数 损失函数度量的是预测值与真实值之间的差异.损失函数通常写做L(y_,y).y_代表了预测值,y代表了真实值. 目标函数可以看做是优...

6208
来自专栏人工智能LeadAI

前馈神经网络——深度学习之神经网络核心原理与算法

因上几次读者反映,公式代码有乱码和不规整的问题,小编有改善哟,这篇文章开始亲们会看到效果的哟~

1414

扫码关注云+社区

领取腾讯云代金券