본문 바로가기

기타/Big Data

dropout, Batch normalization이란

728x90

딥 뉴럴 네트워크의 문제점은 크게 세 가지가 있습니다.

기울기 소실로 인해 학습이 잘되지 않는 문제 (이것은 활성화함수에 relu를 사용함으로써 해결할 수 있다.)

구조가 복잡해져 발생하는 과적합 문제 (earlystopping, weight decay, dropout을 통해 해결할 수 있다.)

Internal covariate shift 문제 (batch normalization을 통해 해결할 수 있습니다.

오늘은 dropout과 batch normalization에 대해 알아보도록 하겠습니다.

1.dropout

Dnn 구조가 복잡하다 보니 어떤 경우에는 학습이 되고 안 되는 경우가 있습니다.

가중치를 업데이트하다 보면 어떤 가중치는 큰 영향을 혹은 작은 영향을 줍니다.

때문에 같은 양의 책임이 부담되지 않고 동등하게 업데이트되지 않습니다.

중요한 노드만 계속 학습하는 것이지요.

이런 문제를 해결하는 것이 dropout입니다.

drop out은 몇 가지 노드의 가중치가 집중적으로 학습되는 것을 방지하고 골고루 학습시킬 수 있다.

일정 부분 노드의 연결을 끊고 학습합니다.

epoch마다 연결을 끊는 노드는 달라집니다.

복잡한 노드 중 일부를 끊다 보니 구조도 단순해집니다.

Weight decay와의 차이점은 Weight decay는 첫 번째 결정된 네트워크로 계속 학습한다는 것입니다.

랜덤 하게 p의 확률로 노드를 선택한다. 계속해서 구조를 바꿔가며 학습합니다.

과적합을 방지할 수 있습니다.

Test 할 때는 어떻게 할까요?

Dropout 없이 모든 노드를 사용하여 테스트합니다.

때문에 오버 핏이 나올 가능성이 있다.

이를 가중치에 (1-p)를 곱하여 값을 변환함으로써 해결한다.

P가 50%이면 각 가중치마다. 곱한다.

이렇게 하는 이유는 각 epoch마다 dropout 한 네트워크의 결괏값들의 평균이

전체 네트워크를 가져와 각 가중치에 1-p 한 것의 결괏값과 비슷하기 때문입니다.(수학적으로 증명된 사실입니다.)

어떤 상황에서 어떻게 사용하는 것이 좋을까요?

데이터가 적은 경우 드롭아웃을 사용하는 것과 사용하지 않은 것의 결과를 보면 후자가 더 좋습니다.

하지만 많은 양의 데이터를 사용할수록 드랍아웃을 한 모델의 기능이 더 좋습니다.

(질 좋은 데이터를 많이 가졌을 때는 한 것과 안 한 것에서 큰 차이가 발생하지 않을 수 있다.)

또한 일반적으로 p를 너무 높게 하거나 작게 하는 것보다는 0.3~0.9 사이의 값으로 하는 것이 좋다.

 

2.Batch normalization

Internal covariate shift는 어떤 문제일까요?

입력된 값의 분포가 data마다 다릅니다.

때문에 학습이 느려지는 현상이 발생합니다.

batch normalization은 Data의 분포를 표준 정규분포로 바꿔줍니다.

예를 들어, 4개의 데이터셋이 있다고 했을 때

net1(입력값과 가중치의 곱들의 합), net2, net3, net4가 있습니다.

이들 분포의 평균과 분산을 구하고 각각의 데이터를 이것을 갖고 표준 정규분포로 만들어줍니다.

즉 입력값과 가중치들의 곱들의 합을 바로 활성화 함수에 넣었던 과정 사이에 표준화 과정이 개입된 것입니다.

이렇게 처리하면 bias값이 사라지는 현상이 생깁니다.(입력값은 바뀌는 데 bias는 같기 때문에 평균을 빼면 0이 되지요.)

그렇게 되면 모델의 기능이 현저하게 떨어집니다.

이 문제를 해결하기 위해서는 정규 분포한 net값에다가 일정한 값을 더해주고 곱해줍니다.

A*net+b 이렇게 변환합니다. a값은 net에 대한 가중치를 조절할 수 있는 값입니다.

A, 와 b는 오차 역전파 알고리즘에서 가중치를 업데이트하는 과정에서 같이 업데이트된다.

테스트를 할 때는 어떻게 할까?

트레이닝 데이터의 평균과 분산을 사용해 표준화하여 진행합니다.

일반적인 경우보다 계산과 메모리가 많이 필요한 기법입니다.

하지만 Internal covariate shift로 인해 발생하는 문제보다는 좋은 성능의 모델을 빠르게 만들어줍니다.

또한 Learning를 큰 값을 사용할 수 있습니다.

입력 값에 대한 분포를 표준 정규분포로 바꿨기 때문에

어떤 값 x의 에러와 2x의 에러 값이 x와 2x의 값이 표준화되어 큰 차이가 없습니다.

에러 그래프를 그리면 완만합니다.

때문에 learning rate를 크게 해도 됩니다.

이는 학습 속도를 높이는데 도움이 됩니다.

 

도움이 되셨으면 합니다 ㅎㅎ

728x90