본문 바로가기

딥러닝 공부

머신러닝의 기본 요소

※ 본 게시글의 내용은 '케라스 창시자에게 배우는 딥러닝'의 내용을 개인적인 이해를 통해 정리한 내용을 작성한 글입니다.


머신러닝의 네 가지 분류

▶지도 학습(Supervised learning)

→ 샘플 데이터가 주어지면 타깃에 입력을 매핑하는 학습 방법

→ 우리가 가장 흔하게 접하게 되는 학습 방법이며, 많은 경우의 모델에서 이러한 학습 방법을 사용

 

* 변종

- 시퀀스 생성 : 주어진 사진의 설명을 작성. 일련의 분류 문제로 재구성이 가능

- 구문트리 : 주어진 문장의 분해된 구문트리를 예측

- 물체 감지 : 주어진 이미지 내의 객체를 감지아혀 bounding box를 그림

- 이미지 분할 : 주어진 이미지에 픽셀 단위로 특정 물체 마스킹

 

 

▶비지도 학습(Unsupervised Learning) 

→ 어떠한 타깃의 사용도 없이 입력 데이터의 흥미로운 변환을 찾는다. 데이터 분석에서 빼놓을 수 없는 요소. 데이터셋의 이해를 위해 지도학습 전 거치기도 한다. 

→ 차원 축소(Dimensionality Reduction)와 군집(Clustering)이 잘 알려진 비지도 학습의 한 종류이다.

 

▶ 자기 지도 학습(Self-supervised Learning)

→ 지도 학습의 일종이지만, 사람이 만든 레이블을 사용하지 않는다.

→ 레이블이 필요하긴 하지만, 경험적인 알고리즘(Heuristic Algorithm)을 사용하여 입력 테이블로부터 레이블을 생성한다.

 

- 지난 프레임이 주어졌을 때 비디오의 다음 프레임을 예측하거나 이전 단어가 주어졌을 때 다음 단어를 예측하는 것 또한 자기 지도 학습의 예(Temporally Supervised Learning)

- 앞선 세 학습은 경계가 모호하며 연속적이기에 자기지도 학습은 보는 관점에 따라 지도 / 비지도로 해석이 가능하다.

 

▶ 강화 학습(Reinforcement Learning)

→ 환경에 대한 정보를 받아 보상을 최대화하는 행동을 선택하도록 설계

→ 구글의 알파고도 이러한 강화 학습을 통해 만들어졌다.

 

머신 러닝의 목표는 처음 본 데이터에서 잘 동작하는 '일반화'된 모델을 얻는 것이다. 
여기서 과대적합은 가장 주된 장애물이 된다

과대적합을 완화하고 일반화를 최대화하는 전략

 

▶ 훈련, 검증, 테스트 세트 

→ 주어진 가용 데이터 내에서 훈련, 검증, 테스트 3개의 세트로 나누어 훈련하는 것

→ 검증 세트를 사용하는 이유는 모델의 설정을 튜닝하기 위함

→ 모델을 주어진 데이터에 빠르게 과대 적합을 유도할 수 있다.(= 데이터의 특성을 빠르게 흡수하게 할 수 있다. 정보 누설이라는 개념으로 표현한다. 단, 정보 누설의 경우 테스트 데이터의 정보를 누설해선느 안 된다)

 

▶ 단순 홀드 아웃 검증

→ 단순한 데이터 분리법 

→ 70%의 데이터는 학습에, 나머지는 검증에 사용하는 등의 학습-테스트 데이터를 분리하여 학습시키는 방법

 

▶ K-겹 교차 검증

→ 데이터를 k개로 나누어 k개의 분할 데이터 셋을 만든 뒤 k-1개는 학습에, 1개는 검증에 사용하여 총 k번의 검증을 통해 모델을 훈련하는 방법

 


위와 같은 검증 방식을 사용할 때 주의해야할 것이 몇 가지 존재한다.

 

- 대표성이 있는 데이터 : 레이블에 존재하는 몇 개의 데이터에 대한 정보가 없는 훈련 데이터 셋을 사용해서는 안 된다.

→가령 전체 데이터가 정렬이 되어있는 경우, 훈련 데이터에는 abc만 있고, 검증데이터에는 def만 있는 경우가 존재한다고 한다...

 

- 시간의 방향 : 시간의 흐름이 존재하는 데이터 가령, 날씨, 주가 등 시간의 흐름이 데이터에 큰 영향을 끼치는 경우 훈련 전 데이터를 셔플링해서는 안 된다. 이렇게 하면, 미래의 정보가 누설되기에 사실상 미래의 데이터를 학습하는 것과 같다.

 

- 데이터 중복 : 한 데이터 셋에 특정 데이터가 두 번 존재하는 경우 훈련 세트와 검증 세트에 나란히 들어가는 경우가 있을 수 있다. 

 


신경망을 위한 데이터 전처리

 

▶ 벡터화 

→ 모든 입력과 타깃은 float타입의 tensor로 구성되어야 한다.

→ 사운드, 이미지, 텍스트 등 어떤 데이터도 예외는 없다.

 

▶ 값 정규화

→ 데이터의 분포가 매우 큰 경우 일정한 범위로 데이터의 크기를 정규화 해주는 것이 좋다.(가령, 어떤 특성은 범위가 0~1 사이인데 반해 다른 특성은 1억부터 시작하는 경우가 존재한다. 당연히 학습에 좋은 영향을 끼칠 수 없다)( → 만약, 특정 데이터의 내용이 결과에 큰 영향을 끼치지 않는다면 다른 특성들에 비해 더 작은 값으로 정규화하여 비중을 줄일 수 있는 것인가?)

 

▶누락된 값

→ 값이 없는 경우 학습이 안 된다. 확실히 처리하여 주자

 

▶ 특성 공학

→ 데이터의 특성을 파악하여 더 처리가 쉽도록 데이터를 변환한다. 이 경우 데이터의 특성에 대한 상당한 이해와 유연한 사고가 필수적이다.

 


과대적합 예방을 위한 전략

 

▶ 네트워크 크기 축소

→ 모델의 용량을 축소하여 훈련 데이터의 매우 디테일한 부분까지 학습하는 것을 늦출 수 있다.

 

▶ 가중치 규제 추가

→ 네트워크의 복잡도에 제한을 두어 가중치가 작은 값을 갖도록 강제한다.

- L1 규제 : 가중치의 절대값에 비례하는 비용을 추가한다(L1 노름)

- L2 규제 : 가중치의 제곱에 비례하는 빙요 추가(L2 노름)

 

▶ 드롭아웃 추가

→ 훈련 중 무작위로 층의 일부 출력 특성을 제외시킴. 이를 통하여 기대하지 않은 데이터 간의 우연한 패턴을 깨뜨릴 수 있다.

→ 단, 테스트 시에는 드롭아웃 비율로 출력을 낮춰야 한다.