본문 바로가기

AI & Big Data/AI

[AI 이론] Layer, 레이어의 종류와 역할, 그리고 그 이론 - 6 (Dropout)

반응형

Dropout Layer

Dropout Layer는 Overfitting 문제점을 극복하기 위해 나온 방법론이다.

위 그림과 같은 데이터 셋 군집이 있을 때,

우리가 원하는 학습 결과는 중간의 Good 처럼 되길 원한다.

 

너무 학습이 되지 않으면 Underfitting처럼 분간이 안되고,

너무 학습 데이터에 과도하게 학습이 진행이 되면,

Overfitting으로 학습 데이터만 맞출 수 있는 기현상이 일어나게 된다. (테스트 데이터나 실제 상황에서 정답을 내지 못하는 현상이 일어나게 된다.)

 

이는 제한된 샘플에 너무 특화가 되어,새로운 샘플에 대한 예측의 결과가 오히려 나빠지거나 학습의 효과가 나타나지 않는 경우를 말한다.

 

결론적으로 Overfitting이 일어나게 되면 위 두 그래프와 같이, 학습 데이터 셋에서는 높은 Accuracy가,

테스트 데이터 셋에서는 낮은 Accuracy가 나오게 된다.

 

Overfitting을 피하는 원론적인 방법은 Training 데이터 셋을 무한정으로 늘리는 것이지만,이렇게 하기에는 많은 비용과 시간, 또한 노력을 필요로 하고,한정된 자원에서 이를 충족시키기에는 매우 어렵다.

 

Dropout Layer는 그렇게 나온 방법론이며,아래 그림처럼 뉴럴 네트워크의 일부를 생략하고 학습을 진행하게 됨으로써 일종의 Regularization(정규화)를 진행하게 된다.

캐나다 토론토 대학 팀에서 발표한 알고리즘으로, 원문 논문은 아래 링크에 있다.

 

http://jmlr.org/papers/volume15/srivastava14a/srivastava14a.pdf

 

모델 결합을 하게 되면, 학습의 성능을 개선할 수 있는데,

이렇게 모델 결합이 효과를 얻으려면, 서로 다른 Training 데이터 셋을 이용해서 학습을 하거나, 모델이 서로 다른 구조를 가져야 한다.

 

이는 망이 깊은 모델의 경우 사실상 불가능에 가까운 일이 된다. (시간이 너무 오래 걸리게 된다.)더구나 이렇게 됐을 경우에, 다양한 모델을 실행시킬 때 연산 시간을 요구하게 되어,Inference Time에 악영향을 미치게 된다.

 

Dropout이 적용된 모델의 경우,여러 개의 모델을 만드는 대신에 Training Cycle이 진행되는 동안 랜덤으로 일부 뉴런을 생략한다. 그렇게 되면 생략되는 뉴런의 조합만큼 다양한 모델을 학습시키는 것이나 마찬가지의 원리가 되기 때문에, 모델 결합의 효과 또한 누릴 수 있다.

 

또한, 실제 추론을 실행시킬 때 생략된 많은 모델을따로 실행시키는 것이 아니라,생략된 모델들이 모두 파라메터를 공유하고 있기 때문에 모두 각각의 뉴런들이 존속할 확률(Dropout하지 않은 확률)을 각각의 weight에 곱해주는 형태가 된다.학습 시에는 뉴런은 존속할 확률 p로 학습을 진행하고, 추론을 할 때에는 각각의 뉴런에 얻어진 weight에 존속할 확률 p를 곱해주는 형태가 되는 것이다.

 

이로써 Overfitting을 피하고, 추론은 더욱 빨라지며, Accuracy는 더 높아지는 효과를 얻게 된다.


Tensorflow 2.X와 PyTorch에서의 용례

Tensorflow 2.X와 PyTorch 모두, Dropout Layer를 지원한다.

# Tensorflow 2.X
# Dropout Layer

tf.keras.layers.Dropout(
    rate, noise_shape=None, seed=None, **kwargs
)

 

# PyTorch
# Dropout Layer

torch.nn.Dropout2d(p=0.5, inplace=False)

 

이때, PyTorch의 경우 파라메터(p, inplace)의 활용과 인풋과 아웃풋의 모양은 아래와 같다.

즉, PyTorch의 p는 Tensorflow의 rate와 같은 역할이다.


다음 포스팅에서 계속!


 

반응형