避开机器学习初学者最常见的5个错误
在这篇文章中,我们将看到学习Machine Learning时最常出现的 5 大错误。我相信没个人都可以入门的时候就很好地使用机器学习算法。希望这篇文章能够帮助大家避开或解决大家学习和实践中的一些错误。尽量避免跳坑。
1. 不要从理论开始入手
传统的机器学习教学是这样的:
- 努力掌握数学背景知识
- 努力学习机器学习理论
- 努力从头开始实现算法
- XOXOXO自我感觉不错(一些神奇事情发生)
- 最后开始使用机器学习(我们的终极目标)
这种方法非常慢,而且很困难。这是为想要拓展该领域前沿的学者设计的,并不适合只是想要得到结果的实践者。
Trap
如果你在想以下问题,你就掉入了这个坑了:
- 我需要先完成线性代数的课程;
- 我需要回去先拿个博士学位;
- 我必须先读完教科书。
Way out
数学或深奥的算法理论学习能够怎样帮助你实现目标?你多半会停下来。会失败。不会离你的目标更进一步。解决的方法是鼓捣模型。
如果机器学习对市场的有价值的贡献是准确的预测,那么你就学习对问题进行建模并得出准确的预测吧。就从现在开始!
然后努力掌握它,做到非常擅长。
如果你需要,就阅读、窃取、收割别人的理论,但你只需要你的目标所需要的——只要它能帮助你实现更好的价值。
2、不要学习所有的机器学习算法
机器学习是一个非常大的研究领域。它是指计算机学习过程的自动化,与人工智能有很大的交叠。从深奥的学习理论到机器人技术——这个领域的范围非常广。你不可能将它们整个拿下。
Trap
如果你在想下面这些,你就落套了:
- 我需要学习一个新网站上提到的每一种新技术;
- 我首先需要学习计算机视觉、自然语言处理、语音等等;
- 我需要了解每项技术的每个方面。
Way out
选择一个小方向并且保持专注,然后进一步收窄。机器学习中最有价值的领域是预测建模——创建数据的模型以做出预测。
接下来,专注于一种与你最相关或你最感兴趣的预测建模,然后保持专注。也许你是根据技术选择的(比如深度学习),也许你是根据问题类型选择的(比如推荐系统);也许你不确定,只是随便选了一个。不管怎样,努力掌握它或至少做到精通。
接下来才开始进入下一个领域。
3. 不要在算法上花费太多时间
机器学习实际上就是算法,而算法实在太多。每一个算法都是一个复杂的系统而且拥有自己的小研究领域和生态系统。可以选择将自己迷失在算法之中,这么做的人被称为学者。
Trap
如果你在说这些,你就已经在陷阱里了:
- 在我使用它之前我需要知道它的工作原理;
- 我首先需要深入理解超参数;
- 在进行微调时,我需要解释其因果关系。
Way out
算法并非结果,它们只是实现结果的方法。事实上,机器学习算法是一种商品。
多实践!不断地换不同的算法,在问题上实验各种各样的算法。对其中一些进行调节,但不要把自己困在这一步。
使用一个系统过程(systematic process)。设计调试实验并将它们的执行和分析自动化。
机器学习的关键是好好利用算法,而应用算法不只是研究算法本身。
我们的目标应该是为每一个项目得出一个结果——一组预测或一个能给出预测的模型。
4. 不要从头开始实现所有东西
从头开始实现算法能够教会你很多东西。但有时候需要实现一项技术,因为没有合适的或可用的实现。但是,通常来说,你不一定要也不应该这么自己实现算法。
这样做就跳坑里去了,大部分时候事实是这样的:自己实现的结果很糟糕。
- 有各种漏洞
- 速度很慢
- 吃内存
- 无法很好地解决边缘情况
- 甚至可能是错的
Trap
如果你在做下面这些事,你已经掉入陷阱了:
- 你在编写载入 CSV 文件的代码(搞什么鬼!?用panda!);
- 你在编写线性回归这种标准算法的代码;
- 在编写用于交叉验证或超参数调整的代码;
Way out
别折腾了哥们!
- 使用一个已被成千上万的开发者所使用过的能够处理所有边缘情况的库,众所周知它是正确的;
- 使用一个经过了高度优化的库,它能充分利用你的硬件的每一个计算周期和你的内存的每一个字节;
- 为你的项目使用一个图形用户界面,从而完全避开代码;
每次都自己实现你想要使用的算法是非常缓慢的入门机器学习的方式。如果你是为了学习而实现它们,那么就要对自己诚实:你的实现还不够好,你不能通过这样应用机器学习来带来价值。
5. 不要总改变使用的工具
目前有很多的很棒的机器学习工具。事实上,很棒的工具加上数据的可用性和更快的硬件使得机器学习的复兴成为了可能。但你可能陷入这样一个坑中:跳入每个你偶然发现的新工具中。
Trap
如果发现自己符合以下三点那你就陷入了该陷阱中:
- 使用每个你听到过的新工具
- 发现自己每周或每个月都学习一项新工具或语言
- 学习一个库时半途而废并转向新的库
Way out
有规律的学习和使用新工具,在解决实际问题时融合不同的工具。选择一个主要的大型平台并坚持使用它,那在解决机器学习问题时会更加高效,至少也要足够精通该平台。
这里我推荐 3 个的平台:
- Weka; 2. Python; 3. R
总结
- 不要从理论开始入手
- 不要学习所有的机器学习
- 不要在算法上花费太多时间
- 不要从头开始实现所有东西
- 不要总改变使用的工具
本文不太赞成自己真真正正地从头到尾学习去自己实现一个算法,例如向后传播BP算法,也不赞成从数学底层地角度去理解为什么梯度下降有效、如何操作才能减少梯度发散的等高深莫测的数学问题。对于一个工程上的问题,我们需要的是解决问题、达到目标,实现价值,这是针对工程应用的。
对于个人的能力的提升,是需要去不断地学习、应用、实践再回归学习的一个epoch循环。如果我们不理解推荐系统的协同过滤算法,跟吃瓜的群众一样:“根据历史的数据去匹配一个跟我相似的用户”这样的说法,那么就太吃瓜了。
我也是初学者也是同路人,希望一起再接再厉。