16 岁高中生的"卷":用 13000+ 行代码,从头写了一个 C++ 机器学习库

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 等。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容