[ML]수포자가 이해한 머신러닝 - 4.손실 줄이기(Reducing Loss)

2018-09-24
MachineLearning

머신러닝의 목표는 손실을 줄여 정확한 값을 도출하는 것이다.
이번 포스팅에서는 손실을 줄이기 위한 방법을 알아보려고 한다.

반복방식(An Iterative Approach)

쉽게 우리는 ‘업다운’게임을 생각해 볼 수 있다. 임의의 숫자를 두고 한명씩 돌아가며 그 숫자를 맞추게 된다.
제시된 숫자보다 큰 숫자를 말할 경우 다운 제시된 숫자보다 작은 숫자를 말할 경우 이라고 알려주는 과정을 반복하다보면 정답을 알아낼 수 있다.

반복방식 또한 이 개념과 크게 다르지 않다.

하나 이상의 특성을 입력하여 예측을 할 수 있는 모델이 있다고 했을 때, 그 특성값을 계속 변경해가며 손실률을 낮춘다. 어차피 특성값을 변경해가며 손실이 가장 적은 값을 찾아내기 때문에 초기값은 크게 상관없다고 한다.

경사하강법(Gradient Descent)

위에서 설명한 반복 방식을 이용한 경사하강법에 대해 알아보자.

단순한 손실 그래프를 위와 같이 그려보았다. 이 때, 우리가 최종적으로 도출하고 싶은 결과는 손실률이 가장 낮은 값인 빨간 점의 값이다.
이 빨간 점은 기울기가 0인 최소값이며 이 부분에서 손실함수는 수렴한다고 한다.
경사하강법을 사용하여 이 값을 찾는 방법을 알아보자.

먼저 임의의 시작점을 지정하여 기울기를 구한다. 기울기는 벡터로 크기와 방향을 가진다.(방향을 가지는게 여기서 뽀인트)
구해진 기울기 값을 보고 우리는 값이 더 정확한지 혹은 더 부정확한지를 알 수 있다.(양의 기울기인지 음의 기울기인지에서 알 수 있는 듯!)
파란점의 기울기는 음의 기울기 이므로 시작점을 오른쪽(양의 방향)으로 이동 시킨다.

이동시킬 때 얼마나 이동시킬지는 학습률에따라 달라지는데 학습률에 관해서는 다음 포스팅에서 다루려고 한다.

옮겨진 점의 기울기를 다시한번 구한다. 분명 이전보다는 기울기가 줄어들었지만 왠지 손실률을 더 줄일 수 있을 것 같다. 이런식으로 점을 계속 옮기다보면 빨간 점에 도달할 수 있을 것이다. 반복적으로 해당 점의 기울기를 구하여 0에 가깝게 만드는 방법을 경사하강법이라고한다.

경사하강법 사용시 유의할 점(혹은 단점)

더 복잡한 그래프에서 기울기만으로만 최소값을 구하다보면 전역 최소값(global minima)에 다다르지 못하고 지역 최소값(local minima)에만 머무를 수도 있다. 우리가 원하는 값은 전역 최소값이기 때문에 오류 발생 가능성이 있다는 뜻이다. 이를 해결하기 위한 방법은 이 포스팅에서 다루지 않겠지만, 이러한 요소들을 주의하며 손실 줄이기 방법을 공부해야한다.

확률적 경사하강법(Stochastic Gradient Descent)

경사하강법에서 배치는 단일 반복에서 기울기를 계산하는 데 사용하는 예의 총 개수이다. 지금까지는 배치가 전체 데이터세트라고 가정했지만, 확률적경사하강법(SGD)에서는 배치크기를 1로 설정한다. 임의의 예를 하나만 골라 반복하는 것이다. 전체 데이터세트를 이용할때보다 예를 하나만 선택한다면 속도가 좀 더 빨라질 수 있을 것이다. 하지만 예를 하나만 선택하기 때문에 노이즈도 그만큼 심하다..ㅠ

미니 배치 확률적 경사하강법(mini-batch SGD)

확률적 경사하강법에서 예를 하나만 선택했다면 미니 배치 확률적 경사하강법에서는 예를 10~1000개 사이로 구성한다. 이렇게 되면 아래와 같은 장점이 있다.

  1. 전체 데이터 세트를 선택할때보다 속도빠름
  2. 예를 하나만 선택할때보다 노이즈를 줄일 수 있음