기계학습 기초(학습)

패턴인식 & 기계학습 2014. 10. 24. 09:47

사람의 능력 중 가장 뛰어난 능력은 학습 이라고 한다. 학습은 무엇일까?

처음 접하는 일은 처음에는 미숙하지만 시간이 지나고 보면 쉬운일이 된 경험이 많을 것이다.

또한 자전거를 처음 탈때 많이 넘어지고 다치며 자전거 균형 잡기 기술을 배우고 나면 

왠만해선 잘 넘어지지 않는다.


공학자에게는 항상 꿈이 있다. 이런 사람의 학습 기술을 기계에게 가르쳐 기계 스스로 학습하며 배워나갈수 

있는 환경을 구축하는 것이다. 

이런 꿈을 갖고 사람의 학습 방법과 기계의 학습 방법에 대해 살펴보자.


지도 학습과 비지도 학습


                           [그림 1] 사람의 학습과 기계의 학습


[그림 1]은 사람의 학습과 기계의 학습 방법을 설명하고 있다. 사람은 외부 환경으로부터 가르침을 받아

그것을 기억하고 다음 동일한 환경에 기억된 행동을 수행한다. 자전거를 탈때 균형 잡는 방법을 기억해 두었다가

추후 자전거를 탈때 균형을 잘 잡고 탄 경험이 있을 것이다.  


기계의 경우 특정 테스트 집합이 입력으로 들어 왔을때 이미 검증된 집합과 테스트 집합의 목록 중 테스트 모델이 

어디에 적합한지 확인하고 분류해 가며 학습함을 볼수 있다.

 

이렇게 기계 학습은 사람의 학습과 개념적으로는 비슷하지만, 학습 방법의 차이가 존재함을 볼 수 있다.

[그림 2]의 a를 보면 기계가 처음 학습 분류기를 생성하는 과정을 나타낸다. 학습 집합으로부터 특징을

추출한 뒤, 추출한 특징공간을 적절 나눈다. 나눈 특징들을 토대로 경계를 나눈 분류기를 만는다.

추후 테스트 영상이 들어왔때 학습 단계에서 사용한 방법과 동일하게 특징을 추출한 다음 분류기를 만들어

분류하는 과정을 거친다.


                         

                                                             [그림 2] 기계 학습


이와 같은 방법은 지도 학습(supervised learning) 이다. 즉 학습 집합에 있느 샘플은 (x, t)라는 정보를 갖는다.

x는 특징 벡터이고, t는 그것이 속하는 부류다. 하지만 때에 따라선 x만 있고, t의 정보가 없을때도 있다. 분류 정보가

없기 때문에 분류 작업을 수행할 수 없다. 이런 방법을 비지도 학습(unsupervised learning)이라고 부른다. 군집에서

유용한 정보 추출을 한다.(데이터 마이닝, 빅데이터, 정보 검색 등의 많은 응용)


두 가지 학습 방식의 중간에 속하는 경우를 준지도 학습(semi-supervised learning)이라고 한다. 


분류기 성능 평가

기계 학습은 학습 집합을 가지고 수행한다. 학습이 완료되면 테스트 집합으로 성능을 평가 한다.

그런데 데이터 수집에 상당한 비용이 들기 때문에 데이터 양이 충분하지 않은 경우 잘 분류되지 않거나, 잘못된

결과가 나오기도 한다. 이런 상황에서 유용하게 사용할 수 있는 방법을 몇가지 소개한다.


첫번째 방법은 재 샘플링(resampling)이다. 재 샘플링의 기본 아이디어는 같은 샘플을 이용해 여러번 학습 시키는 

것이다. 학습 데이터 량이 충분하지 않을때 유용하다. 


두번째 방법은 교차샘플이다. 교차 샘플은 분류기를 k-1개의 부분 집합으로 학습시키고 나머지 한 개의 부분 집합으로

분류기의 성능을 측정한다.


1
2
3
4
5
6
7
8
9
10
11
12
// 교차 검증
// 입력 : k(2≤k≤N), 훈련집합 X = {(x1,t1), (x2,t2), ..., (xN,tN)}
// 출력 : 성능Q
 
X를 k개의 부분집합으로 등분하고 그들을 x1, x2, ..., xk라고 한다.
 
for(i=1 to k) {
  X` = U(i=1, j≠i) Xj로 분류기를 학습
  Xi로 분류기의 성능을 측정하여 qi라 한다.
}
 
Q = (q1 + q2 + ... + qk) / K


이 과정을 서로 다른 부분 집합으로 k번 수행하여 얻은 성능의 평균값을 분류기의 성능으로 취한다.

이러한 방법을 k-겹 교차검증(f-fold cross validation)이라고 한다. 


세 번째 방법은 부스트랩(bootstrap)이다. 이 방법은 샘플의 중복 사용을 허용한다. 

N개의 샘플을 가진 집합 X에서 pN개의 샘플을 임의로 뽑는다. 이때 한거번에 하나씩 샘플을 뽑는데 뽑은 것을

다시 집합 X에 넣는다. 따라서 운이 좋은 경우 집합 X에서 여러번 뽑인 샘플도 있고, 한번도 뽑히지 않은 샘플이

존재할 수 있다. 이렇게 얻은 샘플 집합으로 성능을 측정한다. 

이 과정을 독립적으로 T번 수행하고, 그 결과를 평균한 값을 최종 성능으로 취한다.


1
2
3
4
5
6
7
8
9
10
11
// 부스트랩
// 입력 : 훈련집합 X = {(x1,t1), (x2,t2), ..., (xN,tN)}, 샘플링 비율 p(0<p≤1), 반복 횟수 T
// 출력 : 성능 Q
 
for(t=1 to T) {
   X에서 임의로 pN개의 샘플을 뽑아 Xt라고 한다. 이때 뽑은것을 다시 집어넣는다.
   Xt로 분류기를 학습시킨다.
   X-Xt로 분류기의 성능을 측정하여 qt라고 한다. 
}
 
Q = (q1 + q2, ..., qt)/T;


참조 : 컴퓨터비전(오일석)


'패턴인식 & 기계학습' 카테고리의 다른 글

신경망 이론  (0) 2014.11.04
Boltzmann machine(볼츠만 머신)  (0) 2014.11.04
결정 트리 분기  (0) 2014.10.25
다층 퍼셉트론  (2) 2014.10.24
신경망, 퍼셉트론  (0) 2014.10.24