许多 AI 研究论文的作者(例如 arXiv)从头开始编写他们的神经网络,使用 C++ 等低级语言来实现他们的理论。现有的开源框架是否也可以用于此目的,或者它们的实现是否过于有限?
例如,TensorFlow 能否用于构建一个原始网络架构,以显示对现有基准的改进?可以将原始数学工作编码到 TensorFlow 之类的高级框架中,以便在论文中展示对网络架构/方法的原始研究吗?
快速搜索会发现许多在其实现中使用 C++ 的论文:
许多 AI 研究论文的作者(例如 arXiv)从头开始编写他们的神经网络,使用 C++ 等低级语言来实现他们的理论。现有的开源框架是否也可以用于此目的,或者它们的实现是否过于有限?
例如,TensorFlow 能否用于构建一个原始网络架构,以显示对现有基准的改进?可以将原始数学工作编码到 TensorFlow 之类的高级框架中,以便在论文中展示对网络架构/方法的原始研究吗?
快速搜索会发现许多在其实现中使用 C++ 的论文:
您说研究人员使用 C++ 或其他一些低级库从头开始构建网络的说法与事实相去甚远。
你可以看看这个分析,显示这两个框架在顶级 ML 会议中的流行度。下图取自那里。
例如,在 CVPR-2020 中,TensorFlow 和 pytorch 结合了 500 多篇论文!此外,由于两个最活跃的研究实体(谷歌和 Facebook)支持这两个框架,它们被用于一些最具影响力的研究中。
我想给出一些支持这些框架流行的理由,但首先我要重新表述一下你的问题:
为什么在 python 中使用 TensorFlow/Pytorch 而不是使用 C++ 自己构建模型?
注意:我重新表述问题的原因是因为TensorFlow和PyTorch都有 C++ API。
一些原因如下
快速原型制作。语言链接 C++,具有臃肿的语法,需要低级操作(例如内存管理)并且不能交互运行。这意味着在 python 中创建和测试模型所花费的时间比在 C++ 中要少得多。
无需重新发明轮子。一些操作在大多数网络中都很常见(例如反向传播),为什么要重新实现它们?其他功能很难自己实现(例如并行处理、GPU 计算)。数据科学家是否需要拥有如此强大的技术背景来研究神经网络?
开源. 它们受益于开源,并且可以为您提供大量用于构建神经网络的工具。您想将 batchnorm 添加到您的网络吗?不用担心,只需将其导入并添加到一行中!此外,它们为共享预训练模型提供了绝佳机会。
它们经过优化。这些框架经过优化,可以在 GPU(如果可用)或 CPU 上尽可能快地运行。一个人几乎不可能自己编写运行速度一样快的代码。