下图所说的testing data 不是真正的testing data, 而是我们已经labeled 数据,是validation set
产生的问题
如果在training data得到了好的结果,在testing data上没有得到好的结果 一般我们认为这是产生了 overfitting
但是,得到的结果不好并不一定总是overfitting。
这就是deep learning 和其他机器学习算法的不同,其他的例如决策树、svm等如果设计的好,可以得到的结果也是比较好的,但是deep learning确不一定这样。
采取方法
目前有些方法可以去优化training data 和 testing data的performance,但是当你在做一个deep learning的时候,你要搞清楚你的目标到底是想要让training data的结果变得更好地还是想让testing data 的结果变得更好?
所以在apply优化方法的时候,一定要搞清楚,该方法到底是针对training set还是针对testing set的!!!
例如比较有名的方法, dropout
他是为了要让testing set 的performance变好,但是你用到training set上面train 出结果,然后再用到testing set上,那只会让testing set 的performance变得更差!
有哪些近年来提出的比较好的技术来得到更好地performance呢?我们接下来看看
A training set
1. new activation function
换激活函数,比如之前用sigmoid function, 后来发现在很多问题上他的效果并不好,所以后面出现了各种relu和relu的变种
以下是sigmoid 作为激活函数在手写数字辨识中的测试结果:
可以看到, 如果层数越深那么效果越不好,但是这并不是因为overfitting了,这是在training set得到的结果。