• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

(更新)2022年李宏毅机器学习学习笔记(二)


Recommended Posts

一、 General Guide——如何达到更好的效果

1. Training data 出现的问题

训练完模型一次后,根据训练集的损失测试集的损失,判断网络需要模型改进还是优化函数改进.

总体调整方向如下图所示:

4pvjhrdcr0j2561.png

如果你对模型的预测结果感到不满意,你首先要做的就是检查你的训练数据的丢失情况,看看你的模型是否在训练数据上被学习过,然后再看测试结果。如果你发现你的训练数据损失非常大,显然是在训练集中没有训练好。有两个可能的原因,第一个可能是Model Bias(模型偏差),第二个可能是Optimization Issue(优化问题).

Model Bias(模型偏差)

原因:的适用模型过于简单,无法使损失足够低(过于简单的模型无法准确描述复杂的问题)。

在所选模型组成的函数集中,不存在能使损失足够低的最优函数。

54bydy5ue0h2562.png

解决方案:调整了模型,让模型变复杂变得有弹性,使模型能包含更多的情况。

使模型复杂化的方法:

1、使用更多的特征作为自变量。

2、加深神经网络,用到更多的神经元和层数。

kszruao1hdx2563.png

Optimization Issue

原因:用Gradient descent求最优解时,可能会陷入局部极小。

gradient descent方法,没办法帮我们找出loss低的function,梯度下降法是解决一个最优化问题,找到 *然后就结束了。但是它给我的损失还不够低。这个模型组成的函数集中有某个函数,它的计算损失足够低,但是梯度下降找不到这个函数。

eidugan022y2564.png

如何区分上述两种情况?

ul>

遇到某一任务目标可以先跑一些比较小、比较浅的 network,或甚至用一些不是 deep learning 的方法(比较容易做Optimize的,避免出现优化失败的情况)

如果发现在这基础上增加复杂度后的层数深的 model 跟浅的 model 比起来,深的model明明弹性更大更复杂,但 Loss 却没有办法比浅的model压得更低,那就代表 optimization 有问题

 

2. Testing data 出现的问题

假设在 training data 的loss变小了之后,接下来可以来看 testing data loss,如果testing data loss也小,比strong baseline还要小,那训练就结束了。

xxfaaeowaks2565.png

 

 但是如果training data上面的loss小,testing data上的loss大,那可能就是真的遇到 overfitting 的问题。

 

 

Overfitting

表现形式:training的loss小,testing的loss大

极端情况进行解释原因:训练出的模型只是记住了训练集中的输入和输出的对应关系,对于未知的部分输出是一个随机的,这种情况下在训练集中的损失为0,测试集中的损失极高。

isbiaic0yyc2566.png

 

解决方式:

1. 增加训练集:可以使用data augmentation的方式进行数据扩充,例如图像中的旋转、放缩等操作(上下颠倒的操作很有可能会造成数据在真实世界中的无意义,所以很少用,要根据你对资料的特性,对你现在要处理的问题的理解来选择合适的data augmentation的方式)。

o4lljtojvdl2567.png

 

 

 2. 限制模型的弹性

1)给较少的参数:如果是deep learning的话,就给它比较少的神经元的数目。本来每层一千个神经元,改成一百个神经元之类的;或者是你可以让 model 共享参数,让一些参数有一样的数值。

 

 P.S.  fully-connected network(全连接网络)是一个比较有弹性的架构;而CNN(卷积神经网络)是一个比较有限制的架构,它是针对影像的特性,来限制模型的弹性。

            所以 fully-connected network 可以找出来的function所形成的集合,是比较大的;CNN 的 model 所找出来的 function,它形成的 function set 是比较小的,实际上都包含在fully-connected的network里面。但是就是因为CNN有比较大的限制,所以CNN在影像上反而会做得比较好。

 

2)使用较少的features

3)Early stopping:训练设置提前结束的条件。(另还有Regularization正则化的方式)

4)Dropout:将部分神经元进行禁用。

estgryvzrz22568.png

 

 

 

二、Bias-Complexity Trade-off——模型偏置与弹性

ymzuyyzolsa2569.png

 

 所谓比较复杂就是,它可以包含的function比较多,它的参数比较多,这个就是一个比较复杂的 model

随著model越来越复杂,Training 的 loss 可以越来越低,

当model越来越复杂的时候,刚开始,testing 的 loss 会跟著下降;但是当复杂的程度,超过某一个程度以后,Testing的loss就会突然暴增了

 

原因:

model 越来越复杂的时候,复杂到某一个程度,overfitting 的状况就会出现,所以在 training 的 loss 上面,可以得到比较好的结果;

但是在 Testing 的 loss 上面,会得到比较大的loss

因此我们需要设计一个 model ,既不是太复杂的,也不是太简单的,这个 model 刚好可以在训练集上给我们最好的结果(给我们最低的 loss)

 

① 如何选出有较低testing-loss的模型?⇒ Cross Validation(交叉验证)

 zbpvb2bnzbl2570.png

 

 

 方法:把Training的资料分成两半,一部分叫作 Training Set(训练集),一部分是Validation Set(验证集)

在这组数据里,有90%的资料放在 Training Set 里面,有10%的资料会被拿来做Validation Set。

在Training Set上训练出来的模型到 Validation Set 上面,衡量它们的 Loss 值,根据 Validation Set 计算出的数值从而挑选选用哪个模型,不要管在public testing set上的结果,避免overfiting

 

 

② 如何合理的分 training set 和 validation set —— N-fold Cross Validation(N-重交叉验证)

N-fold Cross Validation 具体步骤如下:

 

1.  先把训练集切成 N 等份,在上图例子里我们切成三等份。切完以后,拿其中一份当作 Validation Set另外两份当 Training Set,然后要重复三次

 

 

2.  将组合后的三个 model,相同环境下,在 Training data set 和 Validation data set 上面通通跑一次。然后把这每个 model 在这三类数据集的结果都平均起来,看看哪个 model 计算出的结果最好

 

 

如果你用这三个fold(层)得出来的结果是 model 1 最好,便把 model 1 用在它所划分的两组 Training Set 上,然后训练出来的模型再用在 Testing Set 上面

 

xrnvrp4vkgj2571.png

 

 

③ MisMatch —— 训练集跟测试集的分布是不一样的

 

在训练模型的过程,也可能会出现另一种形式的问题,称为mismatch。

 

mismatch产生的原因与overfitting不一样。一般的overfitting你可以用增加更多的数据集来克服,但是mismatch是指训练集跟测试集它们的分布是不一样的。即使再增加数据集也没有用,例如:training data set 和 test data set 选取了来源不同的数据集,用于成像、图像增强等的操作均不同,这样的实验是没有意义的。

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now