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 – 操作(addmulexplogmatmul 等)
  • jacobian.hpp – Jacobian 矩阵计算
  • hessian.hpp – Hessian 矩阵计算
  • optim.hpp – 带学习率调度的 SGD 优化器

应用场景

核心自动微分引擎可作为以下领域的基础:

  • 神经网络与深度学习
  • 统计建模与推断
  • 需要梯度的物理仿真
  • 优化算法
  • 通用科学计算

设计目标

  • 最小化 – 仅提供核心 AD 功能;领域特定特性可在其上构建。
  • 高效 – 通过可选的 OpenMP 并行化进行性能优化。
  • 灵活 – 动态计算图支持任意计算。
  • 可移植 – 标准 C++17,适用于任何平台。

许可证

[Specify your license]

贡献

欢迎贡献!本仓库提供核心 AD 引擎;领域特定的扩展(例如神经网络、统计模型)应作为依赖 autograd-cpp 的独立包进行开发。

Back to Blog

相关文章

阅读更多 »

C# Minimal API:响应缓存

响应缓存 响应缓存减少客户端或代理向 Web 服务器发出的请求数量。它还降低了 Web 服务器每次的工作量。