当前位置:首页 > 站长杂谈 > 正文内容

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

小宝2年前 (2022-02-26)站长杂谈889

本文来源 CSDN(ID:CSDNnews)
作者 | 苏宓
转自:百度校园



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


640 (1).jpg 13000 行代码、19 大技术,这位 16 岁高中生用 C++ 重头到尾构建了一个机器学习库!  第1张

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


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


640 (2).png 13000 行代码、19 大技术,这位 16 岁高中生用 C++ 重头到尾构建了一个机器学习库!  第2张

灵感萌生


据悉,这位网名为 @u/novak-99 的高中生开发了一个 13000+ 行代码的 C++ 机器学习库——MLPP(GitHub 地址:https://github.com/novak-99/MLPP)。值得注意的是,该库覆盖了统计学、线性代数、数值分析、机器学习、深度学习等多主题技术。
之所以开发这个库,作者解释主要有两层因素。
一是不少工程师容易忽视 ML 算法背后的具体实现与细节。
“时下其实想要实现 ML 算法并不难,但是很多工程师经常忽略其背后的实现原理和运用的技术细节”,@u/novak-99 无奈地说道。
所谓学习编程思维往往比实现某一功能的开发来得更为实在,@u/novak-99 表示,如果不了解算法背后的数学技术细节,就无法在实现某些特定用例时反过来优化 ML 算法。


640 (2).jpg 13000 行代码、19 大技术,这位 16 岁高中生用 C++ 重头到尾构建了一个机器学习库!  第3张

 来源:unsplash



确实如此,“重复造技术轮子,缺乏创新”是当前技术圈中存在的痛点之一,而在学习编程的同时,了解工具背后的实现原理,也有助于进一步提升编程思维与创新。
当提及第二个原因时,@u/novak-99 表示,“ C++ 在 ML 领域缺乏支持,使用 C++ 开发的机器学习前端库更是少之又少。
在 @u/novak-99 看来,在 TensorFlow、PyTorch、Numpy 等主流的机器学习框架中,不乏有很多库采用了 C/C++ 或某种 C/C++ 衍生工具进行优化和提高运行速度。不过,@u/novak-99 特别指出,这里的机器学习领域并非是后端开发,而是前端。


640 (3).jpg 13000 行代码、19 大技术,这位 16 岁高中生用 C++ 重头到尾构建了一个机器学习库!  第4张

 来源:unsplash

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


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


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

640 (4).jpg 13000 行代码、19 大技术,这位 16 岁高中生用 C++ 重头到尾构建了一个机器学习库!  第5张

 来源:unsplash


由此,这也让他萌生了使用 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 表示,其计划开源所有的实现文档,并详细地解释库中每个机器学习算法背后的所有数学实现,借此,希望能够对其他工程师们有所帮助。
以下是统计部分的摘录:



640 (3).png 13000 行代码、19 大技术,这位 16 岁高中生用 C++ 重头到尾构建了一个机器学习库!  第6张

在具体的项目中,@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/



扫描二维码推送至手机访问。

版权声明:本文由 菠萝博客 发布,如需转载请注明出处。

本文链接:https://boluobk.cn/post/195.html

标签: C++
分享给朋友:

相关文章

手把手教你如何配置SSL证书-虚拟主机篇

手把手教你如何配置SSL证书-虚拟主机篇

SSL证书可以提高网站的安全性,并由http://转化为https://,现在很多网站都已经配置好了SSL证书,也许你也想配置一份,这篇文章教你如何配置SSL证书。首先在阿里云或者腾讯云申请一个SSL证书(建议到亚洲诚信申请),这里以腾讯云...

哀悼日网站全站变灰CSS代码

哀悼日网站全站变灰CSS代码

为深切哀悼抗击新冠肺炎疫情斗争牺牲烈士和逝世同胞,响应国务院发布的2020年4月4日全国性哀悼活动! 新型冠状病毒肺炎疫情阻击战打响以来,全国各地抗疫工作人员与同胞们一直都战斗在一线, 对他们的付出,菠萝博客致以最崇高的敬意!为...

做好SEO你必须要知道nofollow标签存在的作用

做好SEO你必须要知道nofollow标签存在的作用

我相信有很多SEO朋友都不了解“nofollow”至少你不知道在SEO优化网站的时候怎么去运用它,之前我们写过一篇“SEO优化-网站首页设计的基本要求”,那么今天聊聊nofollow是什么意思?据百度百科解释:nofollow 是一个HTM...

利用Haproxy解决SMTP发信暴露服务器源IP的方法

最近有人问我自己搭建的WHMCS系统用SMTP发信会暴露服务器IP,在这里发一下怎么用Haproxy解决这个问题。WHMCS 经常因为邮件问题被攻击,现在来给大家介绍一个邮件转发服务器的设置办法,可以完全隐藏掉真实的源站地址。我们以 Cen...

科普VPS的线路:163、CN2、GTT、Telia等线路知识

163骨干网163骨干网也就是我们通常说的AS4134接入的带宽,是中国电信的骨干网,也就是我们经常看到202.97开头的路由,此网络负责了90%的电信业务负载(163有电信整个海外出口的90%带宽容量)。 目前直接和163有Peer比如...

[Linux]在CentOS7上部署Google BBR让你的VPS更快(含OpenVZ解决方案)

[Linux]在CentOS7上部署Google BBR让你的VPS更快(含OpenVZ解决方案)

Google BBR是一款Google开发的拥堵控制算法,通过优化和控制TCP的拥塞,充分利用带宽并降低延迟,使得服务器的带宽得到合理化应用,今天博主就教大家如何在你的VPS上安装并启用Google BBR。警告:换内核前务必做好...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。