티스토리 뷰
오버피팅은 보통 다음과 같은 경우에 일어납니다.
1. 매개변수가 많고 표현력이 높은 모델
2. 훈련 데이터가 적을 때
다음의 방법으로 오버피팅을 방지합니다.
1. 가중치 감소
큰 가중치에 대해 그에 상응하는 패널티를 부과하는 방법입니다. 오버피팅은 가중치 매개변수 값이 커서 발생하는 경우가 많습니다. 신경망의 목적은 손실 함수 값을 줄이는 것입니다. 이를 위해 가중치의 L2 norm ( W=(w1, w2, .., wn) => L2=sqrt(w1^2 +w2^2 + ... +wn^2) )를 손실함수에 더합니다.
정확히는 가중치가 W일 때, L2 norm에 따른 가중치 감소는 (1/2)*lambda*(W^2) 이고 이를 손실함수에 더하는 것입니다. lambda는 정규화의 세기를 조절하는 파라미터입니다.
2. 드롭아웃 (dropout)
신경망 모델이 복잡하면 가중치 감소만으로 부족합니다. 이 때, 드롭아웃을 이용하면 됩니다.
드롭아웃은 노드를 임의로 삭제하면서 학습하는 방법입니다. 훈련 시 은닉층의 노드를 무작위로 골라 삭제합니다. 그리고 테스트 시 모든 노드에 데이터를 전달합니다. 이 때, 훈련 때 삭제 안 한 비율을 곱하여 출력합니다.
class Dropout:
def __init__(self, dropout_ratio=0.5):
self.dropout_ratio = dropout_ratio
self.mask = None
def forward(self, x, train_flag=True):
if train_flag:
self.mask = np.random.rand(*x.shape) > self.dropout_ratio
return x * self.mask
else:
return x * (1.0 - self.dropout_ratio)
def backward(self, dout):
return dout * self.mask
'딥러닝' 카테고리의 다른 글
합성곱 계층, 폴링 계층 (0) | 2021.01.18 |
---|---|
적절한 하이퍼파라미터 찾기 (0) | 2021.01.17 |
배치 정규화 (0) | 2021.01.17 |
가중치 설정 (0) | 2021.01.17 |
매개변수 갱신 방법 성능 비교 (0) | 2021.01.15 |
댓글