[인공지능 기초] 2. 학습과 데이터

2021. 5. 13. 15:32인공지능/인공지능 기초

 

학습을 얼마나 잘하냐에 따라서 모델의 성능이 달라지니 매우 중요한 부분이라고 할 수 있다.

 

학습에서 가장 중요한 것은 다름아닌 데이터이다. 데이터가 곧 머신러닝이다 라고 말해도 과언이 아니다.

**물론 적은 데이터나 불규칙한 데이터로도 학습이 가능하게 하는 연구도 있으나 데이터는 학습에 핵심이라는 것은 진리이다.

 

이번 글에서는 학습의 개념과 데이터와의 관계, 또 머신러닝에서의 데이터 세분화를 살펴볼 것이다.


1. 신경망 학습

신경망에서 학습이란, 간단하게 말해 최적의 가중치 매개변수를 찾는 과정이라고 할 수 있다.

 

분류문제를 예로 들어보자,

나는 강아지 이미지가 input으로 들어가면 0, 고양이 이미지는 1을 내보내주는 모델을 만들고 싶다.
**input 이미지는 (width, height, 3)의 3차원 matrix일 것이고, output은 0, 즉 scalar값이다.

 

모델을 input -> output으로 가기위한 매핑 함수라고 생각하면 이해하기 쉽다.

강아지 matrix를 0으로 매핑하기 위해 어떠한 함수 F(X)가 필요할 것이다.

**여기서는 간략하게 $F(X) = WX+B$라 하겠다. W는 Weight, B는 Bias이다.

 

하지만 초기 매핑함수 F(X)는 강아지가 0인지 1인지 구별하는 능력이 없어 다른 output을 출력할 수 있다.

**처음 W와 B는 random, zeros, ones 등의 방식으로 초기화된 상태이므로 아무런 능력없는 함수이다.

 

여기서 학습으로, Weight W와 bias B를 갱신해가면서 강아지 matrix-> 0, 고양이 matrix-> 1로 만드는 최적의 매핑 함수를 찾아가는 것이다.

 

얼마나 최적화 되었는가에 대한 지표로는 손실 함수(Loss(Cost) Function)를 사용하고, 이 손실 함수의 결과값(loss)을 가장 작게 만드는 가중치 매개변수(W, B)를 찾는 것이 학습의 목표가 된다.

 

2. 데이터 주도 학습

사람의 개입을 최소화하면서, 수집한 데이터로부터 패턴을 찾아 유의미한 결과를 추출하는 것을 말한다.

 

사람의 개입이 들어가게 되면, 일일이 지정해주어야 하는 하이퍼 파라메터가 많아지고, 이 값에 따라서 매 결과가 달라지게 된다.

 

최적의 하이퍼 파라메터를 찾기 위해서 수 많은 case에 대해서 test를 해야하고, 하이퍼 파라메터 개수가 늘어날 수록 이 시간은 기하급수적으로 올라가게 된다. 또한, 모델을 다른 목적으로 사용하고 싶다면 위 과정을 또 반복해야한다.

이런 반복작업을 사람이 직접 하려니...효율도 떨어지고 무엇보다 힘들다....

그래서 단계적으로 조금씩 프로그램에게 위 작업을 떠넘기게 된다.

 

영상처리 분야를 예로, 딥러닝 이전에는 이미지에서 특징을 추출(사람의 개입)하고, 그 특징의 패턴Machine Learning(기계 학습)으로 학습시키는 방법을 사용하였다.

 

여기서 특징이란, 입력 데이터에서 본질적인 데이터를 추출할 수 있도록 설계된 변환기(주로 filter)를 의미한다. 보통 벡터로 표현되며, 대표적인 특징으로는 SIFT, SURF, HOG등이 있다.

**본질적인 데이터는 edge나 사물의 shape, 음영, 색깔 등등 그 이미지를 표현하는 특징이라고 보면 된다.

<왼쪽> SIFT, <오른쪽> HOG

 

출처: https://darkpgmr.tistory.com/116

**SIFT, HOG에 관한 설명은 위 블로그에 자세히 되어있으니 참고하면 좋을 것이다.

 

하지만 위와 같은 방법에서도 Machine Learning이 데이터로부터 규칙을 찾아내는 역할을 하지만, 이미지를 벡터로 변환할 때 사용되는 특징여전히 사람이 설계해야 된다는 단점이 있었다.

즉, 풀고자하는 문제에 적합한 특징을 사람이 찾아야 한다....

 

여기서 Neural Network(신경망)님의 등장이시다.

Convolutional Neural Network(CNN)은 이미지->벡터에 사용되는 특징까지도 학습을 통해 찾아낸다. 

따라서 모든 문제에 대해 같은 맥락에서 푸는 것이 가능하다.(숫자 분류든, 개와 고양이 분류든 상관없이 학습할 수 있다.)

 

이렇게 사람의 개입이 최소로 줄어들면서 모델이 robust해지고(다양한 문제에 대해서 대응이 가능), 사람이 하이퍼 파라메터를 일일이 정해주지 않아도 되어 효율적인 학습이 가능해졌다. 

 

3. 훈련 데이터와 시험 데이터(Trains set & Test set)

보통 Machine Learning에서 데이터를 train-set과 test-set으로 나누어서 수행한다.

 

Train-set Validation-set Test-set

 

train-set학습에서 실제 input값으로 입력되어 이용되는 데이터셋이고,

test-set은 학습이 종료된 후, 모델의 성능을 테스트할 때 사용된다.

**train-set과 test-set은 서로 독립적이어야 한다.

 

validation-set은 모델이 학습 성능을 중간마다 체크하는 용도로 쓰인다.

하이퍼 파라메터나 최적의 모델을 찾을 때, 주로 사용된다.

 

하이퍼 파라메터나 모델을 정할 때, 모든 case마다 훈련을 다한 후에 테스트를 하면 시간이 너무 오래걸리게 된다. 따라서 validation set으로 중간마다 성능을 체크하여서, 훈련이 안된다 싶으면 도중에 정지를 하고 다음 case로 넘어가게 된다.

데이터셋이 충분히 큰 경우에는 위와 같이 3개의 집합으로 나누는 것은 문제가 되지 않는다.

하지만 데이터셋이 작다면 어떻게 될까?

데이터셋이 충분하지 않다면 모델에 너무 Under-fitting(과소적합)이 되거나 Over-fitting(과대적합)이 될 수 있다.

즉, 1. 모델이 데이터를 잘 표현하지 못하는 경우2. 모델이 train-set만 너무 잘 표현하여 test-set에서는 낮은 성능을 보이는 경우가 생길 수 있다.

**Overfitting과 Underfitting은 다음 번에 자세히 다루도록 하겠다.

 

3.1 K-Fold Cross Validation

위의 문제를 보완하기위해 사용할 수 있는 기법하나를 설명하려고 한다.

k-fold cross validation

위의 그림에서 K-Fold Cross Validation을 순서대로 보여주고 있다. 

  1. 기존 데이터를 Shuffle한다.
  2. 데이터를 k개로 분할한다. 
  3. 여기서 k-1개를 train-set으로, 1개를 test-set으로 사용한다.(상황에 따라서 1개를 validation-set으로 준다.)
  4. test-set을 rotate하면서 k번 반복한다.

 주로 하이퍼 파라메터 k는 작은 데이타셋에서는 크게, 큰 데이타셋에서는 작게 설정한다.


지금까지 신경망 학습에 대해서 공부하였다. 

 

머신러닝에서 가장 중요한 것은 데이터라고 해도 과언이 아니다. 

이 데이터의 품질에 따라서 성능이 천차만별로 달라진다.

 

하지만 이런 고품질의 데이터를 만들기란 정말 쉽지 않다. 

 

그래서 여러 나라와 기업들이 좋은 데이터를 만들기 위해서 노력을 기울이는 것이고, 

이러한 데이터를 많이 가지고 있는 나라와 기업이 4차 산업을 이끌어나가는 것이다.