當前位置: 華文問答 > 數位

有沒有必要把機器學習演算法自己實作一遍?

2015-10-22數位

不少自學的朋友很容易陷入到焦慮當中,尤其是在學習理論受挫之後。 再加上不少人是碼農出身,實作演算法是就成了最容易緩解焦慮的途徑。

然而要警惕掉到「用忙碌而逃避困難「的陷阱當中去,更好的緩解焦慮的方法是套用演算法,去解決具體問題。 眾所周知,機器學習最不友好的部份不是編程,而是背後的數學原理,以及如何使用它來解決問題。照我來看,只有兩種情況值得動手造輪子:

  • 做研究,沒現成的輪子可用。以我的個人經驗和觀察,大部份研究的demo品質都比較堪憂。側面上反映了「科研工作者不等於好工程師」
  • 對自己的學習進度感到懷疑,可以試著實作一下演算法。但這種實作最多是驗證你學會了思路,而不能用於生產,因為效率和最佳化都比較差
  • 除此之外,對於研究者來說,復現前沿研究也有一定的價值,因為可能:

  • 作者並沒有開源(必須自己造輪子)
  • 在復現過程中你可能會發現作者值得改進的方向,發掘了新的灌水方向
  • 在復現過程中你可能發現作者的思路其實根本就是錯的,這也是為什麽很多paper不會公開程式碼,那麽避開這個陷阱
  • 對於大部份人而言,想要了解怎麽調參、每個參數的含義,都不必重新實作演算法。可以直接閱讀文件,也可以在在各種場景中慢慢摸索。比如參加比賽的過程中,或者實際工作裏,甚至看看部落格、讀讀知乎都可以有些收獲。 同時,如果能夠透過解決實際問題來加深對模型的理解,還可以增強自己的信心,比實作演算法可能要更為劃算且有效。

    在不少公司,機器學習研究員和工程師是兩個崗位,前者提出思路和理論,後者去高效的實作。從這點上也不難看出一個實踐者不一定需要具備兩方面技能,畢竟時間有限。 如果你對自己的定位是使用者(更接近工程師的話),多補補理論是當務之急。如果你想成為一個研究者,必要的編程能力要有,但不要花過多的時間在提高碼力上,能做好理論已經很難,可以交給工程師實作、最佳化你的理論。

    所以,沒什麽特殊情況,實作演算法可以當做玩票,多看看模型、了解一些理論、套用到具體案例上去才是正事。

    對於自學的朋友,也可以參考一下我的文章:如何用3個月零基礎入門機器學習?