-
데이터 전처리, 특성공학, 특성학습
데이터 전처리
1. 벡터화
- 처리해야 할 데이터를 텐서로 변환하는 것
- 신경망에서의 입력과 타깃은 부동 소수 데이터 or 정수로 이루어진 텐서여야 함
- ex) 앞의 실습에서 텍스트를 정수 리스트로 변환 한 후, one-hot-encoding 을 사용해 float32 타입의 데이터로 변환한것
2. 정규화
- 데이터가 비교적 큰 값이거나 균일하지 않을 때 사용하는 방법
ex) 한 특성의 범위와 다른 특성의 범위가 다른 경우
- 목표
대부분 값이 0~1 이도록 작게 만들기,
모든 특성이 비슷한 범위를 갖도록 균일하게 하기
- 정규화 방법 : 각 특성별로 평균이 0, 표준편차가 1이 되도록 하기
x -= x.mean(axis=0) x /= x.std(axis=0)
3. 누락된 값 다루기
- 훈련 데이터에 누락된 값이 있는 경우
이 경우에는, 결론적으로 0이 사전에 정의된 의미있는 값이 아니라면 누락된 값을 0으로 입력하면 됨
(네트워크가 누락된데이터가 0을 의미한다는 것도 학습하기 때문)
- 훈련 데이터에 누락된 값이 없는 경우
이 경우는 네트워크가 누락된 값을 학습하지 못하였기 때문에, 누락된 값이 있는 훈련 샘플을 고의적으로 만들어야 함
(훈련 샘플 복사 -> test data에서 빠질것 같은 특성 제거)
특성 공학
- 데이터와 신경망에 관한 지식을 사용하는 단계
- 학습이 아니라, 모델이 수월하게 작업할 수 있도록 데이터를 변환함
- 특성을 더 간단한 방식으로 표현하여 문제를 쉽게 만드는것이 목표
- ex) 시계의 시간을 읽을 때, CNN을 사용하는 것이 아니라
바늘끝 좌표를 출력하는 파이썬 스크립트를 만들어 머신러닝 알고리즘이 좌표와 시각을 연결하도록 함
- 딥러닝에서는 대부분 특성 공학이 필요하지 X
( 딥러닝이 알아서 특성을 추출하기 때문 )
그래도 적은 자원, 적은 데이터로 문제를 해결할 수 있으므로 딥러닝에서도 특성공학 사용하면 좋음
과대적합과 과소적합
알아두어야 할 개념
1. 과대적합 (overfitting)
- overfitting 이 발생하면, 모델의 성능이 몇번의 epoch후에 최고치에 다다랐다가 감소됨
- 훈련 데이터에 너무 익숙해져서 모델이 테스트 데이터에서는 제대로 성능을 보이지 못하는 것
2. 과소적합 (underfitting)
- 훈련 데이터의 loss가 낮아질수록 테스트 데이터의 loss도 낮아지는 것
- 네트워크가 훈련 데이터에 있는 관련 특성을 모두 학습하지 못하여 발생함
- But, 훈련데이터에 여러번 학습하면 어는순간부터 검증세트의 성능이 멈추고 감소
= 과대적합 발생
3. 최적화와 일반화
- 최적화 : 훈련데이터에서 최고의 성능을 얻으려고 모델을 조정하는 과정
- 일반화 : 이전에 본적없는 데이터에서 얼마나 잘 수행되는지
- 즉, 머신러닝은 최적화와 일반화 사이의 줄다리기!
좋은 일반화 성능을 얻는것이 목표이지만, 단지 훈련 데이터로 모델을 학습시키므로 일반화 성능을 제어할 방법이 X
4. 이 모두를 고려하는 가장 좋은 방법
가장 좋은 방법은 훈련 데이터를 많이 모으는것
그런데, 불가능 한 경우 '규제'를 통해 과대적합을 피하고 더 나은 일반화 성능을 제공하게 하면 됨
* 규제 : 모델이 수용할 수 있는 정보의 양 조절 or 저장할 수 있는 정보에 제약을 가하는 것
네트워크가 적은 수의 패턴만 기억하게 하여 가장 중요한 패턴에만 최적화되게 함
규제 기법
1. 네트워크 크기 축소
- 모델에 있는 학습 파라미터의 수를 줄이는 법 = 모델의 용량을 줄이는 것
- 그렇다고 너무 과소적합되지 않도록 충분한 파라미터를 가지게 해야 함
즉, 너무 많은 용량과 충분하지 않은 용량 사이의 절충점을 찾아야 함
절충점을 찾는 방법은 비교적 적은 수의 층과 파라미터로 시작하여
검증 손실이 감소되기 시작할때까지 층이나 유닛의 수를 늘리면 됨
* 실습
네트워크 네트워크의 크기를 축소한 모델이 검증 손실이 더 천천히 증가하는 것을 볼 수 있었음
= 기존보다 더 늦게 과대적합 시작
3. 가중치 규제 추가
- 가중치 규제 : 네트워크의 복잡도에 제한을 두어 가중치가 작은 값을 가지도록 강제하는 것
-> 가중치 값의 분포가 더 균일하게 됨
- 가중치 규제의 종류
˙ L1 규제 : 가중치의 절댓값에 비례하는 비용이 추가 됨
˙ L2 규제 : 가중치의 제곱에 비례하는 비용이 추가됨 ( = 가중치 감쇠 )
- 사용 방법 ( in 케라스 )
from keras import regularizers
regularizers.l1(0.001)
regularizers.l1_l2(l1=0.001, l2=0.001)4. 드롭아웃 추가
- 드롭아웃이란?
무작위로 층의 일부 출력 특성을 제외시키는 것
가장 효과적인 방법으로, 드롭아웃 비율은 0이 될 특성의 비율을 의미함. 보통 0.2 ~ 0.5로 설정
테스트 단계에서는 어떤 유닛도 드롭아웃 되지 X. 단, 층의 출력을 드롭아웃 비율에 비례하여 줄여줌
- 드롭아웃이 과대적합을 줄일 수 있는 이유
각 샘플에 대해 뉴런의 일부를 무작위하게 제거하여 뉴런끼리의 부정협업을 방지 -> 과대적합 감소
즉, 노이즈를 추가하여 중요하지않은 패턴을 학습하지 않도록 하는것
- 사용방법 ( in 케라스 )
층의 출력 바로 뒤에 Dropout층 추가하면 됨!
ex)
model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape(10000,)))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation='sigmoid'))정리
신경망에서 과대적합을 방지하기 위해서 할 수 있는 방법
1. 훈련 데이터 더 모으기
2. 네트워크의 용량 감소시키기
3. 가중치 규제 추가하기
4. 드롭아웃 추가하기
<케라스 창시자에게 배우는 딥러닝>(길벗, 2018)을 학습하고 개인 학습용으로 정리한 내용입니다.
'인공지능 > 케라스 창시자에게 배우는 딥러닝' 카테고리의 다른 글
[5. 컴퓨터 비전을 위한 딥러닝] 5.1 합성곱 신경망 소개 (0) 2021.01.20 [4. 머신러닝의 기본요소] 4-5. 보편적인 머신 러닝 작업 흐름 (0) 2021.01.13 [4. 머신러닝의 기본요소] 4-1, 4-2. 머신러닝의 분류 및 모델 평가 방법 (0) 2021.01.11 [3. 신경망 시작하기] 이진분류, 다중분류, 회귀 정리 (모델 구성 방법) (0) 2021.01.10 [3. 신경망 시작하기] 3-6. 주택 가격 예측 - 회귀 문제 (0) 2021.01.09 댓글