在推荐系统实践中,我们往往会遇到一个问题:线下AUC提升并不能带来线上效果提升,这个问题在推荐系统迭代的后期往往会更加普遍。
在排除了低级失误bug以后,造成这个问题可能有下面几点原因:
样本
- 线下评测基于历史出现样本,而线上测试存在新样本。因此线下AUC提升可能只是在历史出现样本上有提升,但是对于线上新样本可能并没有效果。
- 历史数据本身由老模型产生,本身也是存在偏置的。
- 包含时间相关特征,存在特征穿越。
在推荐系统实践中,我们往往会遇到一个问题:线下AUC提升并不能带来线上效果提升,这个问题在推荐系统迭代的后期往往会更加普遍。
在排除了低级失误bug以后,造成这个问题可能有下面几点原因:
样本
Yan Shao and Christian Hardmeier and Jorg Tiedemann and Joakim Nivre
Bi-RNN-CRF,分词,词性标注,汉字embedding
Theano是最老牌的深度学习库之一。它灵活的特点使其非常适合学术研究和快速实验,但是它难以调试的问题也遭到过无数吐槽。其实Theano本身提供了很多辅助调试的手段,下面就介绍一些Theano的调试技巧,让Theano调试不再难。而关于深度学习的通用调试技巧,请参见我之前的文章:[深度学习调参技巧]。
以下的技巧和代码均在Theano 0.8.2 上测试通过,不保证在更低的版本上也可以适用。
Theano的网络在出错的时候,往往会提供一些出错信息。但是出错信息往往非常模糊,让人难以直接看出具体是哪一行代码出现了问题。大家看下面的例子:
之前曾经写过一篇文章,讲了一些深度学习训练的技巧,其中包含了部分调参心得:深度学习训练心得。不过由于一般深度学习实验,相比普通机器学习任务,时间较长,因此调参技巧就显得尤为重要。同时个人实践中,又有一些新的调参心得,因此这里单独写一篇文章,谈一下自己对深度学习调参的理解,大家如果有其他技巧,也欢迎多多交流。
由于深度学习实验超参众多,代码风格良好的实验环境,可以让你的人工或者自动调参更加省力,有以下几点可能需要注意:
下面几种方式,随便选一个,结果基本都差不多。但是一定要做。否则可能会减慢收敛速度,影响收敛结果,甚至造成Nan等一系列问题。
n_in为网络的输入大小,n_out为网络的输出大小,n为n_in或(n_in+n_out)*0.5
Xavier初始法论文:http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
He初始化论文:https://arxiv.org/abs/1502.01852
uniform均匀分布初始化:
w = np.random.uniform(low=-scale, high=scale, size=[n_in,n_out])
normal高斯分布初始化:
w = np.random.randn(n_in,n_out) * stdev # stdev为高斯分布的标准差,均值设为0
svd初始化:对RNN有比较好的效果。参考论文:https://arxiv.org/abs/1312.6120
使用word2vec工具在外部大规模语料上训练得到的向量,可以有效的辅助深度学习模型训练,提高结果。但是实际使用的时候,有很多方式可供选择。