ekmett/ad

Automatic Differentiation

ad – Haskell을 위한 자동 미분

설명

  • 수치 함수의 정확한 도함수를 코드 내에서 직접 계산할 수 있게 해주는 Haskell 라이브러리입니다. 작고 타입 안전한 API 뒤에서 순방향 및 역방향 자동 미분(AD)을 구현합니다.

중요성

  • 머신러닝, 최적화, 물리 시뮬레이션 및 기타 여러 분야에서 기울기, 야코비 행렬, 헤세 행렬 등이 자주 필요합니다. 이를 직접 작성하는 것은 오류가 발생하기 쉽고, 유한 차분법을 사용하는 것은 느리고 부정확합니다. ad는 순수 Haskell을 유지하면서 컴파일된 코드의 속도와 기호 미분의 정밀도를 제공합니다.

주요 기능

  • 순방향 및 역방향 AD: 배우기 쉬운 공통 인터페이스 제공.
  • 고차 도함수: 기울기, 야코비 행렬, 헤세 행렬, 임의 차수의 텐서를 지연 평가 방식으로 효율적으로 계산 가능.
  • 타입 레벨 브랜딩: "무한소" AD 값이 일반 숫자와 실수로 섞이는 것을 방지.
  • 모듈식 설계: 각 모드가 자체 모듈(Numeric.AD.Mode.Forward, ...Reverse, ...Sparse, ...Tower 등)에 존재하여 문제 규모에 맞는 구현을 선택 가능.
  • 근 찾기 도우미: AD 엔진 위에 구축된 Newton, Halley 알고리즘.
  • Rank-1 콤비네이터: 고차 함수로 AD 값을 조작할 때 최대의 유연성을 제공(일부 타입 안전성 희생).

일반적인 사용법

import Numeric.AD

-- First derivative of sin at 0
> diff sin 0
1.0

-- Value and derivative of exp . log at 2
> diff' (exp . log) 2
(2.0,1.0)

-- Gradient of a multivariate function
> grad (\[x,y,z] -> x * sin (x + log y)) [1,2,3]
[ sin (1 + log 2) + cos (1 + log 2) * 1
, recip 2 * cos (1 + log 2) * 1
, 0 ]

이 라이브러리는 고차 도함수 스트림(diffs, grads)과 도함수 타워의 각 "계층"을 검사하기 위한 Jet 타입도 지원합니다.

사용 권장 대상

  • 빠르고 정확한 기울기가 필요한 머신러닝 모델, 최적화 알고리즘 또는 과학 시뮬레이션을 구축하는 Haskell 개발자.
  • Haskell 생태계를 떠나지 않고 사용자 정의 손실 함수나 미분 방정식을 실험하려는 연구자.
  • 자동 미분을 활용한 신뢰할 수 있는 근 찾기(Newton, Halley)가 필요한 모든 사람.

시작하기

  • Hackage에서 설치: cabal install ad 또는 프로젝트의 .cabal 파일에 ad 추가.
  • Numeric.AD(또는 특정 모드 모듈)를 임포트하고 diff, grad, jacobian, hessian 등을 호출.

질문 방법

  • GitHub 저장소에 이슈나 풀 리퀘스트 생성: https://github.com/ekmett/ad
  • Haskell 커뮤니티 IRC (#haskell on irc.libera.chat) 또는 프로젝트 이슈 트래커 참여.

이 요약은 저장소의 README만을 기반으로 작성되었습니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트