딥러닝 - Tensorflow: 자동 미분

dumbbelldore·2025년 1월 8일
0

zero-base 33기

목록 보기
63/97

1. 미분 (Differentiation)

  • 수학에서 변화율을 측정하는 방법으로, 어떤 함수의 입력값이 변할 때 출력값이 얼마나 변화하는지 표현

  • 함수 f(x)f(x)가 있을 때, 특정 지점 x=ax = a에서의 미분값(기울기)는 다음과 같음

    f(a)=limh0f(a+h)f(a)hf'(a) = \lim_{h \to 0} \frac{f(a + h) - f(a)}{h}

  • 즉, 함수 그래프에서 특정 점에서의 접선의 기울기를 나타내며, y=x2y = x^2에서 x=2x = 2에서의 미분값(44)은 접선의 기울기에 해당

  • ML에서는 미분을 통해 기울기의 변화를 측정하고, 손실함수(Loss Function)의 최솟값을 찾는데 사용함

1-1. 주요 미분 공식

함수 f(x)f(x)미분값 f(x)f'(x)
cc(상수)00
xnx^nnxn1n \cdot x^{n-1}
exe^xexe^x
ln(x)\ln(x)1x\frac{1}{x}
sin(x)\sin(x)cos(x)\cos(x)
cos(x)\cos(x)sin(x)-\sin(x)
1x\frac{1}{x}1x2-\frac{1}{x^2}

1-2. 합성 함수의 미분 (Chain Rule)

  • h(x)=f(g(x))h(x) = f(g(x))일 때, h(x)=f(g(x))g(x)h'(x) = f'(g(x)) \cdot g'(x)

2. tf.GradientTape() 함수

  • Tensorflow에서 제공하는 자동 미분(Automatic Differentiation) 기능

  • 텐서 연산 과정을 기록하며 주어진 연산에 대한 기울기(Gradient)를 쉽게 계산할 수 있음

  • 딥러닝 모델의 학습 과정에서 손실 함수의 기울기를 계산하고, 최적화하는데 사용됨

  • 기본적으로 tf.Variable 객체에 대한 연산만 추적을 수행하며, 필요한 경우 watch() 메서드를 사용하여 특정 텐서를 추가로 추적할 수 있음

  • 필요 시 persistent=True 파라미터를 통해 여러 번 기울기를 계산할 수 있음

2-1. 한 변수의 기울기 계산

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)

2-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]

2-3. watch() 함수 사용법

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

persistent=True 파라미터 사용법

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

*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

profile
데이터 분석, 데이터 사이언스 학습 저장소

0개의 댓글