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


「爱与否科技」怎么用最快的速度解决算法问题,机器学习、深度学习的基础已打好
文章图片
来源:夕小瑶的卖萌屋
本文为多内容 , 建议阅读12分钟
本文是写给萌新的“科学炼丹”手册 。
「爱与否科技」怎么用最快的速度解决算法问题,机器学习、深度学习的基础已打好
文章图片
前言
近期在订阅号后台和文章评论区review了一下大家的问题 , 发现很多小伙伴现在已经把机器学习、深度学习的理论基础打好了 , 但是真正要解决一个现实中的算法问题的时候经常两手抓瞎 , 一顿毫无目的乱试 , 甚至认为模型表现不好一定是调参不够仔细 。
新手最大的问题在于解决问题的逻辑不够清晰 , 喜欢使用“蛮力法” , 因此很容易陷入一个
“找到一份开源代码“
“跑了一下 , 调了调参“
”效果不好 , 下一个”
“效果好 , 拿去做集成”
死循环中 。 就像下图一样
「爱与否科技」怎么用最快的速度解决算法问题,机器学习、深度学习的基础已打好
文章图片
倘若恰好碰到一份代码 , 让他的精度上了两个点 , 于是他开始吹嘘“这个模型太牛逼了 , 吊打XXXX” 。 而对于跑了一下没什么提升的算法 , 他就会说“肯定论文造假了 , 一点用都没有” 。
然后以这种暴力搜索的方式解决问题久了之后 , 他开始对别人吹嘘 。
“害 , 俺们深度学习这一行 , 就是跑跑代码调调参 , 没有一点竞争力” 。
自嘲的话语被奉为圭臬可能是深度学习领域的最大悲剧 。
今天跟大家分享一下我觉得应该了解的一些的炼丹常识 , 希望小伙伴们在看完本文后 , 可以帮助初学者提高炼丹能力和效率 , 走出无脑调参的怪圈 。
具体来说 , 希望帮助大家实现下面几个目标:
快:以最快的速度解决一个算法问题准:以最少的试错次数找出最优策略稳:以最不容易出错的方式管理实验准
在讲“快”之前 , 先来讲讲“准”字诀 , 因为准是最重要的问题 , 而且是快的前提 。
调研做好 , 找准起点
接手一个算法问题后 , 如果时间很充裕 , 就可以先定位一下该算法问题所对口的学术会议或期刊:
比如你要解决query-doc相关性匹配的问题 , 那么你就要优先考虑SIGIR、CIKM等IR强相关的会议 , 而不是NLP的会议;
如果你要解决NLI、问答、对话这种语义匹配的问题 , 那么你就要优先考虑ACL、EMNLP、NAACL、COLING这种NLP会议 , 而不是IR会议了;
如果你把匹配模型做好了 , 想压缩一下变得更小更快 , 那就要优先考虑ICLR、NIPS这种更general的深度学习、神经网络会议了 。
定位不出来算法问题的对口会议?最起码可以逛逛AAAI和IJCAI吧(虽然鱼龙混杂问题比较严重) 。
然后根据文章title , 找几篇跟你的算法问题最接近的近两年的paper , 慢慢调研 。 通过这些paper的relatedwork章节和实验章节 , 还很容易追溯出更早的工作 , 类似下图这种(来自?@小鹿鹿鹿的一篇paper) , 所以一般没有必要去手动调研更早期的paper 。
「爱与否科技」怎么用最快的速度解决算法问题,机器学习、深度学习的基础已打好
文章图片
于是很顺理成章的你就能找到这个算法问题的比较前沿的解法和比较经(简)典(单)的方法啦 , 进而就有了不错的baseline , 迭代几版策略后说不定就出来一篇新paper 。
不过 , 如果时间很不充裕 , 要解决的问题又比较简单(比如就是个典型的文本分类问题、序列标注问题等) , 在知乎上搜一下也经常能发现惊喜 , 实在不行还可以问小夕嘛( ̄? ̄)当然了 , 问题太复杂的话更建议通过知乎私信右上角进行交流(//?//)
总之 , 非常不建议直接去github一个repo一个repo的蛮力调参 , 大量的宝藏方法是很难通过通用搜索引擎来找到的(虽然这种行为在比赛刷榜的时候随处可见) 。
构建策略迭代闭环 , 找准努力方向
避免蛮力试错的第二步就是构建完整的策略迭代闭环 。 由于不同的问题有不同的限定 , 因此不存在一个绝对的流程可以恰好适合所有算法问题 , 一个我自己最常用的迭代闭环就是