深度学习调参有哪些技巧?
做新模型的时候,最开始不要加激活函数,不要加batchnorm,不要加dropout,先就纯模型。然后再一步一步的实验,不要过于信赖经典的模型结构(除非它是预训练的),比如加了dropout一定会有效果,或者加了batchnorm一定会有提升所以先加上,首先你要确定你的模型处于什么阶段,到底是欠拟合还是过拟合,然后再确定解决手段。
如果是欠拟合,直接模型宽度深度增加,一般2倍递增或者数据集增强,特别在nlp领域可以用大量数据增强方式-比如,同义词替换,随机抛弃词语,句子改写,句子转译等。这些方法都试过可以,考虑增加relu,mish等作为某些层的激活函数不过在此做之前建议最好把每一层的参数打印出来,看是否符合正态分布,一般来说relu可能有奇效,but最后一层千万不要relu,因为relu可能把很多数值都干为0,所以使用relu需要慎重,如果效果严重下降,建议看看relu的参数分布。
如果过拟合,首先是dropout,然后batchnorm,过拟合越严重dropout+bn加的地方就越多,有些直接对embedding层加,有奇效。
对于数据量巨大的推荐系统的模型来说一个epoch足矣,再多就会过拟合。
做召回的同学,不要迷信专家们说的embedding做l2 norm,笔者就踩过这个坑,直接对embedding l2结果效果贼垃圾,查了半天,直接去掉l2,效果正常了。
做推荐的同学,一般特征不要直接全怼进去,最好是一个一个的加特征进行效果测试,因为有些特征可能导致模型过拟合,最好还是一个一个加
学习率最好是从高到底2倍速度递减一般从0.01开始。
对于稀疏特征多的模型采用adagrad,稠密特征多的模型用adam
召回负采样负样本效果肯定高于曝光未点击负样本
粗排用精排后topk做负样本,基本是有效果的
batch size对于推荐来说32-64-128-512测试效果再高一般也不会正向了,再低训练太慢了。
对于负样本太多的数据集,测试集的loss降并不代表没有过拟合,试试看看f1或者auc有没有降低,因为有可能负样本学的爆好,所以loss降低,但是正样本凉了
对于长文本来说longformer的效果高于各种bert变体
对于图像和nlp,效果一直不提高,可以尝试自己标注一些模型经常分错的case,然后加入训练会有奇效。
对于推荐序列来说pooling和attention的效果差别真的不大,基本没有diff
对于推荐来说senet和lhuc,是深度学习领域为数不多的可以观察特征重要性的模型结构
一般不要尝试用强化学习优化,因为真的很费力气,而且效果很一般
bert不要太过于相信cls的embedding能力,还是要看看它有没有做过相关任务,特别对于文本匹配场景
序列特征才用layernorm,正常用batchnorm。
推荐召回用softmax效果比sigmoid更好,意思就是召回更适合对比学习那种listwise学习方式。
蓝海大脑 京ICP备18017748号-1