深度学习_09_1_过拟合与欠拟合&交叉验证

09_1_过拟合与欠拟合&交叉验证

过拟合与欠拟合

数据真实模态(数据真实分布) P r ( θ ) Pr(\theta) Pr(θ),r表示real

Scenario1: house price

横坐标是面积,纵坐标是价格。

根据数据图和人的经验来说,房价基本上是线性模型,因为房价=面积*倍数+偏置。

在这里插入图片描述

Scenario2: GPA

非线性模型,但是可以看出应该属于高斯分布(正态分布)

在这里插入图片描述

The ground-truth distribution?(是事实的分布类型?)

  • 在我们知道分布的类型(风格),只需要预估分布的参数的时候,这时候会非常简单。
  • 但是现实情况往往不知道分布的类型。

在不知道分布类型的时候,该如何解决?

Another factor: noise(噪声)

我们不仅仅不知道分类的类型,还会有观察的误差。比如即使知道的房子的面积和价格,房子的价格受其他因素影响,比如房子的测量误差、房价的取舍误差、顾客类型……

把误差合并在同一个因子上,noise(误差), ϵ \epsilon ϵ。抽象它符合某个分布,比如均值分布N(0.01,1)。

数据少的话,噪声的随机性比较大,所以需要更多的数据。

而且数据少,可能也难以看出它分布的类型,是线性模型还是二次 w x 2 + b x + c wx^2+bx+c wx2+bx+c去模拟。

在这里插入图片描述

Let’s assume(对模型本身度量)

用模型学习数据分布的时候,优先选择不同类型的模型。比如对多项式来说,可能会使用常数的模型,也有可能一次方、二次方……那么不同次方的模型,它的抖动越大,波形越复杂。

在这里插入图片描述

Mismatch: ground-truth VS estimated

  • model capacity 模型能力(容量、搜索空间)

对于常数来说,学习能力很弱,能学习的pattern非常少;当次方增加的时候,网络的表达能力更强,表达的分布情况可以更复杂,对于非常复杂的映射也能很好的学习到,这时可以说模型的表达能力变强了。

在这里插入图片描述

Model Capacity

模型越复杂,参数越大,类似多项式次数越高,表达能力越强,能抽象出更高维的特征,做更高维的类比。

在这里插入图片描述

Case1: Estimated < Ground-truth

情况1:用的模型的表达能力<真实模型的复杂度。

under-fitting

在这里插入图片描述

For example: WGAN

在这里插入图片描述

Underfitting

train的acc和loss不令人满意,acc和loss线之间的面积为underfitting

test的acc和loss也会差

->需要增加模型复杂度:更多层数;每一层单元数量增加

在这里插入图片描述

Case2: Ground-truth < Estimated

过分地把噪声也包含进来了。

使用模型的复杂度>真实的复杂度

over-fitting

这种情况,会使得training情况特别好,但是test不一定好

在这里插入图片描述

Overfitting

train很好,test不好

-> Generalization Performance 泛化能力 变差

在这里插入图片描述

总结

在这里插入图片描述

Overfitting!

现实情况更多是Overfitting,因为现在计算机能力很强。

在有限数据的情况下,会出现Overfitting,否则数据无限则不会出现Overfitting

目前有两个问题:

  1. how to detect 怎么检测Overfitting
  2. how to reduce 怎么减少Overfitting

交叉验证

检测是否Overfitting。

Recap

在这里插入图片描述

How to detect 如何检测

在这里插入图片描述

Splitting

Train效果好而Test效果不好则Overfitting

在这里插入图片描述

Train, Test

装载train和test数据,目前validation和test是一个含义

在这里插入图片描述

Splitting

实际上有3个划分。train部分内部再划分1个validation。

val部分做模型参数的挑选,test部分做最后的性能的检测。

在这里插入图片描述

Train, val, test

代码2种划分成3种。

在这里插入图片描述

Evaluate during train

network.fit(db_train,epochs=5,validation_data=db_val,validation_freq=2)中,例如epoch为1k(for epoch in range(1K))。并不是1K才停止,如果效果够好了,就可以中间跳过。validation就是这个功能,可能第600个epoch就停止,因为600的performance最好,之后performance会下降。一般freq设置为10~25个。validation是用来挑选模型的状态(参数)。

在这里插入图片描述

Test after training

最后1步为测试:使用db_test

在这里插入图片描述

train test trade-off

过拟合,泛化能力变差。在check point就停止上交应用。

在这里插入图片描述

For others judge

  • Train, Val, Test Set

Train:更新参数。

Val:挑选模型参数,在某个时间点停止。

Test:客户测验。

在这里插入图片描述

K-fold cross-validation

在下图,只有10K没有更新参数的作用。因此,可以随机地切割,再分为train和validation。可以防止参数有记忆的特性,也充分利用了数据。

在这里插入图片描述

k-fold cross validation

把training的数据划分成N份,每次取 N − 1 N \frac{N-1}{N} NN1做训练,另外1分做validation。

在这里插入图片描述

代码实现

每次epoch都会对train部分做划分,train/validation

使用相同的种子,做random和shuffle,对60K的随机数下标打散,分成xy_train和xy_val。下次epoch会自动重新随机。

在这里插入图片描述

Keras代码:

db_train_val总的60K数据(还未分割),设定validation_split做0.9:0.1的比例动态切割。

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值