본문 바로가기
AI/밑딥

딥러닝) 수치 미분 , 해석적 미분 , 편미분

by 채채씨 2021. 2. 25.
728x90
반응형
1. 수치 미분

미분이란 한 점에서의 기울기를 의미한다. 기울기는 두 점 사이에서 발생하는 경사인데, 미분을 '한 점에서의 기울기'라고 하는 이유는 그 두 점 사이의 거리를 매우 좁혀서 한 점으로 보일때 그 점에서 기울기를 구하기 때문이다. 즉, 처음에는 두 점 사이의 기울기에서 시작하여 최종적으로는 거의 한 점에서의 기울기가 된다.

 

차분을 통해 미분하는 것을 수치 미분이라 하는데 수치 미분은 아래와 같다 (※ 차분이란 임의의 두 점에서의 함수 값들의 차이를 말한다.)

 

 

한 순간의 변화량, 미분

 

 

위의 미분 식을 보면, f(x)를 x에 대해 미분한다는 것은 x의 변화가 함수 f(x)를 얼마나 변화시키는지를 구하겠다는 것이며, 시간 h를 무한히 0으로 근접시켜 순간의 변화량을 나타낸다. 

 

 

위의 식대로 미분 계산을 구현해보면 다음과 같이 할 수 있는데, 이렇게 구현하면 두 가지 문제점을 야기한다.

 

 

 

나쁜 미분 구현 예시

 

 

● 문제점 1

h에 최대한 작은 값 10e-50을 대입하였는데, 10e-50은 0.00...1형태에서 소수점 아래 0이 49개 있다는 의미이다. 이 값은 반올림 오차(rounding error) 문제가 있는데, 반올림 오차는 작은 값(예를 들어 소수점 8자리 이하)이 생략되어 최종 계산 결과에 오차가 생기는 문제이다. 파이썬에서 1e-50을 float형으로 변환하면 0의 값을 반환한다. 따라서 반올림 오차 문제가 없는 값을 사용해야하는데 일반적으로 작은 값 h를 아래와 같이 설정하면 좋은 결과를 얻는다고 알려져있다😊

 

 

반올림 오차를 개선한 작은 값

 

 

 

● 문제점 2

함수 f의 차분 문제이다. 위 구현에서는 x+h와 x사이의 함수 f의 차분을 계산하고 있다. 하지만 아래 그림과 같이 진정한 접선은 x에서의 함수 기울기(접선)이지만, 위의 구현은 (x+h)와 x사이의 기울기이다.

  

 

 

 

 

그림을 보면 진정한 접선과는 일치하지 않는 것을 확인할 수 있다. 이것은 h를 무한히 0으로 근접시키는 것이 불가능해서 발생한 한계이다. 이 오차를 극복하기 위해 (x+h)와 (x-h)사이의 함수 f의 차분을 계산하는 방법이 있다. 이 방법은 x를 중심으로 전후를 계산하므로 중심 차분 혹은 중앙 차분으로 불린다.

 

 

반올림 오차 문제와 차분 문제(진정한 접선과의 불일치)의 두 가지 문제점을 개선하여 미분을 구현해보면 다음과 같다.

 

 

 

문제점 개선한 미분 구현

 

 

 

 

 

cf. 해석적 미분(vs 수치 미분)

해석적 미분은 수식을 전개하여 미분하는 것을 말한다. 예를 들어, y = 2x의 미분은 해석적으로 아래와 같으며 이는 위 그래프에서 언급한 오차가 없는 '진정한 미분' 값을 도출한다.

 

y=2x의 해석적 미분

 

 

 

 

 

2. 편미분

 

변수가 2개인 함수
위의 함수식 구현

 

 

위의 함수와 같이 변수가 여러개인 함수에 대해 미분하는 것을 편미분이라 한다. 편미분은 변수들 중 어떤 변수에 대해 미분할 것인지를 지정해야 한다. 지정한 변수를 제외한 나머지 변수는 상수 취급하여 계산하면 된다.

 

예를 들어 x0=3, x1=4일 때, x0에 대한 편미분을 구하면 다음과 같다. numerical_diff는 위에서 문제점 2가지를 개선한 수치 미분을 구현한 것이다.

 

 

x0에 대한 편미분

 

 

 


 

<배운 것>

· 아주 작은 값을 주었을 때의 차분으로 미분하는 것을 수치 미분이라고 한다.

· 수치 미분을 이용하여 가중치 매개변수의 기울기를 구할 수 있다.

 

 


 

출처: 사이토 고키『밑바닥부터 시작하는 딥러닝』, 한빛미디어(2017), p121-127.

https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198

 

728x90
반응형

댓글