좋은 성능의 신경망을 생성하기 위해서는 적절한 가중치 행렬 크기와 층 개수를 튜닝해야만 한다.
네트워크의 수용(capacity)는 얼마나 복잡한 함수를 근사할 수 있는지를 나타낸다.
파라미터가 적은 네트워크는 용량이 작기 때문에 과소적합되기 쉽다.
(복잡한 데이터셋의 내재된 구조를 학습하지 못함)
아주 큰 네트워크는 과대적합될 가능성이 높다.
훈련 데이터를 외워 버리면 훈련 데이터셋에서 매우 잘 작동하지만, 별도의 테스트 데이터 셋에서는 나쁜 성능을 낸다.
규제(Regulation)
훈련 데이터셋에서 잘 작동하도록 비교적 큰 용량의 네트워크를 구축한다.(필요한 것보다 좀 더 큰 용량)
이 후, 과대적합을 막기 위해 하나 이상의 규제 방법을 적용하여 테스트 데이터셋(새로운 데이터셋)에서의 일반화 성능을 높인다.
L1, L2 규제 모두 신경망에서도 사용 가능하다.(일반적으로 L2가 더욱 많이 사용된다.)
이외에도 드롭아웃(Drop-out)과 같은 규제도 많이 사용된다.
L2규제(keras API)
from tensorflow import keras
conv_layer=keras.layers.Conv2D(
filters=16,
kernel_size=(3, 3),
kernel_regularizer=keras.regularizers.l2(0.001))
fc_layer=keras.layers.Dense(
units=16,
kernel_regularizer=keras.regularizers.l2(0.001))
드롭아웃(Drop-out)
드롭아웃을 심층 신경망에 적용하여 과대적합을 피할 수 있고 일반화 성능을 향상시킬 수 있다.
드롭 아웃은 보통 뒤쪽 층의 은닉 유닛에 적용한다.
신경망을 훈련하는 동안 반복마다 은닉 유닛의 일부가 확률 p_drop 만큼 랜덤하게 드롭 아웃된다.
(혹은 p_keep=1-p_drop 만큼 유지된다)
p_drop은 보통 0.5를 많이 사용한다.
입력 뉴련의 일부를 드롭아웃할 때 없어진(드롭아웃된) 뉴런을 보상하기 위해서 남은 뉴런에 연결된 가중치 값을 크게 한다.
랜덤한 드롭아웃 때문에 네트워크는 데이터에서 여분의 표현을 학습한다.
->네트워크가 일부 은닉 유닛의 활성화 값에 의존할 수 없다.(훈련과정에서 언제든지 은닉 유닛이 드롭아웃될 수 있음)
네트워크가 데이터에서 더 일반적이고 안정적인 패턴을 학습하게 한다.
랜덤한 드롭아웃은 과대적합을 효과적으로 방지한다.
예측시에는 모든 뉴런이 참여하여 다음 층의 활성화 함수 입력을 계산한다.
훈련과 예측 단계의 전체 활성화 값의 스케일을 맞추기 위해서 활성화된 뉴련 출력이 적절히 조정되어야 한다.
ex) 드롭아웃 확률이 p=0.5라면 테스트할 때, 활성화 출력을 절반으로 낮춘다.
역 드롭아웃(inverse dropout)
실전에서는 예측에서 활성화 값의 출력을 조정하는 것은 불편하기 때문에 텐서플로나 다른 라이브러리에서는
훈련 단계의 활성화를 조정한다.
ex) 드롭아웃 확률이 p=0.5라면 훈련할 때, 활성화 함수 출력을 2배로 늘인다.
드롭아웃을 딥러닝에서의 앙상블 모델의 합의(평균)으로 볼 수 있다.
딥러닝 모델을 이용해서 여러 개의 모델을 훈련하고 출력을 평균하는 것(앙상블)은 계산 비용이 많이 든다.
드롭아웃은 차선책으로 한 번에 많은 모델을 훈련하고 테스트 또는 예측할 때 평균값을 계싼하는 효과적인 방법이다.
각 미니 배치에 대해 다른 모델을 만든다.(정방향 계산에서 랜덤하게 가중치를 0으로 만든다.)
하지만 드롭아웃은 가중치를 공유한다는 점에서 앙상블과 구별되는 한계점이 있다.(규제로 볼 수 있다.)
드롭아웃의 이와 같은 숨겨져 있는 트릭은 앙상블 모델의 기하 편균이 훈련 과정에서 샘플링된 마지막 모델의 예측에 1/(1-p)를 곱하는 것으로
근사할 수 있다.(기하 평균 계산하는 것보다 훨신 저렴하다, 선형 모델을 근사하면 이 근사는 기하 평균과 동일하다.)
앙상블과 드롭아웃 차이점
배깅 앙상블이 모델마다 중복을 허용한 랜덤한 샘플, 즉 부트스트랩 샘플링을 사용하듯이
드롭아웃으로 형성된 모델이 만나는 데이터는 원본 데이터셋의 일부이며 중복이 허용된다.
하지만 배깅과 달리 드롭아웃된 모델은 완전히 수렴하는 모델이 아니며,
가중치를 공유하여 다른 모델이 점진적으로 이를 개선하게 된다.
드롭아웃 계산 방법 등 참고
머신러닝교과서with파이썬,사이킷런,텐서플로_개정3판pg.637