micrograd 소개 — 100줄 안팎의 자동 미분 엔진
micrograd 소개
딥러닝 라이브러리들이 "마법처럼" 그래디언트를 구해주는 것처럼 보이지만, 그 핵심은 동적으로 만들어진 DAG 위에서 역방향 자동 미분(backpropagation, reverse-mode autodiff)을 수행하는 거예요. micrograd는 이 개념을 가장 단순한 형태로 보여주는 라이브러리예요. 자동 미분 엔진이 대략 100줄, 그 위의 신경망 라이브러리는 50줄 정도로 아주 작아요.
동작 방식
DAG는 스칼라 값 위에서만 동작해요. 그래서 뉴런 하나를 개별적인 덧셈·곱셈 노드로 잘게 쪼개서 표현해요. 그렇지만 이것만으로 이진 분류를 하는 전체 심층 신경망을 만드는 데 충분하고, 데모 노트북에서 이를 확인할 수 있어요.
설치
pip install micrograd
예제 사용
아래는 지원되는 여러 연산을 보여주는 살짝 억지스러운(contrived) 예제예요. 값 하나하나가 Value 객체로 싸여 있고, backward()를 호출하면 그래디언트가 채워져요.
from micrograd.engine import Value
a = Value(-4.0)
b = Value(2.0)
c = a + b
d = a * b + b**3
c += c + 1
c += 1 + c + (-a)
d += d * 2 + (b + a).relu()
d += 3 * d + (b - a).relu()
e = c - d
f = e**2
g = f / 2.0
g += 10.0 / f
print(f'{g.data:.4f}') # prints 24.7041, the outcome of this forward pass
g.backward()
print(f'{a.grad:.4f}') # prints 138.8338, i.e. the numerical value of dg/da
print(f'{b.grad:.4f}') # prints 645.5773, i.e. the numerical value of dg/db
신경망 학습
micrograd.nn 모듈에서 초기화한 신경망을 쓰고, 간단한 SVM "최대 마진(max-margin)" 이진 분류 손실과 SGD로 최적화하면 demo.ipynb처럼 전체 학습 과정을 볼 수 있어요.