16岁高中生的「卷」,用13000+行代码,从头写了一个C++机器学习库
人工智能領(lǐng)域現(xiàn)在也流行高中生拯救世界了?
>>>>
一個(gè)熱愛計(jì)算機(jī)的少年,16 歲就已經(jīng)可以做出點(diǎn)東西來了,比如開發(fā)個(gè)粵語編程語言、拿個(gè) Kaggle 冠軍、寫個(gè)游戲、開發(fā)個(gè)加密貨幣投資機(jī)器人、從頭構(gòu)建一個(gè) C++ 機(jī)器學(xué)習(xí)庫什么的。
今天要介紹的就是一位從頭構(gòu)建 C++ 機(jī)器學(xué)習(xí)庫的 16 歲少年(@novak-99),他的自薦帖在 reddit 上獲得了數(shù)百的點(diǎn)贊量。
他構(gòu)建的這個(gè)庫(ML++)有 13000 多行代碼,涵蓋了統(tǒng)計(jì)、線性代數(shù)、數(shù)值分析、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等主題。
項(xiàng)目地址:https://github.com/novak-99/MLPP
@novak-99 表示,他之所以構(gòu)建這個(gè)庫,是因?yàn)?C++ 是他所選擇的語言,但到了 ML 前端,C++ 卻用得非常少。
C++ 是高效的,而且有利于快速執(zhí)行。所以大多數(shù)庫(如 TensorFlow、PyTorch 或 Numpy)都使用 C/ C++ 或某種 C/ C++ 衍生的語言來優(yōu)化和提高速度。
但當(dāng)他查看各種機(jī)器學(xué)習(xí)算法的前端實(shí)現(xiàn)時(shí),他注意到大多數(shù)算法是用 Python、MatLab、R 或 Octave 實(shí)現(xiàn)的。他認(rèn)為,C++ 之所以在 ML 前端用得比較少,主要是因?yàn)槿狈τ脩糁С?#xff0c;以及 C++ 語法比較復(fù)雜。
與 Python 相比,C++ 的機(jī)器學(xué)習(xí)框架少得可憐。此外,即使在流行的框架(如 PyTorch 或 TensorFlow)中,C++ 的實(shí)現(xiàn)也不像 Python 的實(shí)現(xiàn)那樣完整,存在的問題包括:缺少文檔;并不是所有的主要函數(shù)都存在;沒有多少人愿意貢獻(xiàn),等等。
此外,C++ 不支持 Python 的 ML 套件的各種關(guān)鍵庫。Pandas 和 Matplotlib 都不支持 C++。這增加了 ML 算法的實(shí)現(xiàn)時(shí)間,因?yàn)閿?shù)據(jù)可視化和數(shù)據(jù)分析的元素更難獲得。
因此,他就決定自己寫一個(gè) C++ 的機(jī)器學(xué)習(xí)庫。
他還注意到,由于 ML 算法非常容易實(shí)現(xiàn),所以一些工程師可能會(huì)忽略它們背后的實(shí)現(xiàn)和數(shù)學(xué)細(xì)節(jié)。這可能會(huì)帶來一些問題,因?yàn)樵诓涣私鈹?shù)學(xué)細(xì)節(jié)的前提下,針對(duì)特定用例定制 ML 算法是不可能的。所以除了庫之外,他還計(jì)劃發(fā)布全面的文檔,以解釋庫中每個(gè)機(jī)器學(xué)習(xí)算法背后的數(shù)學(xué)背景,涵蓋統(tǒng)計(jì)、線性回歸、雅可比矩陣和反向傳播等內(nèi)容。以下是關(guān)于統(tǒng)計(jì)的部分內(nèi)容:
打開項(xiàng)目,我們可以看到其中的一些細(xì)節(jié):
涵蓋 19 大主題,這個(gè) ML++ 足夠大且全
與大多數(shù)框架一樣,這位高中生創(chuàng)建的 ML++ 庫是動(dòng)態(tài)的,不斷地在變化。這點(diǎn)在機(jī)器學(xué)習(xí)的世界尤為重要,因?yàn)槊刻於紩?huì)有新的算法和技術(shù)被開發(fā)出來。
目前,ML++ 庫中正在開發(fā)以下模型和技術(shù):
卷積神經(jīng)網(wǎng)絡(luò)(CNN)
支持向量機(jī)(SVM)的內(nèi)核
支持向量回歸
整體而言,ML++ 庫包含了 19 大主題以及相關(guān)細(xì)分內(nèi)容,分別如下:
回歸(線性回歸、邏輯回歸、Softmax 回歸、指數(shù)回歸、Probit 回歸、Cloglog 回歸、Tanh 回歸)
深度、動(dòng)態(tài)、規(guī)?;窠?jīng)網(wǎng)絡(luò)(激活函數(shù)、優(yōu)化算法、損失函數(shù)、正則化方法、權(quán)重初始化方法、學(xué)習(xí)率規(guī)劃器)
Prebuilt 神經(jīng)網(wǎng)絡(luò)(多層感知機(jī)、自編碼器、Softmax 網(wǎng)絡(luò))
生成建模(表格對(duì)抗生成網(wǎng)絡(luò))
自然語言處理(Word2Vec、詞干提取、詞袋模型、TFIDF、輔助文本處理函數(shù))
計(jì)算機(jī)視覺(卷積操作、最大 / 最小 / 平均池化、全局最大 / 最小 / 平均池化、Prebuilt 特征向量)
主成分分析
樸素貝葉斯分類器(多項(xiàng)分布樸素貝葉斯、伯努利分布樸素貝葉斯、高斯分布樸素貝葉斯)
支持向量分類(原始形成、對(duì)偶形成)
K-Means 算法
K 最近鄰算法
Outlier Finder(使用標(biāo)準(zhǔn)分?jǐn)?shù))
矩陣分解(SVD 分解、Cholesky 分解、QR 分解)
數(shù)值分析(數(shù)值微分、Jacobi 向量計(jì)算器、Hessian 矩陣計(jì)算器、函數(shù)近似器、微分方程求解器)
數(shù)學(xué)變換(離散余弦變換)
線性代數(shù)模塊
統(tǒng)計(jì)模塊
數(shù)據(jù)處理模塊(特征縮放、均值歸一化、One Hot 表征、反 One Hot 表征、支持的顏色空間轉(zhuǎn)換類型)
實(shí)用工具(TP/FP/TN/FN 函數(shù)、精度、召回率、準(zhǔn)確率、F1 分?jǐn)?shù))
更多細(xì)節(jié)內(nèi)容請(qǐng)參考原項(xiàng)目。
網(wǎng)友:這么卷,我怎么辦
對(duì)于 16 歲就能做出如此出色的項(xiàng)目,有網(wǎng)友不禁感嘆,這個(gè)世界上的高中生都在干些什么啊?!我在他們這個(gè)年紀(jì)還在『啃手指頭』。而他們已經(jīng)在 ICLR、NeurIPS 會(huì)議上發(fā)表論文了……
還有網(wǎng)友表示,如果高中生都在做這些事,想象一下幾年后博士申請(qǐng)會(huì)有多激烈吧?,F(xiàn)在,你只需要發(fā)表 3 篇以上的 NeurIPS 論文,將來就得獲得圖靈獎(jiǎng)了。
看似開玩笑的話,也可以說是目前某種程度上的「卷」吧。
不過,也有網(wǎng)友指出,項(xiàng)目中有 13000 行代碼卻沒有測(cè)試?另一位網(wǎng)友認(rèn)為,這是一個(gè)基于個(gè)人愛好創(chuàng)建的項(xiàng)目(pet project),并不適用于實(shí)際用例。因此,測(cè)試在這里并不重要。
參考鏈接:
https://www.reddit.com/r/MachineLearning/comments/srbvnc/p_c_machine_learning_library_built_from_scratch/
—版權(quán)聲明—
來源:機(jī)器之心,編輯:nhyilin
僅用于學(xué)術(shù)分享,版權(quán)屬于原作者。
若有侵權(quán),請(qǐng)聯(lián)系微信號(hào):Eternalhui或nhyilin刪除或修改!
—THE END—
文章推薦
?50張動(dòng)圖帶你走進(jìn)神奇的物理生物化學(xué)世界,超震撼!
?重返數(shù)學(xué)史的黃金時(shí)代,由數(shù)學(xué)推動(dòng)誕生的人工智能,一部人類智慧形成的歷史
?高等數(shù)學(xué)和數(shù)學(xué)分析教材推薦及學(xué)習(xí)方法淺談
?藝術(shù)中蘊(yùn)含的數(shù)學(xué)原理
?物理學(xué)四大神獸,除了“薛定諤的貓”, 你還知道哪幾個(gè)?
?法國(guó)數(shù)學(xué)長(zhǎng)盛不衰的歷史淵源
總結(jié)
以上是生活随笔為你收集整理的16岁高中生的「卷」,用13000+行代码,从头写了一个C++机器学习库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中科院院士:最让人讨厌的10种研究生导师
- 下一篇: 科研人的暑假:学长下地中暑,博士小姐姐留