关于过拟合、局部最小值、以及Poor Generalization的思考

Poor Generalization

这可能是实际中遇到的最多问题。

比如FC网络为什么效果比CNN差那么多啊,是不是陷入局部最小值啊?是不是过拟合啊?是不是欠拟合啊?

在操场跑步的时候,又从SVM角度思考了一下,我认为Poor Generalization属于过拟合范畴。

与我的论文 [深度神经网络在面部情感分析系统中的应用与改良] 的观点一致。

SVM

ImageNet 2012上出现了一个经典虐杀场景。见[知乎专栏]

里面有一段这么说道:

当时,大多数的研究小组还都在用传统computer vision算法的时候,多伦多大学的Hinton祭出deep net这样一个大杀器。差距是这样的:

第一名Deepnet的错误率是0.16422
第二名日本东京大学的错误率是0.2617
第三名牛津大学的错误率是0.2679

除了Hinton组是用CNN之外,第二第三都是经典的SIFT+SVM的分离模型。

按照某些民科的观点,SVM是宇宙无敌的模型,结构风险最小化,全局最小值,那么为什么要绑个SIFT?

众所周知,SIFT是CV里最优良的Hand-Made特征,为什么需要这样的特征?

因为它是一种Encoding,复杂的图像经过它的Encoding之后,有一些很明显的性质(比如各种不变性)就会暴露出来。

经过Encoding的数据,分类起来是非常容易的。这也是模式识别的经典模式:先特征提取、再分类识别。


Question:如果用裸SVM跑ImageNet会怎么样?

My Answer:SVM的支持向量集会十分庞大。比如有10000个数据,那么就会有10000个支持向量。

SVM不同于NN的一个关键点就是,它的支持向量是动态的,虽然它等效于NN的隐层神经元,但是它服从结构风险最小化。

结构风险最小化会根据数据,动态算出需求最少的神经元(或者说是隐变量[Latent Variable])。

如果SVM本身很难去切分Hard数据,那么很显然支持向量会增多,因为[Train Criterion] 会认为这是明显的欠拟合。

欠拟合情况下,增加隐变量,增大VC维,是不违背结构风险最小化的。

极限最坏情况就是,对每个点,拟合一个值,这样会导致最后的VC维无比庞大,但仍然满足结构风险最小化。图示如下:

之所以要调大VC维,是因为数据太紧密。

如果吃不下一个数据,那么找局部距离的时候,就会总是产生错误的结果。

尽管已经很大了,但是仍然需要更大,最好是每个点各占一个维度,这样100%不会分错。

这会导致另外一个情况发生:过拟合,以及维数灾难:


维数灾难:

在Test Phase,由于参数空间十分庞大,测试数据只要与训练数据有稍微变化,很容易发生误判。

原因是训练数据在参数空间里拟合得过于离散,在做最近局部距离评估时,误差很大。

这个例子我曾经碰到。我的导师拿了科大讯飞语音引擎转化的数据来训练SVM。

Train Error很美,Test Error惨不忍睹,他当时和我说,SVM过拟合好严重,让我换个模型试试。

后来我换了CNN和FC,效果也差不多。

从Bayesian Learning观点来讲,Model本身拥有的Prior并不能摸清训练数据Distribution。

这时候,无论你是SVM还是CNN,都是回天无力的。

NN

再来看一个NN的例子,我在[深度神经网络以及Pre-Training的理解]一文的最后,用了一个神奇的表格:

[FC]

负似然函数 1.69 1.55 1.49 1.44 1.32 1.25 1.16 1.07 1.05 1.00
验证集错误率 55% 53% 52% 51% 49% 48%
49%

49% 49% 49%

[CNN]

负似然函数 1.87 1.45 1.25 1.15 1.05 0.98 0.94 0.89 0.7 0.63
验证集错误率 55% 50% 44% 43% 38% 37%
35%

34% 32% 31%

当初只是想说明:FC网络的Generalization能力真是比CNN差太多。

但现在回顾一下,其实还有有趣的地方。

I、先看FC的Epoch情况,可以看到,后期的Train Likelihood进度缓慢,甚至基本不动。

此时并不能准确判断,到底是欠拟合还是陷入到局部最小值。

但,我们有一点可以肯定,增大FC网络的规模,应该是可以让Train Likelihood变低的。

起码在这点上,应该与SVM做一个同步,就算是过拟合,也要让Train Likelihood更好看。

II、相同Train Likelihood下,CNN的Test Error要低很多。

如果将两个模型看成是等效的规模(实际上CNN的规模要比FC低很多),此时FC网络可以直接被判为过拟合的。

这点需要转换参照物的坐标系,将CNN看作是静止的,将FC网络看作是运动的,那么FC网络Test Error就呈倒退状态。

与过拟合的情况非常类似。

综合(I)(II),个人认为,从相对运动角度,Poor Generalization也可以看作是一种过拟合。

(II)本身就很糟了,如果遇到(I)的情况,那么盲目扩张网络只会变本加厉。

这是为什么SVM过拟合非常可怕的原因,[知乎:为什么svm不会过拟合?]

时间: 2024-10-14 12:10:18

关于过拟合、局部最小值、以及Poor Generalization的思考的相关文章

【noip模拟】局部最小值

TimeLimit: 1000ms               MemoryLimit: 256MB Description 有一个n行m列的整数矩阵,其中1到n×m之间的每个整数恰好出现一次.如果一个格子比所有相邻格子(相邻是指有公共边或公共顶点)都小,我们说这个格子是局部极小值. 给出所有局部极小值的位置,你的任务是判断有多少个可能的矩阵. Input 输入第一行包含两个整数n和m(1<=n<=4, 1<=m<=7),即行数和列数.以下n行每行m个字符,其中“X”表示局部极小值

[nowCoder] 局部最小值位置

定义局部最小的概念.arr长度为1时,arr[0]是局部最小.arr的长度为N(N>1)时,如果arr[0]<arr[1],那么arr[0]是局部最小:如果arr[N-1]<arr[N-2],那么arr[N-1]是局部最小:如果0<i<N-1,既有arr[i]<arr[i-1]又有arr[i]<arr[i+1],那么arr[i]是局部最小.给定无序数组arr,已知arr中任意两个相邻的数都不相等,写一个函数,只需返回arr中任意一个局部最小出现的位置即可. 分析:

局部最小值位置

定义局部最小的概念.arr长度为1时,arr[0]是局部最小.arr的长度为N(N>1)时,如果arr[0]<arr[1],那么arr[0]是局部最小:如果arr[N-1]<arr[N-2],那么arr[N-1]是局部最小:如果0<i<N-1,既有arr[i]<arr[i-1]又有arr[i]<arr[i+1],那么arr[i]是局部最小.给定无序数组arr,已知arr中任意两个相邻的数都不相等,写一个函数,只需返回arr中任意一个局部最小出现的位置即可. 分析:

BZOJ #2669 \ CQOI 2012 局部最小值

题目描述: 在一个N * M的矩阵中填入1 ~ N * M的数,并限制一些位置为周围9个格中最小的,而其它位置不能满足这个条件. 解题思路: 考虑dp,F[i][s]表示填了前i个数,限制位置的填数状态为s,cnt[s]表示限制位置的状态为s时,可以填数的位置+限制位置已填数的数量. 那么 F[i][s] = F[i - 1][s] * (cnt[s] - i + 1) + ∑p∈s F[i - 1][s - p]. 但这样会忽略一些非限制的点满足了限制条件的情况.那我们就dfs把一些非限制点当

16 On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima 1609.04836v1

Nitish Shirish Keskar, Dheevatsa Mudigere, Jorge Nocedal, Mikhail Smelyanskiy, Ping Tak Peter Tang Northwestern University & Intel code: https://github.com/keskarnitish/large-batch-training * SGD及其变种在batch size增大的时候会有泛化能力的明显下降 generalization drop/deg

Mathematica 中 Minimize函数无法找到全局最小值时的解决方法

一直使用Minimize来找到指定约束下的函数的最小值,最近发现在一个非线性函数中使用Minimize无法提供一个"全局"最小值(使用Mathematica只是用来验证算法的,所以无论用什么方法,只希望能找到全局最小值,而不管其效率).最终在帮助文档中发现如下说明: 另外找到NMinimize函数,发现其有更仔细的说明: 根据说明,如果函数f是非线性的,很可能获得一个局部最小值,但是该方法有选项可以设置: 在这里将Method设置为一个其他值可能会得到全局最优解. 在此记录.

梯度下降、过拟合和归一化

好的课程应该分享给更多人:人工智能视频列表-尚学堂,点开任意一个之后会发现他们会提供系列课程整合到一起的百度网盘下载地址,包括视频+代码+资料,免费的优质资源.当然,现在共享非常多,各种mooc.博客.论坛等,很容易就可以找到各种各样的知识,能走到哪一步,都在我们自己.希望我能够一直坚持下去,加油! 梯度下降法 看这个吧,简书上的:深入浅出--梯度下降法及其实现 批量梯度下降 ·初始化W,即随机W,给初值 · 沿着负梯度方向迭代,更新后的W使得损失函数J(w)更小 · 如果W维度是几百维度,直接

局部最优怎么办?

1.使用模拟退火算法SA(Simulate Anneal) 贪心算法是,在求最优解时,从a点开始试探,如果函数值继续减少,那么试探过程继续,到达b点时,试探过程结束(因为无论朝哪个方向努力,结果只会越来越大),因此找到了局部最优b点. 模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解.这个概率随着时间推移逐渐降低(逐渐降低才能趋向稳定). 过程: 若f( Y(i+1) ) <= f( Y(i) ) (即移动后得到更优解),则总是接受该移动:

深层神经网络结构及可能存在的致命问题详解

Logistic回归.传统多层神经网络 1.1 线性回归.线性神经网络.Logistic/Softmax回归 线性回归是用于数据拟合的常规手段,其任务是优化目标函数:h(θ)=θ+θ1x1+θ2x2+....θnxnhθθθ1x1θ2x2θnxn 线性回归的求解法通常为两种: ①解优化多元一次方程(矩阵)的传统方法,在数值分析里通常被称作"最小二乘法",公式θ=(XTX)?1XTYθXTX1XTY ②迭代法:有一阶导数(梯度下降)优化法.二阶导数(牛顿法). 方程解法局限性较大,通常只