手動編寫機器學習算法的若干理由

jopen 8年前發布 | 18K 次閱讀 算法 數據挖掘

隨著開源思想的逐漸興起,很多機器學習領域的算法都已經實現為開源的庫、包或代碼。如何在這些已有資源的基礎上進行高效開發,是最近幾年熱議的話題。那么,是不是公司或個人就不需要再對這些算法進行手動實現了呢?近日,Quora網站發起了對于 以下問題的討論 :為什么有這么多API還要手動編寫機器學習算法呢?

首先,Quora的工程副總裁 Xavier Amatriain 從公司的角度回答了該問題。Xavier表示,作為一個公司,選擇自己開發機器學習算法的原因可以歸結為以下幾點:

  1. 性能。很多公開的算法實現的效率并不高。如果項目對于該算法的執行效率有一定的要求,自己進行重新實現不失為一個好的選擇。
  2. 正確性。很多開源的算法實現是存在功能缺陷的。它們很多只是針對簡單的測試集進行了部分驗證,并不能保證很多邊界情況或者大規模測試的正確性。事實上,很多算法包/庫并沒有進行很好的單元測試和功能測試。因此,算法本身存在bug也不足為奇。公司也可以選擇在此基礎上進行完善,然后再反饋給社區。但是,在多數情況下,重新實現算法的代價更低一些。
  3. 編程語言。以 Libsvm 為例,它只存在C++和Java的開源版本。如果希望用Python或其他語言實現,公司只能自行開發。
  4. 系統集成。更多情況下,算法只是整個系統的一部分。系統需要集成很多的庫和資源。如果這些庫或資源分別來自scikit-learn、Tensorflow、Theano以及Ranklib等不同的地方,系統集成勢必要花費大量的時間和精力。相比而言,自己開發這些算法可能要高效很多。
  5. 版權。對于公司而言,即使采用開源算法,也可能存在版權問題。因此,自己開發要安全很多,可以有效避免版權糾紛。

接下來, Charles Gee 則站在個人的角度上,分析了手動實現機器學習算法的好處。

  • 作為一個初學者,自己實現算法有助于幫助理解算法的工作原理及其實現細節。直接使用現成的包的確有助于加速產品研發,但卻阻礙了工程師對其內部的理解。
  • 作為一個研究人員,自己實現算法可以掌握和修改所有的細節。在研究過程中,工程師難免需要修改算法的一些內部實現細節,或者輸入接口。現成的庫或包未必能夠滿足這些需求。
  • 作為一名老師,自己實現算法有利于教學任務的深入淺出。老師可以將算法的具體運行過程呈現給學生,便于學生一步步慢慢理解。
  • 作為用戶,自己實現算法可以方便調試或完善功能。

Simon Maby 表示,一般需要自己實現算法的情況包括:

特殊的性能需求、Q-learning和定制化的代價與功能、特殊的應用領域等。此外, Chomba Bupe 將原因歸結為創新、不同的項目目標、代碼安全、兼容性以及深度理解五個方面。 Shehroz Khan 則主要從理解和掌控代碼的角度出發,認為手動實現算法有助于進一步刪減或擴展部分功能以及開發新的相關算法。最后,多年從事 有限元分析(Finite Element Analysis,FEA)Debiprasad Ghosh 預測,機器學習社區未來會出現與FEA社區類似的分化:絕大部分成員要么為用戶,要么為專家。用戶主要了解商用軟件和產品;而專家主要關心不同的開源代碼和FEA的內部細節,用于進一步的研發。因此,機器學習領域也需要一批掌握算法細節的專家,來指導算法未來的發展。

</div>

來自: http://www.infoq.com/cn/news/2015/12/manual-machine-algorithm-reason

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!