목차
로지스틱 회귀(Logistic Regression)
예시
- 로지스틱 회귀는 이진 분류(Binary Classificaiton)를 위한 알고리즘입니다.
- 이진 분류 예시
- 스팸 메일 분류
- 입력 : 이메일의 텍스트, 발신자 등의 정보
- 출력 : 스팸 또는 정상 메일
- 신용 카드 사기 탐지
- 입력 : 거래 정보, 계정 정보 등
- 출력 : 사기 거래 또는 정상 거래
- 환자 질병 예측
- 입력 : 환자의 연령, 혈압, 혈당 등의 의학적 측정치
- 출력 : 특정 질병의 유 무
- 고양이 이미지 분류
- 입력 : 이미지
- 출력 : 고양이 또는 다른 객체(고양이가 아님)
- 스팸 메일 분류
- 이진 분류 예시
표기법
- 선형 회귀에 대해 데이터가 1개일 때와 m개일 때의 표기법을 살펴보도록 하겠습니다. (로지스틱 회귀의 경우 시그모이드 함수만 붙여주면 되기 때문에 표기법에는 별다른 차이가 없습니다.)
- 데이터 1개
- 데이터 m개
- 두 경우를 비교해 보면 w와 b 매개변수(파란색)는 그대로고, x와 y의 차원(빨간색)만 증가한 것을 확인할 수 있습니다.
- ()로 묶인 위 첨자 숫자는 데이터의 개수를 의미하고, 아래 첨자는 몇 번째 feature 또는 매개변수를 의미합니다.
- 데이터 1개
- 로지스틱 회귀는 선형 회귀의 결괏값을 0~1사이로 만들어주는 시그모이드 함수만 추가된 것입니다.
- nx는 어떤것을 의미하는 걸까요?
- 이는 input의 feature의 개수를 의미합니다.
- 선형 회귀와 로지스틱 회귀 모두 편향을 제외하면 매개변수의 개수는 feature의 개수와 동일합니다.
정의
- 로지스틱 회귀는 선형 회귀(Linear Regression)와 유사하게 입력 feature의 가중치 합을 계산하지만, 그 결과를 출력하기 전에 로지스틱 함수(=시그모이드(Sigmoid) 함수)를 사용하여 변환합니다.
- 선형 회귀(Linear Regression)
- 여기서 w0, w1, w2, ..., wn 은 모델이 학습하는 파라미터이며, 이들을 학습 데이터에 적합하게 조정하는 것이 선형 회귀 모델의 학습 과정입니다.
- 로지스틱 회귀(Logisitic Regression)
-
- z는 선형 회귀식입니다.
-
- y_hat은 로지스틱 함수(=시그모이드 함수(sigmoid))입니다.
- 시그모이드 함수는 0과 1 사이 값을 반환합니다.
- 로지스틱 회귀는 선형 회귀의 예측값을 로지스틱 함수를 통해 변환한 것입니다. 시그모이드롤 통해 0과 1 사이 값이 출력되며, 특정 클래스 중 하나에 속할 확률을 추정합니다.
- 선형 회귀는 output 값의 범위를 예상할 수 없지만, 시그모이드는 로지스틱 함수(=시그모이드 함수)를 통해 output 값의 범위가 0과 1 사이 값이 됩니다. 따라서 단순하게 특정 클래스에 속할 확률을 나타낼 수 있게 되어 이진 분류에 사용하게 됩니다.
-
- 선형 회귀(Linear Regression)
손실 함수(loss function) (MSE(Mean Squared Error), BCE(Binary Cross Entropy))
- 손실 함수의 정의는 아래 내용 참고 바랍니다.
- 로지스틱 회귀의 예측값
- 로지스틱 회귀의 손실 함수(= Binary Cross Entropy(BCE) loss)
- 선형 회귀에서는 MSE(Mean Squared Error) 손실 함수를 사용합니다.
- 선형 회귀에서는 MSE(Mean Squared Error) 손실 함수를 사용합니다.
- 로지스틱 회귀의 비용 함수
- 선형 회귀에서는 MSE(Mean Sqaured Error) 비용 함수를 사용합니다.
-
-
- 선형 회귀에서는 MSE(Mean Sqaured Error) 비용 함수를 사용합니다.
로지스틱 회귀에서 손실 함수로 MSE loss를 사용하지 않는 이유
- 선형 회귀에서는 MSE loss를 사용하지만, 로지스틱 회귀는 Binary Cross Entropy(BCE) loss를 사용합니다. 로지스틱 회귀는 선형 회귀에서 단순히 시그모이드가 추가된 건데 왜 손실 함수가 달라질까요?
- 이는 로지스틱 회귀에서 시그모이드 함수를 사용하게 되면 MSE loss가 Non-Convex 해지기 때문입니다. (선형 회귀에서의 MSE loss는 Convex)
- Convex 하다는 것은 볼록하다는 것으로 어느 지점에서든 경사하강법을 적용하면 최저점으로 이동하게 됩니다. 따라서 손실 함수가 매개변수에 대해 Convex 하다면 전역 최솟값에 도달할 수 있게 됩니다.
- 경사하강법 : https://comdon-ai.tistory.com/25
- 손실 함수가 Convex 한지 Non-Convex 한지 알기 가장 쉬운 방법은 함수의 이차 도함수(또는 Hessian 행렬, 다변수 함수의 경우)가 모든 점에서 양수(또는 Hessian 행렬이 positive semi-definite, 다변수 함수의 경우)이면 그 함수는 Convex 한 볼록 함수입니다.
- 자세한 내용 : https://comdon-ai.tistory.com/24
- Convex 하다는 것은 볼록하다는 것으로 어느 지점에서든 경사하강법을 적용하면 최저점으로 이동하게 됩니다. 따라서 손실 함수가 매개변수에 대해 Convex 하다면 전역 최솟값에 도달할 수 있게 됩니다.
- MSE와 BCE에 대해 Hessian 행렬을 구해보고, 왜 로지스틱 회귀에서 BCE를 사용하는지 살펴보도록 하겠습니다.
- 선형 회귀의 MSE에 대한 Hessian 행렬 -> Convex
- Hessian 행렬을 구한뒤 를 계산한 결과 항상 0보다 크거나 같은 값이 나와 Convex 하다는 것이 증명됩니다.
- 로지스틱 회귀의 MSE에 대한 Hessian 행렬 -> Non-Convex
- 실제로 편미분을 진행해보면 시그모이드 함수가 추가되어서 똑같은 MSE loss지만 Hessian 행렬이 굉장히 복잡해지는 것을 확인할 수 있습니다. 실제로 계산해 보면 Hessian 행렬이 positive semi-definite 하지 않다는 것을 알 수 있습니다.)
- 이를 통해 알 수 있는 점은 똑같은 손실 함수(loss) 더라도 모델의 구조에 따라 Convex일수도 있고 아닐 수도 있다는 점입니다.
- 실제로 편미분을 진행해보면 시그모이드 함수가 추가되어서 똑같은 MSE loss지만 Hessian 행렬이 굉장히 복잡해지는 것을 확인할 수 있습니다. 실제로 계산해 보면 Hessian 행렬이 positive semi-definite 하지 않다는 것을 알 수 있습니다.)
- 로지스틱 회귀의 BCE에 대한 Hessian 행렬 -> Convex
- 이와 같은 이유로 로지스틱 회귀에서는 전역 최솟값을 얻기 위하여 모든 매개변수에 Convex 한 BCE loss를 선택하였습니다.
- 선형 회귀의 MSE에 대한 Hessian 행렬 -> Convex
- 이는 로지스틱 회귀에서 시그모이드 함수를 사용하게 되면 MSE loss가 Non-Convex 해지기 때문입니다. (선형 회귀에서의 MSE loss는 Convex)
- 이처럼 모든 매개변수에 대해 Convex 한 loss식이 있다면 전역 최솟값(global minimum)을 구할 수가 있게 됩니다. 물론 Convex 한 loss 식을 사용하지 않더라도 loss 식을 사용할 수는 있습니다. 하지만 지역 최솟값(local minimum)등에 빠질 수 있게 되어, 전역 최솟값을 찾기 어렵게 될 수도 있습니다.
- 선형 회귀나 로지스틱 회귀처럼 단순한 모델이 아닌 실제 더 깊어진 딥러닝 모델에서는 모델이 깊어짐에 따라 모든 매개변수에 대해 Convex 한 loss 식을 가지기는 어렵게 됩니다. 따라서 딥러닝에서는 하이퍼파라미터 튜닝과 다양한 전역 최솟값(global minimum)에 최대한 가깝게 가도록 하는 전략이 필요합니다.
Binary Cross Entropy(BCE) loss 유도 과정
- 로지스틱 회귀에서 MSE loss를 사용하면 Non-Convex 해진다는 것을 알았습니다. 그렇다면 로지스틱 회귀는 왜 Binary Cross Entropy(BCE) loss를 사용하는 것일까요? (BCE 유도 과정)
- 우선 가장 먼저 생각해야할 점은 MSE는 회귀에서 사용되는 loss고, 로지스틱 회귀는 회귀가 아니라 분류라는 점입니다.(정확히는 이진 분류) [분류의 경우 log가 붙는 이유]
- 따라서 loss 식을 만들때 생각해야 하는 관점이 다릅니다.
- 회귀는 단순히 값의 차이를 최소화하는 방식으로 오차를 줄이지만, 분류는 확률적 접근을 통해서 불확실성을 최소화하면서 정확한 범주를 예측하려고 합니다.
- 회귀는 차이를 최소화 / 분류는 확률을 최대화
- 회귀의 경우는 단순히 m개의 데이터셋에 대해서 하나의 데이터에 대한 loss 값을 더해서 평균을 내는 방식으로 진행하면 됩니다.
- 분류의 경우는 확률적인 개념이기때문에 각각의 데이터가 독립적으로 발생할 확률은 개별 확률의 곱으로 나타낼 수 있습니다. (=여러 개의 독립 사건들의 결합 확률을 구할 때 적용되는 것) 이 값을 최대화할 수 있는 loss 식을 만들어내야 합니다.(loss는 최소화하는 방향으로 진행해야 하기 때문에 -를 통해 방향을 바꿔줘야 합니다.)
- 정리하면 m개의 크기의 데이터셋이 주어졌을 때 이에 대한 비용 함수의 경우 회귀는 모두 더해서 평균을 내지만, 분류의 경우 모두 곱한 확률값을 최대화해야 합니다.
- 하지만 분류의 경우 위와 같이 할 경우 문제가 존재합니다.
- 첫 번째로 확률끼리 곱해지므로 특정한 확률값이 0에 가까워진다면 곱셈을 할 때 불안정해지는 문제가 있습니다.
- 두 번째로는 데이터셋의 길이에 따라 곱해지는 길이도 달라지기 때문에 데이터셋 규모에 따라 변하는 loss가 변하는 문제가 존재할 수 있습니다.
- 위와 같은 문제를 해결하기 위해서 다음과 같은 해결방법이 존재합니다.
- 곱셈을 할 때 불안정해지는 문제를 해결하기 위해 곱해진 확률 값에 log를 씌워주는 방법입니다. (log는 모든 양의 입력값에 대해 단조 증가함수이기 때문에 log를 붙여주더라도 방향성에 변화는 없습니다.)
- 분류는 확률의 개념이기 때문에 0~1 사이 값을 가지므로 양의 입력값을 가지게 됩니다.
- log를 붙여주게 되면 log(p(a)p(b)p(c)p(d)) = log(p(a)) + log((p(b)) + log((p(c)) + log((p(d)) 처럼 확률의 곱셈이 덧셈으로 변해 수치적인 안정석을 가지게 됩니다.
- 여기서 잠깐 생각해 볼 점이 log(0)의 경우 -무한대가 되기 때문에 문제가 발생할 수 있는데 이건 어떻게 처리해야 할까요?
- 이는 log 안에 매우 작은 상수 (epsilon)을 더하는 방법으로 해결해 줄 수 있습니다. (log(p+ ))
- 또는 loss function clipping(손실 함수 클리핑) 방법을 통해 확률 p가 0에 매우 가까울 때는 임곗값으로 대체하는 방법도 존재합니다.
- 또한 길이의 문제의 경우는 log를 통해 곱셈을 덧셈으로 변경했으므로 데이터 개수의 크기(m)만큼을 나눠주는 방법을 통해 해결이 가능합니다.
- 곱셈을 할 때 불안정해지는 문제를 해결하기 위해 곱해진 확률 값에 log를 씌워주는 방법입니다. (log는 모든 양의 입력값에 대해 단조 증가함수이기 때문에 log를 붙여주더라도 방향성에 변화는 없습니다.)
- 로지스틱 회귀는 이진 분류이기 때문에 가능한 경우가 y=1인 경우와 y=0인 경우밖에 존재하지 않습니다.
- 분류 문제이기 때문에 위에서 설명한 것처럼 확률 개념으로 생각해야 합니다.
- 먼저 p(y|x)가 항상 최대가 될 수 있도록(=1이 될 수 있도록) y_hat에 따른 수식을 작성해주어야 합니다.(여기서 y_hat은 y랑 같을 경우가 최대한 정확한 경우이기 때문에 y일 경우 p(y|x)가 최대가 되도록 수식을 만들어줍니다.)
- y=1일 경우 p(y|x)는 y_hat으로 설정하면 y_hat이 1이 될 경우 자동으로 p(y|x)도 1로 가장 커지게 됩니다.
- y=0일 경우 p(y|x)는 1-y_hat으로 설정하면 y_hat이 0이 될 경우 자동으로 p(y|x)가 1로 가장 커지게 됩니다.
- 즉, p(y|x)이 확률 중 최댓값인 1이 될 때 y_hat이 정답인 값 y값에 가까워지도록 p(y|x) 수식을 정의해야 합니다.
- 이제 위 두식을 y=1이든 y=0이든 한 식에서 작동하게 만들려면 다음과 같이 합쳐줄 수 있습니다.
- y=0인 경우에는 왼쪽 부분이 1이 되어 무시되고, y=1인 경우에는 오른쪽 부분이 1이 되어 무시됩니다.
- 즉, y_hat은 그냥 모델 학습 시에 커지도록만 학습하면 y=1일 때는 파란색 부분이 작동하고, y=0일 때는 빨간색 부분이 작동하게 되는 것입니다.
- 하지만 지수에 y와 1-y가 있기 때문에 이 식자체가 Convex 한 지 확인하기는 어렵습니다. 따라서 log를 붙여 계산을 편리하도록 만들어줍니다.(log는 어떠한 x에 대해서든 증가하는 함수이기 때문에 방향성이 변하지 않아서 loss 함수에 붙여주더라도 상관이 없습니다.)
- log를 붙여주는 근본적인 이유 : 위 내용 중 [분류의 경우 log가 붙는 이유] 참고
- log를 붙이게 되면 식은 다음과 같이 변하게 됩니다.
- 이제 이 식을 두 번 미분하여 이 식자체가 Convex 한지 확인해 보도록 하겠습니다. 이는 위에서 계산한 과정과 동일합니다. 하지만 위 식에서는 -가 없는데 -를 안 붙이고 계산하게 된다면 항상 양수가 아니고 항상 음수인 결과가 나오게 됩니다. 따라서 위 식에 -를 추가해 주어야 모든 매개변수에 Convex 한 loss 식을 가지게 됩니다.
- 따라서 Convex 하게 만든 loss 식은 -log(p(y|x))가 되게 됩니다. (= -(y(log(y_hat) + (1-y)log(1-y_hat)) )
- 이 식이 결국 로지스틱 회귀의 loss 식인 BCE loss가 됩니다.
- 우선 가장 먼저 생각해야할 점은 MSE는 회귀에서 사용되는 loss고, 로지스틱 회귀는 회귀가 아니라 분류라는 점입니다.(정확히는 이진 분류) [분류의 경우 log가 붙는 이유]
'AI > Basic' 카테고리의 다른 글
대표적인 Activation Function (Sigmoid, tanh, ReLU, Leaky ReLU, ELU, PReLU, Softplus, Swish) (0) | 2023.11.21 |
---|---|
신경망 기초 (0) | 2023.11.10 |
경사 하강법(Gradient Descent) (1) | 2023.09.28 |
손실 함수(Loss Function) (0) | 2023.09.28 |
손실 함수(Loss function) vs 비용 함수(Cost function) (0) | 2023.09.28 |