1.疑惑
不知道大家有没有这样的问题,我最开始接触深度学习,跑过很多项目,发现基本只有训练集和测试集,后来才发现还有验证集,就去搜索,看了很多,基本上都说,验证集是用来调整超参数的。
2.不解
我当时真的很不理解,难道测试集不能调整超参数吗,而且在eval模式下,都冻结权重了,验证集和测试集有啥区别呢,都不会影响权重吧
3.寻知
其实他们说的对,但没回答到点上,验证集确实是用来干那个的,但测试集也能,因此就会误导初学者
4.解答
本质原因是,如果我没有验证集,即使使用测试集的时候不会调整权重,但我会根据测试集的结果进行调整超参数,最终模型是针对测试集优化的了,结果也只是对测试集考察,而不是一个泛化能力的结果。因此,测试集只有在模型都训练好了之后才能测试,且只用测试一次。
再或者这样想,如果没有验证集,每轮都用测试集,每轮训练,发现测试集效果不佳,我调一下超参,慢慢的,发现测试集的指标上去了,那这结果的意义在哪呢?
就像你是个工匠,打造了一把武器,锻造完就测试,砍ABCD,有问题就重新锻造,反复迭代,砍ABCD真挺牛的,号称这把武器100分,卖给了勇士,勇士出村子之后接触到的是EFG,发现武器不那么牛,就去质问工匠,你不是号称啥都能砍吗,工匠意识到,它是针对ABCD优化的武器,可世界上有ABCD至无穷种,后来用ABCD作为验证集,之后打造完用EFG作为测试集,以这个EFG的结果作为这把武器的评估标准。勇士拿到的新的评估标准的武器,跟工匠说,不是搞机器学习的工匠不是好工匠。
我们做的是深度学习,是不是为了泛化能力,我们是造物主,造出了一个模型,它要面对的是千变万化,无边无际的世界的对吧,我们不是针对有限的情况去分析的,如果是,那就不需要深度学习了。面对无限的世界,我们没法穷尽,所以只能去这世界的一小块作为代表,用我们的模型去测试这一小块,之后告诉世人,我们的模型能否经受住现实的考验。这样的结果才是有价值的结果。
有些学者,那测试集当验证集用,得出一个乐观的结果,那是不可取的。
与回答无关 5.自省
写这篇博客,我感觉自己非常狂妄,我是大数据专业,但研究方向一直都是深度学习,所以没怎么静下心来好好读书,这些内容可能就写在课本上,导致一个很基础的知识,被我学的乱七八糟,最后走了很多弯路学会了,以为自己挺厉害。这样的选择导致现在科研处处碰壁,也没有办法,科研的路是一条很曲折的路,所以我,菜,就多练