「爱与否科技」怎么用最快的速度解决算法问题,机器学习、深度学习的基础已打好( 四 )


而要确定各个超参数的敏感性 , 一方面可以根据自身经验来定 , 一方面可以根据各paper中的取值(差异大的超参数可能是敏感超参 , 大家都取值相同的一般不敏感) , 实在不确定 , 跑两三组实验就够确定敏感性了 , 完全没有必要来个“网格搜索” 。
篇幅原因 , 本文只讲通用的方法 , 一些细节性的魔性调参资料在网上有很多了 , 这里就不展开了 。

说完了“准”和“快”的问题 , 下面就到了最容易让初学者头疼的“稳”字问题啦 。
很多初学者都出现过这种手忙脚乱的情况:
“诶?明明我记得这个脚本能跑出来95%的准确率 , 再一跑怎么成92%了?”“我的模型去哪了???”“这个模型怎么训出来的来着 。。 ”“这俩策略有哪些diff来着”
「爱与否科技」怎么用最快的速度解决算法问题,机器学习、深度学习的基础已打好
文章图片
问题就出在了实验管理和代码版本管理上 。
一个工具就稳了
顾名思义 , 实验管理就是要记录下来每一次实验的策略名和对应的实验结果 , 一般以表格的形式记录 。 这里可以用excel、markdown编辑器等记录 , 当然更建议使用支持云端同步的工具来记录(比如石墨文档、印象笔记或内网的相关工具等) , 以防电脑被偷、文件误删等意外导致的悲剧 。
但是 , 有时候实验着急 , 对策略的描述不够仔细怎么办?比如某次实验同时改变了具体策略、超参数、预训练模型等一堆东西 , 不能用一个名字概括全部 , 怎么办呢?
最简单的做法就是与版本管理工具配合 , 再也不用担心未来settings丢失、模型无法复现、模型无法追溯环境等问题了 。
而要实现版本管理 , 也很简单 , Git自然是不二之选 。
萌新们注意啦 , 是Git , 不是GitHub!你可以不用GitHub , 但是不能不用Git!
怎么用Git管理版本和实验迭代呢?
首先 , 务必保证训练日志、eval日志是以文件的形式存了下来 , 而不是打印到屏幕上变成过眼云烟了;此外 , 需要保证每一次运行时的settings(比如超参数、数据集版本、ckpt存储路径等)都能保存到日志文件中 , 且尽量封装一个run.sh来维护训练任务的启动环境 。
之后就是看每个人自己的习惯啦 。 我个人的习惯是
主线策略每成功推进一步 , 就调用gittag打个tag 。 这里的tag即策略名 , 与实验管理的表格中的策略名对齐如果要在某个策略的基础上尝试一个很不靠谱的探索 , 那么可以在当前策略的基础上拉一个分支出来 , 在这个分支上完成相应事情后切回主分支 。 当然啦 , 万一这个分支上的策略work了 , 就可以考虑将其转正 , 合入主分支并打上相关tag这样将来你想review某个策略时 , 只需要切换到相应的tag下面或者分支下面就可以啦 , 完整复现整个环境 , 并能直接追溯出跑该策略时的一切相关设置 , 以及该策略下的各种调参结果 。
最后 , “准”字问题上还要考虑最后一种极端情况 , 就是整个实验环境被连根拔起╮( ̄▽ ̄'''')╭比如硬盘损坏之类的严重故障 。 因此一定要记得做好备份工作 , 即周期性地将环境中的关键代码push到github等远程仓库 。 当然了 , 对于ckpt、数据集这种大型文件 , 可以写入.gitignore文件中以免把仓库撑爆 , 这些大型文件的最佳归宿当然就是hadoop集群啦 。
科研任务是可以通过开源数据集进行评估的 , 但业务算法的评估还是要以业务数据为准 。
编辑:于腾凯
校对:谭佳瑶
—完—
【「爱与否科技」怎么用最快的速度解决算法问题,机器学习、深度学习的基础已打好】关注清华-青岛数据科学研究院官方微信公众平台“AI数据派”及姊妹号“数据派THU”获取更多讲座福利及优质内容 。