AI/DL

Dropout Regularization (C2W1L06)

hu6r1s 2025. 1. 28. 16:19

L2 정규화 외에 또 다른 매우 강력한 정규화 기법은 드롭아웃(Dropout)이다.

드롭아웃(Dropout)

드롭아웃은 딥러닝 모델의 학습 과정에서 일부 뉴런을 임의로 비활성화시키는 기법이다. 마치 신경망의 일부를 랜덤하게 떼어내 학습시키는 것과 같다. 이를 통해 모델이 특정 뉴런에 과도하게 의존하는 것을 방지하고, 다양한 뉴런의 조합을 학습하게 함으로써 모델의 일반화 성능을 향상시킨다.

사진에서 왼쪽의 신경망을 그대로 복사해서 드롭아웃을 적용해보자.

먼저 신경망의 각각의 층에 대해 노드를 삭제하는 확률을 설정하는 것이다.

강의에서는 0.5의 확률로 했다. 각 노드를 돌면서 0.5의 확률로 노드를 유지하거나 0.5의 확률로 노드를 삭제하도록 설정한다.

노드가 삭제되면 삭제된 노드에 연결되어 있는 링크도 같이 삭제가 된다.

그렇게 되면 이전보다 더 작고 간소화된 네트워크가 된다.

역전파 (Back Propagation)

드롭아웃을 적용하여 간소화된 네트워크는 역전파도 진행할 수 있다.

  • 순전파

 

  • 드롭아웃 마스크를 생성하여 비활성화될 뉴런을 결정한다.
  • 비활성화된 뉴런의 출력을 0으로 만들고, 활성화된 뉴런의 출력만 다음 층으로 전달한다.
  • 역전파
    • 비활성화된 뉴런은 역전파 과정에 참여하지 않는다. 즉, 비활성화된 뉴런의 가중치는 업데이트되지 않는다.
    • 활성화된 뉴런에 대해서는 일반적인 역전파 알고리즘을 적용하여 가중치를 업데이트한다.

노드를 무작위로 삭제하는 이상한 기법처럼 보일 수도 있지만 실제로 작 작동된다.

드롭아웃 구현

드롭아웃을 구현하는 방법은 여러 가지가 있지만, 가장 일반적인 방법은 역 드롭아웃(Inverted Dropout)이다. 역 드롭아웃은 테스트 시에 별도의 조정 없이도 훈련 시와 동일한 결과를 얻을 수 있다는 장점이 있다.

완전한 이해를 돕기 위해 강의에서는 Layer가 3인 경우를 예시로 들었다.

import numpy as np

keep_prob = 0.8  # 노드가 유지될 확률 (예: 80%)
a3 = np.random.rand(50, 1)  # 50개 유닛을 가진 층의 활성화 값

# 드롭아웃 벡터 생성 (0.8 확률로 1, 0.2 확률로 0)
d3 = (np.random.rand(*a3.shape) < keep_prob).astype(int)

# 노드 비활성화 적용
a3 = np.multiply(a3, d3)       # a3 *= d3

# 기대값 유지 보정 (보정 계수: 1 / keep_prob)
a3 /= keep_prob

 

keep_prob는 주어진 은닉 유닛이 유지할 확률이고 어떤 은닉 유닛이 삭제될 확률이 0.2라는 것이다.

먼저 세 번째 은닉 층에는 50개의 유닛, 즉 50개의 뉴런이 있다고 해보자. 그럼 a3는 (50, 1)차원일 것이다.
벡터화한다면 (50, m)차원이다.

다음은 세 번째 은닉 층에 대한 드롭아수 벡터인 d3를 설정해야 한다.

d3는 무작위의 행렬을 생성하게 된다.
d3는 각각의 샘플과 각각의 은닉 유닛에 대해 0.8의 확률로 1을 가지고 0.2의 확률로 0을 가지는 행렬이 될 것이다.

다음은 세 번째 층의 활성화인 a3에 관한 코드이다.
a3는 예전의 a3의 값에 d3를 곱해준 것이다. a3 *= d3로 해도 된다.

최종적으로 얻은 a3를 keep_prob로 나눠주는 것이다.

세 번째 은닉 층에 50개의 유닛, 즉 50개의 뉴런이 있다.
80%로 유지하고 20%로 삭제한다면 평균적으로 10개의 유닛이 삭제된다는 뜻이다. 즉 0 값을 가지고 있다.
$$ z^{[4]} = \omega^{[4]} a^{[3]} + {\small b}^{[4]} $$
\( a^{[3]} \) 의 20%가 0이 될 것이고 \( z^{[4]} \) 의 기대값을 줄이지 않기 위해 \( a^{[3]} \) 을 0.8 즉, keep_prob로 나눠줘야 한다.
왜냐하면 필요한 20% 정도의 값을 다시 원래대로 만들 수 있기 때문이다.

테스트 시 드롭아웃 미적용

 

  • 예측할 때는 드롭아웃을 사용하지 않고, 일반적인 순전파를 수행함
  • 드롭아웃을 적용하면 예측 결과가 매번 달라질 수 있어 불안정해짐

References

https://www.youtube.com/watch?v=D8PJAL-MZv8&list=PLkDaE6sCZn6Hn0vK8co82zjQtt3T2Nkqc&index=6