딥러닝에서 과대적합을 방지할 수 있는 방법은 여러가지가 있다. 물론 이러한 방법은 단지 예방책일 뿐이지 과대적합 문제를 100% 해결해주지는 않는다.
규제화 함수 사용하기란?
규제화함수(Regularizer)는 임의로 모델의 복잡도를 제한시키는 것을 의미한다.
규제화 함수
대표적인 규제화 함수에는 L1 노름, L2 노름, L1 노름과 L2노름을 혼합한 엘라스틱 넷(Elastic Net)이 있다. 딥러닝 분야를 다루는 많은 논문에서 이러한 방법을 가중치 감쇠(Weight Decay)라고 표현하기도 한다.
keras함수
tensorflow.keras.regularizers.l1(l=0.01) – 가중치의 절댓값합
tensorflow.keras.regularizers.l2(l=0.02) – 가중치의 제곱합
tensorflow.keras.regularizers.l1_l2(l1=0.01, l2=0.01) – (혼합) 절댓값합+제곱합
이와 같은 규제화함수는 기능에 맞게 가중치으 ㅣ합을 구하여 손실함수에 더해주는 형태로 하여 과대적합을 피할 수 있도록 한다. 예를 들어 l2규제화함수는 가중치의 제곱합을 구한 뒤, 이를 손실함수에 더해준다.
드룹아웃
학습이 진행되는 동안 신경망의 일부 유닛을 제외(드롭, drop)하는 방법을 통하여 과대적합을 방지하는 기술이다.
이 방법을 도입함으로써 신경망 모델은 제외한 유닛 대신에 제외하지 않은 유닛을 집중적으로 학습할 수 있게 된다. 이를 통하여 과대적합 문제를 방지함과 동시에 더 나은 성능을 기대할 수 있다. 즉 선택과 집중을 통하여 모델링의 성능을 향상시키는 방법에 해당한다.
일반적으로 드롭아웃 비율(dropout rate)은 0.2~0.5를 사용한다.
과대적합을 방지하는데 있어 드롭아웃은 매우 강력한 방법이다. 하지만 드롭아웃을 도입하면 학습 속도가 느려지는 단점이 존재한다.
배치정규화
과대적합을 피하기 위한 또다른 방법으로 배치 정규화가 있다. 논문에서 언급하기를 배치 정규화(batchnormalization)는 내부 공선성(internal covariance shift)을 해결하기 위해 고안되었다고 설명하고 있다.
신경망층의 출력값은 다양한 입력 데이터에 따라 수비게 변할 수 있는데, 매우 큰 범위의 출력값은 신경망을 불안정하게 하여 성능을 저하시키는 문제가 발생한다. 배치정규화는 신경망층의 출력값이 가질 수 있는 범위, 즉 출력값 분포의 범위를 줄여주어 불확실성을 어느 정도 감소시키는 방법이다.
배치정규화의 장점
1) 기존 신경망은 높은 학습률을 사용하는 경우, 그래디언트 손실/폭발의 문제점이 존재한다. 하지만 배치 정규화를 사용하면, 이러한 문제점을 방지할 수 있어 높은 학습률을 사용하여 빠른 속도로 학습을 진행할 수 있게 한다.
2) 배치 정규화는 자체적인 규제효과가 있기 때문에, 과대적합 문제를 피할 수 있게 한다. 다만 이같은 장점은 도움이 될 뿐 보장하지는 않는다. 이를 사용하면 별도의 규제화 함수나 드룹하웃을 사용하지 않아도 된다라는 의견이 다수이다.
model.add(BatchNormalization())
댓글 없음:
댓글 쓰기