社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

13000行代码、19大技术,这位16岁高中生用C++从头到尾构建了一个机器学习库!

程序人生 • 3 年前 • 204 次点击  
作者 | 苏宓
出品 | CSDN(ID:CSDNnews)

你是从什么时候开始编程的?

据 CSDN 调研数万名开发者的数据显示,近六成的开发者表示自己写下第一行代码的年龄是在 16-20 岁间。其次有 31.68% 的受访者是在 21-25 间首次接触了编程。

不得不承认,编程的主力军越来越趋于年轻化。不过也有不少网友表示,“这纯属是别人家的孩子,我的高中可能还是在玩泥巴”。

又属有些拉“嫉妒”系列,近日国外再次有一位别人家的孩子荣登热搜。起因于其在 Reddit 发布了一篇主题为《一个 16 岁的高中生从零开始构建 C++ 机器学习库》的帖子,引来数百个用户的点赞与评论。


灵感萌生

据悉,这位网名为 @u/novak-99 的高中生开发了一个 13000+ 行代码的 C++ 机器学习库——MLPP(GitHub 地址:https://github.com/novak-99/MLPP)。值得注意的是,该库覆盖了统计学、线性代数、数值分析、机器学习、深度学习等多主题技术。

之所以开发这个库,作者解释主要有两层因素。

一是不少工程师容易忽视 ML 算法背后的具体实现与细节。

“时下其实想要实现 ML 算法并不难,但是很多工程师经常忽略其背后的实现原理和运用的技术细节”,@u/novak-99 无奈地说道。

所谓学习编程思维往往比实现某一功能的开发来得更为实在,@u/novak-99 表示,如果不了解算法背后的数学技术细节,就无法在实现某些特定用例时反过来优化 ML 算法。

确实如此,“重复造技术轮子,缺乏创新”是当前技术圈中存在的痛点之一,而在学习编程的同时,了解工具背后的实现原理,也有助于进一步提升编程思维与创新。

当提及第二个原因时,@u/novak-99 表示,“ C++ 在 ML 领域缺乏支持,使用 C++ 开发的机器学习前端库更是少之又少。

@u/novak-99 看来,在 TensorFlow、PyTorch、Numpy 等主流的机器学习框架中,不乏有很多库采用了 C/C++ 或某种 C/C++ 衍生工具进行优化和提高运行速度。不过,@u/novak-99 特别指出,这里的机器学习领域并非是后端开发,而是前端。

@u/novak-99 表示,其上手的第一门编程语言就是 C++,这门语言高效且有利于快速执行。因此他在 15 岁开始学习了解各种机器学习算法实现时,发现大多数都是用 Python、MatLab、R、Octave 来实现的。

”尤其是与 Python 的数量相比,C++ 机器学习中的框架数量相形见绌。此外,即使在 PyTorch 或 TensorFlow 等流行的框架中,C++ 的实现也没有 Python 的那么完整:缺乏文档参考、并非所有的主要功能都能应用上、没有多少人愿意贡献等等。

此外,C++ 不支持 Python 的 ML 套件的各种关键库;Pandas 缺乏对 C++ 的支持,Matplotlib 也是如此。这增加了 ML 算法的实现时间,因为数据可视化和数据分析的元素更难获得。

由此,这也让他萌生了使用 C++ 开发一个机器学习库的想法:

C++ 在 ML 领域缺乏使用的主要原因是由于缺乏用户支持和 C++ 的复杂语法。Python 有数千个用于数学、线性代数、机器学习和深度学习的库和包,而 C++ 没有这种用户支持。现在,你可以期待一下使用 C++ 开发的最强大的机器学习库。

不过,针对这一点,有不少人反驳道:

实际上,大多数(/所有相关的)ML 框架都是用 C++ 实现的。

Pytorch、Tensorflow 等只是提供广泛的 Python 绑定,以便开发者能够更快地进行实验和开发。所有繁重的工作量都在极其优化的 C++/C/CUDA 代码中处理。

在大多数情况下,Python 性能和开销是可以忽略的。例如,在 1 小时的过程中节省 10 秒并不是什么大问题,尤其是当您仍处于实验阶段时。

如果你想不惜一切代价避免使用 Python,你可以使用 Pytorch 的 C++ API。

不过,无论 @u/novak-99 对 C++ 在 ML 领域的应用情况判断是否有误,其初心仅是想要进一步让 C++ 在 ML 领域得以应用,同时也想呼吁更多的开发者多关注算法背后的实现。


具体实现

@u/novak-99 表示,其计划开源所有的实现文档,并详细地解释库中每个机器学习算法背后的所有数学实现,借此,希望能够对其他工程师们有所帮助。

以下是统计部分的摘录:

在具体的项目中,@u/novak-99 所开发的 ML++ 覆盖回归、Prebuilt 神经网络、自然语言处理、计算机视觉等 19 大技术主题,53+ 技术细节,以此想要将其成为普通开发者和机器学习工程师之间的桥梁:

与此同时,ML++ 也在紧随技术实时更新,除了以上,ML++ 还聚焦:

  • 卷积神经网络

  • 支持向量机的内核

  • 支持向量回归


写在最后

别人的 16 岁,或许对于技术的趋势判断有误,或许开发的算法暂时并不能在实践中应用,或许还存在许多的不足,但是作为一个高中生,他的编程思想、实践操作仍值得我们为其喝彩与学习!

参考资料:

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

《新程序员003》正式上市,50余位技术专家共同创作,云原生和数字化的开发者们的一本技术精选图书。内容既有发展趋势及方法论结构,华为、阿里、字节跳动、网易、快手、微软、亚马逊、英特尔、西门子、施耐德等30多家知名公司云原生和数字化一手实战经验!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/127538