autograd-cpp
发布: (2025年12月17日 GMT+8 10:31)
3 min read
原文: Dev.to
Source: Dev.to
概览
一个轻量级、高性能的 C++ 自动微分库,使用计算图实现。
- 基于计算图的 AD:通过动态图进行前向和反向传播
- Jacobian 与 Hessian:一阶和二阶导数计算
- 优化器:带学习率调度(线性、指数、余弦、多项式)的 SGD
- 主要为头文件:依赖最小,易于集成
- CMake 包:支持
FetchContent,实现无缝集成
安装
使用 CMake FetchContent
include(FetchContent)
FetchContent_Declare(
autograd_cpp
GIT_REPOSITORY https://github.com/queelius/autograd-cpp.git
GIT_TAG main
)
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(BUILD_TESTS OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(autograd_cpp)
target_link_libraries(your_app PRIVATE autograd::autograd)
从源码构建
git clone https://github.com/queelius/autograd-cpp.git
cd autograd-cpp
mkdir build && cd build
cmake ..
make -j$(nproc)
运行示例
./examples/simple_gradients
./examples/hessian_demo
要求
- C++17 或更高版本
- CMake 3.14+
- 可选:用于并行化的 OpenMP
基本用法
#include
using namespace autograd;
int main() {
// Create computation graph
auto x = constant(3.0);
auto y = constant(4.0);
auto z = mul(x, y); // z = x * y
auto result = add(z, constant(2.0)); // result = z + 2
// Compute gradients
result->backward();
std::cout data[0] grad[0] grad[0] << std::endl; // 3
return 0;
}
库结构
tensor.hpp– 带梯度追踪的 Tensor 类ops.hpp– 操作(add、mul、exp、log、matmul等)jacobian.hpp– Jacobian 矩阵计算hessian.hpp– Hessian 矩阵计算optim.hpp– 带学习率调度的 SGD 优化器
应用场景
核心自动微分引擎可作为以下领域的基础:
- 神经网络与深度学习
- 统计建模与推断
- 需要梯度的物理仿真
- 优化算法
- 通用科学计算
设计目标
- 最小化 – 仅提供核心 AD 功能;领域特定特性可在其上构建。
- 高效 – 通过可选的 OpenMP 并行化进行性能优化。
- 灵活 – 动态计算图支持任意计算。
- 可移植 – 标准 C++17,适用于任何平台。
许可证
[Specify your license]
贡献
欢迎贡献!本仓库提供核心 AD 引擎;领域特定的扩展(例如神经网络、统计模型)应作为依赖 autograd-cpp 的独立包进行开发。