ROC 곡선(Receiver Operating Characteristic Curve)

ROC 곡선(Receiver Operation Characteristic Curve:  수신자 조작 특성 곡선)은 모든 분류 임계값(Classification Thresholds)에서 분류 모델의 성능을 보여주는 그래프입니다. 이 곡선은 두 매개변수를 갖습니다.

  • TPR(True Positive Rate): 참 양성 비율(= 재현율)
    => TPR = TP / (TP + FN)

  • FPR(False Positive Rate): 허위 양성 
    => FPR = FP / (FP + TN)

ROC 곡선은 다양한 분류 임계값의 TPR과 FPR을 나타냅니다. 분류 임계값을 낮추면 더 많은 데이터가 양성으로 분류되어 거짓 양성(FP)과 참 양성(TP) 모두 증가하게 됩니다. 아래의 그림은 일반적인 ROC 곡선을 나타냅니다.

ROC 곡선은 FP 비율에 대한 TP의 비율을 나타내는 곡선으로 FP 비율값이 낮으면서 TP 비율값은 높은 것이 더 좋은 정확도를 보이는 좋은 모델입니다. 이에 따라 곡선이 위로 볼록할 수록 더 좋은 모델입니다.

(참고 링크: 조대협의 블로그 - 분류모델(Classification)의 성능 평가)



AUC(Area Under the ROC Curve: ROC 곡선의 아래 영역)

AUC는 ROC 곡선의 아래 영역을 의미하며 예측이 얼마나 잘 평가되었는지 측정 할 때 사용합니다. 아래의 그림과 같이 ROC 곡선의 아래 영역이 AUC가 됩니다.


AUC를 통해 모델이 임의 양성 예제를 임의 음성 예제보다 더 높게 평가할 확률을 구할 수 있습니다. 에를 들어 다음 예에서는 로지스틱 회귀 예측의 오름차순으로 왼쪽에서 오른쪽으로 정렬되어 있습니다.


여기서 AUC는 임의의 양성(초록색) 예제가 임의의 음성(빨간색) 예제의 오른쪽에 배치되는 확률을 나타냅니다.


AUC는 두 가지 이유로 유용하게 사용 될 수 있습니다.

  • AUC는 척도 불변(Scale-Invariant): 절대값이 아닌, 예측이 얼마나 잘 평가되었는지는 측정

  • AUC는 분류 임계값 불변(Classification-Threshold-Invariant): 어떤 분류 임계값이 선택되었는지와 무관하게 모델의 에측 품질을 측정



분류 모델을 평가하는 방법으로 정확도(Accuracy) 외에도 정밀도와 재현율 이란 것이 있습니다. 이에 대한 이해를 도울 수 있는 좋은 자료를 아래의 링크로 첨부하겠습니다. 한 번 읽어 보시는 걸 추천드립니다!


링크: 조대협의 블로그 - 분류모델(Classification)의 성능 평가


이 포스트에서는 Machine Learning Crash Course에서 다루는 정밀도와 재현율에 관한 내용을 정리하도록 하겠습니다.



정밀도(Precision)

정밀도(Precision): 양성으로 식별된 사례 중 실제로 양성이었던 사례의 비율은 어느 정도인가요?


정밀도는 다음과 같이 정의 됩니다.(거짓 양성이 없을 경우 모델의 정밀도는 1.0)



그럼 이번에는 이전 포스트에서 다룬 예시를 통해 정밀도를 계산해 보도록 하겠습니다.


이 모델에서는 어떤 종양이 악성일 것이라고 평가했을 때, 이 평가가 정확할 확률이 50%입니다.



재현율(Recall)

재현율(Recall): 실제 양성 중 정확히 양성이라고 식별된 사례의 비율은 어느 정도인가요?


재현율은 다음과 같이 정의 됩니다.(거짓음성이 나오지 않는 모델의 재현율은 1.0)



위의 예시 이미지에서 종양 분류 모델의 재현율을 계산해면 다음과 같습니다.



이 모델에서는 모든 악성 종양 중 11%만 정확하게 식별됩니다.



정밀도 및 재현율의 줄다리기

모델이 좋은 모델인지 평가하는데 정밀도와 재현율을 모두 검사해야 합니다. 정밀도와 재현율은 서로 상충하는 관계에 있는 경우가 많아, 보통 정밀도가 향상되면 재현율이 감소하게 됩니다.


스팸 메일을 분류하는 예제를 통해 정밀도와 재현율이 줄다리기를 하는 모습을 알아보도록 하겠습니다.


로지스틱 회귀 모델로 출력된 결과를 특정 지점을 분류 임계값으로 정해 스팸 메일을 분류하도록 하겠습니다. 위의 예시를 토대로 나타나는 이진 분류 표는 다음과 같습니다.



이 분류 임계값에서 산출되는 정밀도와 재현율은 다음 같습니다.




여기서 정밀도는 정확하게 분류된 스팸으로 신고된 이메일의 비율 말하며, 재현율은 정확하게 분류된 실제 스팸 이메일의 비율을 나타냅니다.

분류 임계값을 증가 시킬 경우


분류 임계값을 위와 같이 좀 더 높게 설정해 보도록 하겠습니다. 이 경우 이진 분류 표와 산출되는 정밀도와 재현율은 다음과 같습니다.





분류 임계값을 증가 시켰을 경우, 허위 양성(FP)의 수는 감소하지만 허위 음성(FN)의 수는 증가하게 됩니다. 이로 인해 정밀도는 증가하는 반면 재현율은 감소합니다.


분류 임계값을 감소 시킬 경우

분류 임계값을 위와 같이 낮게 설정해 보도록 하겠습니다. 이 경우 이진 분류 표와 산출되는 정밀도와 재현율은 다음과 같습니다.





분류 임계값을 감소 시켰을 경우, 허위 양성(FP)의 수는 증가하지만 허위 음성(FN)의 수는 감소하게 됩니다. 이로 인해 정밀도는 감소하는 반면 재현율은 증가합니다.


이렇게 분류 임계값에 따라 정밀도와 재현율은 줄다리기를 하는 것을 알 수 있습니다.

이번 포스트에서는 분류 작업에 로지스틱 회귀를 사용하는 방법과 분류 모델의 효과를 평가하는 방법에 대해서 알아보겠습니다.


로지스틱 회귀 모형에서 특정 이메일에 관해 스팸일 확률이 0.95가 반환 되었다면 이 이메일은 스팸일 가능성이 매우 높은 메일로 예측 할 수 있습니다. 이와 반대로 동일한 로지스틱 회귀 모형에서 예측 점수가 0.03인 이메일이라면 이 이메일은 스팸이 아닐 가능성이 높습니다.


그렇다면 만약 스팸이 확률이 0.6인 이메일은 어떻게 처리해야 할까요?


임계값(Threshold)

우리는 이렇게 애매한 값을 이분법으로 확실히 분류를 할 기준이 필요로 합니다. 이 기준을 바로 임계값(Threshold)라고 합니다. 로지스틱 회귀 값을 이진 카테고리에 매핑(Mapping)하려면 분류 임계값(Classification Threshold, 결정 임계값이라고도 함)을 정의해야 합니다.


임계값보다 높은 값은 '스팸'을 나타내고 임계값보다 낮은 값은 '스팸이 아님'을 나타냅니다. 분류 임계값은 항상 0.5여야 한다고 생각하기 쉽지만 임계값은 문제에 따라 달라지므로 값을 조정해야 합니다.



참(True)과 거짓(False), 양(Positive)과 음(Negative)

이솝 우화를 통해 발생할 수 있는 4가지 결과를 요약해 보도록 하겠습니다. 



위의 내용에서 다음과 같이 정의해 보겠습니다.

  • "늑대다"는 양성 클래스(Positive Class)라 하겠습니다.
  • "늑대가 없다"는 네거티브 클래스(Negative Class)라 하겠습니다.

'늑대 예측' 모델에서 발생할 수 있는 4가지 결과를 요약하면 다음과 같이 2X2 혼동행렬(Confusion Matrix)을 사용해 나타낼 수 있습니다. 


  • 참양성(True Positive)는 모델에서 Positive Class정확하게 평가하는 결과입니다. 마찬가지로 참음성(True Negative)은 모델에서 Negative Class정확하게 평가하는 결과입니다.
  • 거짓양성(False Positive)는 모델에서 Positive Class잘못 예측한 결과입니다. 거짓음성(False Negative)은 모델에서 Negative Class잘못 예측한 결과 입니다.


혼동행렬이란, 라벨과 모델의 분류 사이의 상관관계를 요약한 NxN 표입니다. 혼동행렬의 축 중 하나는 모델이 예측한 라벨이고, 다른 축은 실제 라벨입니다.


앞서 우리는 선형 회귀를 통해 주어진 데이터가 연속적인 값일 경우 하나의 선으로 회귀시키는 예측 모델을 만들었습니다. 그런데 만약 주어지는 데이터가 범주형이거나 특정 분류로 나눠지는 데이터일 경우 어떻게 해야 할까요?


예를 들어서 동전이 앞면이 나올지 뒷면이 나올지, 아니면 내일 비가 올지, 맑을지, 구름이 낄지 등과 같이 수량이 아닌 확률과 같은 범주형으로 데이터가 주어지는 경우 처럼 말이죠.


이때 사용하는 방법이 바로 로지스틱 회귀(Logistic Regression)입니다.


로지스틱 회귀(Logistic Regression)

로지스틱 회귀법은 주어진 데이터가 1, 2, ..., 100 처럼 연속적인 값이 아닌, 동전이 앞면이 나올 확률, 내일 비가 올 확률과 같이 특정 분류로 나누어 지거나, 확률적으로 나타나는 데이터를 하나의 선으로 회귀 시켜 예측 모델을 만드는 방법입니다.


어떤 강아지가 밤에 짖는 확률은 로지스틱 회귀 모델로 아래처럼 표현 할 수 있습니다.


p( bark | night ) = 밤에 강아지가 짖을 확률


우리는 로지스틱 회귀를 통해 반환된 확률을 두 가지 방법으로 사용할 수 있습니다.

  • 반환된 확률을 있는 그대로 사용
    => p( bark | night ) = 0.05 라고 가정하겠습니다. 우리는 이 정보를 통해 1년에 강아지가 얼마나 짖는지를 로지스틱 회귀 값을 그대로 사용하여 알아 낼 수 있습니다. (p( bark | night ) * 365 = 0.05 * 365 = 18)

  • 반환된 확률을 이진 카테고리로 변환하여 사용
    => 내일 비가 온다/안 온다와 같이 Yes or No의 형태로 매핑(Mapping)하여 사용할 수 있습니다.

시그모이드 함수(Sigmoid Function)

로지스틱 회귀 모델 결과 값이 어떻게 항상 0 과 1 사이의 값으로 나타나는지 궁금할 수 있습니다. 이는 아래와 같이 정의된 시그모이드 함수로 인해 0과 1사이의 값을 출력해 냅니다.


  • y: 특정 예에 대한 로지스틱 회귀 모델의 출력

  • z: b + W1X1 + W2X2 + ... + WnXn    (b: 편향(Bias), w: 모델이 학습된 가중치(weight), x: 특정 값(Feature))

시그모디으 함수의 그래프는 다음과 같이 S자 모양으로 나타납니다. 실제로 많은 자연, 사회현상에서는 특정 변수에 대한 확률값이 선형으로 나타나지 않고, S자 커브 형태로 나타나는 경우가 많습니다.



로그 손실(Log Loss)

로그시틱 회귀 모델에서의 손실 함수는 로그 손실(Log Loss)로 다음과 같이 정의 됩니다.


  • (x,y) ∈ D: 라벨이 있는 예(x, y 쌍)가 많이 포함된 데이터 세트

  • y: 라벨이 있는 예의 라벨(로지스틱 회귀이므로 y 값은 모두 0 또는 1)

  • y': x의 특성 세트에 대한 예측 값(0 ~ 1 사이의 값)


앞의 포스트에서 우리는 L2 정규화를 통해 모델이 학습 데이터에 과적합 되는 것을 막는 방법을 배웠습니다. 그럼 우리는 어느정도 정규화를 해야 좋은 모델을 얻을 수 있을까요?


이번 포스트에서는 정규화 항에 람다(Lambda)라는 정규화율(Regularization Rate)을 곱하여 정규화의 정도를 조정하는 것에 대해서 알아보도록 하겠습니다.


람다(Lambda)

람다(Lambda)란 얼마나 정규화를 할지 조정하는 정규화율(Regularization Rate)입니다. 

만약 람다 값을 높인다면 정규화 효과가 강화되어 아래와 같이 정규 분포 모양의 그래프가 그려집니다.


람다 값이 높은 모델 가중치 분포 그래프를 보면, 가중치의 평균 값에 가장 많은 빈도가 발생하는 뚜렷한 정규 분포의 모양을 나타내는 것을 알 수 있습니다.


만약 람다 값을 낮춘다면 아래와 같이 좀 더 평평한 모델 가중치 분포 그래프가 그려집니다.



단순성(Simplicity)과 학습 데이터 적합성(Training-Data-Fit)의 균형

우리가 적절한 람다 값을 선택할 때 고려해야하는 것은 바로 단순성과 학습 데이터 적합성 사이에 적절한 균형을 맞추는 것입니다.

  • 람다 값이 너무 높은 경우: 모델은 단순해지지만 데이터가 과소적합해질 위험이 있음
    => 모델이 학습 데이터에 대해 충분히 학습하지 못할 수 있음

  • 람다 값이 너무 낮은 경우: 모델은 더 복잡해지고 데이터가 과적합해질 위험이 있음
    => 모델이 학습 데이터의 특수성을 너무 많이 학습하게 되어 새로운 데이터로 일반화하지 못함


이번 포스트에서는 우리가 학습시키는 모델이 주어진 데이터 세트에만 과적합 되는 것을 방지하기 위해 정규화를 하는 방법에 대해서 다뤄보도록 하겠습니다.


위의 그림은 반복 학습 횟수에 대해 학습 세트(Training Data)와 검증 세트(Validation Data)의 손실을 일반화된 곡선으로 보여줍니다.


이를 보면, 학습 손실은 점차 감소하지만 검증 손실은 어느 순간부터 증가하는 것을 나타냅니다. 즉, 이 일반화 곡선은 모델이 학습 세트에 과적합되어 있다는 것을 의미합니다.



정규화를 통한 과적합 줄이기

정규화란, 모델의 복잡도에 패널티를 줌으로써 과적합을 줄이는 것을 말합니다. 정규화 전략에는 크게 2가지가 있습니다.

  • 조기중단: 학습 데이터에 대해 손실이 특정 값에 수렴하기 전에 학습을 중단하는 방법
    => 위의 그림에서 검증 세트에 대한 손실율이 올라가는 지점, 즉 학습 데이터에 대해 손실율이 수렴하기 전에 학습을 중단하는 것입니다.

  • 모델 복잡도에 패널티를 부여: 학습하는 동안 모델에 패널티를 주어 학습 데이터에 과적합하지 않게 복잡성을 줄이는 방법

다음으로 모델 복잡도에 패널티를 부여하여 모델을 일반화하는 정규화 방법을 알아보도록 하겠습니다.


경험적 위험 최소화 -> 구조적 위험 최소화

우리는 이전까지 모델이 데이터에 대해 발생하는 손실을 최소화하는 것만을 목표로 삼았습니다. 이를 경험적 위험 최소화라고 합니다.


경험적 위험 최소화(Empirical Risk Minimization): minimize( Loss( Data | Model ) )


경험적 위험 최소화 방법은 학습 데이터에 대한 최소 손실을 알려주지만, 학습 데이터에만 과적합한 모델이 될 수 있습니다.]

이제부터 우리는 손실을 최소화하는 목표에 모델의 복잡도를 낮추어 좀 더 일반화된 모델을 만드는 목표를 추가하도록 하겠습니다. 이를 구조적 위험 최소화라고 합니다.


구조적 위험 최소화(Structural Risk Minimization): minimize( Loss( Data | Model ) + complexity( Model ) )


지금부터 우리의 학습 최적화 알고리즘은 모델이 데이터에 얼마나 적합한지 측정하는 손실 항(Loss Term)과 모델 복잡도를 측정하는 정규화 항(Regularization Term)의 함수가 됩니다.


모델 복잡도를 정의하는 방법

본 머신러닝 스터디 과정에서는 일반적으로 사용되는 2가지 방법으로 모델 복잡도를 표현할 것 입니다.

  • 모든 특성(Feature)의 가중치(Weight)에 대한 함수
    => 가중치의 절대값이 낮은 것을 더 선호(높은 절대값을 사용하는 특성 가중치는 낮은 절대값을 사용하는 특성 가중치보다 더 복잡함)

  • 0이 아닌 가중치를 사용하는 특성(Feature)의 총 개수에 대한 함수
    (차후 포스트에서 이 접근 방식을 다룸)

이번 포스트에서는 정규화 방법 중 L2 정규화(L2 Regularization)공식에 대해서 알아보도록 하겠습니다. 



L2 정규화(L2 Regularization)

L2 정규화란, 가중치의 제곱의 합에 비례하여 가중치에 패널티를 주는 정규화 방법입니다. 즉, 가중치가 클수록 큰 패널티를 부과하여 과적합을 억제하는 것 입니다.

L2 정규화 공식을 통해 복잡도를 수치화할 수 있습니다.



이 공식에서 0에 가까운 가중치는 모델 복잡도에 거의 영향을 미치지 않는 반면, 어떤 값이 비이상적으로 크다면 큰 영향을 미칠 수 있습니다.


L2 정규화를 통해 가중치들은 전체적으로 고르고 작은 값을 선호하게 됩니다. 만약 튀는 값(이상점)이 있거나 전체적으로 가중치의 크기가 커지면 정규화 손실(R(w))값이 커집니다.

https://de-novo.org/tag/regularization/


L2 정규화가 모델에 끼치는 영향

  • 가중치 값을 0으로 유도(정확히 0은 아님)
  • 정규 분포(종 모양)를 사용하여 가중치 평균을 0으로 유도


앞에서 우리는 주어진 데이터 세트에만 과적합한 모델을 만드는 것을 방지하기 위해서 두 개의 하위 세트(학습 세트, 테스트 세트)로 나누어 일반화 시킨 모델을 만들었습니다.


하지만 여전히 이 방법에도 문제점이 하나 있습니다. 바로 학습 세트로 학습 시키고 테스트 세트로 테스트를 진행해 초매개변수를 조정하여 얻어낸 모델이 이번에는 테스트 세트에 과적합한 모델이 될 수 있다는 것입니다.


세 개의 세트로 분할: 학습 세트(Training Set), 검증 세트(Validation Set), 테스트 세트(Test Set)

이렇게 데이터 세트를 두 개로 나누는 것 보다 더 좋은 방법이 있습니다. 주어진 데이터를 세 개의 세트로 나누는 것입니다. 데이터 세트를 학습 세트(Training Set), 검증 세트(Validation Set), 테스트 세트(Test Set)로 나누어 테스트 세트에 과적합한 모델이 될 가능성을 크게 낮출 수 있습니다.


학습 세트를 통해 학습된 모델을 바로 테스트 세트로 결과를 얻는 것이 아닌, 검증 세트를 사용하여 학습 세트의 결과를 평가합니다. 검증 세트의 결과에 따라 모델을 조정하여 가장 우수한 결과를 보이는 모델을 선택한 후, 이 모델을 테스트 세트를 사용하여 다시 평가하는 것입니다.


검증 세트를 활용한 우수한 모델 선택 과정

  1. 학습 세트로 모델을 학습
  2. 학습된 모델을 검증 세트 모델로 평가
  3. 검증 세트 결과에 따라 모델을 조정하고 다시 학습
  4. 검증 세트에서 가장 우수한 결과를 보이는 모델을 선택
  5. 그 모델을 테스트 세트로 모델을 평가

Tip

테스트 세트와 검증세트는 반복적으로 사용함에 따라 마모됩니다. 즉, 초매개변수 설정 또는 기타 모델 개선을 결정할 때와 같이 데이터를 더 많이 사용할수록 이러한 결과가 아직 주어지지 않은 새로운 데이터까지 일반화될 가능성이 낮아지게 되는 것 입니다.
(일반적으로 검증 세트보다 테스트 세트의 마모 속도가 더 빠름)

가능하면 데이터를 더 수집하여 테스트 세트와 검증 세트를 갱신하는 것이 좋습니다. 각 세트를 초기화하고 데이터 세트로 부터 처음부터 다시 설정하는 것도 좋은 재설정 방법입니다.


앞의 포스트를 통해 우리는 일반화를 하기 위해서는 주어진 데이터 세트를 두 개의 하위 세트(학습 세트와 테스트 세트)로 나눠야 한다고 했습니다.


학습 세트와 데이터 세트의 개념

  • 학습 세트(Training Set): 모델을 학습시키기 위한 데이터 세트의 일부분
  • 테스트 세트(Test Set): 모델을 테스트하기 위한 데이터 세트의 일부분

그렇다면 주어진 데이터 세트를 학습 세트와 테스트 세트로 나눌 때 몇 대 몇의 비율로 나누는 것이 좋을까요?


데이터 분할


보통 학습 세트와 테스트 세트로 나눌 때 보통 8:2의 비율이 되게 데이터 세트를 분할 합니다. 이는 데이터 분석자의 편의에 따라 임의로 조절이 가능합니다. 테스트 세트는 반드시 다음의 두 가지 조건을 만족해야 합니다.


테스트 세트의 조건

  • 통계적으로 유의미한 결과를 도출할 만큼 테스트 데이터가 커야 한다.
  • 데이터 세트를 전체적으로 나타내야 한다.
    => 테스트 세트가 한 쪽에 치우치치 않고 학습 세트와 같은 특징을 가지도록 선별해야 한다.

유의 사항: 테스트 데이터로 학습하지 말 것!

모델을 학습 시킬 때 주의해야 할 것이 있습니다. 바로 테스트 데이터로 모델을 학습시키지 않는다는 것입니다. 모델 학습은 학습 세트로만 진행하며 테스트 데이터는 일반화가 잘 되었는지 확인하는 척도로만 사용되어야만 합니다.


만약 모델의 예측 결과가 이상할 정도로 좋은 결과가 나온다면 실수로 테스트 세트로 학습을 시킨 것은 아닌지, 학습 세트에 테스트 세트가 들어간 것은 아닌지 확인을 해보아야 합니다.


학습 세트와 테스트 세트를 통해 일반화된 좋은 모델을 선택하는 과정


여기서 모델을 조정한다는 것은 초매개변수인 학습률(Learning Rate) 조절, 특성(Feature)의 추가 삭제, 완전히 새로운 모델 설계와 같이 모델에서 가능한 모든 요소를 조정하는 것을 의미합니다.

과적합(Overfit)과 일반화(Generalization)

아래의 같이 감기에 걸리 사람과 건강한 사람의 분포 데이터가 주어졌다고 가정하겠습니다. 이 데이터를 우리는 어떻게 분류할 수 있을까요?


과적합(Overfit)

아래와 같이 감기걸린 사람과 건강한 사람을 정확하게 나누는 경계를 그을 수 있을 것입니다.

정확하게 경게를 나눈다면 모델이 학습하는 동안에는 손실이 적지만, 새로운 데이터가 들어왔을 때 잘 예측을 하지 못하는 문제가 발생합니다. 이렇게 주어진 샘플을 필요이상으로 복잡하게 분류한 상태을 과적합하다라고 말합니다.


과적합한 모델: 현재 샘플에 필요 이상으로 정확한(복잡한) 모델


과적합은 모델이 새 데이터에 맞게 잘 일

아래의 그림은 과적합 모델에 새로운 데이터가 들어왔을 때 예측이 어긋나는 경우가 발생하는 것을 보여줍니다.



일반화(Generalization)

그렇다면 감기환자와 건강한 사람을 아래와 같이 나누면 어떨까요?

이렇게 단순하게 모델을 만든다면 모델을 학습시키는데 손실이 조금 발생하지만, 새로운 데이터에 대한 예측은 위에서 다룬 과적합한 모델보다는 더 뛰어날 것입니다.


이렇게 학습에 사용되는 데이터에는 조금 손실이 발생하더라도 새로운 데이터에 대해 올바른 예측을 수행하는 능력을 일반화라고 합니다.

일반화: 모델을 단순화시켜 새로운 데이터에 대한 에측성을 높이는 방법


머신러닝의 목표는 이전에 보지 못한 새 데이터를 잘 예측하는 것입니다. 즉, 학습에 사용되는 데이터에서 조금 손실을 보더라도 일반화를 통해 모델을 단순화시켜 새로운 데이터에 대한 예측 정확도를 높인다면 더 좋은 모델입니다.


어떻게 일반화(단순화) 시킬 것인가?

우리에게는 이미 발생한, 즉 주어진 데이터 밖에 갖고 있지 않습니다. 일반화를 하려면 학습 데이터 뿐만 아니라 새로운 데이터가 필요로 합니다. 그렇다고 새로운 데이터가 발생할 때마다 학습시켜 모델을 일반화 하는 것에는 한계가 있습니다.

그래서 우리는 주어진 데이터는 두 세트로 나누어 모델을 학습시키고 마치 새로운 데이터가 주어진 것처럼 테스트를 하여 일반화를 진행 할 수 있습니다.
  • 학습 세트(Training Set): 모델을 학습시키기 위한 데이터 세트
  • 테스트 세트(Test Set): 모델을 테스트하기 위한 데이터 세트

좋은 일반화를 하려면 테스트 세트가 다음의 조건을 만족해야 합니다.
  • 테스트 세트의 데이터가 충분히 많아야 한다.
  • 같은 테스트 세트를 반복해서 사용하지 않는다.

일반화를 하기 위한 전제 조건

모델을 일반화 하기 위해서는 다음의 세 가지 전제 조건을 총족해야 합니다.

  • 데이터를 독립적이고 동일하게(Independently and Identically => i.i.d) 추출해야 한다.
    즉, 각 예(Example)가 서로 영향을 미치지 않아야 한다.
  • 데이터가 변하지 않아야(Stationary) 합니다.
  • 같은 집단(Same Distribution)에서 데이터의 예를 추출해야 합니다.


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

만약 우리가 모든 데이터 세트를 가지고 모델을 학습 시킨다면 예측의 정확성은 높일 수 있으나, 매우 오랜 시간이 걸릴 것 입니다. 확률적 경사하강법은 랜덤으로 단 한 개의 데이터를 추출하여(배치 크기가 1) 기울기를 얻어 냅니다. 이러한 과정을 반복해서 학습하여 최적점을 찾아내는 것이 확률적 경사하강법입니다.


Cf. 확률적(Stochastic): 기울기를 구하는데 필요한 한 개의 데이터가 무작위로 선택 됨


경사하강법과 확률적 경사하강법의 비교

 

경사하강법 

확률적 경사하강법 

1회의 학습에 사용되는 데이터 

  모든 데이터 사용

  랜덤으로 추출된 1개의 데이터 사용(중복 선택 가능)

 반복에 따른 정확도

  학습이 반복 될 수록 최적해에 근접 

  학습이 반복 될 수록 최적해에 근접 

노이즈

  거의 없음 

  비교적 노이즈가 심함 

해를 찾는 과정의 이미지 비교

 

 



=> 한 번 학습할 때 마다 모든 데이터를 계산하여 최적의 한 스텝을 나아가는 경사하강법과 달리, 확률적 경사하강법은 랜덤하게 추출한 하나의 데이터만 계산하여 빠르게 다음 스텝으로 넘거 갑니다. 그 결과 더 빠르게 최적점을 찾을 수 있게 되었지만 그 정확도는 낮아집니다.


배치(Batch)란?

확률적 경사하강법을 설명할 때 배치(Batch)의 크기가 1이다라는 말을 하였습니다. 배치란, 단일 반복에서 기울기를 계산하는 데 사용하는 예의 총 개수를 의미합니다. 


예를 들어, 배치의 크기가 1인 경우에는 기울기를 구하는데 사용되는 데이터가 1개이고 배치의 크기가 10인 경우는 기울기를 구하는데 사용되는 데이터가 10개라는 것입니다.


미니 배치 확률적 경사하강법(Mini-batch SGD: 확률적 경사하강법의 한계를 보완하다

확률적 경사하강법은 단일 반복에서 기울기를 구할 때 사용되는 데이터가 1개여서 노이즈가 너무 심하다는 한계가 있습니다.

이를 보완하는 것이 바로 미니 배치 확률적 경사하강법(Mini-batch SGD)입니다. 미니 배치 확률적 경사하강법은 전체 배치 반복과 SGD 간의 절출안으로써 배치의 크기가 10 ~ 1000 사이로 설정합니다.
미니 배치 확률적 경사하강법은 SGD의 노이즈를 줄이면서도 전체 배치보다는 더 빠르게 최적점을 구할 수 있습니다.



+ Recent posts