什麼叫對某樣事物有靈氣?


先談一些我自己的理解。可能會略微有些發散,但是核心觀點應該是說清楚了。

---------------------------------------------------------------------------------------------------------------

記得以前跟朋友討論問題,他提到過有些同事在演算法方面表現出不同於常人的靈氣。

那個時候自己在演算法方面剛入門,還不太知道這個行當裡面的know-how,只是記住了這句話,還沒有辦法形成自己的分析和判斷。

等到也在這個方面有了一些沉澱和積累,見識了一些從業同行,做過一些項目,也讀了不少paper和資料之後,對「在演算法方面有靈氣」這件事情就開始有了自己的一些觀點。

演算法這個領域跟系統領域有些不同的是,這個領域非常的dynamic,所需要解決的問題也往往非常的ill-defined,所以在解決問題的過程中經常需要結合具體的問題場景,從tool box里進行選擇組合,甚至作一定的變形。

舉個例子來說,要解決一個分類問題,那麼是選擇LR這樣的線性分類器呢,還是GBDT, RF這樣的非線性分類器,或者說乾脆直接上基於統計的Naive Bayes?(Quora里關於這個問題有一些不錯的討論 What are the advantages of different classification algorithms? )

如果定下了使用哪個分類器,那麼在特徵的處理上需要有什麼考慮?LR的話,可能會需要對特徵進行異常點的removal以及normalization,以減少outlier值對模型的影響,還可能需要對特徵作一些離散化,以引入一些非線性的建模能力。GBDT,RF的話,就需要考慮你的特徵特點是否適用,低維dense特徵是適用的,高維稀疏特徵則未必適合。

模型和特徵大概定下來了,接下來還有調參的工作,LR模型是用L1還是L2做正則,還是兩者結合(Netflix的前工程總監Xavier Amatrian有一個不錯的回答Xavier Amatriains answer to What is the difference between L1 and L2 regularization?)?正則化的係數設成多少合適?求解演算法是用GD,Newton,LBFGS還是FTRL?選擇LBFGS的話用於approximate Hessian陣的Rank設成多少比較合適? GBDT的話,樹的個數設成多少比較合適?樹的depth和終端結點下葉子結點的最小數設成多少可以達到期望的正則化效果?

調參基本上有些著落了。還有數據的問題需要考慮,在演算法領域,幾個common sense是garbage in, garbage out,以及優化演算法的通常路徑是數據 &> 特徵 &> 模型(注意:這句話的含義並不是讓我們忽略最耗費腦細胞的模型環節,而是提醒我們不要陷入孔乙已的誤區,過分糾結於模型的細節,而忽略了對待解決問題本質的關注,我個人以為,過分under-estimate和over-estimate模型都是很糟糕的事情。在Quora有一篇很精彩的相關討論 http://www.quora.com/In-machine-learning-is-more-data-always-better-than-better-algorithms)。具體來說,訓練數據的分布是否具備足夠的統計規律性(需要通過統計量的計算來獲得一些認知)?如果數據本身不靠譜,再多的特徵設計 ,模型優化也不會帶來太多gain。數據如何切分為訓練集和測試集會比較適宜(在有些業務場景里,定義訓練集和測試集未必那麼straightforward,還是蠻有些tricky的地方的,想像一下,一條樣本從產生x變數,到生成明確的標籤y,如果時間間隔非常長的話,實際上會給訓練集和測試集的定義帶來一些小麻煩)?是否有可能引入更多的不同來源的業務數據來改進效果?如果數據量很大的話,是否可以對數據進行採樣?如果需要對數據進行採樣的話,是直接進行uniform distribution的採樣,還是使用stratified sampling(Stratified sampling)?

數據,特徵,模型的事情基本上搞乾淨了,開始啟動演算法優化工作,那總得有個評估metric好讓我們判斷是不是已經優化到合適的目標了吧。評估metric的建立也有小的講究。有些場景下只看Precision/Recall/F1 Score就足夠了,但是還有些時候僅僅看這些指標是有偏的,這個時候就需要依賴於其他指標(正負樣本分布不均的時候,看AUC就更合適)。而這些指標大體上還是business-independent的metric,具體到一個個業務場景里,還需要一些business-dependent的metric,在線廣告的話,我們需要關於CPC/RPM的變化,金融領域的話,需要關於KS/Lift/Bad Rate的指標。 這些指標的變化趨勢並不能完全保持其同向性,所以在評估過程中往往還需要結合業務理解,對演算法優化的效果形成判斷。

評估做完了,接下來該上線了,但事情並不是直接發布上線,觀察是否有bug就可以完事了那麼簡單。線上環境有可能跟評估環境存在一定的差異,線下效果好的策略,上線之後,發現效果不升反降也不是稀罕事。遇到這種情況,只能case by case的分析,甚至重做整個策略都有可能。

說了這麼一圈,其實是想表達這樣一個觀點,演算法工作的這種dynamic性質,自然就要求從業人員要比較靈活,能夠在dynamic的場景下結合具體問題作出適配,又因為很難建立起高覆蓋率的操作層面的rule of thumb來覆蓋絕大多數問題場景,也就需要從業人員閱讀大量的資料,跟進最新的進展。所以一個合格的演算法人員,在解決問題的過程中,表現出靈活的分析判斷能力,而且能羅列出很多的知識細節以及技術動態,在我看來是基本的素養表現,但是恐怕還不能算是有靈氣。

什麼情況下可以被認為是在演算法領域有靈氣呢?我想起了共事過的一位非常資深的演算法同事,這是個老大哥,在演算法領域有過非常長時間的積累。跟他一起討論問題,他遇到問題所表現出的第一反應,看起來並不是很有靈氣的感覺,甚至比常人會慢半拍。後來我注意觀察之後,發現他往往不願意輕易對問題下迅速的判斷,或者說我更認為是因為他見過 的問題太多,深度的思考太多,所以他對於演算法問題擔心形成誤讀,往往不願意輕易下判斷。但是一但進入到一些detail的討論,他就會表現出驚人的把控力,具體到一個超參數的設置會對模型求解過程帶來什麼樣的影響,一個特徵處理的小trick可能對模型效果帶來的impact,特徵的某個特殊取值對特徵訓練權值的影響,他都會表現出精確的控制力和判斷力。在我看來,這實在是一種大巧不工的craftman精神,更像是一種靈氣的外延表現。

回到標題,我個人的感覺,除了極少數天才(比如哈代評價拉瑪努金,說自然數是拉瑪的朋友)之外,大多數情況下,所謂靈氣還是源於在某個領域非常深度的積累,在對這個領域擁有了深刻的認知和把控之後,建立起了一種「能夠清楚地把控它的每一寸肌膚」的協調感。而除此之外的表現,比如說能夠捕捉到領域中最新的進展和動態,能夠把一些概念說得清楚明白,充其量算是幾分聰明和努力而已,談不上厚重(說到這裡要提醒一下自己,咳咳)。

想起了我剛工作做編譯器的時候,我的老闆(也是我的好朋友)覺得我做編譯器有天分和靈氣,因為他看到自己能夠比一些老員工更迅速地解決掉一些詞法,語法分析的問題,而且還經常能深入到lex/yacc的細節里,通過一些hack性質的手段找到問題的solution。我當時還蠻認真地跟他說,真不覺得自己做編譯器有天分。因為我自己在大學學編譯原理的時候,因為好奇,花了大量的精力在這門課程上,教科書上所有課堂布置過的作業和未布署的作業我自己都做了一遍,還自己花了挺大的精力嘗試寫了一個類似Bison的LALR compiler of compiler,雖然最終沒有能夠完成,但確實幫助自己對編譯原理的基礎概念建立起了比較深入的理解,所以在第一份工作中,自己能夠比其他同事更快地找到解決編譯器相關問題的線索。 當時我的朋友看到了我在編譯器方面的靈氣和天分,那其實只是我之前花了很多的精力在編譯器方面進行積累的自然產物。

最後切個題,我個人的觀點,絕大多數的靈氣,來源於在某個領域長期持續積累的產出,而靈光一現的念頭和對前沿技術點的把握和了解,以及知識點的串接是不足以構成靈氣的。


推薦閱讀:

與自己和解
「兒子,我希望你忘了我"她走了,並親手給自己寫下墓志銘:心智障礙權利倡導者!
《巨嬰國》:簡陋的心理學科普,成功的暢銷書
識別自動思維 —— HackYourself 避稅手冊之二
大哉問02 - 如何愛自己?擬一份愛的宣言

TAG:心智 | 職業規劃 | 感悟 | 心智成熟 |