天天看點

16歲高中生的“卷”,用13000+行代碼,從頭寫了一個C+機器學習庫

機器之心報道

機器之心編輯部

人工智能領域現在也流行高中生拯救世界了?

一個熱愛計算機的少年,16 歲就已經可以做出點東西來了,比如開發個粵語程式設計語言、拿個 Kaggle 冠軍、寫個遊戲、開發個加密貨币投資機器人、從頭建構一個 C++ 機器學習庫什麼的。

今天要介紹的就是一位從頭建構 C++ 機器學習庫的 16 歲少年(@novak-99),他的自薦帖在 reddit 上獲得了數百的點贊量。

16歲高中生的“卷”,用13000+行代碼,從頭寫了一個C+機器學習庫

他建構的這個庫(ML++)有 13000 多行代碼,涵蓋了統計、線性代數、數值分析、機器學習和深度學習等主題。

16歲高中生的“卷”,用13000+行代碼,從頭寫了一個C+機器學習庫

項目位址:https://github.com/novak-99/MLPP

@novak-99 表示,他之是以建構這個庫,是因為 C++ 是他所選擇的語言,但到了 ML 前端,C++ 卻用得非常少。

C++ 是高效的,而且有利于快速執行。是以大多數庫(如 TensorFlow、PyTorch 或 Numpy)都使用 C/ C++ 或某種 C/ C++ 衍生的語言來優化和提高速度。

但當他檢視各種機器學習算法的前端實作時,他注意到大多數算法是用 Python、MatLab、R 或 Octave 實作的。他認為,C++ 之是以在 ML 前端用得比較少,主要是因為缺乏使用者支援,以及 C++ 文法比較複雜。

與 Python 相比,C++ 的機器學習架構少得可憐。此外,即使在流行的架構(如 PyTorch 或 TensorFlow)中,C++ 的實作也不像 Python 的實作那樣完整,存在的問題包括:缺少文檔;并不是所有的主要函數都存在;沒有多少人願意貢獻,等等。

此外,C++ 不支援 Python 的 ML 套件的各種關鍵庫。Pandas 和 Matplotlib 都不支援 C++。這增加了 ML 算法的實作時間,因為資料可視化和資料分析的元素更難獲得。

是以,他就決定自己寫一個 C++ 的機器學習庫。

他還注意到,由于 ML 算法非常容易實作,是以一些工程師可能會忽略它們背後的實作和數學細節。這可能會帶來一些問題,因為在不了解數學細節的前提下,針對特定用例定制 ML 算法是不可能的。是以除了庫之外,他還計劃釋出全面的文檔,以解釋庫中每個機器學習算法背後的數學背景,涵蓋統計、線性回歸、雅可比矩陣和反向傳播等内容。以下是關于統計的部分内容:

16歲高中生的“卷”,用13000+行代碼,從頭寫了一個C+機器學習庫

打開項目,我們可以看到其中的一些細節:

涵蓋 19 大主題,這個 ML++ 足夠大且全

與大多數架構一樣,這位高中生建立的 ML++ 庫是動态的,不斷地在變化。這點在機器學習的世界尤為重要,因為每天都會有新的算法和技術被開發出來。

16歲高中生的“卷”,用13000+行代碼,從頭寫了一個C+機器學習庫

目前,ML++ 庫中正在開發以下模型和技術:

卷積神經網絡(CNN)

支援向量機(SVM)的核心

支援向量回歸

整體而言,ML++ 庫包含了 19 大主題以及相關細分内容,分别如下:

回歸(線性回歸、邏輯回歸、Softmax 回歸、指數回歸、Probit 回歸、Cloglog 回歸、Tanh 回歸)

深度、動态、規模化神經網絡(激活函數、優化算法、損失函數、正則化方法、權重初始化方法、學習率規劃器)

Prebuilt 神經網絡(多層感覺機、自編碼器、Softmax 網絡)

生成模組化(表格對抗生成網絡)

自然語言處理(Word2Vec、詞幹提取、詞袋模型、TFIDF、輔助文本處理函數)

計算機視覺(卷積操作、最大 / 最小 / 平均池化、全局最大 / 最小 / 平均池化、Prebuilt 特征向量)

主成分分析

樸素貝葉斯分類器(多項分布樸素貝葉斯、伯努利分布樸素貝葉斯、高斯分布樸素貝葉斯)

支援向量分類(原始形成、對偶形成)

K-Means 算法

K 最近鄰算法

Outlier Finder(使用标準分數)

矩陣分解(SVD 分解、Cholesky 分解、QR 分解)

數值分析(數值微分、Jacobi 向量電腦、Hessian 矩陣電腦、函數近似器、微分方程求解器)

數學變換(離散餘弦變換)

線性代數子產品

統計子產品

資料處理子產品(特征縮放、均值歸一化、One Hot 表征、反 One Hot 表征、支援的顔色空間轉換類型)

實用工具(TP/FP/TN/FN 函數、精度、召回率、準确率、F1 分數)

更多細節内容請參考原項目。

網友:這麼卷,我怎麼辦

對于 16 歲就能做出如此出色的項目,有網友不禁感歎,這個世界上的高中生都在幹些什麼啊?!我在他們這個年紀還在『啃手指頭』。而他們已經在 ICLR、NeurIPS 會議上發表論文了……

16歲高中生的“卷”,用13000+行代碼,從頭寫了一個C+機器學習庫

還有網友表示,如果高中生都在做這些事,想象一下幾年後博士申請會有多激烈吧。現在,你隻需要發表 3 篇以上的 NeurIPS 論文,将來就得獲得圖靈獎了。

看似開玩笑的話,也可以說是目前某種程度上的「卷」吧。

16歲高中生的“卷”,用13000+行代碼,從頭寫了一個C+機器學習庫

不過,也有網友指出,項目中有 13000 行代碼卻沒有測試?另一位網友認為,這是一個基于個人愛好建立的項目(pet project),并不适用于實際用例。是以,測試在這裡并不重要。

16歲高中生的“卷”,用13000+行代碼,從頭寫了一個C+機器學習庫

參考連結:

https://www.reddit.com/r/MachineLearning/comments/srbvnc/p_c_machine_learning_library_built_from_scratch/

繼續閱讀