티스토리 뷰

딥러닝

오버피팅 방지

4567은 소수 2021. 1. 17. 04:32

오버피팅은 보통 다음과 같은 경우에 일어납니다.

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함