우리는 이전까지 이미지의 라벨값을 예측하는 모델에 대해 얘기했습니다. 우리에게 이미지가 주어졌을 때, 이미지벡터와 가중치값을 받는 함수를 만들어 score를 구하고 이를 바탕으로 loss function을 구해 우리의 가중치 값을 평가했죠. 여기에 Regularization함수를 더해주면 우리가 원하는 모델이 완성되었습니다. 이제 마지막 단계가 남았습니다. 우리의 가중치값이 구리다고 하면, 과연 어떻게 최적의 가중치값을 구할 수 있을까요?
일반적으로 가중치를 최적화하는 작업은 '현재 위치를 모르는 상태에서 천천히 산을 내려가는 것'으로 비유하곤 합니다. 더 정확히 말하면 눈을 감고 내려가는 것이죠. 우리는 목적지의 방향, 위치, 무엇하나 모르는 상태로 나아가야 합니다. 어떤 방법들이 있는지 알아봅시다.
#1. Random search
우선 random search 방법이 있습니다. 일단 아무대나 뛰어내리고 보는거죠. 바보같은 짓입니다. 이 방법을 사용할 경우, 정확도는 15%정도에 불과하다고 합니다.(현대 기술로 예측하면 99% 이상이라고 하네요)
보다 나은 방법은 기하학적 특성을 이용하는 것입니다. NN이나 Linear classifier를 훈련시킬 때 일반적으로 사용하는 방법입니다.
#2. Numerical gradient
임의의 가중치 W를 다수 설정하여 하나의 '가중치 집합'을 만들고 이 가중치에 미세한(0에 수렴하는) h(step size)를 더해서 loss를 계산합니다. 이 결과값에 -를 붙여 loss가 적어지는(양의 기울기면 음의 방향, 음의 기울기면 양의 방향) 방향으로 나아갑니다. 가중치에 대한 loss가 가장 적을때 그 값을 선택합니다만 굳이 이 방법을 쓸 필요가 없습니다. 시간도 오래걸리고, 정확하지가 않습니다.
이렇게 첫번째, 두번째 기울기를 구해나가면서 기울기값이 작아지는 방향으로 나아갑니다. 차원의 수만큼 해줘야하는데...하지말래요 이건..
#3. Analytic gradient
W의 모든 요소를 순환하는 것이 아니라 gradient를 나타내는 식을 먼저 찾고 수식으로 나타내서 한번에 gradient dW를 계산하는 것입니다. 쉽게 말하면 손실함수를 적어놓고 (한번에..!)미분하면 끝입니다. 훨씬 효율적(정확, 빠름)이기 때문에 대부분의 경우 이처럼 해석적 방식을 사용합니다.
Stochastic Gradient Descent(SGD)
우리가 어떤 방식으로 기울기를 구하고 loss가 0인 지점을 찾아 나아가도, 지점마다 가중치값을 구하는 행위를 반복하면 느릴 수 밖에 없습니다. N이 100만개 1,000만개 혹은 이보다 큰 경우 매번 모든 경우를 계산해서 가중치를 업데이트하는것은 비용이 너무 많이 듭니다. 따라서 minibatch를 사용하여(일반적으로 32, 64, 128개의 샘플 추출) 속도를 획기적으로 줄일 수 있습니다(표본추출..!!).
요악하자면
Numerical gradient은 정확하지 않고 느리지만 쉽게 써볼 수 있습니다. 반면 Analytic gradient는 정확하고 빠르지만 에러가 발생할 수 있죠. 따라서 모델은 Analytic gradient 방식으로 설계하고, 우리가 작성한 미분 코드가 잘 작동하는지 보기 위해 Numerical gradient방식으로 이를 검증(디버깅, Gradient check)합니다. 그러나 이 작업 역시 정말 오래걸리기 때문에 스케일을 줄이는 편이 좋습니다.
해당 글은 스탠퍼드 대학의 CS231n(Convolutional Neural Networks for Visual Recognition)을 정리한 글임을 밝힙니다.
'Note' 카테고리의 다른 글
DEEPML(CS231n) Lec.04_1 Backpropagation (0) | 2021.01.25 |
---|---|
DEEPML(CS231n) Lec.04_1_1 What is backpropagation really doing? (0) | 2021.01.24 |
DEEPML(CS231n) Lec.03_1 Loss Function (2) | 2021.01.10 |
DEEPML(CS231n) Lec.02_2 Linear Classification (0) | 2021.01.04 |
DEEPML(CS231n) Lec.02_1 Image Classification (10) | 2020.12.31 |