수학에서 변화율을 측정하는 방법으로, 어떤 함수의 입력값이 변할 때 출력값이 얼마나 변화하는지 표현
함수 가 있을 때, 특정 지점 에서의 미분값(기울기)는 다음과 같음
즉, 함수 그래프에서 특정 점에서의 접선의 기울기를 나타내며, 에서 에서의 미분값()은 접선의 기울기에 해당
ML에서는 미분을 통해 기울기의 변화를 측정하고, 손실함수(Loss Function)의 최솟값을 찾는데 사용함
| 함수 | 미분값 |
|---|---|
| (상수) | |
Tensorflow에서 제공하는 자동 미분(Automatic Differentiation) 기능
텐서 연산 과정을 기록하며 주어진 연산에 대한 기울기(Gradient)를 쉽게 계산할 수 있음
딥러닝 모델의 학습 과정에서 손실 함수의 기울기를 계산하고, 최적화하는데 사용됨
기본적으로 tf.Variable 객체에 대한 연산만 추적을 수행하며, 필요한 경우 watch() 메서드를 사용하여 특정 텐서를 추가로 추적할 수 있음
필요 시 persistent=True 파라미터를 통해 여러 번 기울기를 계산할 수 있음
import tensorflow as tf
x = tf.Variable(3.0)
with tf.GradientTape() as tape:
y = x ** 2 # y = x^2
# x에 대한 y의 기울기 계산
grad = tape.gradient(y, x)
print(grad) # 출력: 6.0 (3.0 * 2)
x = tf.Variable(3.0)
z = tf.Variable(4.0)
with tf.GradientTape() as tape:
y = x ** 2 + z ** 3 # y = x^2 + z^3
# x와 z에 대한 y의 기울기 계산
grads = tape.gradient(y, [x, z])
print(grads) # 출력: [6.0, 48.0]
x = tf.constant(3.0) # tf.Variable이 아니므로 기본적으로 추적하지 않음
with tf.GradientTape() as tape:
tape.watch(x) # 추적하도록 수동 지정
y = x ** 2
grad = tape.gradient(y, x)
print(grad) # 출력: 6.0
x = tf.Variable(3.0)
with tf.GradientTape(persistent=True) as tape:
y = x ** 2
z = x ** 3
grad_y = tape.gradient(y, x)
grad_z = tape.gradient(z, x)
print(grad_y) # 출력: 6.0
print(grad_z) # 출력: 27.0
*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.