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


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


세 개의 세트로 분할: 학습 세트(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의 노이즈를 줄이면서도 전체 배치보다는 더 빠르게 최적점을 구할 수 있습니다.



학습률(Learning Rate)

앞의 경사하강법에서 시작점에서 다음점으로 이동할 때 보폭(학습률) 만큼 이동한 점을 다음점으로 정한다고 하였습니다. 학습률인란, 현재점에서 다음점으로 얼만큼 이동할지, 다르게 말하면 모델이 얼마나 세세하게 학습을 할지를 말합니다.


학습률이 작다면 손실이 최적인 가중치를 찾는데 오랜 시간이 걸릴 것이며, 학습률이 너무 크다면 최적점을 무질서하게 이탈할 수도 있습니다.

초매개변수(Hyperparameter)

학습률과 같이 우리가 직접 조정하는 값을 초매개변수라 합니다. 우리는 직접 학습률을 여러 개 대입하여 가장 효율적이게 학습을 하는 학습률을 찾아야 합니다.

경사하강법(Gradient Descent)

앞의 포스트에서 매개변수를 업데이트를 하는 과정에서 손실을 줄이기 위해 가중치와 편향 값을 수정한다고 하였습니다. 하지만 그냥 아무 값이나 넣는다면 최적화된 값을 찾는데 매우 오랜 시간이 걸릴 것입니다.

경사하강법이란, 손실이 최소가 되는 최적의 가중치를 찾는 방법입니다. 먼저 함수의 기울기(경사)를 구하여 기울기가 낮은 쪽으로 계속 이동시켜서 극값에 이를 때 까지 반봅하는 작업을 반복하면 최적의 가중치를 을 수 있습니다.


경사하강법: 함수의 기울기(경사)를 구하여 기울기의 절댓값이 낮은 쪽으로 이동시켜 극값(최적값)을 찾는 방법


여기서 쓰이는 함수란, 손실이 최소가 되는 최적의 가중치를 구하기 위한 모든 w값의 손실을 나타내는 함수입니다. 이를 그래프로 그리면 아래의 그림과 같은 모양이 그려집니다.

가중치의 크기에 따른 손실 그래프를 그려보면 위의 그림과 같이 아래로 볼록한 모양이 됩니다. 왜 아래로 볼록한 모양이 나오는 것일까요?

손실이 최소가 되는 가중치의 최적점(점 A)이 있다고 가정하겠습니다.  이 점은 이미 손실이 최소인 점 A는 그보다 더 작은 가중치와 더 큰 가중치에서는 더 높은 손실을 나타낼 것입니다. 그리고 이 최적점에서 멀어질 수록 그 손실은 더 커지게 되어 위와 같은 아래로 볼록한 모양의 손실-가중치 그래프가 그려지게 됩니다.



경사하강법으로 최적의 가중치를 찾는 과정

1. 가중치(w)의 시작점 정하기

시작점을 정하는 것은 별로 중요하지 않습니다. w를 0으로 설정해도 좋고, 임의의 값을 설정해도 괜찮습니다. 이번 예에서는 0보다 조금 더 큰 값으로 시작점을 설정하겠습니다.


2. 시작점의 기울기를 구해 다음 점의 이동 방향 결정

시작점의 기울기를 편미분을 하여 구해줍니다. 그 다음 기울기의 크기의 반대 방향으로 점을 이동시켜줍니다.

우리가 설정한 시작점의 기울기는 음수(-)이니 점을 양수(+) 방향으로 이동시켜줍니다.



3. 기울기의 크기의 일부를 시작점에 더한 만큼 다음 점으로 이동

기울기의 크기의 일부를 시작점에 더해 다음 점으로 이동을 시켜줍니다. 이렇게 더해진 값을 보폭(Step)이라 합니다. 이 보폭을 어떻게 결정하는 지는 다음 포스트(06_학습률)에서 다루도록 하겠습니다.

이번 포스트에서는 머신러닝 모델이 어떤 방식으로 손실을 줄이는지 다뤄보도록 하겠습니다. 머신러닝은 기본적으로 주어진 데이터를 여러번 학습하는 반복 학습 방식을 통해 예측의 정확성을 높입니다.



반복 방식

머신러닝의 기본적인 학습 방법인 반복 방식은 입력된 특징(Feature)들을 임의의 가중치(Weight)와 편향(Bias)로 예측 값을 산출하여 실제 값(Label)과 비교하여 그 차이(Loss)를 0 또는 최소화가 되게 하는 가중치와 편향 값을 찾는 방식 입니다.


위의 그림은 머신러닝에서 반복 방식이 동작하는 과정을 나타낸 그림입니다. 그 과정을 풀이하면 다음과 같습니다.

  1. 임의의 가중치과 편향이 설정된 모델(Model)에 특징(Feature)를 넣습니다.
  2. 모델의 예측 함수(y' = b + wx)를 통해 산출된 예측 값(Prediction)을 실제 결과(Label)과 차이를 계산하여 손실을 알아냅니다.
  3. 가중치(Weight)와 편향(Bias)를 재설정하여 모델을 새롭게 만듭니다.
  4. 손실이 0 또는 최소가 될 때까지 위의 과정을 반복합니다.
이런 반복 과정을 통해 전체 손실이 변하지 않거나 느리게 변하게 되면 이때 모델이 수렴했다고 말합니다.

반복 방식: 초기에 임의로 가중치와 편향을 설정하고 예상 손실 값이 가장 적은 가중치와 편향을 학습할 때까지 매개변수를 조정하는 방식



학습과 손실

  • 학습(Training):
    Label이 있는 데이터로부터 모델을 학습시켜 적절한 가중치(Weight)와 편향(Bias)를 찾는 것
  • 손실(Loss):
    예측한 값과 실제 값간의 차이를 의미하며, 잘못된 예측에 대한 벌점과 같음. 모델의 예측이 실제 데이터보다 차이가 많이 날 수록 손실은 커지게 됨.

모델 학습의 목표: 모든 예(Example)에 대해서 가장 작은 손실(Loss)을 갖는 가중치(Weight)와 편향(Bias)의 집합을 찾는 것


위의 그래프에서 파란선은 예측(Prediction)을, 빨간선은 손실(Loss)를 의미합니다. 빨간색 선의 길이가 비교적 짧은 왼쪽 그래프가 오른쪽 그래프보다 더 좋은 예측을 하는 모델입니다.



제곱 손실(Squared Loss)

손실을 표현하는 함수 중 가장 잘 알려진 제곱 손실 함수는 손실 값을 양수로 표현하기 위해 각 손실에 제곱을 취해 모든 손실을 더한 것을 말합니다.


제곱 손실을 이용할 경우에는 손실의 차이를 양수로 다 더해 손실의 총 크기를 알기 쉽다는 장점이 있지만, 입력된 x의 개수가 다른 두 모델의 대해 손실 정도를 비교하기 어렵다는 단점이 있습니다. 이러한 단점을 보안하기 위해 실제로는 평균 제곱 오차(Mean Square Error)를 주로 사용합니다.



평균 제곱 오차(Mean Square Error)

예시의 수가 다른 두 모델을 비교할 수 없는 제곱 손실의 단점을 보완하는 방법이며, 아래의 식으로 표현할 수 있습니다.

  • (x, y): 모델 학습에 사용되는 예(Example)
    - x: 모델이 예측하는데 사용되는 특징(Feature)
    - y: 라벨(Label)
  • prediction(x): 특징(x)와 가중치의 곱과 편향값의 합으로 된 함수 => y' = b + w*x
  • D: 라벨이 있는 예가 포함된 데이터 세트
  • N: D에 포함된 예의 수


선형회귀(Linear Regression)이란?

선형회귀란, 분포된 데이터를 특정 선으로 회귀시켜 대표하는 하나의 선으로 표현하는 방법을 말합니다. 이때의 선은 분포된 데이터를 잘 표현할 수 있도록 정하는 것이 중요합니다. 


위의 차트에서 빨간 점은 입력된 데이터(Feature)을 나타내며, 파란색 선은 점들의 분포를 대표해서 나타낸 선형회귀된 선 입니다.



선형회귀 표현식

선형회귀는 종속 변수 y와 한 개 이상의 독립 변수 x를 갖습니다. 이를 식으로 표현하면 다음과 같습니다.


  • y': 예측하고자 하는 라벨(Label)을 의미하며, 위의 차트에서 '섭씨 온도'가 y'이 됩니다.
  • b: 초기 값의 편향(Bias)를 의미하며, 위의 차트에서 x=0일 때의 y 값(y 절편)입니다.
  • w1: Feature1의 가중치를 의미하며, 위의 차트에서 파란선의 기울기 입니다.
  • x1: 입력된 특성인 Feture1을 의미하며, 위의 차트에서 x축 입니다.


특성이 여러개인 선형회귀

만약 입력된 특성이 여러 개일 경우, 선형회귀 식은 아래와 같이 표현합니다.



머신러닝(Machine Learning) 이란?

머신러닝 시스템은 입력된 다양한 정보를 조합하여 새로운 정보를 적절히 예측하는 방법을 학습하는 것을 말합니다.



머신러닝에서의 주요 용어

Labels

라벨(Label)은 예측을 하고자 하는 대상 항목을 의미합니다. (단순 선형 회귀에서 y 변수)

담배의 향후 가격, 사진에 표시되는 사물의 종류 등 무엇이든지 Label이 될 수 있습니다.

Features

특징(Feature)은 입력되는 정보를 의미합니다. (단순 선형 회귀에서 x 변수)

과거의 담배 가격, 이메일 안의 텍스트 단어 등 현재 알고 있어 예측에 사용되는 정보는 모두 Feature가 될 수 있습니다.

Examples

예(Example)는 입력된 데이터들(x)의 특정 객체입니다. x는 벡터라는 것을 나타내기 위해 굵게 표시합니다. Example은 두 개의 카테고리로 구분됩니다.

  • Label이 있는 예: Labeled Examples: {features, label}: (x, y)
    Model을 학습시키기 위해 Label이 있는 Examples를 사용합니다.

  • Label이 없는 예: Unlabeled Examples: {features, label}: (x, ?)
    Label이 있는 예를 통해 Label이 없는 예의 라벨을 예측합니다.

위의 표는 집의 평균 가격을 예측하기 위해 방의 개수와 침실의 개수 등의 정보가 주어진 Data Set 입니다. 주어진 Data Set에서는 medianHouseValue가 우리가 예측하고자 하는 Label입니다. 이미 입력 정보로 Label 주어져있는 medianHouseValue 행의 Features를 통해 주어지지 않은 medianHouseValue를 예측합니다.

Model

모델(Model)은 Feature과 Label의 관계를 정의합니다. 예를 들어 위의 Data Set에서 방의 개수(totalRooms)와 집의 평균 가격(medianHouseValue)는 긴밀한 연관이 있다고 생각할 수 있습니다.

Model's Life에서 Training(학습)과 추론(Inference)라는 두 단계를 알아보도록 하겠습니다.

  • Training(학습): 모델을 만들거나 배우는 것을 의미합니다. 즉, Label이 있는 예를 모델에게 보여 주고, 모델이 Feature과 Label의 관계를 점차적으로 학습하도록 합니다.
  • Inference(추론): 학습된 모델을 Label이 없는 예에 적용하는 것을 의미합니다. 즉, 학습된 모델을 통해 적절한 예측(y')를 해냅니다. 예를 들어, 추론하는 동안 라벨이 없는 새로운 예로 medianHouseValue를 예측 할 수 있습니다.

Regression(회귀) vs. Classification(분류)

  • Regression Model(회귀 모델): 연속적인 값을 예측하는데 사용됩니다. 예를 들어 다음과 같은 질문에 대한 답을 얻는데 회귀 모델이 사용될 수 있습니다.
    (=> 수치로 표현할 수 있는 것을 예측)
    - 서울의 아파트 가격이 얼마인가요?
    - 유저가 유투브 광고를 클릭할 확률이 얼마인가요?
  • Classification Model(분류 모델): 불연속적인 값을 예측하는데 사용됩니다. 예를 들어 다음과 같은 질문에 대한 답을 분류 모델은 예측할 수 있습니다.
    (=> 수치로 표현할 수 없는 것을 예측)
    - 주어진 이메일이 스팸 메일입니까?
    - 이 사진이 강아지 사진이 맞습니까?


+ Recent posts