Lecture 9: Ways to make neural networks generalize better 提高神经网络泛化能力的方法

来源:互联网 发布:淘宝店铺装修怎么还原 编辑:程序博客网 时间:2024/06/04 19:37

最近在学习Hinton在coursera上的教程,Neural Networks for Machine Learning。在上一个月的学习中,对神经网络具有了一定的了解,突然感觉自己该记录一下笔记了,现在从第9节开始写博客,前面的看有没有时间补上了。


OK,开始进入正题,关于Hinton教程的翻译,大家可以参考现有的博客:http://www.cnblogs.com/shouhuxianjian/p/4529196.html

我现在做的学习笔记,是自己的一些想法

第一节: Overview of ways to improve generalization

This lecture talks about improving generalization by reducing the overfitting that occurs when a network has too much capacity for the amount of datas given during training.

这里面说到了too much capacity,这个词还是很有深意的,我的理解是神经网络是具有超强的空间拟合能力,具体是为什么,应该是一种直觉,因为现在神经网络的原理还没有证明完成,这里我们权当为神经网络空间的转移模型,他可以把空间转移、扭曲,通过多个空间的迭代转移、扭曲,最后拟合出来一个比较理想的输出。这里的capacity我理解为能力,或者说为包容能力更确切一些。因为要逼近输出,我们可以将输入先映射到一个空间(需要有隐含层),然后再不断的映射,最后得到了输出。这里的映射会有非常多的可能性(验证方法1),所以在无穷多个可以逼近输出的模型中,哪一个是最好的。


当然写到这里,我似乎有点不同的想法:第一,神经网络能够学习出来超多的拟合模型,哪一个是最好的,似乎有点像是你抽样大气数据,预测天气,那么多的模型,哪个才是比较好的呢,因此这里又引申出来会有其他的学习方法来训练神经网络,至今我知道的是BP,其他的还没有接触过,以后知道了再添加上,当然也欢迎广大的网友们留言,提供一些参考。第二,神经网络拟合出来的模型可以无限逼近输出,在不断的逼近输出过程中,你的CV输出的Error就会变大,这个应该就是所说的overfitting的问题。


Hinton说的原因为:the reason we get over-fitting is because as well as having information about the true regularities in the mapping from the input to output, any finite set of training data also contains sampling error. 这个也是一个非常好的原因。当然细究下去,都有其中的道理所在的。

There will be accidental regulatities just because of the particular training cases that were chosen.

When we fit the model, it can't tel which resularities are real and which are caused by sampling error.

这里所说的是训练集的随机性选择带来的训练结果的不同,还有采样数据的误差也带来了训练结果的差异性。

So if the model is very flexible, it can model the sampling error really well and then it'll generalize badly.

仔细考虑下去,似乎问题真的很多。


如何解决:

1.  Get more data

2. Use a model that has the right capacity

结合两者一起看,应该就是集中在capacity这个词上了。

3. Average many different models

4. (Bayesian) Use a single neural network architecture, but average the predictions made by many different weight vectors.

3和4的说的是平均的对象都是输出结果,但是3是用不同的模型训练,如3层、4层网络,同是3层网络,隐含层节点个数不同,或者NN与SVM,重在说模型的不同。4是指的用同一个NN,不同的训练结果的平均。具体怎么得到不同训练参数,待定。


capacity control:(capacity怎么翻译,有点困难,这里关键指的是NN的能力,所以就不推荐翻译了)

1. Architecture: limit the number of hidden layers and the number of the units per layer.

2. Early stopping. Starting with small weights and stop the learning before it overfits.

3. weight-decay. Penalize large weights using penalties or constraints on their squared values (L2 penalty) or absolute values (L1 penalty)

4. Noise. Add noise to the weights or the activities


首先说第一个,就是神经网络层数(NNL)和各个层Neural cell个数(NC#)的选择。我们知道,NNL 和NC#越多,它所能描述的内容越复杂,能描述的能力也越强。那么有没有一个理论可以确定最少NNL 和NC#,可以满足所需要的精确度或者学习误差?

第二个:画一个Training set 和crossevalidation set 的学习曲线,你会发现学习越来越好,但是CV越差,这就是overfitting。所以要提前停止

第三个:也是针对第一个的一个进一步改进。

说到这里,我有种感觉就是:我们尽可能的是参数分布在一个限定区间内,这样网络具有一个超强的表达能力吧,其实我不懂,哈哈。

如果说有个别的数值太大,那么会带来一个问题,这个大数会抵消掉同层其他参数的贡献,反而会使网络的表达能力降低。所以我们把网络的数值全部限定为一个很小的数值,在做调节的时候全部只用正负号就可以了。(有待验证)

第四个:加入噪声其实包括在学习参数中、学习数据中、激活函数输出与输入,这里说的参数,我怎么感觉在数据中也可以带来相同的效果呢?因为这也是一种变相的增加数据量啊。


后面关于数据集的划分,很简单,不说

early stoping 里面说的利用很小的数值开始训练会减小NN的capacity,是站在这种情况下,近似于线性变换模型,所以表达能力差。

但是他带来了一个好处就是,网络可以快速调节参数,方向调节也方便等等好处。


后面的章节,在此基础上,基本上可以轻松的理解通。







注:

验证方法1:四层网络结构,输入层,隐含层1,隐含层2,输出层。输入层到隐含层1是手动指定参数层,剩下为supervised learning层。改变指定参数曾的权重,我们总能学出一个对应的网络。(对卷积神经网络的改进,卷基层可以指定卷积核,这里的核需要特殊的指定,具有特殊意义的核,在学习中不需要调整参数的)

0 0
原创粉丝点击