16 歲高中生的"卷":用 13000+ 行代碼,從頭寫了一個 C++ 機器學習庫
來源:機器之心
人工智能領域現在也流行高中生拯救世界了?
一個熱愛計算機的少年,16 歲就已經可以做出點東西來了,比如開發個粵語編程語言、拿個 Kaggle 冠軍、寫個游戲、開發個加密貨幣投資機器人、從頭構建一個 C++ 機器學習庫什么的,
今天要介紹的就是一位從頭構建 C++ 機器學習庫的 16 歲少年(@novak-99),他的自薦帖在 reddit 上獲得了數百的點贊量,

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

專案地址: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 演算法是不可能的,所以除了庫之外,他還計劃發布全面的檔案,以解釋庫中每個機器學習演算法背后的數學背景,涵蓋統計、線性回歸、雅可比矩陣和反向傳播等內容,以下是關于統計的部分內容:

打開專案,我們可以看到其中的一些細節:
涵蓋 19 大主題,這個 ML++ 足夠大且全
與大多數框架一樣,這位高中生創建的 ML++ 庫是動態的,不斷地在變化,這點在機器學習的世界尤為重要,因為每天都會有新的演算法和技術被開發出來,

目前,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 會議上發表論文了……

還有網友表示,如果高中生都在做這些事,想象一下幾年后博士申請會有多激烈吧,現在,你只需要發表 3 篇以上的 NeurIPS 論文,將來就得獲得圖靈獎了,
看似開玩笑的話,也可以說是目前某種程度上的「卷」吧,

不過,也有網友指出,專案中有 13000 行代碼卻沒有測驗?另一位網友認為,這是一個基于個人愛好創建的專案(pet project),并不適用于實際用例,因此,測驗在這里并不重要,

參考鏈接:
https://www.reddit.com/r/MachineLearning/comments/srbvnc/p_c_machine_learning_library_built_from_scratch/
開源前哨日常分享熱門、有趣和實用的開源專案,參與維護 10萬+ Star 的開源技術資源庫,包括:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/431046.html
標籤:AI
下一篇:演算法競賽常用OJ食用指南
