Search
Duplicate

시각적 이해를 위한 머신러닝/ Loss Functions & Optimization

Linear Classifier의 결과가 해석이 어렵기 때문에 그것을 해석이 쉽게 0-1 사이의 값이 나오도록 (확률 표현) Softmax 함수를 씌움
W는 랜덤으로 시작해서 예측값과 정답의 차이를 이용해서 W를 업데이트하는 과정을 반복해서 최종적으로 정답과 예측이 같도록 함.
이때 예측값과 정답의 차이를 비교하는 것이 loss 함수이고, loss를 이용해서 W를 업데이트하는게 Optimization
Loss 함수는 정답과 모델의 예측값을 비교하는 것.
예측이 정답에 비슷하면 조금만 업데이트하고, 크게 벗어났으면 많이 업데이트한다.
Loss 함수의 Discriminative Setting 정답이 이진형태라서 둘 중 하나를 맞추는 경우.
정답이 (-1, +1)이 경우에는 정답과 예측값을 곱하는 Margin-based Loss를 사용한다.
예측이 정답과 같으면 둘을 곱하면 같은 부호가 나옴.
수평선의 극단으로 갈 수록 예측을 자신있게 한 것이고, Loss의 오른쪽에 있으면 정답을 맞춘거고, 왼쪽에 있으면 틀린 것.
고로 정답일 때는 loss를 적게 주고, 틀렸을 때는 loss를 크게 줘서 업데이트 하게 한다.
Margin-based loss는 0/1 loss를 준다.
맞으면 0, 틀리면 1의 loss를 준다.
다만 이 경우 미분이 안되는 점이 있어서 문제가 됨.
미분이 안 되는 부분을 개선하기 위해 Log를 씌운 Log loss를 사용할 수 있음.
더불어 자신감도 반영해서 loss를 줄 수 있다.
Log loss 보다 loss를 더 강하게 주는
정답 부분에서 margin을 두고, 선형으로 loss를 주는게 Hinge Loss
exponential loss는 loss를 강하게 주기 때문에 outlier에 취약함. noise에 취약함
그래서 많이 쓰는게 Hinge loss(SVM이 대표적)와 log loss(Logistic Regression이 대표적)
Hinge Loss계산이 효율적이고 log loss는 해석하기 좋다.
정답이 -1, +1이었던 Discriminative Setting과 달리 정답이 0과 1인 경우.
예측 결과를 합하면 0과 1이 되므로 확률적으로 표현할 수 있음.
K가 2개 이상인 경우 처리하기 쉽다.
one-hot vector로 표현할 수 있음.
예측 확률 분포와 정답 확률 분포를 비교하는 loss 함수를 사용할 수 있음.
가장 많이 쓰이는 확률 분포에 대한 loss 함수가 cross entropy
위의 식은 일반화 시킨 경우이고 이진 분류 문제인 경우에는 아래와 같이 사용할 수 있음.
cross entropy 식을 전개하면 오른쪽과 같이 되는데 —정답만 1이고 나머지는 0이므로 안쪽 sum은 날아감— 그렇게 남은 식을 그래프로 그리면 오른쪽 아래의 박스쳐진 부분과 같아짐
이렇게 되면 정답에 가까울 수록 0에 가까운 값이 나오고, 정답에서 멀어질수록 큰 값이 나옴. 그래서 이 값을 loss 값으로 사용
KL 다이버전스는 두 개의 확률 분포의 차이를 계산함. 두 분포가 완전히 같으면 0이고 분포의 차이가 클 수록 큰 값이 나옴.
식의 정의상 D(P||Q)와 D(Q||P)는 값이 다름. 따라서 거리라고 해석하지만 실제 거리값은 아님.
또한 A→B→C 가 A→C 보다 항상 길지 않음 (triangle inequality를 만족시키지 못함)
Optimization은 최적값을 찾는 것
여러 방법이 있지만 가장 널리 쓰는 것은 gradient descent를 이용한 방법
기울기를 구해서 낮은 방향으로 내려가는 것. 이래서 loss 함수에 대해 미분이 가능해야 함.
기울기를 구한 후, 이전 값에서 빼는 식으로 업데이트 함.
이때 기울기 값에 적절한 alpha를 곱해서 강도를 조절함.
다만 그냥 기울기만 구해서 값을 업데이트 하면 지역 최적점에 빠질 수 있음.
미분 가능한 경우만 사용하다는 것도 약점.
모든 데이터셋에 대해 loss를 계산하면 가장 정확하지만 매우 느림
위의 문제를 개선하기 위한 방법이 Stochastic Gradient Descent
모든 샘플에 대해 gradient를 계산하지 않고, 적정한 수준의 mini batch에 대해서만 gradient 계산
현실의 예
튀는 구간도 나오고, 어느 시점에 멈춰야 할지를 정하는 것도 애매함
학습의 목적은 데이터셋에 대한 일반화에 있다.
때문에 테스트를 위한 데이터셋은 별도로 빼 놔야 함. 학습 과정에 들어가면 안 됨.
보통은 랜덤하게 뽑거나, 날짜 기준으로 나누거나 함.
테스트 셋을 분리하는 것 외에 학습에 필요한 하이퍼파라미터를 튜닝하기 위해 validation set을 사용
여러 training set을 돌려 놓고 validation set에서 결과가 잘 나오는 하이퍼파라미터를 사용한다.
test set과 마찬가지로 validation set도 역전파를 하지 않음.
training set, validation set, test set을 나눈 후에 훈련과 테스트하는 과정. 이것을 cross validation이라고 한다.
training set으로 학습하고
validation 으로 가장 성능 좋은 모델을 선택하고, 하이퍼 파라미터 튜닝하고
training set과 validation set을 합쳐서 다시 학습하고
최종적으로 test set으로 검증한 후 결과 제출
training set과 validation set을 아예 교차 시키는 것아 K-fold cross validation
실제 예시