"딥러닝 텐서플로 교과서" 책을 공부하고 정리한 것입니다.
감사합니다.
합성곱 신경망(CNN) - 합성곱층, 폴링층, 스트라이드, 커널,필터 알아보기
목차
- 성능 최적화란
- 배치 정규화 (Batch Normalization)
- 드롭아웃 (Dropout)
- 조기 종료 (Early Stopping)
(1) 딥러닝 성능 최적화하기
- 최대한 많은 데이터 수집하기
데이터양이 많을수록 성능이 좋습니다.
- 데이터 생성하기
많은 데이터를 수집할 수 없는 경우, 데이터를 만들어 사용할 수 있습니다. ( ImageDataGenerator() )
- 데이터 범위(scale) 조정하기
활성화 함수(시그모이드 [0~1], 하이퍼볼릭 탄젠트 [-1~1] ) 로 값을 갖도록 할 수 있습니다.
- 알고리즘을 이용한 성능 최적화
유사한 용도의 알고리즘을 선택해 모델을 훈련시켜봄으로써 최적의 성능을 가진 알고리즘을 택할 수 있습니다.
- 하이퍼파라미터를 이용한 성능 최적화
배치 정규화, 드롭아웃, 조기 종료를 이용해 성능을 최적화할 수 있습니다.
배치 정규화를 알기 전에 정규화, 규제화, 표준화를 알면 이해가 쉬우므로 3가지를 먼저 설명하겠습니다.
정규화란
: 서로 다른 데이터의 크기를 통일하기 위해 크기를 변환하는 것이다.
예를들어, 이미지 데이터는 픽셀 정보를 0~255 사이의 값을 갖는데 이를 255로 나누면 0~1.0 사이의 값을 갖게 된다.
규제화란
: 모델 복잡도를 줄이기 위해 제약을 두는 방법이다.
이때 "제약"은 데이터가 네트워크(은닉층)에 들어가기 전에 필터를 적용한 것이라고 생각하면 쉽습니다.
예를 들어 드롭아웃, 조기종료가 있습니다.
표준화란
:기존 데이터를 평균 0, 표준편차 1인 형태의 데이터로 만드는 방법이다.
평균을 기준으로 얼마나 떨어져 있는지 살펴볼 때 사용한다.
(2) 배치 정규화 ( Batch Normalization )
- 기울기 소멸이나 기울기 폭발 같은 문제를 해결하기 위한 방법이다.
- 기울기 소멸과 폭발 원인은 내부 공변량 변화 때문인데, 이것은 네트워크의 각층마다 활성화 함수가 적용되면서 입력 값들의 분포가 계속 바뀌는 현상을 말합니다.
- 따라서 분산된 분포를 정규 분포로 만들기 위해 표준화와 유사한 방식을 => 미니 배치에 적용하여 평균을 0, 표준편차는 1,로 유지하도록 합니다. ( = 배치 정규화 )
기울기 소멸 : 오차 정보를 역전파 시키는 과정에서 기울기가 급격히 0에 가까워져 학습이 되지 않는 현상
기울기 폭발 : 학습 과정에서 기울기가 급격히 커지는 현상
학습이 진행될 때마다 은닉층에서는 입력 분포가 변화하면서 가중치가 엉뚱한 방향으로 갱신되는 문제가 종종 발생합니다. 배치 정규화를 적용해 입력 분포를 고르게 맞추어 주면서 위 문제를 해결합니다.
model = Sequential([
Dense(64, input_shape=(4,), activation='relu'),
BatchNormalization(),
Dense(128, activation='relu'),
BatchNormalization(),
Dense(128, activation='relu'),
BatchNormalization(),
Dense(3, activation='softmax')
])
(3) 드롭아웃 ( Dropout )
- 훈련할 때 일정 비율의 뉴런만 사용하고, 나머지 뉴런에 해당하는 가중치는 업데이트 하지 않는 방법입니다.
- 드롭아웃은 노드를 임의로 끄면서 학습하는 방법으로, 은닉층에 배치된 노드 중 일부를 임의로 끄면서 학습합니다.
model = tf.keras.Sequential([
tf.keras.layers.Embedding(encoder.vocab_size, 64),
tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64, return_sequences=True)),
tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(32)),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(1, activation='sigmoid')
])
(3) 조기종료 (Early Stopping)
- 뉴럴 네트워크가 과적합을 회피하는 규제 기법입니다.
- 매 에포크마다 테스트 데이터에 대한 오차를 측정하여 모델의 종료 시점을 제어합니다.
- 종료 시점을 확인하기 위한 콜백 함수를 반드시 같이 사용해야 합니다.
from tensorflow.keras.callbacks import EarlyStopping
early_stopping = EarlyStopping(monitor='val_loss', patience=30, mode='min', min_delta=0.0001)
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
validation_split=0.2,
callbacks=early_stopping)
모델을 학습할 때 "callbacks" 파라미터에 조기종료 함수를 넣어줍니다.
monitor : 관찰하고자 하는 항목 ( val_loss, val_acc 를 주로 사용합니다.)
patience : 개선이 없다고 바로 종료하지 않고 개선이 없는 에포크를 얼마나 기다려 줄지를 지정합니다.
mode : 관찰 항목에 대해 개선이 없다고 판단하기 위한 기준을 정합니다.
( "min" 같은 경우 'val_loss'가 더이상 감소가 되지 않을 때 종료하는 것을 의미합니다. )
min_delta : 개선되고 있다고 판단하기 위한 최소 변화량을 나타냅니다.
'AI > Deep Learning' 카테고리의 다른 글
합성곱 신경망(CNN) - 합성곱층, 폴링층, 스트라이드, 커널,필터 알아보기 (0) | 2022.06.28 |
---|---|
[딥러닝] 학습 모델 저장하기 / 불러오기 / 보기 (0) | 2022.06.22 |
[딥러닝] RNN 순환신경만이란, (0) | 2022.06.20 |