티스토리 뷰

머신러닝/딥러닝

과적합을 막는 방법

삼전동해커 2022. 9. 16. 14:22

1. 데이터의 양 늘리기

데이터의 양이 적을 경우, 해당 데이터의 특정 패턴이나 노이즈까지 쉽게 학습하는 과적합 현상이 발생한다.

따라서 데이터의 양을 늘려 모델이 데이터의 일반적인 패턴을 학습할 수 있도록 한다.

 

데이터의 양이 적을 경우엔 기존의 데이터를 조금씩 변형하고 추가하여 데이터의 양을 늘리는 데이터 증강을 한다.

 

2. 모델의 복잡도 줄이기

인공 신경망의 복잡도는 은닉층의 수나 매개변수의 수 등으로 결정된다. 과적합이 발생하면, 은닉층의 수를 줄이거나 매개변수의 수를 조정해 복잡도를 줄인다.

 

3.가중치 규제 적용하기

L1 규제 : 가중치 w들의 절대값 합계를 비용 함수에 추가한다. 

L2 규제 : 모든 가중치 w들의 제곱합을 비용함수에 추가한다.

 

L1 규제는 기존의 비용 함수에 모든 가중치에 대해서 λ∣w∣를 더한 값을 비용 함수로 하고, 

L2 규제는 기존의 비용 함수에 모든 가중치에 대해서 대해서 1/2*λ*w^2를 더한 값을 비용 함수로 한다.

λ는 규제의 강도를 정하는 하이퍼파라미터이다. λ가 크다면 모델이 훈련 데이터에 대해서 적합한 매개 변수를 찾는것보다 규제를 위해 추가된 항들을 작게 유지하는 것을 우선으로 한다는 의미이다.

 

두 식 모두 비용 함수를 최소화하여 오차를 줄이기 위해서 가중치 w들의 값이 작아야 한다는 특징이 있다. 

L1규제는 비용 함수가 최소가 되게하는 가중치와 편향을 찾는 동시에 가중치들의 절대값의 합도 최소가 되어야 한다.

이렇게 되면 가중치 w의 값들은 0에 가까워져야하므로 어떤 특성들은 모델을 만들 때 거의 사용하지 않게 된다.

 

예를 들어 H(X)=w1x1+w2x2+w3x3+w4x4 식이 있을 때 L1 규제를 사용해 w3이 0이되면 입력값 x3은 모델의 결과에 영향을 전혀 주지 못한다.

 

L2 규제는 가중치의 제곱값을 최소화 하므로 w의 값이 완전히 0이 되기 보다는 0에 가까워지는 경향을 띈다.

L1은 어떤 특성이 모델에 영향을 주는지 찾을 때 유용하기 때문에 이런 경우가 아니라면 L2를 사용하는게 더 유리하다.

L2 규제는 가중치 감쇠라고도 부른다.

 

4. 드롭아웃

드롭아웃은 드롭아웃의 비율에 따라 랜덤으로 뉴런을 사용하지 않고 학습을 진행하는 방법이다.

이 방법은 학습 시에만 사용하고 예측을 할때는 거의 사용하지 않는다. 학습 시에 특정 뉴런에만 의존되는 것을 방지하고 랜덤 선택으로 뉴런들을 사용하지 않으므로 서로 다른 신경망들을 앙상블하여 사용하는 것과 같은 효과를 낸다.

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dropout, Dense

max_words = 10000
num_classes = 46

model = Sequential()
model.add(Dense(256, input_shape=(max_words,), activation='relu'))
model.add(Dropout(0.5)) # 드롭아웃 추가. 비율은 50%
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5)) # 드롭아웃 추가. 비율은 50%
model.add(Dense(num_classes, activation='softmax'))

'머신러닝 > 딥러닝' 카테고리의 다른 글

MLP로 텍스트 분류  (0) 2022.09.20
케라스 훑어보기  (1) 2022.09.16
손실 함수, 옵티마이저, 에포크  (1) 2022.09.15
행렬곱으로 이해하는 신경망  (0) 2022.09.15
인공 신경망  (0) 2022.09.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함