一个热爱计算机的男孩,16岁就已经可以做出一些东西了,比如开发一个粤语编程语言,赢得Kaggle冠军,编写游戏,开发加密货币投资机器人,从头开始构建C++机器学习库,等等。今天我想介绍一个16岁的男孩(@novak-99),他从零开始构建了一个C++机器学习库。他的自荐帖子在reddit上获得了数百个赞。他构建的库(ML++)有超过13,000行代码,涵盖统计、线性代数、数值分析、机器学习和深度学习等主题。项目地址: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个主要主题和相关细分,如下:回归(线性回归、Logistic回归、Softmax回归、指数回归、Probit回归、Cloglog回归、Tanh回归)深度、动态、可扩展的神经网络(激活函数、优化算法、损失函数、正则化方法、权重初始化方法、学习率规划器)预建神经网络网络(多层感知器、自动编码器、Softmax网络)生成建模(表对抗生成网络)自然语言处理(Word2Vec、词干提取、词袋、TFIDF、辅助文本处理函数)计算机视觉(卷积运算、最大/最小/平均池化、全局最大/最小/平均池化,预建特征向量)主成分分析lysis朴素贝叶斯分类器(多项式朴素贝叶斯、伯努利分布朴素贝叶斯、高斯朴素贝叶斯)支持向量分类(原始编队、对偶编队)K-Means算法K最近邻算法离群值查找器(使用标准分数)矩阵分解(SVD分解、Cholesky分解、QR分解)数值分析(数值微分、雅可比向量计算器、海森矩阵计算器、函数逼近器、微分方程求解器)数学变换(离散余弦变换)线性代数模块统计模块数据处理模块(特征缩放、均值归一化、一热Representation,InverseOneHotRepresentation,SupportedColorSpaceConversionTypes)Utilities(TP/FP/TN/FNFunctions,Precision,Recall,Accuracy,F1Score)更多细节请参考原项目。网友:这么累赘怎么办?有网友不禁感叹,这世界上的高中生16岁都在干什么?!我还在为他们的年龄咬着手指」。而且还在ICLR、NeurIPS会议上发表过论文……有网友表示,如果高中生都在做这些事情,想象一下几年后博士申请会有多激烈。现在,你只需要发表3篇以上的NeurIPS论文,就有可能在未来获得图灵奖。如果说是玩笑的话,也可以说是有一定的“量”。不过也有网友指出,项目中有13000行代码没有测试?另有网友认为,这是一个基于个人爱好创建的项目(petproject),并不适合实际用例。所以测试在这里并不重要。参考链接:https://www.reddit.com/r/MachineLearning/comments/srbvnc/p_c_machine_learning_library_built_from_scratch/
