第六学期的日常

昨天是大四学长学姐们领毕业证的日子。

中午时分,看着毕业的学生在校园各处合影,诉说着四年的感受,我就很不是滋味。

这也不能全怪上午的电机太过变态。一个更重要的原因是,作为一个准大四的学生,混到现在,别说有什么一技之长,就连专业都只能靠考前的一两天草草过掉,很难说有什么出息。

屈指算来,这学期真正有价值,值得我去骄傲的事,也只有模式识别的火灾检测大作业了。


我与火灾的日常

“模式识别好!”在出分之前我就下了这个定论。不知道诸位为什么要选这门课,我的想法是过掉了吴恩达同学的机器学习(ML),然后再来看看北理的模式识别能讲成什么样子,为斯坦福和北理的课堂做一个对比。至于林大神作为从台湾学成ML归来的高材生,我还真不清楚她为什么要选这门课啊。其他多数学生的想法嘛,我大概是知道的,学什么不重要,轻松愉快分数高才是真重要。还记得有一天老师忽然问我们说:“你们以后有多少学生毕业之后想做工程?”几乎没有人举手。老师又问:“不做工程你们想做什么?”大家不语。这个时候真相帝出现了,“做什么职业不重要,能做土豪就行!”这短短的一分钟,无关紧要的问答,却不幸成为了我对本课最深的记忆。

课程进展的轨迹果真如我所料,那不仅仅是什么简单讲什么,而且是什么没用讲什么。什么线性啊、感知器啊,扯了好长时间,到了贝叶斯这种有用的地方,就按照讲概率与统计的套路,一笔带过了。后来跟着导师做一个视觉相关的课题,要用贝叶斯估计参数,我就没想明白现实中那种复杂的场景是怎么用几个概率描述清楚的。当然这事儿也不能都怪老师,老师要有用吴同学的能力,能把最前沿最实用的理论传授给高中生,也就不必在这里待着了。另外还有一点值得庆幸,就是咱的大作业可一点儿都不水。

这个大作业说来也简单,就是训练一个系统,输入一幅图像,输出一个判断——图像里面有火焰还是没火焰。方法自然是让机器自己学,学多了它就会了(准确率高一些)。不过怎么调教机器,给它指引一条又快又好的道路倒是让我伤透了脑经。芮神提出的了一个很好的想法,就是先人工干预,筛选掉大量离题万里的样本,然后再提取相似样本的特征,集中学习,用支持向量机(SVM)找出一条合理的决策边界。等芮神自称找到了一个最佳阈值,能先行轻松干掉80%的负样本,我这边的特征提取依旧没有太多头绪。

这倒不是因为我没去找文献,反而是因为文献找得太多无从下手。正如阳志平老师说过的,文献不宜多看,看多了就会被限制住,失去创造力了。最气愤的就是从知网上找的文章,今天我吹捧你,明天你吹捧我,我仔细对比了一下,似乎讲得就是一回事啊,所谓“明显的提升”是从哪儿冒出来的?看过了种种常规的方法之后,终于有一篇与众不同的文章映入了我的眼帘。那是一篇上海交大的软件博士发的毕业论文,提出了一种改进的纹理特征提取算法。可能是因为要与别的小组拉开差距就需要与众不同的算法,我就自作主张全盘接受了一篇文章,然后赶快写MATLAB做第一步的验证。

随后惨痛的事实教会了我两件事:

  • 不要随意尝试别人没有验证过的算法;
  • 不要随便相信中国的学生写的文章,就算名校的博士也不例外。

我就暂且不提MATLAB复杂的数据格式和隐式转换给我带来的不利影响,但以下的事实实在是让我抓狂:文中提出的算法对一张百万像素级别的图像做纹理分析竟然需要40分钟!什么?你说我机器渣?测试用的电脑配备的可是Core-i7-3517处理器,四核2.4GHz的速度对付一张小图绝对不在话下。而且这位博士做的项目可是基于视频的实时火灾检测,你的DSP再牛b也不至于把我的小本拉开这么大的差距啊!真相只有一个:学长你博士答辩的时候做了实物演示么?

这个时候距离交作业大概只剩两三天了,我没有想好要不要换一个算法,不过想来想去这个时候最明智的选择应该是“改造次品,重新上线”。用上了一点儿大二学算法时残留的知识,哪儿循环多就砍哪儿,一刀下去就从40分钟削成2分钟了,压缩图像之后再来一刀,效果拔群:现在处理一张图只要半秒钟了。仅仅注释掉了几段代码,把24维的特征向量降到了16维,就取得了4000倍的性能提升,我以前可从来没经历过这种事儿。当然后果也是显而易见的,算法的精髓都没了,提出来的不是纹理了,可能是马赛克,或者连马赛克都不如。救deadline如救火,不管怎样先交了吧。

于是又如我所料到的,准确率惨不忍睹。这可能有好几方面的原因,首先图像的分割算法是我自创的,很简单很弱智,所以如果不幸漏掉了什么实属正常;其次真的已经不能指望这个面目全非的特征提取算法了;然后咱们也没有调SVM参数的经验。但是直到展示的那天,我看了一下班上两位队友找的样本,一时语塞。终于可以把责任都推掉了,明明就是样本不好惹得祸嘛!硕大的一个灭火器,又红又亮,按阈值一筛就是一团火,然后直接放到负样本里面去了!这逻辑上是没错,但是这会干扰机器的正常学习你造嘛?就好比说别人刚向你介绍了什么是正当防卫,你还将懂不懂的时候,又跟你来一句:“有个同学打了你一拳,你回击一拳,是正当防卫,但是如果你打了两拳,就是防卫过当了。”不就差了一点儿差异有这么大嘛!我相信机器看到灭火器的那张图被放入了负样本,很可能也会说一句:“你tm在逗我!”

由于我们的芮神做了一个很炫目的图形界面,上述错误就被放大了。我们每处理一张图片都会输出一行大字,如果判定有火情好像是显示“救命”之类的话,如果判定没有火情显示就会显示“哈哈!没事儿!”。我们做测试的时候测了一张化工厂爆炸的图片,红彤彤的火焰加上滚滚浓烟,配合的文字不巧正是“哈哈!没事儿!”。看到这一幕我当场就笑哭了,5分钟之内都没缓过来,看来那个由于不敬业放进去的灭火器真是后患无穷啊!

最后黔驴技穷的我们只好在课上一边听别的组展示作业一边狂调,终于拿到了课堂上唯一一个100%的准确率(5/5 判定正确),这样的结果来之不易。

非常感谢网协的两位大神,默默地做了很多coding的工作,让我们的界面很拉风bug很隐蔽!!就算判不对也能修正过来!!还要感谢两位默默找图的队友,不知道那几天你们看的火焰图有没有超过妹子图的数量。模式的大作业几乎是这学期唯一能让我感到热情满满的项目。这门课的质量虽不能和吴同学的ML相比,但是收获不见得会少些。期末写调查问卷,老师问本课程最大的收获是什么,我若有所思写了“精通MATLAB编程”(太不谦虚了!)。至于其他的,我可以不透露嘛?


与火灾分手后的日常

期中一过,选修考完,生活又回归了平静。我在导师每次组会都说“你们不要追求什么短期利益”的情况下,顶风作案,报了一个电子设计竞赛,结果自然是“就当复习模电了”。后来看着之前的英语成绩不好,咬咬牙都去刷了一下,大G只是稍微长了些出息,托福则是再度验证了我二战不如一战的定律。临近期末的时候课程比较少,除了自控就是电机,于是我又开始不务正业了。

看过我前几篇学期总结的同学应该都很清楚我打发时间的方法,无非就是看书刷歌练码率。

这种打发时间的方法我自己都不太赞同。曾经有人给我贴了个“技术宅”的标签,我估摸着这三个字里面也就有一个字反映了客观事实,而且先前所述的方法也无益于改变这个事实。我打算从下个学期开始,连那一个字都不要了。

言归正传。本学期做的很重要的一件事,就是跟随Rice University的足迹,从Interactive Python推到了Principle of Computing. Rice的教授们很擅长自黑,出的视频也很诡异,有时候放了一分钟之后才告诉你,对不起今天不该我讲课,下面有请XXX接着上课。布置的coding难度一般不大,但都很有成就感,例如21点、星际大战、2048、以及Tic-Tac-Toe的AI. 博学多能的教授们开发了一套系统,能把Python翻译成JavaScript,直接在浏览器里面运行结果,效果几乎让人惊叹。当然还要顺便提及一下,为了能够成功提交作业我又不得不自学了一些SSH的技巧,同样也是由于该众所周知的原因大家玩不上我做的网页游戏了,不过有兴趣的童鞋可以尝试自己做一个。

本学期做的另一部分事情和data有关。忘记具体是哪一天了,小猪深夜给我打了一个电话,似乎是问我最大似然的分类用R语言怎么实现。那个时候我刚刚上完模式的课程,老师也提了一嘴最大似然的事情,但是我没能记清楚,再加上对R语言一窍不通,所以咱还是赶快转移话题!聊过了GRE和武大的数理金融学霸集中营,我最后说我知道子叶也在学R呢,你可以去问问她。我并没有想到子叶学了一半就退掉了,所以她也帮不上什么忙,我就只能祝愿小猪不要因为此课掉绩点了。

前面的故事只是个引子。后来不知是中了什么邪,我关注的几家媒体,不论是51CTO还是《码农周刊》,都开始灌输同一个观点:data大法好,学R保平安。大概是因为懂得太少就容易受别人鼓动,我忽然也有一种想要保平安的冲动。于是找来了剑桥的入门教程,从头到尾把例子都试了一遍,终于意识到R真是一门学习曲线极其陡峭的语言。如果真想在data界混,没有三年两载的积累恐怕是干不了什么事情的,相比之下,还是搞开发要简单得多。

以前我在linkedin上加过一些自称是Data Analyst的人,他们的简历有些让我不得其解。首先这帮搞data的人动辄就是某个部门的主管,拥有直接的决策权,凸显了一种浓浓的富帅气息。另外这帮人声称最多的技能是Excel…… 可能有个别几人懂R,会SPSS的几乎是凤毛麟角,用三个字来评述就是“不专业”。刚刚经历了R的初体验,又受了如此一番打击,我终于意识到data显然是被过度吹捧了。就像男生找妹纸一样,首先你得有钱,如果想搞data,首先得有人听你的…… 唔,这一点似乎比学个小语种(R语言)要困难得多了。


考试周的日常

行文至此也该散播一些负能量了。昨天看到了一篇汇总贴,题名曰《千万不要选我们学校》,可能是由于校长终于给装空调了,导致我校没有上榜。然而在我心中我校应该是要上榜的,别的证据不说,选课一事足矣说明这一点。

理论上讲,选课制度是个好制度,既有助于每个人找到喜欢的方向,又能结识新的同学。不过且慢,达到这个效果的前提是,你得有那么多课可以选啊!

我校选课的根本矛盾,是人多课少的矛盾,主要矛盾,是课程不好没啥可选的矛盾。为了进一步阐释这个问题,先放上雷锋学长的经验:

过程控制,现场总线分很低;流体闭卷;伺服系统和运动控制千万别选;系统辨识,机器人,最优化差不多,计算较多,不学就不怎么会,但最后分也不算太低,小作业比较多;软件工程大作业比较恶心,考试没范围。

有没有一种深深地被坑感。

但是课程再坑也是要选的,否则就不能毕业了,于是乎众人群起而动,现场总线这种据称给分很低的课,选课的人数超过了容量的三倍!!如果你不能理解大家的做法,请自行脑补在某些男女比例1:4的师范院校,女生做的某些疯狂举动,比如毕业前夕拉着一个人就要表白……

鉴于我长期不注重攒人品,几乎每个学期的选课都有中不了签的情况,所以每个学期都要经历一次“惊心动魄60秒”,与数百同学一起PK,竞争极其有限的几十个课程名额。

在这件事情上,不得不承认,我完全不是广大淘宝秒杀爱好者和DotA玩家的对手,他们凭借精湛的技艺,总能在选课开放的一瞬间一拥而上,把名额抢个精光,而我每次遇到的情形总是大同小异:第N-1次刷新,显示选课时间未到;第N次刷新,网页卡了;第N+1次刷新,显示人数已满。整个过程耗时不到5秒。最后关头,我利用多窗口作业的优势,抢到了一门“千万别选”的运动控制,又过了5秒,连这门课都满员了。呵呵,管他是什么课,也管他给什么分,有课上即是幸福。

尽管有很多弊端,我校依旧可算是国内出类拔萃的一所大学。其优势集中体现在学风的纯正上,至少考试周是如此。

为了对付自控2和电机这两个大boss,考前的那些天我都会去中教自习到深夜。导员曾说,他以前不知道考研楼(3教)几点钟关门,于是特地耗了一会儿,等到保安找到他的时候,一看时间,凌晨1点半。至于中教,有传闻称凌晨2点钟才关门,我虽没有实地验证过这个说法,但至少可以肯定一点:这里是考前突击的天堂。

在连续两周的时间里,每天逛一次中教,每次都有新体会。为什么这么说呢?因为看到别的同学拿什么书,就能分辨他们是什么专业的,以及他们下一门考什么。有两天一个屋子可以看见几十本《计算机控制技术》,那是我们学院的同学在研究whats the hell,又过了一天这些书全没了,取而代之的是人手一本《通信原理》,我大概知道本学院的同学差不多考完了,现在教室被信息学院的同学占领了。

当然,考试周也不能天天去教室吹空调,活动与放松还是很重要的。6月28号去看了毕业晚会,观摩俊男靓女走红毯,忽然意识到了一个问题:一楼的观众都是一对一对来的,二楼的观众都是一群一群来的(>_<) 这也算是我理特色吧。其实二楼的优势不仅限于视野好,还在于我们能把纸飞机扔到一楼,一楼的观众却扔不回来。还有一位大牛叠了一架滑翔机,飘着飘着就飘到了舞台上,赢得了全场喝彩!那位大牛很有可能是学飞行器动力工程的,能达到这样的境界没有枉费4年的学习,祝愿他在接下来的4年里可以像那架飞机一样一帆风顺(飞动工程是本硕博8年制)。另外,由于我错误地估计了电机考试的形势,把大好的时间拿去看晚会了,结果电机考得真是恶心异常,这当然是后话。