AI/Deep Learning
Dropout (드롭아웃)
sonzwon
2022. 11. 11. 13:39
Dropout이란?
학습이 진행되는 동안 임의로 미리 정의된 확률대로 신경망의 일부 뉴런을 제외(drop)합니다.
- test시에는 dropout이 작동되지 않고 모든 유닛이 활성화되어 출력되며, 출력값을 드롭아웃 비율만큼 줄여줍니다. (드롭아웃 비율은 일반적으로 0.2~0.5)
- dropout시 각각의 layer는 베르누이 분포(Bernoulli Distribution)를 따르는 확률변수 r에 따라 그 뉴런의 결과 값을 덮어씌웁니다. ( 정해진 확률 값에 따라서 어떤 뉴런은 켜지고 끄는 개념)
dropout이 잘되는 이유?
- 드롭아웃이 일부 뉴런들을 제외하고 학습함에 따라 결과적으로 'weight'를 공유하는 수많은 네트워크 조합이 생기기 때문입니다.
- n개의 뉴런으로 이루어진 네트워크에서 2^n개의 조합이 생깁니다
- 많은 ANN을 한번의 학습으로부터 Bagging하는 효과와 비슷합니다
- overfitting 방지효과가 있습니다.
[ Dropout vs. Bagging ]
Dropout | Bagging |
모든 모델이 파라미터를 공유 | 각 모델이 파라미터를 공유하지 않음 (병렬적으로 존재해 따로 학습될 수 있기 떄문) |
각각의 모델이 수렴하도록 학습되지 않음 | 각 모델이 학습됨에 따라 하나의 모델로 수렴함 |
지수계수로 증가(2^n)하는 많은 모델의 평균을 내는 것이기 때문에 산술 평균 계산이 어려움 ( 산술평균보다 기하평균을 추론하여 근사함) |
모델 결과값의 산술평균을 취할 수 있음 |
dropout의 장점
- 제외하지 않은 유닛들을 집중적으로 학습하게 되면서 과대적합을 방지합니다.
- 다른 정규화 방법보다 성능이 좋습니다
- 대부분의 데이터 및 모델에서 성능을 높이는 것으로 나타났습니다.
- 다른 regularizer에 비해 모델과 학습과정에서의 종류를 제한하지 않습니다 (SGD로 학습하는 것을 거의 그대로 학습시키면 됨)
- feature들끼리 상호 적응 (co-adaptation)하는 것을 막아줍니다
- co-adaptation : 어떤 뉴런이 다른 특정 뉴런에 의존적으로 변하는 것. 상호적응 문제는, 신경망의 학습 중, 어느 시점에서 같은 층의 두 개 이상의 노드의 입력 및 출력 연결강도가 같아지면, 아무리 학습이 진행되어도 그 노드들은 같은 일을 수행하게 되어 불필요한 중복이 생기는 문제를 말한다. 즉 연결강도들이 학습을 통해 업데이트 되더라도 이들은 계속해서 서로 같은 입출력 연결 강도들을 유지하게 되고 이는 결국 하나의 노드로 작동하는 것으로써, 이후 어떠한 학습을 통해서도 이들은 다른 값으로 나눠질 수 없고 상호 적응하는 노드들에는 낭비가 발생하는 것이다. 결국 이것은 컴퓨팅 파워와 메모리의 낭비로 이어진다.드랍아웃은 이러한 상호적응 문제를 해소한다. 즉, 드랍아웃이 임의로 노드들을 생략할 때 이러한 상호 적응 중인 노드들 중 일부는 생략하고 일부는 생략하지 않게 되므로 학습 중 상호 적응이 발생한 노드들이 분리될 수 있어서 상호 적응 문제를 회피할 수 있게 된다.(출처: https://hyeonnii.tistory.com/254)
- 즉, dropout은 뉴런들이 다른 뉴런이 그 자리에 없어도 정상작동하게 해줍니다
- 네트워크에 sparse한 활성화를 시켜줍니다.
- 컴퓨팅 계산이 작습니다 ~ O(N)
Dropout rate
적절히 실험을 돌리며 최적의 test error을 찾습니다.
- p = 0.0에 가까울 때, 너무 과한 dropout
- p = 1.0에 가까울 때, No dropout (overfitting)
Drop Connect
dropout은 노드를 드롭시키는 것이고, drop connect는 가중치(weight)를 드롭시키는 것입니다.
- dropout보다 나을 때가 있다.
- 하지만, 항상 결과를 보장하지 않으며, 느리고(O(W)), 튜닝하기가 상대적으로 어렵습니다.
+)
Dropout등을 여러가지 노이즈를 넣는 식으로 확장 가능하며 많은 파생 연구들이 존재합니다. 또한 Dropout rate도 학습 파라미터로 만드는 연구도 있습니다.