这个月最大的收获,是发现了思维上的坏习惯。

事情是这样的:

早在一个月前,我进行了一项关于改变的主题阅读,从理论中理解了面对困境的处理方法。不过这还远远不能够解决我生活中的种种问题。现实生活中的状况相当复杂,我无法完全按照书本中的理论去解决问题,尤其是陷入到不利于解决问题的情绪中时,自我就成了困境的帮凶。

机器学习

之前提到过因为精力问题无法继续之前报名的数据科学课程,其实就是在学习的过程中一直得不到正反馈,很多基础知识无法得到合理的整合和归纳,就好像是建造一个空中楼阁,有了图纸,但却无从下手,经过这个从入门到放弃的过程,面对任何关于算法或统计相关的计算机学习,我总会抱有谨慎态度,怀疑自己能否再坚持下去。

去杭州的第一天,恰好朋友再住处附近的咖啡馆聚会,聚会的主题是讨论 Coursera 上的课程,他们组织了机器学习的学习小组,每周例行的汇报进度,因为之前也有少许数据科学的入门学习经验,就和他们交流了一下。发现其实数据科学和机器学习有很多重叠的知识,我就想,如果这一次从机器学习入手,会不会好一些呢?

假期结束后,我加入了课程,因为不确定是否能够坚持下去,也就没有把学习计划告诉身边的人,也没有加入学习小组,其实想看自己到底能不能完全独立的,在不靠任何外力影响的情况下独立完成一门课程。

其实我还有另一个计划——从用户和产品的角度,分析在 Coursera 中一门课程从入门到学习的流程和体验。于是我以一个课程小白的身份从零开始了我的机器学习课程。一开始的新奇感褪去之后,我发现了自己面临着如下的挑战:

  • 全新的机器学习概念
  • 全新的编程语言 Octave
  • 全英文的作业环境
  • 有限的学习时间

Hard 模式下,遇到了种种困难,一一克服,一个月的时间,找到了正确的学习姿势,并且现在也有信心完成课程。

改变

为了克服这几个困难,我的学习方法是这样的:

  • 通过代码去验证机器学习的概念和算法,不懂的公式就多演算几遍,用不同的参数去验证自己的猜想和逻辑。
  • 全新的编程语言,也在演算过程中加强记忆,认真研究作业中的提示代码,搞清楚每一步的操作和运算过程。
  • 因为新的理论词汇是第一次接触,一边读文档一边查字典。
  • 近段时间新产品要上线,没有很充裕的学习时间,随着课程每周的难度加大,所需要的时间也逐渐增多,无奈将每天学习的时间调到了早上五点到七点。既不影响工作也能保证锻炼的时间。之后发现如此调整之后的学习效率也变得很高,索性就计划保持每天早睡,这样安排作息,除了周末,每周投入十个小时左右,足够完成学习并提交作业。

感受

Coursera 的课程安排循序渐进,适合初学者入门,从实际的应用角度去讲解机器学习的概念,并且把所需要的知识拆解为可习得的点,帮助学习者练习。视频中也会插入小测验,以确保重要的知识点被理解透彻。

作业里的文档也很全面,结合课程内容和文档的提示,学生可以独立的完成作业。代码环境和评分程序的交互都是基于命令行,而且也确保学员不会伪造作业内容,也不鼓励在论坛中分享自己的代码。由于我是独立学习,没有加入到论坛的讨论中去,但从别处了解,Coursera 的课程助教是不会向学员透露答案的。所以解决问题最为直接的方式就是,自己 debug 代码。

收获

这是关于我个人的思维习惯问题,以往我遇到问题时,会花费掉比他人较多的时间解决,也会对明显行不通的方案做反复无用的尝试,不但如此,还会陷入到一种无法释怀的焦灼情绪中。事情就会变得越来越糟,这种情绪反过来影响我的思考,最终在尴尬的境地越陷越深。

为什么现在才发现,是因为自己从来没有意识到,工作中的情绪是来自我自己对问题缺乏合理的分析和思考,有时候会因为自己粗心而造成的 bug 影响对工作的体验。最后发现是因为没有仔细阅读文档或是代码理解的错误,这些都是回看起来不值得一提的低级错误,但却能着实的把我困住,并产生强烈的厌恶感。

这种情况也出现在学习新知识的过程中,比如最近在用的新框架,还有机器学习,好多困难都带给了我自我怀疑的无力感。一开始的解决方案就是逼着自己硬撑着完成目标,这样极度耗费心力,也不利于持续下去达到目标。后来我发现有更好的方法去解决这个问题。

问题

在一个周日的清晨,我坐在星巴克里愁眉苦脸的思考周六遗留的算法问题,突然意识到了自己不能再这样下去,我决定仔细分析问题产生的原因,用清楚的语言界定问题,得出了以下结论:

  1. 面对英语资料和复杂公式时会容易觉得烦躁。
  2. 忽略掉重要的信息,对需要仔细阅读的文档视而不见。
  3. 反复尝试错误的解决方案。
  4. 思考分析不够透彻。

执行意图

意识到问题后,我想通过执行意图来给自己设置关键点的动作,以防自己再次被情绪影响,陷入泥潭。

  1. 如果我读英语或公式觉得烦躁,那么我就闭上眼深呼吸,直到心情平静了之后,再继续。
  2. 如果我阅读的太快,或者感觉理解的不是很清楚,那么我就再读一遍,直到搞清楚这一句的意思,再读下一句。
  3. 如果一个方案尝试过不能成功,记录下来,分析哪里可能出问题,再做不同的尝试,循环记录。
  4. 如果发现自己陷入了不断尝试的死循环,先停下来,看一遍之前的记录,总结问题制定新的方案,再进行尝试。

就这样,我尝试这使用这种对思维编程的方式,完成了之前因为疏忽和信息不全面而停滞了很久的问题,当然这样的方法需要不断的训练积累,才能成为自己的习惯。

意识到自己的问题,并尝试着成功克服,这是一个好的开始。

2016-06-02