줄리아의 자동미분 패키지 Zygote.jl 📂줄리아

줄리아의 자동미분 패키지 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
댓글