본문 바로가기
  • 데이터에 가치를 더하다, 서영석입니다.
공부하는 습관을 들이자/Deep Learning (NLP,LLM)

[딥러닝 자연어처리] 8-4. (4.) 역전파 이해하기 - (5) 과적합을 막는 방법들

by 꿀먹은데이터 2023. 12. 19.

딥러닝을 이용한 자연어처리 입문 # 8-4. (4.3) 역전파 이해하기 - (5) 과적합을 막는 방법들

4.3 역전파 이해하기

1) 인공 신경망의 이해

  • 예시 인공 신경망 = 입력층, 은닉층, 출력층으로 3개의 층으로 구성

  • 변수 z = 이전층의 모든 입력이 각각 가중치와 곱해지 값이 모두 더해진 가정합.
  • z를 지난 h or o = z가 시그모이드 함수를 지난 후의 값

2) 순전파

이후 시그모이드 함수를 지나게 될 경우
각각 은닉층의 return 값
예측값으로 이용

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'))