-
밑바닥부터 시작하는 딥러닝3 (4) : 제 1 고지 미분 자동 계산Deep learning study/밑바닥 부터 시작하는 딥러닝3 2022. 9. 3. 00:29
4 단계 수치 미분
목표 : '미분이 무엇인지 복습하고 수치 미분이라는 간단한 방법으로 미분 계산'
4.1 미분이란 :
- 미분이란 무엇일까요? : '변화율', '극한으로 짧은 시간에서의 변화량'
4.2 수치 미분 구현
- 컴퓨터는 극한을 취급할 수 없으니 대체할 방법이 필요함 → 수치미분
- numerical differentiation : 매우 작은 값을 통해 미세한 차이를 사용해 함수의 변화량을 구하는 방법
- 수치 미분은 작은 값을 사용해 '진정한 미분'을 근사 → 오차가 존재 ⇒ '중앙차분' centered difference를 이용하여 근사 오차를 줄임 : f(x) - f(x+h) 대신 f(x-h) - f(x+h) 사용
🧪 전진 차분보다 중앙차분이 진정한 미분값에 가깝다는 사실은 Taylor series를 이용해 증명할 수 있음
[구현]
def numerical_diff(f, x, eps=1e-4): """ f : 미분의 대상이 되는 함수 => Function의 instance x : 미분을 계산하는 변수 => Variable의 instance eps : h """ x0 = Variable(x.data - eps) x1 = Variable(x.data + eps) y0 = f(x0) y1 = f(x1) return (y1.data - y0.data) / (2*eps)
- 실제 data는 Variable의 인스턴스 변수인 data에 들어있음
[실제 적용]
f = Square() x = Varibale(np.array(2.0)) dy = numerical_diff(f, x) print(dy) # 4.00000000004
- y=x^2 에서 x=2.0 일때 수치미분 결과
<aside> 🚧 미분을 해석적으로 계산할 수도 있음 '해석적' : 수식 변형만으로 답을 유도한다는 의미 $y = x^2 -> dy/dx = 2x$ : x=2.0일때, 미분 값을 4.0
⇒ 오차가 매우 작음을 알 수 있다!!
</aside>
4.3 함성 함수의 미분
$y = (e^{x^2})^2$
합성 함수 미분
def f(x): A = Square() B = Exp() C = Square() return C(B(A(x))) x = Variable(np.array(0.5)) dy = numerical_diff(f, x) print(dy)
⇒ 미분을 '자동으로' 계산하는 데 성공! (파이썬에서 함수도 객체라서 함수의 인수로 들어갈수있다.)
⇒ 아무리 복잡해도 이 방식을 이용하면 미분을 자동으로 계산할 수 있습니다.
⇒ 하지만 수치미분에는 문제가 있음...
4.4 수치 미분의 문제
→ 수치 미분의 결과에는 오차가 포함되어 있음
→ 계산에 따라 커질 수도 있음
🚧 수치 미분의 결과에 오차가 포함되기 쉬운 이유 : 대부분 '자릿수 누락'
⇒ 중앙차분 등 '차이'를 구하는 계산은 주로 크기가 비슷한 값들을 다룸 : 유효 자릿수가 줄어들 수 있다
⇒ 자릿수 누락이 발생하여 오차가 포함되기 쉬움더 심각한 문제
⇒ '계산량'
⇒ 변수가 여러 개인 계산을 미분할 경우 변수 각각을 미분해야함
⇒ 신경망은 매개변수를 수백만 개 이상 사용하는 경우가 흔하므로 이런 상황에서 모든 변수를 수치미분으로 구하는 건 현실적으로 불가능
⇒ 역전파를 사용[현대 딥러닝의 최적화방법]
- 구현하기 쉽고 거의 정확한 값을 얻을 수 있는 수치미분에 비해 역전파는 복잡한 알고리즘이라 구현하면서 버그가 섞여 들어가기 쉬움
⇒ '기울기 확인' gradient checking이라는 방법을 사용해 수치 미분의 결과를 이용하여 역전파를 정확히 구현했는지 확인!
'Deep learning study > 밑바닥 부터 시작하는 딥러닝3' 카테고리의 다른 글
밑바닥부터 시작하는 딥러닝3 (6) : 제 1 고지 미분 자동 계산 (0) 2022.09.03 밑바닥부터 시작하는 딥러닝3 (5) : 제 1 고지 미분 자동 계산 (0) 2022.09.03 밑바닥부터 시작하는 딥러닝3 (3) : 제 1 고지 미분 자동 계산 (0) 2022.09.03 밑바닥부터 시작하는 딥러닝3 (2) : 제 1 고지 미분 자동 계산 (0) 2022.09.03 밑바닥부터 시작하는 딥러닝3 (1) : 제 1 고지 미분 자동 계산 (0) 2022.09.03