深度学习:神经网络
2016-03-19 10:49
447 查看
1. 神经网络核心思想
人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model)。它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型,起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。
Hinton 六十年代还是中学生时,就对脑科学着迷。当时一个同学给他介绍关于大脑记忆的理论是:大脑对于事物和概念的记忆,不是存储在某个单一的地点,而是像全息照片一样,分布式地,存在于一个巨大的神经元的网络里。
分布式表征 (Distributed Representation),是神经网络研究的一个核心思想。它的意思是,当你表达一个概念的时候,不是用单个神经元一对一地存储定义;概念和神经元是多对多的关系:一个概念可以用多个神经元共同定义表达,同时一个神经元也可以参与多个不同概念的表达。
分布式表征和传统的局部表征 (localized representation) 相比,存储效率高很多。线性增加的神经元数目,可以表达指数级增加的大量不同概念。
分布式表征的另一个优点是,即使局部出现硬件故障,信息的表达不会受到根本性的破坏。链接
2. 反向传播算法
反向传播算法(Backpropagation algorithm,简称BP算法)是一种监督学习算法,常被用来训练多层感知机。 于1974年,Paul Werbos[1]首次给出了如何训练一般网络的学习算法,而人工神经网络只是其中的特例。
算法简介
反向传播算法(BP算法)主要由两个环节(激励传播、权重更新)反复循环迭代,直到网络的对输入的响应达到预定的目标范围为止。
(a)激励传播
每次迭代中的传播环节包含两步:
(前向传播阶段)将训练输入送入网络以获得激励响应;
(反向传播阶段)将激励响应同训练输入对应的目标输出求差,从而获得隐层和输出层的响应误差。
(b)权重更新
对于每个突触上的权重,按照以下步骤进行更新:
将输入激励和响应误差相乘,从而获得权重的梯度;
将这个梯度乘上一个比例并取反后加到权重上;
这个比例将会影响到训练过程的速度和效果,因此称为“训练因子”;
梯度的方向指明了误差扩大的方向,因此在更新权重的时候需要对其取反,从而减小权重引起的误差。
神经网络中的BP算法(摘自知乎:Linglai Li):
BP算法主要是用于最常见的一类神经网络,叫多层前向神经网络,本质可以看作是一个general nonlinear estimator,即输入 输出y,视图找到一个关系
(在这里f 的实现方式就是神经网络)来近似已知数据。
为了得到f 中的未知参数的最优估计值,一般会采用最小化误差的准则,而最通常的做法就是梯度下降,到此为止都没问题,把大家困住了很多年的就是多层神经网络无法得到显式表达的梯度下降算法!
BP算法实际上是一种近似的最优解决方案,背后的原理仍然是梯度下降,但为了解决上述困难,其方案是将多层转变为一层接一层的优化:
只优化一层的参数是可以得到显式梯度下降表达式的;而顺序呢必须反过来才能保证可工作——由输出层开始优化前一层的参数,然后优化再前一层……跑一遍下来,那所有的参数都优化过一次了。但是为什么说是近似最优呢,因为数学上除了很特殊的结构,step-by-step的优化结果并不等于整体优化的结果!不过,好歹现在能工作了,不是吗?至于怎么再改进(已经很多改进成果了),或者采用其他算法(例如智能优化算法等所谓的全局优化算法,就算是没有BP这个近似梯度下降也只是局部最优的优化算法)那就是新的研究课题了。
也就是说,通过在神经网络里增加一个所谓隐层 (hidden layer),同时也解决了感知器无法解决异或门 (XOR gate) 的难题。把纠错的运算量下降到只和神经元数目本身成正比。
激励相应中的链式求导(摘自知乎:tracholar)
神经网络里面对模型进行训练,需要对目标函数
![](https://zhihu.com/equation?tex=J%28W%2Cb%29)
最小化,所以要计算目标函数对参数的梯度。而目标函数直接与最后一层的输出有关,所以求导的时候就从最后一层开始,往前链式求导。这里贴一张图,表示对函数||As-x||^2链式求导的过程,具体可以参看
用反向传导思想求导 。说白了,就是链式求导!具体看:反向传导思想求导。
![](https://img-blog.csdn.net/20160319101843986)
(1)把 A 作为第一层到第二层的权重。
(2)将第二层的激励减 x ,第二层使用了单位激励函数。
(3)通过单位权重将结果不变地传到第三层。在第三层使用平方函数作为激励函数。
(4)将第三层的所有激励相加。
该网络的权重和激励函数如下表所示:
为了使 J(z(3)) = F(x) ,我们可令
![](http://ufldl.stanford.edu/wiki/images/math/c/4/e/c4e22c48b65f68377d01e81d6312b145.png)
。
一旦我们将 F 看成神经网络,梯度
![](http://ufldl.stanford.edu/wiki/images/math/c/8/a/c8a57f802f72156c4dbee1bd9fde338e.png)
就很容易求了——使用反向传导得到:
因此
![](http://ufldl.stanford.edu/wiki/images/math/3/5/a/35a198eeea379f6e5fddd29fe4a6c2d7.png)
3. 卷积神经网络
什么是卷积?
卷积,就是用卷积核作用在图像上得到图像对于该卷积核的响应。比如,Sobel算子可以得到图像的边缘。
为什么卷积?
我们人看到一幅图像,眨眼之间就知道图像中有什么。但计算机不同,计算机看到的每一副图像都是一个数字矩阵。那我们怎么让计算机从一个个数字矩阵中得到有用的信息(比如边缘,角点)呢?我们对图像进行卷积。
那,更前一点,我们怎么让计算机知道一幅图像中是猫 ,另一副是狗 呢?
我们对其进行有监督的分类。
一个简单的分类处理流程
这里,我按照cs231n上举的例子介绍一个简单的图像分类流程。我们用曼哈顿或者欧氏距离加上最或者K近邻分类器分类器分类。
训练阶段
用最近邻分类器做分类时,训练阶段非常简单。我们只是读取图片,并记住每张图片的类标。
测试阶段
我们对每一张测试图像遍历整个样本集,找到和它最或者前K个相似的图像。
相似怎么度量?就是简单的用L1或L2距离。
而整个过程中到底使用L1还是L2,是最近邻还是K近邻,K到底取多少?
这些都是参数,也就是调参需要调的东西。
显然,用K近邻分类器的优点是训练阶段毫不费事,但是测试阶段随着样本集的增大可是要了命了。
然而,CNN与之相反,它的训练过程较为漫长,而测试阶段时耗很少。
传统方法
这里,我介绍一个简单的猫狗分类任务。
假设,我们拿到了许多张猫和狗的图像。
训练阶段
1 首先进行一些简单的图像预处理,诸如平滑,去噪,光照归一化等等。
2 提取一些诸如SIFT, HOG, Gabor特征。
3 将特征放到一个分类器,比如SVM,进行2分类,训练出最优分类面。
测试阶段
1,2 和训练阶段相同。
3 用刚才训练好的分类器做出决策。
但是,关键问题是:这些手工设计的特征,是不是真的对分类有利呢?可不可以让机器自己学习出对分类有利的特征呢?
我们引入卷积神经网络。
基于CNN的图像分类
上一部分介绍了传统方法下的图像分类流程:特征表达+分类。
而CNN将这两步合并到一个统一整体中(当然你也可以用CNN来提取特征用其他分类器训练分类)。
简单介绍CNN的相关知识。
1. 权值共享
CNN的局部连接和权值共享使得训练参数大为减少。(具体怎么算可以参考LeNet5)
2 梯度优化
梯度下降是神经网络中常用的优化算法。有批梯度,SGD,Mini批梯度三种变体及许多优化算法。这里不一一介绍了。
另一种解释 by 司徒功源
cnn的核心在于卷积核,其实关于卷积核还有另一个名字叫做滤波器。
从信号处理的角度而言,滤波器是对信号做频率筛选,这里主要是空间-频率的转换。
cnn的训练就是找到最好的滤波器使得滤波后的信号更容易分类,还可以从模版匹配的角度看卷积,每个卷积核都可以看成一个特征模版,训练就是为了找到最适合分类的特征模版。
---------------------------------------------------------------------------------------------
4. CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?链接
回答1:DNN是一个大类,CNN是一个典型的空间上深度的神经网络,RNN是在时间上深度的神经网络。
回答2:
![](https://img-blog.csdn.net/20160319104831900)
------------------------------------------------------------------------------------------
5. 后记
Yann Lecun (我给他取个中文名叫 “严乐春”吧) 1960年 出生于巴黎。1987年 在法国获得博士学位后,他曾追随 Hinton 教授到多伦多大学做了一年博士后的工作,随后搬到新泽西州的贝尔实验室继续研究工作。严乐春进一步运用一种叫做“卷积神经网络” (Convoluted Neural Networks) 的技术。
与此同时,贝尔实验室的一个同事提出Vapnik 就提出了 支持向量机 (Support Vector Machine) 的算法。SVM 使用所谓 “核机制” (kernel trick) 的非线性映射算法,将线性不可分的样本转化到高维特征空间 (high-dimensional feature space),使其线性可分。将卷积神经网络带入寒冬。
Vapnik 的观点是:SVM,非常精巧地在 “容量调节” (Capacity Control) 上 选择一个合适的平衡点,而这是神经网络不擅长的。
什么是 “容量调节”? 举个简单的例子:如果算法容量太大,就像一个记忆力极为精准的植物学家,当她看到一颗新的树的时候,由于这棵树的叶子和她以前看到的树的叶子数目不一样,所以她判断这不是树;如果算法容量太小,就像一个懒惰的植物学家,只要看到绿色的东西都把它叫做树。
严乐春的观点是:用有限的计算能力,解决高度复杂的问题,比“容量调节”更重要。支持向量机,虽然算法精巧,但本质就是一个双层神经网络系统。它的最大的局限性,在于其“核机制”的选择。当图像识别技术需要忽略一些噪音信号时,卷积神经网络的技术,计算效率就比 SVM 高的多。
神经网络的计算,在实践中还有另外两个主要问题:
第一,算法经常停止于局部最优解,而不是全球最优解。这好比“只见树木,不见森林”。
第二,算法的培训,时间过长时,会出现过度拟合 (overfit),把噪音当做有效信号。
人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model)。它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型,起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。
Hinton 六十年代还是中学生时,就对脑科学着迷。当时一个同学给他介绍关于大脑记忆的理论是:大脑对于事物和概念的记忆,不是存储在某个单一的地点,而是像全息照片一样,分布式地,存在于一个巨大的神经元的网络里。
分布式表征 (Distributed Representation),是神经网络研究的一个核心思想。它的意思是,当你表达一个概念的时候,不是用单个神经元一对一地存储定义;概念和神经元是多对多的关系:一个概念可以用多个神经元共同定义表达,同时一个神经元也可以参与多个不同概念的表达。
分布式表征和传统的局部表征 (localized representation) 相比,存储效率高很多。线性增加的神经元数目,可以表达指数级增加的大量不同概念。
分布式表征的另一个优点是,即使局部出现硬件故障,信息的表达不会受到根本性的破坏。链接
2. 反向传播算法
反向传播算法(Backpropagation algorithm,简称BP算法)是一种监督学习算法,常被用来训练多层感知机。 于1974年,Paul Werbos[1]首次给出了如何训练一般网络的学习算法,而人工神经网络只是其中的特例。
算法简介
反向传播算法(BP算法)主要由两个环节(激励传播、权重更新)反复循环迭代,直到网络的对输入的响应达到预定的目标范围为止。
(a)激励传播
每次迭代中的传播环节包含两步:
(前向传播阶段)将训练输入送入网络以获得激励响应;
(反向传播阶段)将激励响应同训练输入对应的目标输出求差,从而获得隐层和输出层的响应误差。
(b)权重更新
对于每个突触上的权重,按照以下步骤进行更新:
将输入激励和响应误差相乘,从而获得权重的梯度;
将这个梯度乘上一个比例并取反后加到权重上;
这个比例将会影响到训练过程的速度和效果,因此称为“训练因子”;
梯度的方向指明了误差扩大的方向,因此在更新权重的时候需要对其取反,从而减小权重引起的误差。
神经网络中的BP算法(摘自知乎:Linglai Li):
BP算法主要是用于最常见的一类神经网络,叫多层前向神经网络,本质可以看作是一个general nonlinear estimator,即输入 输出y,视图找到一个关系
(在这里f 的实现方式就是神经网络)来近似已知数据。
为了得到f 中的未知参数的最优估计值,一般会采用最小化误差的准则,而最通常的做法就是梯度下降,到此为止都没问题,把大家困住了很多年的就是多层神经网络无法得到显式表达的梯度下降算法!
BP算法实际上是一种近似的最优解决方案,背后的原理仍然是梯度下降,但为了解决上述困难,其方案是将多层转变为一层接一层的优化:
只优化一层的参数是可以得到显式梯度下降表达式的;而顺序呢必须反过来才能保证可工作——由输出层开始优化前一层的参数,然后优化再前一层……跑一遍下来,那所有的参数都优化过一次了。但是为什么说是近似最优呢,因为数学上除了很特殊的结构,step-by-step的优化结果并不等于整体优化的结果!不过,好歹现在能工作了,不是吗?至于怎么再改进(已经很多改进成果了),或者采用其他算法(例如智能优化算法等所谓的全局优化算法,就算是没有BP这个近似梯度下降也只是局部最优的优化算法)那就是新的研究课题了。
也就是说,通过在神经网络里增加一个所谓隐层 (hidden layer),同时也解决了感知器无法解决异或门 (XOR gate) 的难题。把纠错的运算量下降到只和神经元数目本身成正比。
激励相应中的链式求导(摘自知乎:tracholar)
神经网络里面对模型进行训练,需要对目标函数
最小化,所以要计算目标函数对参数的梯度。而目标函数直接与最后一层的输出有关,所以求导的时候就从最后一层开始,往前链式求导。这里贴一张图,表示对函数||As-x||^2链式求导的过程,具体可以参看
用反向传导思想求导 。说白了,就是链式求导!具体看:反向传导思想求导。
(1)把 A 作为第一层到第二层的权重。
(2)将第二层的激励减 x ,第二层使用了单位激励函数。
(3)通过单位权重将结果不变地传到第三层。在第三层使用平方函数作为激励函数。
(4)将第三层的所有激励相加。
该网络的权重和激励函数如下表所示:
层 | 权重 | 激励函数 f |
---|---|---|
1 | A | f(zi) = zi (单位函数) |
2 | I (单位向量) | f(zi) = zi − xi |
3 | N/A | ![]() |
![](http://ufldl.stanford.edu/wiki/images/math/c/4/e/c4e22c48b65f68377d01e81d6312b145.png)
。
一旦我们将 F 看成神经网络,梯度
![](http://ufldl.stanford.edu/wiki/images/math/c/8/a/c8a57f802f72156c4dbee1bd9fde338e.png)
就很容易求了——使用反向传导得到:
层 | 激励函数的导数f' | Delta | 该层输入z |
---|---|---|---|
3 | f'(zi) = 2zi | f'(zi) = 2zi | As − x |
2 | f'(zi) = 1 | ![]() | As |
1 | f'(zi) = 1 | ![]() | s |
![](http://ufldl.stanford.edu/wiki/images/math/3/5/a/35a198eeea379f6e5fddd29fe4a6c2d7.png)
3. 卷积神经网络
什么是卷积?
卷积,就是用卷积核作用在图像上得到图像对于该卷积核的响应。比如,Sobel算子可以得到图像的边缘。
为什么卷积?
我们人看到一幅图像,眨眼之间就知道图像中有什么。但计算机不同,计算机看到的每一副图像都是一个数字矩阵。那我们怎么让计算机从一个个数字矩阵中得到有用的信息(比如边缘,角点)呢?我们对图像进行卷积。
那,更前一点,我们怎么让计算机知道一幅图像中是猫 ,另一副是狗 呢?
我们对其进行有监督的分类。
一个简单的分类处理流程
这里,我按照cs231n上举的例子介绍一个简单的图像分类流程。我们用曼哈顿或者欧氏距离加上最或者K近邻分类器分类器分类。
训练阶段
用最近邻分类器做分类时,训练阶段非常简单。我们只是读取图片,并记住每张图片的类标。
测试阶段
我们对每一张测试图像遍历整个样本集,找到和它最或者前K个相似的图像。
相似怎么度量?就是简单的用L1或L2距离。
而整个过程中到底使用L1还是L2,是最近邻还是K近邻,K到底取多少?
这些都是参数,也就是调参需要调的东西。
显然,用K近邻分类器的优点是训练阶段毫不费事,但是测试阶段随着样本集的增大可是要了命了。
然而,CNN与之相反,它的训练过程较为漫长,而测试阶段时耗很少。
传统方法
这里,我介绍一个简单的猫狗分类任务。
假设,我们拿到了许多张猫和狗的图像。
训练阶段
1 首先进行一些简单的图像预处理,诸如平滑,去噪,光照归一化等等。
2 提取一些诸如SIFT, HOG, Gabor特征。
3 将特征放到一个分类器,比如SVM,进行2分类,训练出最优分类面。
测试阶段
1,2 和训练阶段相同。
3 用刚才训练好的分类器做出决策。
但是,关键问题是:这些手工设计的特征,是不是真的对分类有利呢?可不可以让机器自己学习出对分类有利的特征呢?
我们引入卷积神经网络。
基于CNN的图像分类
上一部分介绍了传统方法下的图像分类流程:特征表达+分类。
而CNN将这两步合并到一个统一整体中(当然你也可以用CNN来提取特征用其他分类器训练分类)。
简单介绍CNN的相关知识。
1. 权值共享
CNN的局部连接和权值共享使得训练参数大为减少。(具体怎么算可以参考LeNet5)
2 梯度优化
梯度下降是神经网络中常用的优化算法。有批梯度,SGD,Mini批梯度三种变体及许多优化算法。这里不一一介绍了。
另一种解释 by 司徒功源
cnn的核心在于卷积核,其实关于卷积核还有另一个名字叫做滤波器。
从信号处理的角度而言,滤波器是对信号做频率筛选,这里主要是空间-频率的转换。
cnn的训练就是找到最好的滤波器使得滤波后的信号更容易分类,还可以从模版匹配的角度看卷积,每个卷积核都可以看成一个特征模版,训练就是为了找到最适合分类的特征模版。
---------------------------------------------------------------------------------------------
4. CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?链接
回答1:DNN是一个大类,CNN是一个典型的空间上深度的神经网络,RNN是在时间上深度的神经网络。
回答2:
------------------------------------------------------------------------------------------
5. 后记
Yann Lecun (我给他取个中文名叫 “严乐春”吧) 1960年 出生于巴黎。1987年 在法国获得博士学位后,他曾追随 Hinton 教授到多伦多大学做了一年博士后的工作,随后搬到新泽西州的贝尔实验室继续研究工作。严乐春进一步运用一种叫做“卷积神经网络” (Convoluted Neural Networks) 的技术。
与此同时,贝尔实验室的一个同事提出Vapnik 就提出了 支持向量机 (Support Vector Machine) 的算法。SVM 使用所谓 “核机制” (kernel trick) 的非线性映射算法,将线性不可分的样本转化到高维特征空间 (high-dimensional feature space),使其线性可分。将卷积神经网络带入寒冬。
Vapnik 的观点是:SVM,非常精巧地在 “容量调节” (Capacity Control) 上 选择一个合适的平衡点,而这是神经网络不擅长的。
什么是 “容量调节”? 举个简单的例子:如果算法容量太大,就像一个记忆力极为精准的植物学家,当她看到一颗新的树的时候,由于这棵树的叶子和她以前看到的树的叶子数目不一样,所以她判断这不是树;如果算法容量太小,就像一个懒惰的植物学家,只要看到绿色的东西都把它叫做树。
严乐春的观点是:用有限的计算能力,解决高度复杂的问题,比“容量调节”更重要。支持向量机,虽然算法精巧,但本质就是一个双层神经网络系统。它的最大的局限性,在于其“核机制”的选择。当图像识别技术需要忽略一些噪音信号时,卷积神经网络的技术,计算效率就比 SVM 高的多。
神经网络的计算,在实践中还有另外两个主要问题:
第一,算法经常停止于局部最优解,而不是全球最优解。这好比“只见树木,不见森林”。
第二,算法的培训,时间过长时,会出现过度拟合 (overfit),把噪音当做有效信号。
相关文章推荐
- tcp、udp协议栈
- Http中的Post和GET请求的区别
- HttpClient使用详解
- 计算机网络常识
- 计算机网络常识
- 数据链路层&网络层-教主
- TCP&UDP协议小结
- xUtils3.0使用介绍:网络模块
- linux 使用epoll实现网络通信
- 文章标题
- 20.网络
- javaweb学习总结(八)——HttpServletResponse对象(二)
- linux网络文件共享服务的实现
- .net和tcp和udp的关联
- dll和context和tcp的关联
- context和tcp和sqlplus的关联
- tcpdump和dll和.net的关联
- excel和tcpdump和mangodb的关联
- linux和tcpdump和struts2的关联
- opencv和tcp和jsp的关联