인턴하는 회사에서 진행하는 세미나 5주차의 과제로 사이토 고키의 밑바닥부터 시작하는 딥러닝의 4.3 - 수치미분 부분을 정리해 보고자합니다.
미분(differentiation)
미분은 한순간의 변화량을 표시한 것입니다. 위의 식은 함수의 f(x)라는 함수의 미분식을 나타낸것입니다. 즉, x의 작은 변화가 f(x)를 얼마나 변화시키느냐입니다.
하지만 위의 그림처럼 '진정한 미분'과 '수치 미분'의 값은 다릅니다. 수치미분은 위에서 처럼 h와 같은 아주 작은 차분으로 미분하는것을 의미하는데요, 이 h를 무한히 0으로 좁히는것은 불가능하기 때문에 수치미분과 진정한 미분값에는 차이가 있다고 책에서 설명합니다.
편미분
다음과 같이 변수가 2개인 함수를 그래프로 그려본다면 밑의 그래프와 같을 것입니다.
만약 위와 같은 그래프를 가진 함수를 미분한다고 하면 어떻게 해야할까요? 이 그래프를 만들어 내는 두개의 변수중에 어떤 변수에 대한 미분이냐를 결정해야할 것입니다. 이와같이 변수가 여럿인 함수에 대한 미분을 편미분이라고 합니다. 편미분을 할때에는 여러변수 중 변수 하나에 초점을 맞추고 다른 변수를 값을 고정합니다. 밑은 식 f에 대한 각 변수의 편미분의 의 결과입니다.
기울기
모든 변수의 편미분을 벡터로 정리한 것을 기울기(gradient)라고 합니다. 위의 f의 모든 변수에 대한 편미분을 벡터로 정리한다면 밑의 그림과 같을 것입니다.
또한 이러한 기울기를 구해서 마이너스를 붙인 벡터로 그려본다면 다음과 같을 것입니다. 이처럼 기울기가 가리키는 쪽은 각 장소에서 함수의 출력 값을 가장 크게 줄이는 방향입니다.
경사하강법
기계학습 모델 또는 신경망을 학습할 때, 손실함수를 가장 작게하는 최적의 매개변수를 찾아내는 것이 목표입니다. 하지만 실제로는 손실함수가 그리 단순하지 않습니다. 매개변수 공간이 광대하기 때문에 손실함수의 최소값을 찾아내기 힘듭니다. 이럴때 기울기를 이용해서 손실함수의 최솟값을 찾으려는것이 경사하강법입니다.
경사하강법은 현 위치에서 기울어진 방향으로 일정 거리만큼 이동합니다. 그리고 이동한 위치에서 기울기를 또 구하고, 기울어진 방향으로 나아가기를 반복합니다. 이런 방식으로 손실함수의 값을 점점 줄여나갑니다.
경사법을 수식으로 나타낸다면 다음과 같습니다. 기울기에 해당하는 값에 학습률(learning rate)를 곱해 현 매개변수 위치에서 빼줍니다. 여기서 학습률은 한번의 학습으로 매개변수 값을 얼마나 갱신하느냐를 정하는 하이퍼파라미터입니다. 위와 같은 단계를 여러번 반복합니다. 이렇게 여러번 반복하면서, 서서히 함수의 값을 줄여나갑니다. 위에서는 변수가 2개인 경우를 보여주었지만 변수가 늘어나도 각 변수의 편미분값으로 갱신하게됩니다.
위에서 x라는것을 가중치 매개변수 W로 바꿔서 생각해준다면, 신경망학습에서 가중치 매개변수에 대한 손실함수의 기울기를 구하는것이 될것입니다. 위의 그림처럼요. 즉, 각 매개변수 w를 변경해주었을때, 손실함수 L의 변화량을 계산하는것입니다.
이렇게 가중치에 대한 손실함수의 기울기를 구했다면, 경사하강법에 따라 가중치 매개변수를 갱신하면 됩니다.
여태까지 배운 신경망 학습절차를 정리해본다면,
(1) 전체 훈련 데이터를 미니배치로 나눠서 모델에 넣는다
(2) 미니배치의 손실함수를 줄이기 위해 가중치 매개변수에 대한 손실함수의 기울기를 구한다
(3) 기울기 방향으로 가중치 매개변수를 갱신한다
이렇게 될것입니다.
이렇게 훈련데이터를 미니배치로 무작위로 나누기 때문에 확률적 경사 하강법(Stochastic gradient decent, SGD)라고 합니다.
또한 전체 데이터셋을 나눈 크기를 batch size라고 하며, 나눠놓은 작은 batch에 대해서 학습(1 iteration)을 다 돌았을때를 1epoch(모든 데이터 셋을 1번 학습)이라고 합니다.
'DL' 카테고리의 다른 글
[DL 기초] 밑바닥부터 시작하는 딥러닝: 학습 관련 기술들(1) (0) | 2023.05.01 |
---|---|
[DL 기초] 밑바닥부터 시작하는 딥러닝: 오차역전파법 (0) | 2023.04.22 |
[Paper Review] U-Net 논문 정리와 구현 (0) | 2023.04.10 |
[DL 기초] 밑바닥부터 시작하는 딥러닝: 신경망 학습 (0) | 2023.04.08 |
[DL 기초] 밑바닥부터 시작하는 딥러닝: 신경망(2) (0) | 2023.04.01 |