【 ML&DEV 】
这是大家没有看过的船新栏目!ML表示机器学习,DEV表示开发,本专栏旨在为大家分享作为算法工程师的工作,机器学习生态下的有关模型方法和技术,从数据生产到模型部署维护监控全流程,预备知识、理论、技术、经验等都会涉及,近期内容以入门线路为主,敬请期待!
往期回顾:
由于很多算法工程师都是从机器学习入门,导致很多问题的解决都是从机器学习入手,但其实,在我目前的实验经验下,机器学习并不是银弹,实际上还有很多问题,同时作为一名算法,我们应该知道更多解决问题的方案,而不是简单地倒腾模型,只是炼丹而已。
模型的局限性
说模型的局限性,就和大家列举出来。
- 模型很多都在解释和理解语义,但实际上并非所有事情都可以用语义来解释。少年的你是电影,但是年轻的你就不是。
- 数据依赖性,首先是数据量的依赖性,没有数据根本无法建立合适的模型。
- 还是数据依赖性,数据质量的依赖性,你必须有的是高质量的数据,标签都错了一半,那还训练啥。
- 模型的计算性能,尤其是比较复杂的深度学习模型,一般耗时都会比较长。
- 模型的准确性不一定足够,一般情况下有好的数据能达到80左右,但是要提升的代价就会比较高了,无论会实验时间还是计算时间成本都很高。
- 更新与变化速度慢。对于带一定实时性的任务,会快速改变的,例如分类,某一个样本会瞬间从A类变成B类,那分类模型其实不能很好地处理了。
诚然,模型是很多新手最容易想得到的方法,但绝对不是最适合第一个使用的方法。
怎么做
那么具体应该怎么做呢?没有模型我们手里又能有什么。
我这里希望大家首先应该思考的是,规则能否解决实际的问题,毕竟——没有机器学习模型,以前的人就活不下去了吗?我先来说说规则的好处:
- 开发速度快,说得简单点是if-else,当然也有困难的,可能会涉及一些数据结构与算法,但也比模型试验来的快。
- 准确度高。莫西宁的泛化能力诚然更好,但是论准确性,规则的准确性更高。
- 确定性高。对于结果的预期能更加明确,知道什么原因正确和错误。
- 可控性高。对于结果的干预更快,也更加容易。
- 低数据依赖,只需要一些数据辅助分析即可,有时候还可以自己造一些。
那么规则应该怎么做,我来写个流程:
- 确认目标。确认你的目标是什么,借助目标确定目标认定的评价手段和指标。
- 分析case。分析具体问题中存在的case,例如文本分类的话就看看具体的样本,具有什么规律,有这个规律就可以考虑设计方案了。
- 设计方案,根据你的具体任务和你分析的case,开始设计方案,要词典开始构造词典,要规则开始设计规则。
- 检验方案,查看你的方案效果如何,有没有达到预期,还有什么问题,如果还有问题就想办法解决这个问题。
- 完成方案,查看方案是否达到上线要求。
模型就这么不堪吗
当然的,模型肯定不是没用,他也有他自己本身的优点,这也是他成为主流的一个重要原因。
- 泛化能力强,说白了就是召回率高,所以适合拿来做兜底,规则处理不了的问题可以用它捞一点回来。
- 很多不可解释或者内容复杂需要综合考虑的,则需要模型,例如推荐系统的排序模块,在逐步拓展后需要考虑的东西很多时,就需要模型来做。
因此,需要考虑的是这个问题下是否需要模型,看你有没有上面的问题,如果有则要考虑模型了。
但是,使用模型是有注意事项的。
- 模型的耗时是否有限制,有的话就要限制模型的计算线路了,例如RNN系列可能就不合适了。
- 模型体积,内存的占用。
- 确认好使用模型的收益。
至于数据之类的就是前提问题了上面提到过,此处不赘述啦。
最终总结一下
本文其实旨告诉大家,模型不是万能的,而有更加理想的可选方法,具体的思路如下。
- 遇到问题,要考虑该问题最适合的方法,不是一上来就要用模型。
- 模型和规则有各自的优缺点,要根据实际情况进行选择。
- 理解模型本身的局限性,规则的优缺点,从而进行选择。
没错,几条其实都在劝大家,好好选,好好分析,模型不是你的唯一的选择。