文前声明:这篇文章没有一个观点是自己的,我只是把同事大牛的观点给汇总了起来。
接触算法到现在满打满算也就两年的时间,但是甚至就在两个月前我还处于拣起一篇paper就开始读,然后去实现他们的算法。然后去测试一下效果好不好。很久的时间下来,我都感觉自己其实没什么太大的进步,甚至感觉遇到了一个瓶颈。因为我觉得自己其实并没有真的对算法知识形成一个体系,除了书上讲的皮毛之外,自己其实一直在沉迷于实现一些算法的奇技淫巧,而看着身边的那些PHD们,我有的除了自卑也没剩下其他的了。于是我开始请教那些大神级同事们,于是自己总结了一下,也在这段时间来试用了一个多月的时间,发现其实效果不错,那么就在这里分享下,算是给自己一个里程碑式的纪念,也希望能帮到和我以前一样处在迷茫期的大家~
来到算法组两年的时间有三个人是对我影响最大的,我分别说下每个人对我说的话吧:
1. 还记得我刚来算法组的时候,我不懂TFIDF是什么,更不要说什么SVD,LDA了听都没听过,不懂user-based和item-based的区别,甚至连贝叶斯公式都写不全。在最初的一段时间,我看别人的代码,半懂不懂地听组会分享,然后实现一个又一个现在看来很幼稚的算法,感觉进步是飞速的。接过来一个算法需求,我就去网上找篇paper,然后把算法给实现了就丢给产品线用。
这个时候,同事A对我讲,“算法工程师不是懂一些数学,会写些算法就行了,算法工程师最重要的技能,在于如何定义问题,然后接下来才是如何解决这个问题。”从那以后,当面临一个需求时,我更愿意分析这个需求的关键点在哪,然后从大脑里搜索已有的东西能不能解决这个问题,比如FM的算法缺乏多样性,那么我想一下我看过的解决多样性的paper都有什么?能不能用在这个上面。如果不能,我再对应去搜问题的关键字,而不是算法的关键字。
2. 转眼间一年过去了,虽说看过的paper不够多,但是可以应付大部分的需求了。但是我开始迷茫起来,我觉得自己在实现一个又一个的算法trick,知道一个算法可以用,我就去网上down一个对应的算法包,然后把数据丢进去。没了......那么我的出路到底在哪?我的核心竞争力在哪?在于知道这么个东西,然后变成跑准备数据的么?
这个时候,同事B给我讲了到底博士是如何完成一个毕业设计的,几百篇论文作为基础。那是不是把几百篇论文全都和我以前一样一字不差的看完?PHD为什么很容易进入到一个他之前所未知的领域,在于在研究领域所积累的一套方法论。言归正传:
当接触到一个新的算法时要怎么去入手?用SVM举例吧:
第一,去找SVM的Survey,每一个成熟的算法分支必定有着survey这样的汇总性paper,通过这个paper,我们大致可以了解这个算法为什么出现,最基本的算法原型是什么样的,接下来后人对他做了什么样的改进,他到底还有什么问题。
第二,弄懂这个算法的来龙去脉,为什么出现,出现是因为改进了前面算法所不能做的什么事情?例如我们为什么不用基本的线性分类器?和用传统的分类算法找到一个超平面区别在于哪?
第三,知道了来龙去脉,我们还要知道这个算法的缺点在哪?不能适用于什么?我们怎么知道?这个就涉及到如何来快速地过一遍一篇paper。
第四,Abstract是最重要的,他告诉了我们这篇paper发的目的是什么?他想解决什么问题?然后是Future Work,之所以有着FutureWork是因为这个算法还有一些问题没有解决,这个就告诉了我们当前算法还有什么缺点?
第五,递归再去看这个缺点是否有其他的研究者已经解决掉了。
那么我们为什么看paper,为什么实现某算法,我归结为两点:
1. 学习目的,扩展思路,如果处于这种目的,理解paper的精髓是最重要的。
2. 解决实际问题。那么应该丢弃的观点是我最初那样拿过来一篇paper也没理解透彻也不知道能不能解决问题,也不知道到底是不是可行,就先实现了再说。劳民伤财~
3. 我自认为自己还算努力,看了很多书,看了很多算法,但是其实有时候说起来,比如用PCA还是SVD,他们到底有什么区别,我们如何选择,我其实还是不明白。
这时,同事C对我说,理解一个算法,最重要的是要理解这个算法的世界观,这个算法背后的哲学基础是什么?只有理解了这个,才算理解一个算法。
用Boosting来举例,他背后的世界观是PAC原则。那么Boosting为什么不能引入一个强分类器,因为这个做个类比就相当于Boosting原本是美国的民主政治,一旦引入了一个强势的领导,就一下子变成了当年毛爷爷时候的政治了。Boosting的世界观就崩塌掉了。至于说Boosting最终是如何调整数据集的权重,这些就都属于了细节的层面。
最后,补充一个同事D,无意间的话让我发觉自己要变得更优秀才行:
同事D在搜Resys,有一个快照上面写着:本科生Resys十佳论文。同事扭头对我说,靠,现在本科生都可以发Resys paper了。让我意识到了自己其实在原本上差距有多大,我要付出更大的努力才能弥补这些也许别人觉得无法跨越的鸿沟。
最后,感谢这个优秀的团队,让我进步,帮我进步,督促我进步,催促我进步~
谢谢你们让我知道到底什么才是优秀的算法工程师,有时候甚至看着差距让我都感到有些绝望~
谢谢你们,每个人~
接触算法到现在满打满算也就两年的时间,但是甚至就在两个月前我还处于拣起一篇paper就开始读,然后去实现他们的算法。然后去测试一下效果好不好。很久的时间下来,我都感觉自己其实没什么太大的进步,甚至感觉遇到了一个瓶颈。因为我觉得自己其实并没有真的对算法知识形成一个体系,除了书上讲的皮毛之外,自己其实一直在沉迷于实现一些算法的奇技淫巧,而看着身边的那些PHD们,我有的除了自卑也没剩下其他的了。于是我开始请教那些大神级同事们,于是自己总结了一下,也在这段时间来试用了一个多月的时间,发现其实效果不错,那么就在这里分享下,算是给自己一个里程碑式的纪念,也希望能帮到和我以前一样处在迷茫期的大家~
来到算法组两年的时间有三个人是对我影响最大的,我分别说下每个人对我说的话吧:
1. 还记得我刚来算法组的时候,我不懂TFIDF是什么,更不要说什么SVD,LDA了听都没听过,不懂user-based和item-based的区别,甚至连贝叶斯公式都写不全。在最初的一段时间,我看别人的代码,半懂不懂地听组会分享,然后实现一个又一个现在看来很幼稚的算法,感觉进步是飞速的。接过来一个算法需求,我就去网上找篇paper,然后把算法给实现了就丢给产品线用。
这个时候,同事A对我讲,“算法工程师不是懂一些数学,会写些算法就行了,算法工程师最重要的技能,在于如何定义问题,然后接下来才是如何解决这个问题。”从那以后,当面临一个需求时,我更愿意分析这个需求的关键点在哪,然后从大脑里搜索已有的东西能不能解决这个问题,比如FM的算法缺乏多样性,那么我想一下我看过的解决多样性的paper都有什么?能不能用在这个上面。如果不能,我再对应去搜问题的关键字,而不是算法的关键字。
2. 转眼间一年过去了,虽说看过的paper不够多,但是可以应付大部分的需求了。但是我开始迷茫起来,我觉得自己在实现一个又一个的算法trick,知道一个算法可以用,我就去网上down一个对应的算法包,然后把数据丢进去。没了......那么我的出路到底在哪?我的核心竞争力在哪?在于知道这么个东西,然后变成跑准备数据的么?
这个时候,同事B给我讲了到底博士是如何完成一个毕业设计的,几百篇论文作为基础。那是不是把几百篇论文全都和我以前一样一字不差的看完?PHD为什么很容易进入到一个他之前所未知的领域,在于在研究领域所积累的一套方法论。言归正传:
当接触到一个新的算法时要怎么去入手?用SVM举例吧:
第一,去找SVM的Survey,每一个成熟的算法分支必定有着survey这样的汇总性paper,通过这个paper,我们大致可以了解这个算法为什么出现,最基本的算法原型是什么样的,接下来后人对他做了什么样的改进,他到底还有什么问题。
第二,弄懂这个算法的来龙去脉,为什么出现,出现是因为改进了前面算法所不能做的什么事情?例如我们为什么不用基本的线性分类器?和用传统的分类算法找到一个超平面区别在于哪?
第三,知道了来龙去脉,我们还要知道这个算法的缺点在哪?不能适用于什么?我们怎么知道?这个就涉及到如何来快速地过一遍一篇paper。
第四,Abstract是最重要的,他告诉了我们这篇paper发的目的是什么?他想解决什么问题?然后是Future Work,之所以有着FutureWork是因为这个算法还有一些问题没有解决,这个就告诉了我们当前算法还有什么缺点?
第五,递归再去看这个缺点是否有其他的研究者已经解决掉了。
那么我们为什么看paper,为什么实现某算法,我归结为两点:
1. 学习目的,扩展思路,如果处于这种目的,理解paper的精髓是最重要的。
2. 解决实际问题。那么应该丢弃的观点是我最初那样拿过来一篇paper也没理解透彻也不知道能不能解决问题,也不知道到底是不是可行,就先实现了再说。劳民伤财~
3. 我自认为自己还算努力,看了很多书,看了很多算法,但是其实有时候说起来,比如用PCA还是SVD,他们到底有什么区别,我们如何选择,我其实还是不明白。
这时,同事C对我说,理解一个算法,最重要的是要理解这个算法的世界观,这个算法背后的哲学基础是什么?只有理解了这个,才算理解一个算法。
用Boosting来举例,他背后的世界观是PAC原则。那么Boosting为什么不能引入一个强分类器,因为这个做个类比就相当于Boosting原本是美国的民主政治,一旦引入了一个强势的领导,就一下子变成了当年毛爷爷时候的政治了。Boosting的世界观就崩塌掉了。至于说Boosting最终是如何调整数据集的权重,这些就都属于了细节的层面。
最后,补充一个同事D,无意间的话让我发觉自己要变得更优秀才行:
同事D在搜Resys,有一个快照上面写着:本科生Resys十佳论文。同事扭头对我说,靠,现在本科生都可以发Resys paper了。让我意识到了自己其实在原本上差距有多大,我要付出更大的努力才能弥补这些也许别人觉得无法跨越的鸿沟。
最后,感谢这个优秀的团队,让我进步,帮我进步,督促我进步,催促我进步~
谢谢你们让我知道到底什么才是优秀的算法工程师,有时候甚至看着差距让我都感到有些绝望~
谢谢你们,每个人~