본문 바로가기
yeardreamschool4/Deep Learning

Regression and Classification

by kevinchoi! 2024. 6. 11.

# Softmax Classifier와 Logistic Regression

- 예측값과 실제값의 차이가 줄어들도록 웨이트를 업데이트하면 된다. 차이가 0일때는 정확한것이기에 차이를 작게 만들기 위해서 제곱을 하는 이유는 다음과 같다. 예측값에서 실제값을 빼서 모두 더할때 음수와 양수를 더하게되면 상쇄되어 실제 차이보다 작게 나오는 문제가 발생하기에 부호를 모두 플러스로 만들기 위해서 하는것이며 절댓값도 사용할 수 있지만 서로의 특성이 약간 다르다. 절댓값과 제곱의 차이는 데이터의 오류의 값을 조절할때 제곱의 차이가 더 커진다.

 

- 만약 제곱을 하여 모두 더한값이 1.3이라면 학습을하면서 이 값이 0으로 가까이 가도록 웨이트들을 계속 업데이트한다. (예측값 - 실제값)의 제곱을 이 task의 목적함수(objective Function)라 한다. (예측값 - 실제값)의 제곱 / N은 Mean Squared Error(MSE)라 한다. 여기서, N은 데이터의 갯수이다.

- back propagation을 할때 Grandient Descent를 구하는데 grandient값이 항상 작다. 그렇기에 웨이트가 업데이트 되는 범위가 제한되며 작을수밖에 없다. grandient의 최댓값이 2를 넘지 못하기에 학습이 느리고 효과적으로 하는데 문제가 있다. 그런데 진짜문제는 MSE는 확률적인 값이 아니라 벡터연산으로 계산된 값이기에 확률론적으로 접근해서 뉴럴 네트워크를 분석하고 싶은데 이때는 MSE는 적합하지 않다. 이론적으로는 gradient의 크기가 제한이 있어서 안좋다라고 기억하면 된다.

- 위 그림에서 28 X 28 대신 2 X 2의 이미지라고 가정하여 각각의 픽셀의 값이 input으로 들어가면(bias포함) 퍼셉트론이 모두 연산이 되어 출력값이 나오게 되었을때 1.56이 가장 커서 정답은 고양이라고 판단할 수 있다. 그런데 이 출력값을 의미있는 숫자값으로 사용하고 싶을때 의미있는 숫자로 바꿔주는 과정에 들어가는것이 softmax라는 함수이다.

- softmax는 의미 없는 벡터(Logit)를 의미 있는 확률벡터로 바꿔준다. 확률값도 음수가 존재하지않기에 양수로 바꿔주는 과정이 어떤 exponential function을 사용한다. exponential function함수에서도 기존의 logit값과의 대소관계가 유지된다. 총합이 1이 되려면 각각의 값을 총합으로 나누어주면 된다. 이렇게 했을때 모든 값이 양수가되면 총합은 1이되는 확률벡터로 바뀌게 된다.

 

- 기존 MSE가 아닌 확률벡터에 맞는 새로운 objective Function도 바뀌어야 한다. MSE로 사용하면 학습은 되겠지만 분석이 안된다.

- KL Divergence를 전개해 보니 Cross Entropy와 Entorpy로 나누어진다. Entropy는 불확실성이기에 고정된 값이라 상수 0값을 가지므로 KL Divergence안에서는 의미가 없는 값이다. Q값은 변화가 있는 값이지만 P값은 타겟으로 고정되어 있다. 따라서, H(P)는 변화가 없는 수이기에 의미가 없다. 즉, P와 Q의 Divergence를 측정하는것은 P와 Q의 Cross Entropy를 재는것과 똑같기에 P와 Q의 Divergence를 최소화하는것은 P와 Q의 Cross Entropy를 최소화하는것과도 같으며 최종식은 파랑색 동그라미 부분이다.

- 최적의 확률벡터가 되려면 타겟값이 1인 [0 1 0]이 되어야 한다. 확률벡터는 이산확률분포이므로 소프트맥스로 구한 확률값과 타겟값의 확률분포가 최대한 같아야한다. 그런데 타겟은 정답이기에 고정된 값이므로 변화시킬 수 있는것은 소프트맥스로 구한 확률값이다. 이때 KL Divergence로 타겟값을 P, 소프트맥스로 구한 확률값을 Q로 놓고 최소가 되도록 모델을 업데이트 하는것이 목적함수(Loss함수)가 된다. 결론적으로 Cross Entropy를 사용하겠다는 의미이다.

- 고양이에 대한 [0 1 0]과의 Cross Entropy는 -log[0.62]가 된다. 이 값을 최소화한다는것은 우리가 예상한 확률벡터와 타겟간의 KL Divergence를 최소화한다와 똑같은 의미이다. -log[0.62]를 최소화한다는 말은 log[0.62]를 최대화한다는 말과 동일한데 확률값을 다른말로 Likelihood로 부르기로 했었기에 고양이에 대한 log likelihood를 최대화가 되도록 웨이트를 업데이트한다라고 말할 수도있다.

 

- 어떤 input을 준다음에 분류를 하는 task를 풀때는 우리의 목적함수는 -logP 즉, Cross Entropy를 쓰겠다는 것이 결론이다. 선형 연산하고 나온 의미가 애매한 아웃풋을 logit vector라고 한다.

- 타겟이 0과 1로만 이루어진 벡터를 One-hot vector라 하는데 만약 타겟이 원핫벡터가 아닐때는 즉 분류할때 애매함을 반영할시에는 공식에 넣어서 (pi)log(qi)로 학습할 수도 있기에 Cross Entropy를 무조건 -logP로 암기하지 않도록 유의해야한다. 원핫벡터일때만 -logP가 된다.