机器学习中使用的神经网络第九讲笔记

Geoffery Hinton教授的Neuron Networks for Machine Learning的第八讲为可选部分,好像很难,这里就先跳过了,以后有用的时候再回来补。第九讲介绍了如何避免过拟合,提高模型的泛化能力。

这是Cousera上的课程链接

Overview of ways to improve generalization

这一小节,我们介绍如何在网络有过多能力处理过多容量的训练数据集时,如何通过降低过拟合来提高网络模型的泛化能力。下面将介绍几种控制网络容量的方法,以及如何设置度量参数。下图回顾了什么是过拟合(overfitting),由于是以前讲过的东西,这里只贴截图,不再文字叙述。

下图列出了防止过拟合的四种方法,其中第二种方法——适当调节网络的能力(regulate the capacity appropriately)——会在本讲中重点展开,而后面的两种会在以后的课程中介绍。

我们通常通过以下四种方式或它们的组合来实现对网络能力的控制。

  • Architecture: Limit the number of hidden layers and the number of units per layer.
  • Early stopping: Start with small weights and stop the learning before it overfits.
  • Weight-decay: Penalize large weights using penalties or constraints on their squared values (L2 penalty) or absolute values (L1 penalty).
  • Noise: Add noise to the weights or the activities.

在使用这些方法时,我们需要设置一些元参数(meta parameters),如隐含单元的数量、层数、惩罚权重等。我们可能会用一些可能的值来设置元参数,然后通过测试数据集筛选出最好的那组参数。但这种方法得来的参数具有对测试集的针对性,再换一组测试数据集可能性能就不佳了。例如一个极端的例子:假设有一个测试数据集,其中的输出都不是通过输入得来的,而是随机标记的。那么由此测试集筛选得来的元参数肯定是经不起别的测试集的检验的。

一个更好的方法是将整个数据集分成训练集、验证集、测试集三部分,训练集用来训练模型的参数,验证集用来筛选出性能最好的参数,测试集用来得到模型性能的无偏估计。这个模型性能的无偏估计肯定比验证集上的性能要低,原因同上面试一个道理。为了尽可能降低模型过拟合验证集的可能性,我们将整个数据集分成同等大小的N+1份,一份作最终的测试集,另外N份(记为S1到SN)用来作训练集和验证集:每次选择其中一份作验证集Si,其余N-1份作训练集,然后计算出在验证集上的错误率Ei。这里Si从S1遍历到SN,从而得到N个错误率,然后以这N个错误率的平均为衡量指标来选择参数,再用最终的测试集得到模型性能的无偏估计。这个方法称之为N-fold交叉验证(N-fold Cross Validation),我的叙述不是特别清楚,这里给出一个链接:交叉验证简介

需要注意的是,N-fold交叉验证得到的N个估计(就是错误率)不是相互独立的。一个很极端的例子是,如果恰巧有一个子集里边都只包含一种类别的数据,那无论该子集做训练集还是验证集,最终的结果其泛化能力肯定很差。

对于大规模的数据集和大的模型,反复训练拥有不同元参数的模型其代价是极其高昂的。代价低的一种做法是,训练之初设置比较小的参数,然后随着模型的训练逐渐增大参数,直至模型在交叉验证集的表现开始变坏。但是如何衡量表现开始变坏是很困难的,所以我们可以在确定表现已经变坏了之后停止训练,然后再返回去找出表现最好的那个点。

Hinton还说,由于权值没有时间增大,模型的capacity被限制住了。下面解释小的权重能够限制capacity的原因。

考虑入下图所示的一个神经网络,即时隐含单元使用逻辑单元,小的权值参数会使得这些单元的输入很接近零,那输出也就落在了逻辑曲线中间的接近线性的那一段上。也就是说,晓得权值参数使得逻辑隐含单元的表现很像线性单元,那整个网络也就很接近一个将输入直接映射到输出的线性神经网络。随着权值参数的增大,隐含单元恢复了逻辑单元的capacity,模型对训练集的拟合能力开始逐渐增强。而最终得到的模型对验证集的拟合程度先增大后减小,当拟合程度开始减小的时候应该就是停止训练的时候。

Limiting the size of the weights

这一小节介绍通过通过限制权值的size来控制网络的capacity,标准的方法是引入一个惩罚项来防止权值变得过大。伴随着一些隐含的假设存在,有着小权值的神经网络要比大权值的简单很多。我们可以使用几种不同的方法来限制权值的size,使得传入隐含单元的权值向量不会超过某个确定的长度。

标准的方法是使用L2权值惩罚项来限制权值的size,其是指在损失函数上加上权值的平方作为惩罚项。在神经网络中,L2有时被称之为权值衰减,因为该惩罚项的导数一直限制着权值变大。下图给出了损失函数的公式,其中权值平方和的系数λ称之为权值损失(weight cost),其决定的惩罚的强弱。下图中给出了当损失函数导数为零时权值的取值,该取值其实就是权值可以取得最大值。(再大的话,损失函数又开始上升了)

下图列出了L2权值损失的作用。

下图给出了L1权值惩罚项,该惩罚项是权值的绝对值,图像是V形的,见下图。L1权值惩罚项一个很好的作用是使得很多权值接近于零,方便我们理解神经网络中到底发生了什么(我们只需要注意少数几个不接近零的权值即可)。有时我们还会使用使某几个权值一直取较大值的惩罚项。

除了引入权值惩罚项,我们还可以引入权值约束,例如对每一单元的输入权值向量,我们可以约束其平方和的最大值不得超过某一个上限。下图列举了权值约束的优点。

Using noise as a regularizer

这一小节介绍另一种限制网络capacity的方法——使用噪声正则化(using noise as regularizer)。我们可以将噪声添加到权值上或者activities(也就是单元)上,从而达到限制网络capacity的目的,防止出现过拟合。

假设我们在输入中加入高斯噪声(Gaussian noise),那么在进入下一层之前噪声的方差已经被平方权值放大。如下图所示,在一个简单的网络中,输出与输入线性相关,被放大的噪声也被添加到了输出中,同时也就影响了(增大了)平方误差。所以当输入有噪声的时候,最小化平方误差其实也是在最小化权值的平方和。

下图给出了一个数学推导,不过想不明白这里为什么把平方和展开式的中间项省掉了。根据推导,我们可以看到在输入中添加噪声实际上就等同于添加了一个权值惩罚项。

在更复杂的网络中对权值添加高斯噪声,虽不完全等同于添加权值惩罚项,但表现更好,尤其是在循环神经网络中。Alex Grave在其用于手写识别的循环神经网络中加入了噪声,结果证明性能有明显改善。

我们还可以在activities中使用噪声来作为正则化(using noise in the activities as a regularizer)。大概意思是说,对于使用逻辑函数的隐含单元,其输出肯定介于0和1之间,现在我们在前向中用一个二进制函数来代替隐含单元中的逻辑函数,随机的输出0或者1,计算出输出。然后在反向中,我们再使用正确的方法去做修正。由此得来的模型可能在训练集上的表现变差,且训练速度变慢,但其在测试集上的表现有着显著提高。

Introduction to the full Bayesian

这一小节我们通过一个简单的投硬币的例子,来介绍贝叶斯方法(bayesian approach)。贝叶斯方法的主要思想不是直接去寻找模型最可能的参数设置,而是考虑所有可能的参数设置,并根据已有数据来得出每种参数设置的可能性有多大。下图给出了贝叶斯框架:

这里用抛硬币的例子来介绍贝叶斯方法。

先发上来,剩下的部分明天再更吧

The Bayesian interpretation of weight decay

MacKay’s quick and dirty method of setting weight costs

时间: 2024-07-30 13:38:36

机器学习中使用的神经网络第九讲笔记的相关文章

机器学习中使用的神经网络第五讲笔记

Geoffery Hinton教授的Neuron Networks for Machine Learning的第五讲主要介绍物体识别问题的难点及克服这些难点的方法,重点介绍了数字识别和物体识别中使用的卷积网络. Why object recognition is difficult 我们知道识别真实场景中的物体是很困难的,这一小节我们来介绍造成这些困难的一些东西. Segmentation: 在一个图像中,我们很难将其中的一个物体与其他的物体分隔开.在现实生活中,我们人类有两只眼睛且我们身体可以

机器学习中使用的神经网络(七)

A geometrical view of perceptron 感知器的几何视图 Weight-space 权值空间 在这个空间中,每一个感知器中的权值都表示一维,而空间中的一点则代表了所有权值的特定集合,假设消除阈值,则每个训练样本都可以看做通过起点的超平面.So, points in the space correspond to weight vectors and training cases correspond to planes. 也就是说,空间中的点对应权值向量,超平面则对应训

机器学习中使用的神经网络第六讲笔记

Geoffery Hinton教授的Neuron Networks for Machine Learning的第六讲介绍了随机梯度下降法(SGD),并且介绍了加快学习速度的动量方法(the momentum method).针对网络中每一个连接的自适应学习步长(adaptive learning rates for each connection)和RMSProp算法. 这几个算法的难度很大,需要反复推理思考,并在实践中摸索以加深理解. Overview of mini-batch gradie

机器学习中使用的神经网络第四讲笔记

Geoffery Hinton教授的Neuron Networks for Machine Learning的第四讲主要介绍如何使用back propagation算法来学习到词汇的特征表示. Learning to predict the next word 接下来的几小节主要介绍如何使用back propagation算法来学习到词汇的特征表示.我们从一个很简单的例子开始,介绍使用back propagation算法来将词汇间的相关信息转换成特征向量. 下图给出了一个家庭的树状图,我们要做的

机器学习中使用的神经网络第十讲笔记

Geoffery Hinton教授的Neuron Networks for Machine Learning的第十讲介绍了如何combine模型,并进一步从实际应用的角度介绍了完全贝叶斯方法. Why it helps to combine models 这一小节,我们讨论在做预测时为什么要结合许多模型.使用多个模型可以在拟合真正的规则和拟合样本错误之间做一个很好的折中. 我们已经知道,当训练数据比较少时容易出现过拟合,如果我们平均一下许多不同模型的预测,那我们就可以降低过拟合的程度.对于回归来

机器学习中使用的神经网络第七讲

这一节主要介绍了RNN和LSTM. Modeling sequences: A brief overview 在这一小节,我们将对应用于序列(sequences)的不同类型的模型做一个概括.我们从最简单的模型--ultra aggressive models(该模型尝试根据前一个序列(term or sequence)去预测下一个序列)开始,接着再讨论该模型使用了隐含层的复杂变形,然后再介绍更多有着hidden state和hidden dynamics的模型(这其中包含了linear dyna

机器学习中使用的神经网络(一)

本系列博客根据Geoffrey Hinton课程Neural Network for Machine Learning总结. 课程网址为: https://www.coursera.org/course/neuralnets 1.Some examples of tasks best solved by learning 机器学习最适用的领域举例 - Recognizing patterns: 模式识别– Objects in real scenes 物体识别 – Facial identiti

机器学习中使用的神经网络(四)

机器学习的一个简单例子 It is a very simple kind of NeuralNet and it is gonna be learning to recognize digits and you gonna be able to see how the weights  evolved as we run a very simple learning algorithm. A very simple learning algorithm for traing a very sim

机器学习中使用的神经网络(六) --第二课

An overview of the main types of neural network architecture 神经网络结构的主要类型 什么是神经网络的结构? 神经网络中神经元的组织方式. 1. 目前应用领域中最常用的结构类型是feet-forward 神经网络, 信息来自输入单元,并且以一个方向流动,通过隐含层,直到所有信息到达输出单元. 2 .一种非常有趣的结构类型是recurrent神经网络,information can flow round in cycles. 这种网络能够