줄리아의 자동미분 패키지 Zygote.jl
Zygote.jl: How to Use Automatic Differentiation in julia
개요
줄리아에서는 머신러닝, 특히 딥러닝에 관련된 자동 미분Automatic Differentiation을 위해 Zygote.jl
이라는 패키지를 사용한다. 1 개발진들은 이 패키지가 차세대 자동 미분 시스템으로써 줄리아로 미분가능한 프로그래밍Differentiable Programming을 할 수 있게 해준다는 점을 어필하며, 실제로 써보면 놀라울 정도로 직관적임을 알 수 있다.
자동 미분이 아니라 도함수에 관련된 패키지 자체가 궁금하다면 Calculus.jl
패키지를 참고하자.
코드
일변수함수
어마어마하게 간단하다. 원래 우리가 미분하던 것처럼 함수 이름 뒤에 프라임 '
을 찍으면 마치 실제로 도함수를 가지고 계산하는 것처럼 미분계수가 계산된다.
julia> using Zygote
julia> p(x) = 2x^2 + 3x + 1
p (generic function with 1 method)
julia> p(2)
15
julia> p'(2)
11.0
julia> p''(2)
4.0
다변수함수
gradient()
함수를 사용한다.
julia> g(x,y) = 3x^2 + 2y + x*y
g (generic function with 1 method)
julia> gradient(g, 2,-1)
(11.0, 4.0)
만약 조금만 더 직관적으로 코드를 작성하고 싶다면 다음과 같이 \nabla
즉 ∇
로 다시 함수를 정의해서 써보는 것도 좋다.
julia> ∇(f, v...) = gradient(f, v...)
∇ (generic function with 1 method)
julia> ∇(g, 2, -1)
(11.0, 4.0)
전체 코드
using Zygote
p(x) = 2x^2 + 3x + 1
p(2)
p'(2)
p''(2)
g(x,y) = 3x^2 + 2y + x*y
gradient(g, 2,-1)
∇(f, v...) = gradient(f, v...)
∇(g, 2, -1)
환경
- OS: Windows
- julia: v1.9.0
- Zygote: v0.6.62
댓글