一个人走得快,一群人走得远

突然想起,第一学期的《创新实践》课程需要提交一份报告,感慨也有不少,提笔就写。

南京大学周志华的《机器学习》一书,越读越有味道,可能在不同层次的人读此书的感觉也是大不相同的。我在想一个问题:那些机器学习领域的专家们,对于常见的算法应当是烂熟于心了,作为本科生,我达到了默认的学习预期吗?于是我考虑了一个比较现实的问题,机器学习算法工程师面试的时候,面试官会提出什么样的问题?我跑到牛客网看了看这两年机器学习算法岗位的面经,里面的问题大致是类似的,手推 SVM,一些数据挖掘算法的思路简述,项目经验等等。然而我还注意到,纵使你面试的是机器学习算法工程师的岗位,对于计算机学科的核心知识的考察依旧是必不可少的,操作系统 / 计算机网络 / 数据结构与算法等等。所以我也在想,下个学期就要面对CS专业的核心课程了,在学习时间上的比例要如何分配。人有拖延症,而且有时候做出的规划会远超过自己的能力预期,所以如果搞这搞那,很容易得不偿失。

这个学期偏理论,如果不采用较为通俗的教学方式,很多同学看到编程和数学,内心应该就产生了畏惧心理了。没有人生来就会编程的,Numpy / Pandas / Matplotlib / Scikit-learn 这样的工具包都是熟能生巧,试一试就知道了,全面的使用方式都在官方的文档里面,而想要快捷地掌握某一个技巧,有时候可以查阅一些人的博客。实际上,许多博客提到的内容,可能就是官方文档的某一个小节,但我们也的确没有时间去把官方文档完全地看完。用什么样的方式去学,还是要灵活变通点比较好。想吃透西瓜书,难,因为它涉及的领域很全面,或许初学的时候不求甚解会好一些,需要掌握的反而是一些核心的数据处理,建模优化的思想。如何把东西讲得化繁为简,考验的是老师的功力。

事实上我不认为过了几个月后我还能够手推那些经典算法,需要反复强化才能做到这一点。而了解基础原理的好处在于你把旧东西拾起来的速度很快。

今天刚好和盛前辈聊天,他在斯坦福读研究生的时候是 CS229 和 EE 364A 的 TA ,所以我想他应该比我更了解 Machine Learning 这门课程。国外的学生选这门课时,大牛教授会在讲台上讲,而助教们会在 Office Hour 帮助学生解决一些课堂内没有时间解释的内容。由于前辈本科是北京大学数学和政治经济的双学位,所以他更多地是回答一些数学方面的问题。TA 们在课后也会有专门的 Discussion sections 与选课的学生一起讨论交流。然而在国内一学期这么多课,这样搞有点难度,可能也是因为学生学习的心态和动机不一样。如今国外的课程,大多数都会通过 Piazza 论坛进行交流讨论,比国内使用 QQ 群和微信群严谨得多。这里我觉得更多是学生自身的问题,以及造成的一个课堂风气的恶性循环。

我看了看 CS 229 和 CS 230 的 Project 要求(http://cs230.stanford.edu/projects.html),觉得非常棒,或许有值得借鉴的地方。可国外的如此棒的模式,照搬照抄到国内,就完全变了味一样。现在的学生是真的猛,老师们哪点儿惹他们不高兴啦,就要去教务处闹一闹,尤其是觉得自己学分不够高的时候。有了第一批真的勇士,想必老师们也畏惧了,大家和和气气地多好,你按要求和形式完成我的课,我给你一个过意得去的分数,你学评教也给我点面子。我身边有专门的所谓 “保研出国学霸团” ,保持绩点的方式花里胡哨的,首先课得听,其次和老师打好招呼,另外和学长学姐们要到去年的试卷,总之学生也有阶级啦!我是非常喜欢学霸的,他们学习很有效率,但是我讨厌这种 “伪学霸” ,更多时候像是精致的利己主义者。我也不清楚现在的大学是怎么慢慢变成这样的,或许有些好一些的学校并不是这样。

我在考虑一个很不错的协作方式,不过我不认为它对所有人有用,因此我只准备在自己的 team 里进行测试:

利用 GitHub 的 Organization 功能进行项目级的团队协作,我的组织名为 ShibaGO。如何理解呢,组织就像是一个大公司,里面的 People 就是公司里面的员工, People 可以划分为不同的 Team ,而不同的 Team 可以赋予对不同代码仓库的权限,由于这种泾渭分明的权限设置,大家在一个组织内各司其职,也可以相互学习。这样想划水的朋友,自然 contribution 的统计会少一些,但也不是不允许他划水,只是一切过程都是公开记录在 Git 当中的。

再举个例子,我们有一个组织叫做 MIL,实验室中所有的成员都是组织里面的 People ,不同的老师作为不同 Team 的 Maintainer,而实验室主任就是整个组织的 Owner . 这样同一个 Team 的人可以研究类似方向的课题, Team 又可以划分为子 Team 负责不同的 Projects ,只要权限分配得当,不同的 Team 之间还可以相互了解工作内容,学习代码经验等等。另外,有一些 Team 是可以不对外公开的,只有组织内部的人才可以看见,同样内部的人员也可以设置组织关系不可见,使其他人不知道你从属于这个组织。

好处是啥呢?一在于利于迭代,不同学期的同一课程内容可以做成一个模板仓库的衍生,同学们也可以选择查看旧学期的内容;第二在于公开,项目都是开源的,有利于互相学习经验;第三点不言而喻,所有人都可以学会一定的团队协作能力,GitHub 的 Issue 和 PR 就是免费的讨论区,你甚至可以 Watch 动态,及时获取邮件通知。还有一个隐形的好处,这样做有利于组织 IP 的宣传。当然,你也可以生成私人的仓库,项目完成后再公开,只需付费即可。如果完全是个人主导的项目,可以在项目整个完成后再开源上来,不过过程中最好也使用 Git 进行记录。

所以工具有了,怎么样有效利用很关键,下学期我就希望在内部进行这样的尝试,说不定整个创新实践组都有兴趣加入 ShibaGO 呢。类似 ShibaGO 的组织或许会有一个 GitHub Pages 主页,里面有最新的动态,亦或者是归档了许多不错的笔记和代码。

要鼓励这种开放的环境,既可以避免自卑,也可以避免盲目自信。如果一个人自认为是大佬,就给出一些实实在在的贡献到组织中,可以是撰写很好的说明博客,也可以是写出很漂亮的代码;而那些不愿意抛头露面的人,可以默默地 Fork 或者 Clone 一些项目进行学习,也可以在 Issues 中提出一些宝贵的意见。这也就是我标题里写着的 “一个人走得快,一群人走得远” 的含义,我非常厌恶一些同学对于我的无脑吹捧,因为我自己是不喜欢 debug 的,并不是什么所谓的代码高手。

或许是受到了 Andrew 的影响,现在讲东西很喜欢举例子,那我就再举个例子。下学期要学习深度学习,花书无疑是学习材料,如果有人有想法,完全可以维护一个名为 deep-learning-book-read-notes 的仓库,即使他的执行力不足或者内容写得很烂也没关系,不断会有新的学生来帮助前人维护工作。论文解读的翻译或者是幻灯片,也是可以独立成为一个仓库的。当然,如果是那种很广泛 Star 的已有仓库,比如一些学习 Python 和一些工具包和框架的仓库,就没有必要花时间另起炉灶了,我们很难做到那样的水平,更适合对其内容进行课后的讨论。

所以,《创新实践》这门课程是可以给学生留下一些关乎核心素质的东西的,即使他不是很喜欢机器学习或者深度学习,他也可以把自己喜欢做的东西分享进来,至少老师知道他有花时间去丰富自己的生活。譬如你可以为组织写一个数据库网站,一些人写前端,一些人写后台;你也可以做一些有趣的 H5 游戏,或者是你的区块链项目,有想法就大胆地尝试。两年的时间里,学会如何去合作,如何去表达,如何去主动学习,这或许是更为宝贵的财富。

2018年6月25日

posted @ 2018-06-25 21:32 AcceptedDoge 阅读(...) 评论(...) 编辑 收藏