AOC55

Backend, Devops, Cloud, kubernetes

IT/Data & AI

데이터 :: [케라스 및 딥러닝] 머신러닝의 기본요소-1

aoc55.soft@gmail.com 2020. 8. 28. 15:42

아래 내용은 '케라스 창시자에게 배우는 딥러닝' 서적의 내용을 정리한 내용임

머신러닝 4가지 분류

지도학습

비지도학습

  • ex) 차원 축소, 군집 등
  • 지도학습 풀기전 데이터셋 이해를 위해 필수로 거침

자기지도학습

  • 사람이 만든 레이블 사용하지 않고, 학습과정에 사람이 개입하지 않는 지도학습,
  • ex) 오토인코더

강화학습

  • 환경에 대한 정보를 받아 보상을 최대화 하는 행동을 선택하도록 학습

 

머신러닝 모델의 평가

훈련 / 검증 / 테스트 데이터 세트

  • 정보누설 방지
  • 모델은 간접적으로라도 테스트 세트에 대한 정보 얻으면 안됨

검증방법

  1. 단순 홀드아웃 검증
  2. K-겹 교차검증
  3. 셔플링을 사용한 반복 k-겹 교차검증

유념사항

- 대표성 있는 데이터: 레이블 분포 등을 확인하여, 셔플 등을 진행

- 시간의 방향: 과거로부터 미래를 예측할 경우 무작위로 섞어서는 안된다

- 데이터 중복: 훈련세트와 검증세트에 데이터가 중복되지 않았는지 주의

 

데이터 전처리, 특성공학, 특성학습

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

 

벡터화

- 신경망에서 모든 입력/출력 값은 부동소수 데이터로 이루어진 텐서

 

값 정규화

- 특성들의 범위가 제각각이면 독립적으로 정규화 등의 방식 수행해야 함

- 가중치의 초깃값보다 훨씬 큰  자릿수의 정수나, 균일하지 않은 데이터는 신경망에 위험함

- 작은 값을 취한다  (일반적으로 0~1 사이로)

- 균일해야한다  (모든 특성이 대체로 비슷한 범위를 가진다)

 

누락 값 처리

- 누락된 값에 대해서 (신경망에서 0이 사전에 정의된 의미 값이 아니라면) 0으로 입력해도 괜찮음

- (네트워크가 0이 누락된 데이터라는걸 학습하게 되면 0에 대해 무시하기 시작함)

- 단, 테스트데이터에서 누락된 값이 포함될 가능성이 있다?

  => 만약 네트워크가 누락값 없는 데이터에서 학습되었다면, 네트워크는 누락된 값 무시하는 법 모름

  => 따라서, 누락된 값이 있는 훈련 샘플을 고의적으로 만들어서 이를 훈련시켜줘야 한다

 

특성공학(Feature Engineering)

모델이 수월하게 작업할 수 있는 어떤 방식으로 데이터가 표현될 필요 있음

- 딥러닝 이전에는 특성 공학이 아주 중요했음 (특히 전통적인 얕은 학습 방법의 알고리즘들은)

- 하지만 최근 딥러닝은 특성공학 불필요하다. 왜냐하면 신경망이 자동으로 유용한 특성 추출하기 때문.

- 그러나 딥러닝에도 특성공학이 필요함

  1. 적은 자원을 이용해 문제를 풀어낼 수 있기에
  2. 더 적은 데이터로 문제를 풀어낼 수 있기에 (특히 샘플의 수가 적을때)

 

과대적합과 과소적합

머신러닝은 최적화와 일반화 사이의 줄다리기

- 과대적합: 전체 데이터가 아닌 훈련데이터에 특화된 패턴을 학습하게 됨

 

모델이, 모델과 관련성이 없고 좋지 못한 패턴을 훈련데이터에서 학습하지 못하도록 하려면...

  1. 더많은 데이터를 모은다
  2. 모델이 수용할 수 있는 정보 양을 조절하거나, 저장할 수 있는 정보의 양에 제약을 가한다 (규제

네트워크 크기 축소

- 알맞은 층의 수나, 각 층의 유닛 수를 조절 (단 마법같은 공식은 없다. 많이 해보는 수 밖에)

 

가중치 규제

- 간단한 모델이 복잡한 모델보다 덜 과대적합될 가능성이 높다

L1 규제 / L2 규제 / L1 + L2 규제 등 수행

(cf. 페널티항은 훈련할 때만 추가된다)

 

드롭아웃 추가

- 신경망을 위한 규제 기법 중에 가장 효과적이고 널리적으로 사용됨 

- 무작위로 층의 일부 츨력 특성을 제외시킴 (0으로 만듬)

- 테스트 단계에서는 어떤 유닛도 드롭아웃되지 않음, 대신 출력층 출력을 드롭아웃 비율에 비례하여 줄여줌

(혹은 학습단계에서 스케일을 높여주고, 테스트 단계에서는 함수 출력 그대로 사용하는 방식을 사용함)