관리 메뉴

ComputerVision Jack

[케라스 Chapter4 정리] 본문

DeepLearning/케라스 - Keras Lib

[케라스 Chapter4 정리]

JackYoon 2020. 1. 28. 23:25
반응형

머신 러닝 네 가지 분류

기존 다루었던 예제는 모두 지도학습(Supervised learning)의 예이다.

지도학습은 훈련 데이터의 입력과 라벨 사이의 관계를 학습하는 것이다.

 

지도학습

가장 빈번한 경우. 샘플 데이터가 주어지면 주어진 라벨(타켓)에 입력 데이터를 매핑하는 방법을 학습

지도학습은 회귀와 분류 문제로 구성되지만 예외의 상황도 있다.

  • 시퀀스 생성(Sequence generation)
  • 구문 트리(syntax tree) 예측
  • 물체 감지(object detection)
  • 이미지 분할(image segmentation)

비지도 학습

라벨(타킷)을 사용하지 않고, 입력 데이터에 대해 변환을 찾는다.

데이터 시각화, 데이터 압축, 데이터의 노이즈 제거, 데이터의 상관관계 검출 위해 사용된다.

차원축소(dimensionality)군집(clustering)이 잘 알려진 비지도 학습 내용이다.

 

자기 지도 학습

지도 학습의 특별한 경우이지만, 별도의 범주로 내놓을 만큼 다르다.

지도 학습이지만 사람이 만든 레이블을 사용하지 않는다. 대신 레이블에 대해 경험적인 알고리즘(heuristic algorithm)을 사용한다.

오토 인코더 경우, 미래의 입력 데이터로부터 지도되는 시간에 따른 지도학습

 

강화 학습

구글 딥마인드(Deep Mind)가 아타리 게임 플레이를 학습하는데 성공적으로 적용하면서 등장했다.

강화 학습에서 에이전트(agent)는 환경에 대한 정보를 받아 보상을 최대화 하는 행동을 선택하도록 학습된다.

머신 러닝 모델 평가

머신 러닝 목표는 과대적합을 피해 처음 본 데이터에서 잘 동작하는 일반화된 모델을 얻는 것이다.

즉, 과대적합을 완화하고 일반화를 최대하하는 전략을 살펴본다.

 

훈련, 검증, 테스트 set

데이터는 항상 훈련, 검증, 테스트 3개의 세트로 나눈다.

하이퍼 파라미터를 설정하여 모델 설정을 튜닝하기 위함.

 

데이터가 적을 경우, 데이터를 고급기법을 사용하여 부풀린다.

 

단순 홀드아웃 검증(hold-out validation)

데이터를 일정량 테스트 세트로 분류해 놓는다. 남은 데이터로 훈련하고 테스트 데이터를 사용한다.

하지만 검증 세트도 따로 분류해야한다.

단순 홀드 아웃 검증 방법

[코드적 접근]

valid_data = data[ : 10000]

data = data[10000 : ]

#검증 세트를 만든다.

 

train_data = data [ : ]

#훈련 데이터를 생성한다.

 

model.train(train_data)

valid_score = model.evaluate(valid_data)

# 훈련 데이터로 모델을 학습하고 검증 세트로 평가한다.

 

데이터가 점점더 줄어 들기 때문에 단점이다.

 

K-겹 교차 검증(K-fold cross-validation)

데이터를 동일한 크기를 가진 K개 분할로 나눈다. 각 분할에 대해 남은 K-1개의 분할로 모델을 훈련하고

분할한 것에서 모델을 평가한다.

3-겹 교차 검증 방법

[코드 접근]

valid_score = []

#각각의 폴드의 검증값이 append될 공백 리스트를 생성한다.

 

for fold in range(K):

    valid_data = data[100 * fold : 100 * (fold + 1)]

    train_data = data[ : 100 * fold] + data[ 100 * (fold + 1) : ]

#검증 데이터를 선택하고 나머지 부분을 훈련데이터로 사용한다.

 

    valid_score = np.average(valid_scores)

#폴드가 도출해 낸 검증값의 평균값을 구한다(앙상블)

 

셔플링(Shuffling)

가용 데이터가 적고, 정확한 모델을 평가하고자 할 떄 사용된다.

K-겹 교차 검증을 여러번 적용하되, 적용하기 전에 데이터를 무작위로 섞는다.

비용이 매우 많이 든다.

 

데이터 평가 방법

  • 대표성 데이터 사용
  • 시간의 방향(시계열 데이터 고려)
  • 데이터 중복 배제

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

데이터 전처리와 특성 공학은 특정 도메인에 종속적이다.

데이터 전처리

  • 벡터화
  • 값 정규화
  • 누락된 값 다루기

특성 공학

데이터와 머신 러닝 알고리즘에 관한 지식을 사용하는 단계

더 적은 데이터로 문제를 풀 수 있게 한다.

과대적합과 과소적합

최적화(Optimization)

가능한 훈련 데이터에서 최고의 성능을 얻으려고 모델을 조절하는 과정

 

일반화(Generalization)

훈련된 모델이 이전에 본적없는 데이터에서 얼마나 잘 수행되는지 의미

 

과대적합을 방지하려면 더 많은 훈련 데이터를 모으는 것 (현실상 제약이 많다)

따라서 다양한 규제(Regularization) - 과대적합 방지 가 존재 한다.

 

네트워크 크기 축소

모델의 크기, 학습 파라미터의 수를 줄이는 것이다.

학습 파라미터의 수 = 모델의 용량

따라서 적합한 모델을 찾는 과정은 적은 수의 층과 학습 파라미터로 시작한다.

model.add(layers.Dense(16, activation = 'relu', input_shape(10000, )))

                                                   변환

                        model.add(layers.Dense(6, activation = 'relu', input_shape(10000, )))

 

가중치 규제 추가

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

간단한 모델 : 파라미터 값 분포의 엔트로피가 작은 모델입니다.

네트워크 복잡도에 제한을 두어 가중치가 작은 값을 가지도록 강제하는 것

 

드롭아웃 추가

무작위로 층의 일부 출력 특성을 제외시킨다.

각 샘플에 대해 뉴런의 일부를 무작위하게 활동을 정하면 과대적합을 감소 시킨다.

학습되어가는 패턴을 깨버리는 행위

model.add(layers.Dense(16, activation = 'relu', input_shape=(10000, )))

model.add(layers.Dropout(0.5))

model.add(layers.Dense(1, activation = 'sigmoid')

반응형

'DeepLearning > 케라스 - Keras Lib' 카테고리의 다른 글

[케라스 Chapter6 정리]  (0) 2020.02.11
[케라스 Chapter5 정리]  (0) 2020.01.31
[케라스 Chapter3 정리]  (0) 2020.01.15
[케라스 Chapter2 정리]  (0) 2020.01.14
[케라스 Chapter1 정리]  (0) 2020.01.14
Comments