본문 바로가기
머신러닝

케라스 창시자에게 배우는 딥러닝 3장, 4장

by 자유코딩 2019. 2. 9.

3장 요약

 

3장에서는 신경망의 개요와 딥러닝 예제를 제시한다.

 

아래 3가지 예제를 제시한다.

 

주택 가격 예측 문제

영화 리뷰 분류

뉴스 기사 분류

 

 

신경망의 구조

 

네트워크를 구성하는 층 = 다른 말로는 레이어

 

입력 데이터 , 타겟

 

예측 값과 실제 값을 비교하는 손실함수 = loss function

 

학습 진행 방식을 결정하는 옵티마이저 = 네트워크가 어떻게 업데이트 되면 좋을지 결정한다.

 

요약하면

 

1. 신경망 네트워크를 구성한다.

 

2. 입력 데이터를 넣는다.

 

3. 예를 들어서 분류 문제면 분류 되어야 하는 기대 값이 있다.

 

4. 손실 함수로 기대 값이랑 얼마나 차이 나는지 확인한다.

 

5. 기대 값과의 차이를 확인하고 옵티마이저로 네트워크를 업데이트 한다.

 

6. 다시 2번으로 돌아가 데이터를 넣고 결과를 본다.

 

7. 2~6을 적당한 지점까지 반복한다.

 

ㅇ 옵티마이저 : ex) 경사하강법 (SGD 스토캐스틱 그래디언트 디센트 ) 점진적으로 오차를 줄인다. 최적 해를 찾을 때까지 반복한다.

ㅇ 에폭 : SGD 방법에서 한번에 이동하는 단위 ( 1회 트레이닝 데이터를 모두 사용한 경우 = 1 에폭)

 

예제 실험 환경 세팅

 

방법은 크게 3가지 (필자는 윈도우)

 

1. 본인 컴퓨터 운영체제에서 사용하기

 

2. 가상머신에 리눅스 설치해서 사용하기

 

3. 클라우드 컴퓨팅 사용하기

 

이중에서 1번을 선택했다.

 

GPU를 사용해서 딥러닝 할 때 Tip

 

최신 딥러닝 프레임워크들은 NVIDIA 그래픽 카드에서만 동작한다.

 

 

영화 분류 문제 -

 

IMDB 데이터 셋을 사용한다.

 

코드는 책에 있는 것을 그대로 따라 치면서 실습하면 된다.

 

예제 코드를 다운받고 주피터 노트북을 켜면 코드를 입력하지 않아도 된다.

 

1. 모델에 층을 추가한다.

 

activation function 도 같이 설정한다.

 

유닛 갯수도 같이 설정한다.

 

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

 

2. 모델을 컴파일 한다.

 

이 때 optimizer , loss function도 같이 설정한다.

 

model.compile( optimizer = optimizers.RMSprop) , loss = 'binarycrossentropy', metrics=['accuracy']

 

3. 트레이닝 데이터를 쓴다. - 모델을 훈련시킨다.

 

model.fit (train data , epoch , batch-size , validation data)

 

4. 테스트 데이터 예측하기

 

뉴스 기사 분류 문제 - 다중 분류 문제

 

로이터 데이터

 

1. 데이터 준비

 

2. 데이터를 벡터로 변환 (신경망에는 리스트 데이터를 넣을 수 없다. 벡터(텐서) 를 입력 할 수 있다.)

 

3. 모델 구성

 

4. 모델 컴파일

 

5. 트레이닝 , 테스트

 

 

ㅇ 과대 적합 : 모델이 훈련 데이터에는 굉장히 정확한데 테스트 데이터에 대해서 성능이 안 좋은 경우

 

ㅇ 과대 적합을 막는 방법 : 트레이닝 데이터가 작을수록 과대 적합이 일어나기 쉽다. 트레이닝 데이터가 적으면 작은 모델을 사용한다.

 

주택 가격 예측 문제 ( 회귀 문제 )

 

ㅇ 회귀 / 로지스틱 회귀 구분하기 : 회귀는 연속적인 값을 예측한다. 로지스틱 회귀는 분류 알고리즘 이다.

 

1. 데이터 준비 - 보스턴 주택 데이터셋

 

2. 모델 구성

 

샘플 개수가 적으므로 작은 네트워크를 사용한다.

 

손실함수 : mse (평균 제곱 오차 = mean squared error)

 

3. k 겹 교차 검증

 

훈련 데이터가 충분히 크지 않을 때 검증하는 방법

 

훈련 데이터를 k개로 나눈다.

 

k-1 개로 훈련하고 나머지 1개는 테스트 데이터로 사용한다.

 

이렇게 k개의 점수를 낸다. k개의 검증 검수의 평균은 모델의 검증 점수가 된다.

 

ㅇ 지수 이동 평균 : 일반 이동 평균과는 다르게 최근 데이터에 가중치를 두는 이동 평균 법

 

4장 요약

 

4장에서는 머신러닝의 이론을 설명하고 있다.

 

 

머신러닝의 몇가지 분류

 

1. 지도 학습

 

사람이 직접 샘플 데이터와 레이블을 준비한다.

 

대부분의 분류 , 회귀 문제가 여기 속한다.

 

데이터를 타겟에 매핑하는 방법을 학습한다.

 

아래의 경우도 지도 학습에 속한다.

 

시퀀스 생성

 

구문트리 예측

 

물체 감지 ( Object Detection )

 

이미지 분할

 

2. 비지도 학습

 

군집화 ( Clustering ) 가 여기 속한다.

 

레이블이 없는 데이터를 가지고 알아서 유사한 데이터 군집을 나눈다.

 

차원 축소( dimensionality reduction )도 여기 속한다.

 

3. 자기 지도 학습

 

지도 학습과 비슷하지만 다른 점이 있다.

 

사람이 만든 레이블을 사용하지 않는다.

 

경험적인 알고리즘( 휴리스틱 알고리즘 ( Heuristic Algorithm ))을 사용해서 입력 데이터로부터 레이블을 생성한다.

 

오토 인코더도 여기 속한다.

 

오토 인코더에 관련된 자료 링크

 

https://d2.naver.com/news/0956269

 

 

4. 강화 학습 - Reinforcement learning

 

에이전트가 환경에 대한 정보를 받고 보상이 최대로 되는 행동을 선택하도록 학습된다.

 

분류와 회귀에서 사용하는 용어

 

샘플 , 입력: 모델에 주입될 하나의 데이터 포인트

 

예측 , 출력 : 모델로부터 나오는 값

 

타깃 : 정답, 모델이 예측해야 하는 값

 

예측 오차 , 손실 값 : 모델의 예측과 타깃 사이 거리를 측정한 값

 

클래스 : 모델이 선택 할  수 있는 가능한 레이블 조합 , 동물을 분류한다면 '고양이' , '강아지' , '물고기'  등등

 

레이블 : 모델이 분류되는 분류 단위 '고양이'label , '강아지'label

 

참 값, 꼬리표 : 데이터 셋에 대한 모든 타깃 - 일반적으로 사람이 수집

 

이진 분류 : 각 입력 샘플이 2개로 분류되는 것

 

다중 분류 : 분류 될 수 있는 경우가 많은 경우 ex) 손글씨 분류

 

다중 레이블 분류 : 분류 될 수 있는 레이블이 많은 경우

 

스칼라 회귀 : 타깃이 연속적인 스칼라 값인 작업 , ex) 주택 가격 예측

 

벡터 회귀 : 타깃이 연속적인 값의 집합인 작업

 

미니배치 , 배치 : 모델에 의해서 동시에 처리되는 소량의 샘플 묶음

 

 

머신러닝 모델 평가

 

ㅇ 하이퍼 파라미터 : 모델의 레이어 개수 , 유닛 수

 

모델이 과대적합 되면 안된다.

 

모델의 훈련, 검증, 테스트 세트

 

검증.

 

단순 홀드아웃 검증

 

훈련데이터 / 테스트 데이터 두가지를 떼어놓고 모델을 만든다.

 

k 겹 교차 검증

 

데이터를 k개 분할로 나누고 k-1 개로 테스트한다.

 

k 번째 데이터로 테스트 한다.

 

최종 점수는 k개 테스트의 평균으로 한다.

 

셔플링 k 겹 교차 검증

 

k 겹 교차검증을 k번 시행 할때마다 데이터를 섞는다.

 

 

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

 

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

 

벡터화 , 값 정규화 , 누락 값 다루기

 

벡터화 : 신경망의 모든 입력은 부동소수 텐서여야 한다.

 

값 정규화 : 예를 들어 값을 0~1 사이로 정규화한다.

 

누락 된 값 다루기 : 누락 값을 0으로 한다. 그리고 네트워크가 0이 누락된 데이터를 의미한다는 것을 학습하면 값을 무시한다.

 

특성 공학

 

특성을 간단히 만들어서 문제를 쉽게 만든다.

 

 

최적화와 일반화

 

최적화 : 모델이 최적의 성능을 내게 됨

 

훈련 데이터에 대해서 너무 최적화가 잘 되어 있으면 테스트 데이터에 대한 성능이 안 좋다. - 과대 적합

 

일반화 : 일반화가 잘 되어 있다면 모델이 테스트 데이터에 대해서 좋은 결과를 낸다.

 

과대 적합을 막는 방법 1가지

 

네트워크 크기를 줄인다. - 하이퍼 파라미터를 조정한다.

 

학습 파라미터의 수를 조정한다. = 용량을 조정한다.

 

하이퍼 파라미터 ( 층 , 유닛 개수 )가 많으면 모델의 용량도 크다.

 

가중치 규제 ( Weight Regularization ) 추가

 

가중치 규제는 네트워크 복잡도에 제한을 둔다.

 

네트워크 복잡도에 제한이 생기면 가중치가 작은 값을 가지게 된다.

 

이것이 가중치 규제이다. 이렇게 하면 가중치 값의 분포가 더 균일하게 된다.

 

ㅇ 오캄의 면도날 : 어떤 것에 대한 2가지 설명이 있다면 더 적은 가정이 필요한 간단한 설명이 옳을 것이다.

 

드롭아웃 추가

 

드롭아웃은 레이어의 일부 출력 특성을 제외시킨다.

 

이렇게 하면 신경망이 규제된다.

 

케라스에서는 레이어의 출력 바로 뒤에 드롭아웃 층을 추가한다.

 

 

보편적인 머신러닝 작업 흐름

 

1. 문제 정의 , 데이터셋 수집

 

2. 성공 지표 선택

 

정확도 , 정밀도 같은 지표를 선택한다.

 

지표를 골라야 손실 함수를 정할 수 있다.

 

분류문제에서는 보통 정확도와 ROC AUC를 지표로 사용한다.

 

ㅇ ROC AUC : ROC 커브라고도 검색된다.

 

3. 평가 방법 선택

 

홀드아웃 검증 세트 분리

 

k 겹 교차 검증

 

반복 k겹 교차 검증

 

 

보편적인 머신러닝 작업 흐름


1. 문제 정의 , 데이터 수집

ex ) 문제가 분류인지 군집인지 정의한다.

어떤 문제인지 정의한다.

데이터를 수집한다.

분류라면 데이터의 클래스과 입력 데이터가 정해진다.


2. 성공지표 선택

정확도 , 정밀도 같은 지표를 선택한다.

ROC AUC 도 사용되는 지표 중 하나이다.


ㅇ ROC AUC ( ROC 커브 ) : 가로 축을 FP Rate 로 하고 세로 축을 TP Rate 로 해서 시각화 한 그래프이다.

https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html


https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html


위 그림에선 모델이 클래스 0을 가장 잘 분류하는 것이다.

y=x 그래프에 가까울 수록 성능이 안 좋다.

ㅇ TP Rate : rate of true positives - 주어진 클래스에 대해서 맞게 분류한 비율 ( true 인데 true 라고 한 비율 )

ㅇ FP Rate : rate of false positives - 주어진 클래스에 대해서 틀리게 분류한 비율 ( false 인데 true 라고 한 비율 )


ㅇ TN ( True Negative )  : False인데 False 라고 한 경우

ㅇ FN ( False Negative ) : True 인데 False 라고 한 경우


3. 평가 방법 선택

k 겹 교차 검증 , 반복 k겹 교차 검증 , 홀드아웃 검증 세트 분리


k 겹 교차 검증 : 앞서 살펴봤었다. 데이터 셋을 k 개로 나누고 검증한다.


반복 k 겹 교차 검증 : 데이터가 적을경우 데이터를 셔플하며 k겹 교차 검증한다.


홀드아웃 검증 세트 분리 : 데이터가 풍부하면 사용한다.


4. 데이터 준비

모델에 주입할 데이터를 구성한다.

데이터는 텐서로 구성된다. 


5. 기본보다 나은 모델 훈련

statistical power 를 높인다. 

네트워크 출력에 제한을 가한다. - ex) IMDB 예제는 마지막 층에 시그모이드를 사용한다. 회귀는 마지막 층에 활성화 함수를 쓰지 않는다.

손실함수 : ex) IMDB 예제에는 binary_crossentropy , 회귀 예제에는 mse 

최적화 설정 : 어떤 옵티마이저를 사용하는지. 학습률은 얼마인지


모델에 맞는 활성화 함수 , 손실함수


문제 유형                            마지막 층의 활성화 함수                손실 함수

이진분류                                시그모이드                            binary_crossentropy

단일 레이블 다중 분류                소프트 맥스                            categorical_crossentropy

다중 레이블 다중 분류                시그모이드                            binary_crossentropy

임의 값에 대한 회귀                    없음                                       mse

0과 1사이 값에 대한 회귀            시그모이드                       mse 또는 binary_crossentropy


6. 과대적합 모델 구축

최종적으로 과대 적합 모델을 구축 하라는 것이 아니다.

트레이닝 데이터 셋에 대해서 최적화가 너무 잘 되어서도 안되고, 너무 일반화 되어서도 안된다.

그 사이에서 적절한 위치에 있어야 한다.

그런데 적절한 지점을 알려면 적절한 지점의 경계를 찾기 위해서 지나쳐 봐야 한다.

그래서 과대 적합된 모델을 만든다.

1. 레이어를 추가한다.

2. 레이어의 크기를 키운다.

3. 더 많은 에폭 동안 훈련한다.


7. 모델 규제와 하이퍼 파라미터 튜닝


6번의 과정으로 과대적합 모델이 구축되었다.


이제 모델 규제 , 하이퍼 파라미터 튜닝을 통해서 적당한 모델을 만들어간다.


반복적으로 모델을 수정하고 -> 훈련 -> 검증을 반복한다.


1. 드롭아웃을 추가한다.

2. 레이어를 추가하거나 제거해서 구조를 다르게 해보낟.

3. L1 이나 L2 또는 두가지 모두 추가한다.

4. 최적의 설정을 찾기 위해서 하이퍼 파라미터를 바꿔서 시도한다.

레이어의 유닛 수, 옵티마이저의 학습률

5. 선택적으로 특성공학을 시도한다.

새로운 특성추가 , 유용하지 않은 특성 제거

7의 주의사항.

검증과정을 너무 많이 반복하면. 모델이 검증 과정에 과대적합 된다.


만족할만한 모델을 얻었다면. 트레이닝 데이터와 테스트 데이터를 써서 제품에 투입할 최종 모델을 훈련시킨다.


그런데 이 때 모델의 성능이 테스트 데이터에서 좋지 않거나 과대 적합 이라면.

검증 과정이 문제가 있거나, 하이퍼 파라미터 튜닝 과정에서 검증 데이터에 과대 적합 된 것이다.


이러면 검증 과정의 평가 방법을 바꾸는 게 좋다.

댓글