Optimization
최적화와 머신러닝은 어떤 연관이 있을까요?
최적화는 일상에서 우리가 익숙하게 경험하고 있는 원리이기도 합니다. 집에서 직장까지 최단 경로를 고려해서 출퇴근을 하고, 여행 계획을 짤 때에도 시간과 비용을 고려하여 여행지와 숙소를 선별하는 등 일상에서 우리는 알게 모르게 수많은 최적화 과정을 거치고 있습니다. 최근에 재밌게 보고있는 드라마 중 하나인 ‘스타트업’ 에서도 인공지능과 최적화 알고리즘 관련한 대사들이 종종 등장하고 있는데요. 이처럼 딥러닝을 비롯한 머신러닝 기술 역시 마찬가지로 기본적인 최적화 과정을 거칩니다.
그렇다면, 최적화는 어떤 방식으로 이루어질까요?
손실함수 (Loss function)
머신러닝에서의 최적화는 loss function의 결과값을 최소화하는 모델의 인자를 찾는 것을 의미합니다. 여기서 손실 함수는 쉽게 말해 알고리즘이 얼마나 잘못하고 있는지를 표현하고 있는 지표입니다. 해당 값이 낮을수록 학습이 잘 된 것으로 보고 이 값을 정답과 알고리즘 출력을 비교하는 데에 사용합니다.
위와 같은 2차 loss function으로 최적화를 한다고 하면 우리는 loss function의 값이 가장 작은 곳을 찾아야 합니다. 한 눈에 봐도 x = T일 때 최적화가 되었다고 예상할 수 있습니다. 하지만, 위의 경우처럼 쉽게 최적화를 하는 경우는 많지 않습니다. 컴퓨터 입장에서는 계산을 통해 최적화가 되는 곳을 찾아야 되며, 모델도 훨씬 복잡하게 구성되기 때문입니다. 그래서 머신러닝에서는 학습 알고리즘을 사용합니다.
학습 알고리즘(Optimizer)
대부분 학습 알고리즘의 기본 방식은 미분을 통해 gradient를 구한 후 해당 방향의 반대 방향(음수)으로 점진적으로 나아가 최적화가 되는 값을 찾는 형태입니다.
대표적으로 경사하강법(Gradient Descent)이 있고 그 밖에도 딥러닝에서 많이 사용되는 역전파(Backpropagation) 알고리즘이 존재합니다.
학습률(Learning Rate)
경사하강법에서 가장 중요한 파라미터는 학습률입니다. 학습률은 학습 시스템(step)의 크기입니다.
학습률이 너무 작을 경우에는 알고리즘이 수렴하기 위해 반복을 많이 진행해야 하므로 학습 시간이 오래 걸리고 지역 최솟값(local minimum)에 수렴할 수 있다는 단점이 있습니다. 여기서 지역 최솟값이란 특정 케이스에만 국한된 결과가 나올 수 있다는 뜻입니다.
반대로, 학습률이 너무 클 경우에는 학습 시간은 적게 걸리지만 학습 스텝이 너무 커 전역 최솟값(global minimum)을 가로질러 반대편으로 건너뛰어 최솟값에서 아예 멀어질 수 있습니다. 그래서 학습 알고이즘에서는 적절한 학습률을 설정하는 것이 중요합니다.
머신러닝과 최적화
이처럼 머신러닝에서의 최적화 이론은 손실 함수가 최소화되게 하는 파라미터를 구하는 최적화 문제로 볼 수 있습니다. 그리고 최적화 값을 구할 때에는 오버피팅되지 않도록 학습률을 잘 설정하는 것도 중요합니다. 여기서 오버피팅은 학습 데이터에만 과도하게 최적화된 것을 뜻합니다. 즉, 신규 데이터에 대해서는 오히려 예측값이 부정확해질 수 있다는 의미이죠. 따라서, 머신러닝 알고리즘을 구현할 때도 Layer가 무조건 깊거나 혹은 뉴런수가 무조건 많다고 학습이 잘 된다고 할 수는 없습니다.
실제로 ‘스타트업’에서도 필적 감정 데이터를 가지고 위조된 필적을 판정해내는 알고리즘을 구현했지만 처음에 정확도가 너무 낮게 나왔었죠.
결국, 극중 남주혁은 영상처리에 사용하는 일반적인 CNN 알고리즘을 버리고 새롭게 슬림한 네트워크 구조의 신경망을 만들어내서 99.8%라는 정확도를 만들어냅니다. 이처럼 알고리즘을 구현할 때는 무조건 복잡한 뉴런이라고 해서 학습률과 정확도가 올라가는 것이 아니기 때문에 반복적이고 경험적인 구현이 중요합니다.