摘要: 本贴讨论实验效果不好的应对措施.
讲道理, 论文写作本身只涉及包装, 即将已经做好实验的创新性成果写成一篇论文. 实验效果不好, 是方案设计的问题. 但多数研究者都会遇到这个问题, 所以还是在这个板块讨论一下.
对于机器学习而言, 实验效果主要受几方面的影响:
- 方案是否合理. 虽然结果无法控制, 但方案本身有设计理念, 有物理意义. 例如, 决策树旨在使得树最小, 以防止过拟合已有样本; 线性回归旨在最小化
l
2
l_2
l2 损失; 岭回归旨在压制线性回归的过拟合, 并且保证有解析解 (矩阵可逆). 注: 王熙照老师认为, 机器学习的核心就只有一件事情: 防止过拟合.
- 方案是否与数据集匹配. 有些方案只适用于稠密数据, 即不能有太多的缺失值; 有的方案只适用于类平衡数据, 即正负样本数量差距不大. 如果不匹配, 很可能导致效果差.
- 运气. 平常代码讲究的是正确性, 有个正确与错误的判断, 例如把一组数相加, 结果是否正确, 是一个确定的事情. 然而, 机器学习的结果不是确定的. 即使你的代码正确地贯彻了你的意图, 你也不能幻想自己的方案一实现就获得很好效果 (相当于到河边第一次抛杆就钓到鱼, 你以为它们这么饿呀). 科研需要的是试错与探索, 10 个 idea 有一个效果好就非常不错了.
因此, 效果不好的时候, 可以先哭会儿, 然后考虑几个解决方案:
- 设计替换方案 (alternative approach). 把算法的几个部件分别用类似的方案替换. 例如, 将线性分类器换成神经网络, 将特征矩阵用 PCA 降维. 有的技术引入之后, 反而使得性能降低, 当然就应该丢掉. Ablation study 用于保证你选择的每个模块、增加的每个技术都起到了正向的作用.
- 观察算法所适用数据的特点. 一个算法的适用范围有局限性, 这并不一定是坏事. 甚至我们还可以把适用和不适用的数据集分开, 结果放在两个表里面, 进行详细讨论.
- 使用各种评价指标. 有可能某些算法在某些指标上表现更好. 有一些常用的指标, 或者更先进的指标. 例如, Accuracy, F1, NDCG, AUC 都有其适用的算法和任务.
- 调参. 比如神经网络的层数, 每层的节点数据, dropout 比例. 很多人就是网络调参师. 当然, 做更加原创的工作, 比天天调参有前途得多.
- 输出中间结果. 这个与软件测试中的单元测试类似, 最终结果也是从中间结果来的. 只有深入了解代码的中间结果, 才能获得更多的观察, 有办法进行改进. 对于初学者来说, 这也是解决自己方案缺陷最困难的部分.
- 提升自己的洞察力 (insight). 这正是机器学习研究者需要获得的高阶能力. 就像在雾中摸索, 有洞察力的人可以看到 5 米, 成功避免 90% 的坑; 但缺乏洞察力的人, 逢坑必掉. 所以, 有些人需要 1 个月完成的工作, 另一些人可能需要 1 年甚至更久.
本贴发出来后阅读量迅速上升, 看来实验结果不好确实是广大研究人员的痛点!