深度学习笔记
TensorFlow入门
TensorFlow 的特点
灵活性:非严格的“神经网络库”,只需要计算能够表示为数据流图。
可移植:底层采用C++,可以运行在台式机、服务器、手机移动等设备,同时提供对分布式的支持。
多语言支持:前端可支持Python、C++、Java、Go以及非官方支持的Scala,但是目前对Python支持最好。
高效:提供对线程、队列、异步操作支持,能够充分发挥硬件潜力,同时支持运行在CPU和GPU上运算。
TensorFlow的命名来源于本身的运行原理。
Tensor(张量)意味着N维数组
Flow(流)意味着基于数据流图的计算
TensorFlow是张量从图的一端流动到另一端的计算过程,这也是TensorFlow的编程模型
运行机制
TensorFlow的运行机制属于“定义”和“运行”相分离。从操作层面可以抽象为两种:模型的构建和模型的运行。
基本概念
- 张量(Tensor):数据,即某一类型的多维数组。
- 变量(Variable):常用于定义模型中的参数,是通过不断训练得到的值。
- 占位符(placeholder):输入变量的载体。可以理解为定义函数时的参数。
- 图中的节点操作(OP):即一个OP获得0个或多个tensor,执行计算,输出额外的0个或多个tensor。
说明
这些概念都是在一个叫“图”的容器中完成的。关于“图”,有以下几点需要理解。
一个“图”代表一个计算任务。
在模型运行的环节中,“图”会在会话(session)里被启动。
session将图的OP分发到如CPU或GPU之类的设备上,同时提供执行OP的方法。这些方法执行后,将产生的tensor返回。在python语言中,返回的tensor是numpy ndarray对象;在C和C++语言中,返回的tensor是TensorFlow::Tensor实例。

三种场景
1 训练场景
是实现模型从无到有的过程,通过对样本的学习训练,调整学习参数,形成最终模型。其过程是将给定的样本和标签作为输入节点,通过大量的循环迭代,将图的中的正向运算得到输出值,再进行反向运算,以更新模型中的学习参数,最终使模型产生的正向结果最大化地接*样本标签。这样就得到一个可以拟合样本规律的模型。
2 测试场景
测试场景是利用图的正向运算得出的结果与真实值进行比较的差别。
3 使用场景
使用场景也是利用图的正向运算得到结果,并直接使用。
数据的流向机制
注入机制(feed):向模式中输入数据。
取回机制(fetch):从模式中得到结果。
神经网络的组成
第一代神经网络
感知器(~1960)
感知器通过学习如何给特征值加权值来识别对象。
优点:调整权值的学习算法很简洁
缺点:感知器自身缺陷,如人为标记训练数据,导致学习受限
第二代神经网络
BP(~1985),即反向传播算法,使用BP算法的神经网络叫“BP神经网络”
优点:BP神经网络通常使用梯度下降算法来修正权值
缺点:
\1) 需要标记训练数据,但是大部分情况下,数据是未标记的;
\2) 学习时间不易衡量,在多层网络中,速度非常慢;
\3) 极易陷入局部极小点。
第三代神经网络
DL(Deep Learnning),深度学习。
优点:在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来发现数据的规律,解释数据,比如图像,声音和文本等。深度学习,能让计算机具有人一样的智慧。
深度学习与其两代的神经网络的不同在于:1)强调了模型结构的深度,使用多层(n>=3)的隐藏节点;2)明确突出了特征学习的重要性,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。
缺点:如果数据量不够大,深度学习不能够对数据的规律进行无偏差估计
神经网络包含输入层、隐藏层(可以有多个)、输出层。

感知器的设计就在于如何调整每一个输入值所对应的权重和偏置,找到一个最优解,而对权重和偏置的调整,又被称之为神经网络的训练
单层感知器模型与神经元模型相似
- 
原来神经元的“输入”位置添加神经元节点,使得神经元变成“输入单元” 
- 
单层感知器只有两层:输入层和输出层 
Sign激活函数
函数表达式

函数图形

如果我们使用数学表达感知器的正向传播过程,即输入和输出关系,则
网络输出

分类输出

其中,f为sign激活函数
感知器的关键在于如何调整每一个输入值所对应的权重和偏置,找到一个最优解
感知器通过从误差中不断地学习,最后输出的值越来越接*真实值。
感知器的误差学习通常也称之为反向传播过程

两层感知器模型示意图如下

隐层
相比单层感知器模型,两层的感知器多了一个隐层,即在输入层和输出层中间层级称之为隐层。
有如下特点:
\1. 每层神经元与下一层神经元之间完全连接;
\2. 同一层神经元之间不存在连接
\3. 神经元之间不存在跨层连接 。
为什么两层感知器能够解决异或问题呢?
这是因为神经网络每一层的节点都将决定一个分类器。
比如,如下图所示,有三个节点。隐层:节点1,节点2;输出层:节点3

在两层或多层感知器模型中,我们的激活函数通常选择sigmoid激活函数
sigmoid函数表达式

函数图形

特点
sigmoid函数也叫 Logistic 函数,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间
优势
相较于sign函数,sigmoid函数的优势体现在:
- 
sign函数:输入值和输出值非0即1,会给后续调节神经网络的权重造成障碍 
- 
sigmoid函数:输入值和输出值不再限制为0和1,而可以是任意0~1之间的任意浮点数 
- 
使用sigmoid函数后,神经网络就有可能学习到*滑的曲线来分割*面,而不是用复杂的线性组合逼**滑曲线来分割*面 
总结
神经元
输入、权值、偏置、求和函数、激活函数、输出。
单层感知器:
- 
与神经元模型不同,感知器中的权值是通过训练得到的 
- 
使用sign激活函数,使得输出只能取两个值(-1/1或0/1) 
- 
只对线性可分的问题收敛,因而只能解决线性可分问题 
两层或多层感知器
- 使用sigmoid激活函数,使得输出变成0~1之间的连续值
- 可解决异或问题
BP网络
前馈神经网络是一种全连接神经网络。
如何构建我们的前馈神经网络,需要以下几个条件
- 
网络的输入和输出 
- 
权重(w)和阈值(b) 
- 
多层感知器的结构 

特点:
- 
每一层包含若干个神经元 
- 
每个神经元都是具有激活函数功能的神经元 
- 
同一层的神经元之间没有互相连接 
- 
每一个神经元与下一层的神经元完全连接 
- 
神经元之间不存在跨层跨连接 
- 
第一层称为输入层,最后一层为输出层,中间为隐藏层,简称隐层,隐层可以是一层, 也可以是多层。 
- 
输出层的输出单元可以是一个,二个或者多个,代表最终的分类结果 
前馈神经网络指的是网络拓扑结构中不存在环或者回路,而不是指只能前向传播不能后向传播
tahn函数
公式以及函数图形如下:


特点:
tanh函数也叫也称为双切正切函数,取值范围为[-1,1]。
与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好
relu函数
公式以及函数图形如下


特点:
relu函数输入x <0 时,输出都是0,x>0 时,输出y等于输入x。
神经网络的网络结构有多种,同样网络参数w有多种多样的表现形式,我们列举其中两种特殊情况。
相同的层数,不同的权值参数个数
- 4层的神经网络,W(1)中有6个参数,W(2)中有4个参数,W(3)中有6个参数,整个神经网络的参数为16个
- 4层的神经网络,W(1)中有6个参数,W(2)中有6个参数,W(3)中有9个参数,整个神经网络的参数为21个
不同的层数,相同的网络参数
- 4层的神经网络,W(1)中有9个参数,W(2)中有12个参数,W(3)中有12个参数,整个神经网络的参数为33个。
- 6层的神经网络,W(1)中有6个参数,W(2)中有6个参数,W(3)中有6个参数,W(4)中有6个参数,W(5)中有9个参数,整个神经网络的参数为33个
一般情况下
- 层数相同的情况下,参数越多,神经网络的表示能力越强
- 参数一致的情况下,“更深”的网络,神经网络的示能力越强
更深入的表示能力可以这样理解,随着网络的层数增加,每一层对于前一层次的抽象表示更深入。在神经网络中,每一层神经元学习到的是前一层神经元值的更抽象的表示。对于学习图像的特征来说,例如第一个隐藏层学习到的是“边缘”的特征,第二个隐藏层学习到的是由“边缘”组成的“形状”的特征,第三个隐藏层学习到的是由“形状”组成的“图案”的特征,最后的隐藏层学习到的是由“图案”组成的“目标”的特征。通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。
神经网络的关键在于如何调整权值和阈值,那么我们如何根据误差来调整权值和阈值呢?这里介绍两种调整的算法
- 
单层感知机的调整算法:梯度下降算法 
- 
多层前馈神经网络算法:误差逆传播算法(error Back Propagation),简称BP算法 
- 
BP算法是目前最成功的神经网络学习算法 
使用BP算法的多层前馈网络又称之为BP(Back Propagation)神经网络
单层感知器的权值调整算法
我们使用梯度下降算法,对误差进行调整
首先回顾下,我们感知器的输入输出关系

其中,
 :经过感知器模型的输出值
:经过感知器模型的输出值
 :sign激活函数
:sign激活函数
b:偏置
损失函数

使用梯度下降算法优化损失

权重更新算法

其中
 :更新前权重
:更新前权重
 :更新后权重
:更新后权重
 :学习率
:学习率
N:总共样本个数
 :某个样本的预测值
:某个样本的预测值
 :某个样本的真实值
:某个样本的真实值
 :第i次输入值
:第i次输入值
单层感知机的权重调整规则已经不适用于多层前馈神经网络了
多层神经网络的权值更新算法:BP算法
BP(Back Propagation)神经网络分为
- 工作信号的正向传播
 (1)计算每一层的状态和激活值,直到最后一层
- 
误差信号的反向传播 (1)从最后一层依次向前计算误差(即误差反向传播) (2)更新参数,权值w和阈值b。 
- 
根据新的参数迭代1,2步骤,直至误差变得很小或者可以接受的程度 
反向误差传播,使用梯度下降法,以单个样本的误差的负梯度方向对权重进行调节
- 
将输出层的误差反向传播给隐层神经元,调整隐层到输出层的权值和阈值 
- 
将误差反向传播给隐层,来调节隐层到隐层的权值和阈值 
- 
重复2,一直到误差传播给输入层,最终根据误差来调节输入层到隐层的权值和阈值 
(1) 选择sigmoid激活函数:

(2) Sigmoid激活函数的偏导:

正向传播的过程是从输入层->隐藏层->隐藏层->… …->隐藏层->输出层
反向传播过程就是从输出层->隐藏层->隐藏层->… …->隐藏层->输入层
1. 隐层到输出层参数的更新
(1) 隐层到输出层的权值更新

(2) 隐层到输出层的阈值更新

2. 输出层到隐层,隐层到隐层的参数更新
(1) 输出层到隐层,隐层到隐层权值更新

(2) 输出层到隐层,隐层到隐层阈值更新

BP网络优缺点
优点
- 非线性的映射功能
- BP神经网络的本质是实现一个熊输入到输出的映射功能,三层的BP神经网络就可以逼*任何非线性连续函数,这使得BP网络具有较强的非线性映射能力
- 自学习和自适应能力
- BP网络在训练过程中,能够根据学习网络输出和期望输出的差异,自适应将学习内容记忆于网络权值中。这使得BP神经网络具有高度自学习和自适应的能力。
- 泛化能力
- BP网络不能能够对已标记的训练数据进行正确分类,对未标记的数据也能进行正确的分类,因此,BP神经网络具有将学习成果应用于新知识的泛化能力。
缺点
- 局部极小化问题
- BP网络的本质使用一种局部优化方法,解决的复杂的非线性问题。网络权值是通过沿局部方向逐步调整的,因而会很容易陷入局部极值,权值收敛到局部极小值,从而导致网络训练失败。而且,BP网络对初始化的权值也非常敏感,不通的权值初始化网络,往往收敛于不同的局部极小值,造成训练的结果各不相同。
- 算法的收敛速度慢
- BP网络的本事还是梯度下降算法,而优化的目标有很复杂,因为会出现“锯齿形现象”,这使得BP算法低效,
- BP神经网络结构选择
- BP网络结构如果选择过大(中间层参数比较多),会导致训练效率不高,出现“过拟合”现象,造成网络性能低,容错性下降。但是如果网络结构选择较小,有很能会造成网络的不收敛。因而对于网络结构的选择就是一个经验问题,没有固定的标准。
- BP训练能力和预测能力
- BP网络学习了过多的样本细节,很容易导致出现“过拟合”现象。
优化
提升准确率
- 
模型的复杂度 
- 
损失函数的选择 
- 
学习率优化 
- 
优化器的选择 
- 
数据集增强 
- 
正则化 
- 
Dropout 

1. 增加模型的复杂度
(1)改变模型待优化的参数
(2)改变模型的层数
一般情况下
- 
层数相同的情况下,参数越多,神经网络的表示能力越强 
- 
参数一致的情况下,“更深”的网络,神经网络的表示能力越强 

2. 损失函数的选择
损失函数:预测值 与真实值
与真实值 之间的差距
之间的差距
(1) 均方差损失
- 
函数表达:  
- 
最佳适用场景:线性回归 
- 
原因:假设误差是正态分布,适用于线性的输出 
(2) 交叉熵损失
最佳适用场景:分类问题
原因:假设误差是二值分布,刻画的是预测概率分布和真实概率分布的距离(相似程度),在分类问题中有良好的应用
函数表达:
交叉熵是信息论中的一个概念,如过给定两个概率分布p和q

说明:
- 
概率p表示预测概率分布,概率q表示真实概率分布 
- 
交叉熵越小,两个概率分布越接* 
将前向的计算结果变成概率分布
Softmax函数
softmax函数可以用来给不同的对象分配概率
假设经过原始的神经网络的预测输出为

说明:
- 
经过softmax函数分类的概率在0-1之间 
- 
所有概率的和为1 
- 
经过softmax函数后神经网络的输出变成一个概率分布, 
从而可以通过交叉熵计算预测的概率分布与真实的概率分布之间的距离
3. 学习率的选择
(1) 学习率表示每次参数更新的幅度大小
- 学习率过大,会导致优化参数在最小值附*波动,不收敛;
- 学习率过小,导致训练次数增大,收敛缓慢
(2) 更新公式如下(以权值更新为例):

(3) 指数学习率衰减
指数衰减学习率是指学习率会随着训练的次数而动态变化,不再是一个定值
函数表达:

其中:
- learning_rate:学习率基数,初始值
- declay_rate:学习率衰减指数,范围(0,1)
- global_step :运行次数
- declay_steps:衰减速度
优势在于:动态调节学习率,最本质的作用当优化到了一定的瓶颈后,出现当前的学习率已不适用于优化,即学习率偏大,迈的步子较大,到不了底部,这时候需要降低学习速率;
4. 优化器的选择
什么是优化器?
- 深度学习的目标是找到合适的网络参数,使得参数能够对输入数据进行拟合并输出。
- 深度学习的本质上就是一个函数去寻找最优解,通常将寻找最优解的算法,即更新参数的算法称为优化器。
常见的优化器
(1) 梯度下降优化器
权重更新公式:

根据使用样本的数量,将梯度下降分为三类:标准、随机、批量

(2) 基于动量的梯度下降优化器
思想:给梯度一个速度,使得梯度在下降时减少左右震荡,加快梯度下降速度

其中, 动量参数,
动量参数, 初始速度
初始速度
如果 与
与 方向相同,则加速,反之会减速
方向相同,则加速,反之会减速
优点:
- 加速梯度更新力度,加速收敛
- 提高精度(减少收敛过程中的震荡)
缺点:
- 由于考虑的单个样本的梯度,所以很容易陷入局部最优
但在实际应用中,我们很少用到梯度下降优化器和基于动量的梯度下降优化器,这是因为学习率不能自适应变化。
自适应学习率优化器
自适应学习率算法,即为每个参数设置不同的学习率,在整个学习过程中自动使用这些学习率。常见的自适应学习率算法有AdaGrad、RMSDrop、Adam算法等
(3) AdaGrad优化器
思想:累积计算每次迭代梯度的*方和,用基础学习率除以此*方和并开方,从而实现学习率的动态更新
 ,
  , 小常数,谨防分母为0
小常数,谨防分母为0
优点:
a) 训练前期,累计值(分母)较小,梯度更新幅度大。
b) 训练后期,累计值(分母)较大,梯度更新幅度较小,实现了对学习率更新幅度的约束适合处理稀疏梯度
缺点:
a) 训练后期,累计值(分母)较大,导致学习率会非常小,从而使得模型基本不会进行梯度更新。
b) 仍需要自定义全局学习率
(4) RMSDrop优化器
思想:
a) 解决AdaGrad算法的问题:训练后期,累计值较大,导致学习率会非常小,从而使得模型基本不会进行梯度更新。
b) 改变梯度累计为指数加权*均,用以控制历史信息获取的多少

其中,  为衰减速率,
为衰减速率,  小常数,谨防分母为0
小常数,谨防分母为0
优点:
 在应用非凸问题时,能够快速找到凸碗状结构后快速收敛
(5) Adam优化器
思想:结合RMSDrop和动量算法,利用梯度的一阶矩估计和二阶矩估计调整每个参数的学习率。
一阶矩估计: ,
,  衰减速率
衰减速率
二阶矩估计:  ,
,  速率
速率
修正一阶矩估计偏差: 
修正二阶矩估计偏差:
权重更新算法: ,
 , 小常数,谨防分母为0
小常数,谨防分母为0
优点:
a) 结合了AdaGrad善于处理稀疏梯度和RMSprop善于处理非*稳目标的优点
b) 高效计算,所需内存小
c) 为不同的参数计算不同的自适应学习率
d) 适用于大数据集和高维度空间
e) 适用于梯度稀疏或存在很大噪声的情况
如何选择正确的优化算法?
- 每个优化算法都可以通过自适应每个模型参数的学习率以解决优化深度模型中的难题。
- 总体来说,具有自适应学习率(如EMSProp和Adam)的算法优于其他算法。
- 目前,最流行并且使用很高的优化算法包含随机梯度下降算法、使用动量的随机梯度下降算法、RMSProp、使用动量的RMSProp、AdaDelta和Adam。此时,选择哪一个算法主要取决于使用者对算法的熟悉程度。
过拟合
产生原因
产生的根本原因在于模型的复杂度和数据集大小
(1)欠拟合:
- 模型过于简单,特征维度过少,
- 导致拟合的函数无法满足训练集,误差较大
(2)过拟合:
- 模型过于复杂,参数过多,训练数据集较少且噪声很多;
- 导致拟合的函数完美的预测训练集,而对测试集的预测结果不理想
训练误差和泛化误差
深度学习的本质与机器学习类似,就是要不断地要学习,整个学习的过程就是在训练集上不断的调整模型参数,然后使用模型在测试集进行测试,根据测试结果评价这个模型的好坏。
于是我们引出两个概念:训练误差和泛化误差
训练误差:模型在训练集上表现的误差
泛化误差:模型在任意测试集上表现的误差
训练误差降低不一定意味着泛化误差的降低。在学习过程中,我们既要降低训练误差,又要降低泛化误差
那伴随着这两种误差的现象是什么呢?即欠拟合和过拟合
欠拟合:模型无法得到较低的训练误差
过拟合:模型的训练误差远小于泛化误差,即模型对测试集预测结果不理想

避免上述两种现象
数据层面:
(1)获取更多的数据集:数据增强
(2)数据预处理:清洗数据,筛选更高质量的特征
模型层面:
(1)选择简单的模型
(2)加入正则化:L1,L2正则化,降低模型的复杂度
更多方法:
(1)加入噪声:减少频繁出现的无意义的模式
(2)dropout:随机去除一部分的神经元
解决方案
1.数据集增强
当训练数据集有限的时候,可以通过数据集增强变换原有的数据生成新的数据来扩大训练集。即便拥有大量数据,数据增强也是有必要的,可以提升整体性能。
我们可以使用以下几种方式增强数据集:
(1) 从数据源头采集更多的数据,如图像翻转、图像形状改变等等
(2) 在原有数据集基础上,加上随机噪声
根据原有数据集预估数据的分布,产生更多的数据
2.正则化
正则化是机器学习中最常见的过拟合解决方法,在损失函数中加入正则项来惩罚模型的参数,以此降低模型的复杂度。
(1)L1正则化

(2)L2正则化

参数说明


为什么正则化可以解决过拟合问题呢?
(1) 一个简单的说法是因为正则化引入了正则化参数 。
。
- 我们以L2正则化为例,其权值更新

- 引入正则化后,我们可以看到权值更新变小了。
(2)曲线波动
过拟合的时候,拟合函数的系数w往往非常大,如下图所示

(a)这是因为需要顾及每一个点,最终形成的拟合函数波动很大
(b)波动很大意味着导数值很大,由于自变量x值不确定,因为只有系数w足够大时,才能保证导数值很大
而我们正则化的作用就是约束参数w不要太大,从而在一定程度上减少了过拟合的作用。
3.Dropout
Dropout与正则化不同,Dropout不会修改代价函数,而是修改深度网络本身。Dropout是指在训练一个大的神经网络的时候,随机“关闭”一些神经元,即把这些神经元从网络中“抹去”,相当于这些被“抹去”的神经元不参与本次训练
Dropout的思想是训练整体深度神经网络,并*均到每个集合里,而不是训练某一层。深度神经网络是以概率P舍弃部分神经元,其它神经元以概率q=1-p被保留,舍去的神经元的输出都被设置为零。
为什么dropout可以解决过拟合问题呢
(a)取*均的作用
- dropout可随机停止不同的神经元而造成网络的结构不同,训练过程相当于对很多个不同网络的训练取*均,从而在整体上减少过拟合。
(b)减少神经元之间复杂的共适应关系
- 权值的更新不在依赖于固定关系的隐层节点的共同作用,避免某些特定特征的获取,即网络不应该对某些特定特征敏感,应该多学习一些共同的特征
卷积神经网络(CNN)
卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,对于大型图像处理有出色表现。
全连接网络为什么不适合图像识别任务?
• 参数数量太多。仅仅对一黑白28 x 28的手写数字识别,输入层的神经元就有784个。如果隐藏层有15个神经元,参数w就有784 x15=11760个(如上图所示);如果输入是一张28 x 28带有颜色的RGB格式的手写数字图片,则输入神经元有28 x 28 x 3=2352个,…。我们可以看到图像只要扩大一点点,参数就会变得很多很多。
• 没有利用图片像素之间的位置信息。对于图像来说,每个像素和其周围像素联系是比较密切的,和离得很远的像素的联系可能就很小了。对于图像识别任务来说,当我们完成每个神经元(像素)-神经元(像素)的连接权重的学习之后,可能会发现,有大量的权重,它们的值都是很小的(也就是这些连接其实无关紧要)。努力学习大量并不重要的权重,这样的学习必将是非常低效的。
• 网络层数限制 。我们知道网络层数越多其表达能力越强,但是通过梯度下降方法训练深度全连接神经网络很困难,因为全连接神经网络的梯度很难传递超过3层。因此,我们不可能得到一个很深的全连接神经网络,也就限制了它的能力。
卷积网络为什么适合图像识别任务?
• 局部连接。每个神经元不在和上一层的所有神经元相连,而是上一层中小部分神经元相连。
• 权值共享。一组连接可以共享一个权值。
• 下采样。使用下采样减少每层的样本数。

卷积神经网络主要由输入层(INPUT)、卷积层(CONV)、激活函数、池化层(POOL)、全连接层(FC)组成。
- 输入层:用于数据的输入;
- 卷积层:使用卷积核进行特征提取和特征映射;
- 激活函数:增加非线性银蛇
- 池化层:进行下采样,对特征图稀疏处理,减少数据运算量
- 全连接层:通常在CNN尾部进行重新拟合并输出最终给结果。
• 深度(depth):,输出单元的深度,即filter的个数
• 步长(stride):窗口一次滑动的长度
• 补零(zero-padding): 我们可以通过在输入单元周围补零来改变输入单元整体大小,从而控制输出单元的空间大小
(1) 输入层
在CNN的输入层中,(图片)数据的输入格式与全连接网络的输入(一维向量)不同。输入层格式保留了图片本身的结构。
• 对于黑白的2828图片,CNN的输入是2828的二维神经元,全连接网络的输入是28*28=784的一维向量;
• 对于RGB格式的2828图片,CNN的输入是32828的三维神经元。其中3表示通道或深度,即R、G、B;每个深度都有一个2828的矩阵
在该层中,主要的处理是对原始图像进行预处理,有
• 去均值
• 归一化
• PCA/白化
(2) 卷积层
卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
在卷积层有两个关键操作:
• 局部感知。
• 窗口滑动,窗口/卷积核(filter)对局部数据计算
如果每个神经元用的是同一个卷积核(filter)去卷积图像,这样我们就只有100个参数啊,不管隐层的神经元个数有多少,两层间的连接只有100个参数!这就是权值参数共享!
(3) 激活函数
把卷积层输出结果做非线性映射。
常用的非线性激活函数有sigmoid、tanh、relu等等,前两者sigmoid/tanh比较常见于全链接层,后者relu常见于卷积层。
(4) 池化层
池化层处于卷积层之间,池化过程即下采样,用来压缩图片。具体作用如下:
- 
特征不变性。池化的作用类似于resize,压缩图像过程中,去除了一些无关的信息,保留了重要信息。 
- 
特征降维。去除无关的特征或者重复的特征。 
- 
在一定程度上防止过拟合。 
池化层的方法有最大池化(Max Pooling)和*均池化(Mean Pooling)。
LeNet5卷积神经网络模型
LeNet-5:是Yann LeCun在1998年设计的用于手写数字识别的卷积神经网络,它是早期卷积神经网络中最有代表性的模型之一。
LeNet-5共有7层(不包含输入层),分别是输入层-卷积层(C1)-池化层(S2)-卷积层(C3)-池化层(S4)-卷积层(C5)-全连接层(F6)-输出层(OUTPUT)
LeNet-5本质是个多分类问题。
AlexNet卷积神经网络模型
AlexNet共有11层(不包含输入层),分别是输入层-卷积层-池化层-卷积层-池化层-卷积层-卷积层-卷积层-池化层-全连接层-全连接层-输出层。
AlexNet与Lenet-5神经网络相比改进
- 
数据增强 
- 
Dropout 
- 
Relu激活函数 4.LRN 局部响应归一化 
定位

循环神经网络(RNN)
循环神经网络的主要用途是处理和预测序列数据。所谓序列,即相互依赖的(有限或无限)数据流,比如时间序列数据、信息性的字符串、对话等。
循环神经网络就是为了刻画一个序列当前的输出与之前信息的关系。
使用RNN的领域
- 语言建模和文本生成
- 给出一个词语序列,试着预测下一个词语的可能性。
- 机器翻译
- 将文本内容从一种语言翻译成另一种语言
- 语音识别
- 基于输入的声波预测语音片段,从而确定词语。
看图说话(图像描述)
CNN 和 RNN 相结合的作用。CNN 做图像分割,RNN 用分割后的数据重建描述。
视频标记
可以通过一帧一帧地标记视频进行视频搜索。
循环神经网络会记忆之前的信息,并利用之前的信息影响后面结点的输出。因此循环神经网络在网络结构上发生了一个很大的变动,即样例输入与来自序列中上一元素隐层的信号共同作用到当前的隐藏层。
长期依赖问题
长期依赖是指当前系统的状态,可能受很长时间之前的系统状态该的影响,是RNN很难解决的一个问题。
通过调整参数,RNN是可以学习到时间久远的信息的。但是,实践中的结论是,RNN很难学习到这种信息的。这是因为RNN遇到一个很大的问题,梯度消失或爆炸,即也就是后面时间的节点对于前面时间的节点感知力下降。
梯度问题
梯度问题一般会出现在多层网络中,影响梯度大小的因素主要有两个:权重和激活函数的偏导。深层的梯度是多个激活函数偏导乘积的形式来计算,如果这些激活函数的偏导比较小(小于1)或者为0,那么梯度随时间很容易消失;相反,如果这些激活函数的偏导比较大(大于1),那么梯度很有可能就会爆炸。因而,梯度的计算和更新非常困难。
LSTM
长短时记忆网络(Long Short Term Memory Network, LSTM)是为了解决长期问题而设计的网咯模型,是一种改进之后的循环神经网络RNN。
LSTM核心思想
LSTM的关键在于细胞的状态c(cell state),用以保存长期的状态。细胞状态类似于传送带,直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
怎么控制细胞状态c?
在LSTM中使用门(gates)的结构来控制细胞状态,实现信息的添加或删除。
比如如下图中的门主要是通过一个sigmoid神经层和逐点相乘的操作来实现。其中,sigmoid层输出的每一个元素都在0~1之间表示让对应信息通过的权重(或者占比)。比如, 0 表示“不让任何信息通过”, 1 表示“让所有信息通过”。

 
                
             浙公网安备 33010602011771号
浙公网安备 33010602011771号