딥러닝을 이용한 자연어처리 입문 # 8-4. (4.3) 역전파 이해하기 - (5) 과적합을 막는 방법들
4.3 역전파 이해하기
1) 인공 신경망의 이해
- 예시 인공 신경망 = 입력층, 은닉층, 출력층으로 3개의 층으로 구성
- 변수 z = 이전층의 모든 입력이 각각 가중치와 곱해지 값이 모두 더해진 가정합.
- z를 지난 h or o = z가 시그모이드 함수를 지난 후의 값
2) 순전파
3) 역전파 1단계
- 출력층과 N층 사이의 가중치를 업데이트하는 단계 → 역전파 1단계로 이해가능
4) 역전파 2단계
5) 결과 확인
- 이후 실제로 순전파를 다시 한 번 진행해 오차가 감소되었는 지를 확인
5. 과적합을 막는 방법들
1) 데이터의 양 늘리기
- 1차원적으로 데이터 양을 늘릴 수록 데이터는 일반적인 패턴을 학습하기 때문에 과적합 방지할 수 있음
- 데이터 양이 적을 때 이 데이터를 변형하고 추가해 데이터 양 늘릴 수 있는데 이는 데이터 증식 or 증강이라 함
2) 모델의 복잡도 줄이기
- 인공 신경망의 복잡도를 줄임
3) 가중치 규제 적용하기
- 복잡한 모델 → 간단하게 하는 방법
- L1 규제 : 가중치 w들의 절대값 합계를 비용 함수에 추가. 원래 가중치 + λ∣w∣ = 비용합수
- L2 규제 : 가중치 w들의 제곱합을 비용 함수에 추가. 원래 가중치 + $1/2λw^2$ = 비용함수
- L1는 Lasso처럼 아예 가중치 값을 0으로 만들 수 있음
- L2는 0에 가까워지는 경향이 있음
4) 드롭 아웃
- 학습 과정에서 신경망 일부를 사용하지 않는 방법
- 일반적으로 신경망 학습 과정에서만 이용하고, 예측에는 이용 x
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'))
'공부하는 습관을 들이자 > Deep Learning (NLP,LLM)' 카테고리의 다른 글
[딥러닝 자연어처리] 8-6. (08) 케라스의 함수형 API - (10)다층 퍼셉트론으로 텍스트 분류하기 (0) | 2023.12.22 |
---|---|
[딥러닝 자연어처리] 8-5. (6) 기울기 소실과 폭주 - 07) 케라스 훑어보기 (0) | 2023.12.20 |
[딥러닝 자연어처리] 8-3. (4) 딥러닝의 학습 방법 (0) | 2023.12.18 |
[딥러닝 자연어처리] 8-2. (3). 행렬곱으로 이해하는 신경망 (0) | 2023.12.15 |
[딥러닝 자연어처리] 8. 1) 퍼셉트론 ~ 2) 2. 인공 신경망 훑어보기 (0) | 2023.12.14 |