标签:
前面我们介绍了一个神经元的模型,通过一个激励函数将高维的输入域权值的点积转化为一个单一的输出,而神经网络就是将神经元排列到每一层,形成一个网络结构,这种结构与我们之前介绍的线性模型不太一样,因此score function也需要重新定义,神经网络实现了一系列的线性映射与非线性映射,这一讲,我们主要介绍神经网络的数据预处理以及score function的定义。
给定一个训练集,
数据的预处理有多种形式,最常见的是去均值,即
第三种数据处理形式是PCA,PCA是一种很经典的数据降维算法,可以将高维的数据映射到低维空间,同时保持原始数据的相关特性,利用上面的定义,我们可以得到去均值的训练集,设为
最后一种数据处理方法是whiten,简单来说,就是让训练集除以协方差矩阵
我们也可以对图像做PCA和whiten处理,如下图所示:
图中最左边一列是从CIFAR-10中提取的一些示意图,CIFAR-10一共有50000张图,每张图的尺寸是
在Convolutional Neural Networks 中,PCA和whiten比较少用,而取均值化和归一化两种形式比较常用,这里要注意的一个问题是我们做数据预处理的时候,只能对training set进行处理,不能对validation set 或者 test set进行处理。意味着均值和方差都只能从training set中得到。
接下来要介绍的就是权值的初始化,虽然我们不知道网络最终的权值会取什么值,但是认为它们一半大于0,一半小于0是一个合理的假设,如果因此而将权值的初始值都
设为0,却是一个错误,因为权值的初始值为0,意味着每个神经元的输出都是一样的,这样计算的梯度也是一样的,根本无法体现最开始的假设。
一般来说,我们会让权值接近于0,但不是完全等于0,所以我们会取很小的接近于0的随机数来初始化这些权值,不过神经网络是带有某种随机性的学习模型,不一定权值的初始值越小越好,权值的设定,最好是可以让梯度能够有效地传递,这是神经网络里比较关键的一点。
有的时候,对于权值的设定,还要做进一步的处理,一个神经元的输出分布的方差,会随着输入个数的增大而增大,换句话说,神经元的输出,会随着输入个数的增加抖动地更加剧烈,为了减少这种抖动,可以对权值做一个如下的处理:
偏移量bias一般设为0。
下面介绍几种控制神经网络overfitting的方法。
L2 regularization:这大概是目前最常用的一种方法,通过在目标函数中引入
L2 regularization 直观上的解释就是对于出现极端分布的权值进行惩罚,而偏好于呈扩散分布的权值,这样可以保证网络里的每个输入都能发挥作用,而不至于让
网络只关注少部分的输入。
L1 regularization:是另外一种常见的方法,通过在目标函数中引入
中比较重要的一些分量,一般情况下,L2 regularization的权值分布更加扩散,而且学习性能比L1 regularization要好。
Max norm constraints:这种方法是通过控制权值的上限来调整权值,一般来说,就是在正常的权值更新之后,利用一个约束条件,
Drop out:这是目前非常流行的一种方法,而且很有效,是对前面几种方法的一种补充,在前面几种方法的基础上,在训练阶段,通过对某些神经元进行抑制,减少神经元的个数来到达控制的目的,下图给出了drop out的示意图:
在程序的设计上,就是对该神经元的输出强制变为0,使得该神经元不再发挥作用。
但是需要注意的一点是,一般情况下,drop out只会在训练的时候执行,而在测试的时候,所有的神经元都将发挥作用,也就是训练的时候不会做drop out,但是为了保证训练与测试时神经元输出的尺度要一样,以保证输出的期望一样,一种解决方法是在测试的时候对神经元的输出乘以概率
Drop out向我们展示了神经网络前向传递时的一种随机机制,这种机制可以让噪声在测试的时候被边缘化,Convolutional Neural Networks 也可以利用drop out的这一性质,采用随机pooling, fractional pooling等。
一般来不会对bias做regularization,因为bias相对于权值来说,数目要少。对于整个网络的影响没有权值那么大。而且做regularization的时候,不会每一层都做,一般来说,我们会在网络的输出层做regularization。在实际的应用中,我们会采用单一的L2 regularization,结合drop out,一般来说概率取
前面我们已经讨论了目标函数的 regularization loss部分,现在我们还要探讨一下data loss,data loss我们定义为预测值与目标值之间的偏差,一个训练集整体的
data loss是每个训练样本的偏差之和的平均值,即:
神经网络可以解决如下的几类问题:
第一个是分类问题,这个也是目前我们一直在讨论的问题,这里我们假设每个样本只属于某一类,即每个样本只有一个类标签,那么cost function可以写成如下的形式:
或者用softmax 的形式表示:
这些适用于类别较少的情况,如果类别很多的话,比如有几千类,这样的话,就要考虑用hierarchical softmax。上面的两种形式都是针对样本属于一个类别的情况,还有更复杂的情况是一个样本可能属于多个类别,这样的话,一种可行的方法是为每个类别都建立一个二元分类器,用来判断某个样本是否属于该类,那么其loss function
可以表示成:
另外一种方法是建立一个二元的logistic regression 分类器,这种分类器计算的是概率,如:
除了分类问题,神经网络也可以解决回归问题,回归问题的目标值和预测值都是连续的实数,而分类问题的目标值和预测值是离散的。回归问题常用的loss function是L2-norm,或者L1-norm,如下式所示:
L2-norm:
L1-norm:
不过要注意的是,L2-norm的优化比起其它的分类器要困难的多,它有一个非常脆弱而特殊的性质,就是希望网络的输出与目标值要完全一样,因为预测的是连续值,而分类问题就好的多,因为只有一个值是我们需要的,其它值的分布,大小并不会影响网络的性能。所以L2-norm不太稳健,当我们面对一个回归问题的时候,尽可能将其转化为分类问题。
声明:lecture notes里的图片都来源于该课程的网站,只能用于学习,请勿作其它用途,如需转载,请说明该课程为引用来源。 http://cs231n.stanford.edu/
Convolutional Neural Networks for Visual Recognition 5
标签:
原文地址:http://blog.csdn.net/matrix_space/article/details/46622751