반응형
keras.layers.Dropout 레이어란?
드롭아웃 레이어는 훈련 중 각 단계에서 빈도율(rate)에 따라 input units을 무작위로 0으로 설정하여 과적합(overfitting)을 방지하는 역할을 한다. 즉, 쉽게 말해서 신경망에서 일부 뉴런을 없애버린다고 보면 된다. 드롭아웃이 과적합을 방지하는 과정은 사진의 해상도를 생각하면 될 것 같다. 해상도가 높은 얼굴 사진은 특정한 한명만 나타낼 수 있지만, 해상도가 낮아지면 디테일이 떨어지면서 인물 얼굴 형태의 보편적인 특성만을 가지게 되는 것과 같다.
Dropout에 의해서 0으로 설정되지 않은 inputs은 1 / (1 - rate)
로 스케일이 조정된다. 따라서 input data의 총합(sum)은 변경되지 않도록 한다(예를 들어서, dropout rate이 50%고 값이 1인 전체 100개의 input data가 있다면 총합이 100*1 = 100이다. 이때 dropout 후에는 50*0 + 50*1*(1 / (1 - 0.5)) 이므로, 총합은 여전히 100이다.)
드롭아웃 레이어는 call()
에서 training이 True로 설정된 경우에만 적용되기 때문에 추론(inference) 중에는 값이 삭제되는 일이 없다. (model.fit
을 사용할 때는 자동으로 training이 True로 설정된다.)
Dropout 레이어의 옵션들
dropout 레이어는 다음과 같은 옵션을 가지고 있다.
keras.layers.Dropout(rate, noise_shape=None, seed=None, **kwargs)
- rate: 0과 1 사이의 부동 소수점으로, input units 중 얼마나 드롭할지에 대한 비율이다.
- noise_shape: 드롭아웃 마스크의 모양을 나타내는 1차원 정수 텐서다. 시계열 데이터에서는 시간 단계별로 동일한 드롭아웃 마스크를 적용하는 것이 일반적인데, 이때 드롭아웃 마스크 모양을 지정하기 위해 사용된다. 예를 들어 입력이
(batch_size, timesteps, features)
모양이고 모든 시간 단계에 대해 드롭아웃 마스크를 동일하게 하려면noise_shape=(batch_size, 1, features)
를 사용할 수 있다. - seed: 랜덤 시드로 사용할 파이썬 정수다. 랜덤 시드 값이 같으면 동일한 시퀀스 값이 생성된다. 따라서 일관된 랜덤함을 얻고 싶을 때 사용 가능하다. 그러니까 수동으로 선택한 건 아니고 랜덤하게 선택되긴 하는데, 그 랜덤하게 선택된 유닛들이 다음 번에도 똑같이 선택되게 하고 싶다면, 똑같은 랜덤 시드 값을 넣어주면 된다.
Dropout 레이어 구현
input data의 50%를 일관된 랜덤함으로 dropout하고 싶다면 다음과 같이 하면 된다.
from keras.layers import Dropout
output_data = Dropout(rate=0.5, seed=42)(input_data)
참고 문헌
반응형
'🤖AIML' 카테고리의 다른 글
Apple M3 Max 칩의 변화 및 M3 Ultra/M3 Extreme 칩에 대한 루머 (1) | 2024.03.29 |
---|---|
[Keras] keras.layers.GlobalAveragePooling1D 레이어 이해하기 (0) | 2024.03.11 |
[Keras] keras.layers.Flatten 레이어 이해하기 (0) | 2024.02.19 |
[Keras] keras.layers.Dense 레이어 이해하기 (0) | 2024.02.19 |
[트렌스포머 모델 이해하기] Self-Attention에서 Q, K, V(Query, Key, Value)의 의미 (0) | 2024.01.22 |