博客内容取材于:http://www.cnblogs.com/tornadomeet/archive/2012/06/24/2560261.htmlphp
参考资料:html
补充材料:网络
tornadomeet博客整理得很好,欣赏这样的学习态度。app
该博客基本取材于UFLDL,在二者取舍间仍是选择按照tornadomeet博客的剧本走一遍。dom
由于大部分概念都已熟知,在此过一遍的意义在于查缺补漏,巩固基础。ide
该博客年初发现,现在我也有了这样的“博客导航”,这即是正能量的传播效应。函数
Deep Learning学习笔记: Deep learning:五十一(CNN的反向求导及练习) Deep learning:五十(Deconvolution Network简单理解) Deep learning:四十九(RNN-RBM简单理解) Deep learning:四十八(Contractive AutoEncoder简单理解) Deep learning:四十七(Stochastic Pooling简单理解) Deep learning:四十六(DropConnect简单理解) Deep learning:四十五(maxout简单理解) Deep learning:四十四(Pylearn2中的Quick-start例子) Deep learning:四十三(用Hessian Free方法训练Deep Network) Deep learning:四十二(Denoise Autoencoder简单理解) Deep learning:四十一(Dropout简单理解) Deep learning:四十(龙星计划2013深度学习课程小总结) Deep learning:三十九(ICA模型练习) Deep learning:三十八(Stacked CNN简单介绍) Deep learning:三十七(Deep learning中的优化方法) Deep learning:三十六(关于构建深度卷积SAE网络的一点困惑) Deep learning:三十五(用NN实现数据降维练习) Deep learning:三十四(用NN实现数据的降维) Deep learning:三十三(ICA模型) Deep learning:三十二(基础知识_3) Deep learning:三十一(数据预处理练习) Deep learning:三十(关于数据预处理的相关技巧) Deep learning:二十九(Sparse coding练习) Deep learning:二十八(使用BP算法思想求解Sparse coding中矩阵范数导数) Deep learning:二十七(Sparse coding中关于矩阵的范数求导) Deep learning:二十六(Sparse coding简单理解) Deep learning:二十五(Kmeans单层网络识别性能) Deep learning:二十四(stacked autoencoder练习) Deep learning:二十三(Convolution和Pooling练习) Deep learning:二十二(linear decoder练习) Deep learning:二十一(随机初始化在无监督特征学习中的做用) Deep learning:二十(无监督特征学习中关于单层网络的分析) Deep learning:十九(RBM简单理解) Deep learning:十八(关于随机采样) Deep learning:十七(Linear Decoders,Convolution和Pooling) Deep learning:十六(deep networks) Deep learning:十五(Self-Taught Learning练习) Deep learning:十四(Softmax Regression练习) Deep learning:十三(Softmax Regression) Deep learning:十二(PCA和whitening在二天然图像中的练习) Deep learning:十一(PCA和whitening在二维数据中的练习) Deep learning:十(PCA和whitening) Deep learning:九(Sparse Autoencoder练习) Deep learning:八(Sparse Autoencoder) Deep learning:七(基础知识_2) Deep learning:六(regularized logistic回归练习) Deep learning:五(regularized线性回归练习) Deep learning:四(logistic regression练习) Deep learning:三(Multivariance Linear Regression练习) Deep learning:二(linear regression练习) Deep learning:一(基础知识_1)
From: Deep learning:一(基础知识_1)tornado
教程中的一些术语:
【剪裁版】
Model representation:
学习所得函数表达形式,可用矩阵表示。
Vectorized implementation:
指定函数表达式的矢量实现。
Feature scaling:
将特征的每一维都进行一个尺度变化,例如,让其均值为0等。
必要性:因为梯度降低法是按照梯度方向来收敛到极值的,若是输入样本各个维数的尺寸不一样(即范围不一样),则这些参数的构成的等高线不一样的方向胖瘦不一样,这样会致使参数的极值收敛速度极慢。
所以,在进行梯度降低法求参数前,须要先进行feature scaling这一项,通常都是把样本中的各维变成0均值,即先减掉该维的均值,而后除以该变量的range。
Normal equations:
多元线性回归中参数解的矩阵形式,这个解方程称为normal equations.
同一个问题能够选用不一样的特征和不一样的模型,
当用训练样原本进行数据的测试时,通常都会将全部的训练数据整理成一个矩阵,矩阵的每一行就是一个训练样本,这样的矩阵有时候也会叫作是“design matrix”。
当用矩阵的形式来解多项式模型的参数时,参数 w=inv(X’*X)*X’*y,这个方程也称为 normal equations.
虽然X’*X是方阵,可是它的逆不必定存在(当一个方阵的逆矩阵不存在时,该方阵也称为sigular)。
Optimization objective:
指的是须要优化的目标函数,好比 logistic中loss function表达式的公式推导,或者 多元线性回归中带有规则性的目标函数。
Gradient Descent、Newton’s Method:
求目标函数最小值的方法。
Convex函数其实指的是只有一个极值点的函数,而non-convex可能有多个极值点。通常状况下咱们都但愿损失函数的形式是convex的。在分类问题状况下,先考虑训练样本中值为1的那些样本集,这时候个人损失函数要求咱们
因此这种状况下通常采用的是-log(h(x)),恰好知足要求。
同理,当训练样本值为0时,通常采用的损失函数是 -log(1-h(x))。
所以将这两种整合在一块儿时就为-y*log(h(x))-(1-y)*log(1-h(x)),结果是和上面的同样,不过表达式更紧凑了,选这样形式的loss函数是经过最大释然估计(MLE)求得的。
这种状况下依旧可使用梯度降低法来求解参数的最优值。在求参数的迭代公式时,一样须要求损失函数的偏导,很奇怪的是,这时候的偏导函数和多元线性回归时的偏导函数结构相似,只是其中的预测函数一个是普通的线性函数,一个是线性函数和sigmoid的复合的函数。
梯度降低法是用来求函数值最小处的参数值,而牛顿法是用来求函数值为0处的参数值,这二者的目的初看是感受有所不一样,可是再仔细观察下牛顿法是求函数值为0时的状况,若是此时的函数是某个函数A的导数,则牛顿法也算是求函数A的最小值(固然也有多是最大值)了,所以这二者方法目的仍是具备相同性的。牛顿法的参数求解也能够用矢量的形式表示,表达式中有hession矩阵和一元导函数向量。
下面来比较梯度法和牛顿法:
Common variations:
规则项表达形式的多样性。
若是当系统的输入特征有多个,而系统的训练样本比较少时,这样就很容易形成over-fitting的问题。这种状况下
由于规则项能够做用在参数上,让最终的参数很小,当全部参数都很小的状况下,这些假设就是简单假设,从而可以很好的解决over-fitting的问题。
通常对参数进行regularization时,前面都有一个惩罚系数,这个系数称为regularization parameter,
若是这个规则项系数太大的话,有可能致使系统全部的参数最终都很接近0,因此会出现欠拟合的现象。
在多元线性回归中,规则项通常惩罚的是参数1到n(固然有的也能够将参数0加入惩罚项,但不常见)。随着训练样本的增长,这些规则项的做用在慢慢减少,所以学习到的系统的参数倾向而慢慢增长。
规则项还有不少种形式,有的规则项不会包含特征的个数,如L2-norm regularization(或者叫作2-norm regularization).固然了,还有L1-norm regularization。
因为规则项的形式有不少种,因此这种情形也称为规则项的common variations.【常见变种】
在有规则项的线性回归问题求解中,若是采用梯度降低法,则参数的更新公式相似(其中参数0的公式是同样的,由于规则项中没有惩罚参数0),
不一样之处在于其它参数的更新公式中的更新不是用自己的参数去减掉后面一串,而是用自己参数乘以(1-alpha*lamda/m)再减掉其它的,固然了这个数在不少状况下和1是相等的,也就很前面的无规则项的梯度降低法相似了。
它的normal equation也很前面的相似,大体为 inv(X’*X+lamda*A)*X’*y,多了一项,其中A是一个对角矩阵,除了第一个元素为0外,其它元素都为1(在通用规则项下的情形)。这种状况下前面的矩阵通常就是可逆的了,即在样本数量小于特征数量的状况下是可解的。
当为logistic回归的状况中(此时的loss函数中含有对数项),若是使用梯度降低法,则参数的更新方程中也和线性回归中的相似,也是要乘以(1-alpha*lamda/m),nomal equation中也是多了一个矩阵,这样同理就解决了不可逆问题。
在牛顿法的求解过程当中,加了规则项后的一元导向量都随着改变,hession矩阵也要在最后加入lamda/m*A矩阵,其中A和前面的同样。
logistic回归与多重线性回归实际上有不少相同之处,最大的区别就在于他们的 因变量不一样,其余的基本都差很少,正是由于如此,这两种回归能够归于同一个家族,即广义线性模型(generalized linear model)。
这一家族中的模型形式基本上都差很少,不一样的就是因变量不一样,
只要注意区分它们的因变量就能够了。logistic回归的因变量能够是二分类的,也能够是多分类的,可是二分类的更为经常使用,也更加容易解释。
因此实际中最为经常使用的就是二分类的logistic回归。
dropout是指在深度学习网络的训练过程当中,对于神经网络单元,按照必定的几率将其暂时从网络中丢弃。注意是暂时,对于随机梯度降低来讲,因为是随机丢弃,故而每个mini-batch都在训练不一样的网络。
CNN中防止过拟合提升效果的一个大杀器,但对于其为什么有效,却众说纷纭。在下读到两篇表明性的论文,表明两种不一样的观点。
<组合论>
大规模的神经网络有两个缺点,死锁:
Sol:Dropout的出现很好的能够解决这个问题,每次作完dropout,至关于从原始的网络中找到一个更瘦
的网络,以下图所示:
于是,对于一个有n个节点的神经网络,有了dropout后,就能够看作是2n个模型的集合了,但此时要训练的参数数目倒是不变的,这就解脱了费时的问题。
<动机论>
dropout也能达到一样的效果(有性繁殖比无性繁殖更具备适应性),它强迫一个神经单元,和随机挑选出来的其余神经单元共同工做,达到好的效果。消除减弱了神经元节点间的联合适应性,加强了泛化能力。
论文中的其余技术点
防止过拟合的方法:
dropout率的选择
训练过程
部分实验结论
该论文的实验部分很丰富,有大量的评测数据。
maxout 神经网络中的另外一种方法,Cifar-10上超越dropout
文本分类上,dropout效果提高有限,分析缘由多是Reuters-RCV1数据量足够大,过拟合并非模型的主要问题
模型均值预测
Multiplicative Gaussian Noise
使用高斯分布的dropout而不是伯努利模型dropout
进一步须要了解的知识点
- dropout RBM
- Marginalizing Dropout
具体来讲就是将随机化的dropout变为肯定性的,好比对于Logistic回归,其dropout至关于加了一个正则化项。- Bayesian neural network对稀疏数据特别有用,好比medical diagnosis, genetics, drug discovery and other computational biology applications
观点十分明确,就是对于每个dropout后的网络,进行训练时,至关于作了Data Augmentation。
由于,总能够找到一个样本,使得在原始的网络上也能达到dropout单元后的效果。
好比,对于某一层,dropout一些单元后,造成的结果是(1.5,0,2.5,0,1,2,0),其中0是被drop的单元,那么总能找到一个样本,使得结果也是如此。
这样,每一次dropout其实都至关于增长了样本。
其余,暂略。
[1]. Srivastava N, Hinton G, Krizhevsky A, et al. Dropout: A simple way to prevent neural networks from overfitting[J]. The Journal of Machine Learning Research, 2014, 15(1): 1929-1958. [2]. Dropout as data augmentation. http://arxiv.org/abs/1506.08700
有必要细读的文章。
<L2, weight decay>
随着训练过程,网络在training data上的error渐渐减少,可是在验证集上的error却反而渐渐增大——由于训练出来的网络过拟合了训练集,对训练集外的数据却不work。
让w“变小”的效果。为何w“变小”能够防止overfitting?一个所谓“显而易见”的解释就是:
“更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚恰好(这个法则也叫作奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果每每好于未经正则化的效果。”
固然,对于不少人(包括我)来讲,这个解释彷佛不那么显而易见,因此这里添加一个稍微数学一点的解释(引自知乎):
过拟合的时候,拟合函数的系数每每很是大,为何?以下图所示,过拟合,就是拟合函数须要顾忌每个点,最终造成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)很是大,因为自变量值可大可小,因此只有系数足够大,才能保证导数值很大。
而正则化是经过约束参数的范数使其不要太大,因此能够在必定程度上减小过拟合状况。
<L1>
在原始的代价函数后面加上一个L1正则化项,即全部权重w的绝对值的和,乘以λ/n。
让w往0靠,使网络中的权重尽量为0,也就至关于减少了网络复杂度,防止过拟合。
另外,上面没有提到一个问题,当w为0时怎么办?当w等于0时,|W|是不可导的,因此咱们只能按照原始的未经正则化的方法去更新w,这就至关于去掉η*λ*sgn(w)/n这一项,因此咱们能够规定sgn(0)=0,这样就把w=0的状况也统一进来了。(在编程的时候,令sgn(0)=0,sgn(w>0)=1,sgn(w<0)=-1)