6.机器学习任务攻略
训练资料就是要拿来训练我们的model
训练过程(三个步骤):
-
先写出一个有未知数的function,这个未知数以后我们都用 θ 来代表一个model里面所有的未知函数
-
定义一个loss,loss是一个function,这个loss的输入是一组参数,去判断这一组参数好还是不好
-
解一个optimization的problem,你要去找一个 θ – 可以使loss的最小,最小的定义为θ*
把θ* 用在测试资料上,也就是把 θ*带入fθ(x) 中未知的参数
作业通关攻略
如果训练结果不满意,首先检查训练资料的loss
-
training loss大:有两种可能 a.model bias b. optimization
a. 可能是model 太简单,此时要重新设计model,给他更大的弹性
b. optimization gradient descent 不给力
怎么区分a b:可以通过比较不同的模型,在测试资料上56层的表现并没有20层的表现好,通过检查训练资料发现20层的network loss比较低,这就意味着56的network 的optimization没有做好。【原因:20层都可以做的很好了,56层的弹性一定比20层更大,56层可以轻松做到20层的network可以做到的事情(前20层参数一样,剩下36层什么都不做就可以了),所以如果56层的networkoptimization成功的话,它应该比20层的network可以得到更低的loss】
如何判断自己的optimization没有做好?
看到一个你从来没有做过的问题,可以跑一些比较小的、比较浅的network;或者甚至是用一些不是deep learning的方法,比如说linear model、supprot vector machine。
-
training loss 小:
检查测试资料的loss:
testing loss 小:结束
testing loss大 :可能是 over fitting 或是mismatch
over fitting的原因:
举例:根据训练资料,某一个很费的machine learning的方法找出了一个一无是处的function:如果x有出现在训练资料里面就把他对应的 y 当做输出,如果x没有出现在训练资料里面那就随机输出一个值,但这个function在训练资料上的loss是零,但在testing上他的loss会变得很大
解决overfitting的方向:
a. 增加训练资料 (比如 data augmentation)
b. 给模型一些限制
* 减少参数、神经元数
* 用较少的features
* Early stopping
* Regularization
* Dropout
注:当model越来越复杂的时候,超过某一程度时testing loss就会突然暴增,overfitting的状况就会出现。