你是从什么时候开始编程的?
据 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/