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의 미분은 해석적으로 아래와 같으며 이는 위 그래프에서 언급한 오차가 없는 '진정한 미분' 값을 도출한다.
2. 편미분
위의 함수와 같이 변수가 여러개인 함수에 대해 미분하는 것을 편미분이라 한다. 편미분은 변수들 중 어떤 변수에 대해 미분할 것인지를 지정해야 한다. 지정한 변수를 제외한 나머지 변수는 상수 취급하여 계산하면 된다.
예를 들어 x0=3, x1=4일 때, x0에 대한 편미분을 구하면 다음과 같다. numerical_diff는 위에서 문제점 2가지를 개선한 수치 미분을 구현한 것이다.
<배운 것>
· 아주 작은 값을 주었을 때의 차분으로 미분하는 것을 수치 미분이라고 한다.
· 수치 미분을 이용하여 가중치 매개변수의 기울기를 구할 수 있다.
출처: 사이토 고키, 『밑바닥부터 시작하는 딥러닝』, 한빛미디어(2017), p121-127.
https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198
'AI > 밑딥' 카테고리의 다른 글
딥러닝) 신경망 학습 알고리즘 , Stochasitc Gradient Descent , epoch, iteration , batch size (0) | 2021.03.02 |
---|---|
딥러닝) 기울기 , 경사하강법 , gradient descent , learning rate (0) | 2021.02.27 |
딥러닝) 신경망 학습 , 손실 함수 ( 오차 제곱합 , 교차 엔트로피 오차 ), 미니배치 (0) | 2021.02.21 |
딥러닝) 손글씨 숫자 인식 MNIST 신경망 , 배치 batch 처리 (0) | 2021.02.18 |
딥러닝) 소프트맥스 함수로 출력층 설계 (0) | 2021.02.14 |
댓글