딥러닝을 이용한 자연어처리 입문 # 8-3. 4) 딥러닝의 학습 방법
1. 손실 함수
- 실제값, 예측값의 차이를 수치화해주는 함수. 오차와 손실 함수의 값은 비례
- 회귀 = MSE, 분류 = 크로스 엔트로피를 주로 이용.
1 ) MSE
- 연속형 변수를 이용할 때 이용
model.compile(optimizer='adam', loss='mse', metrics=['mse'])
#loss에 문자열 mse을 써주면 돼.
model.compile(optimizer='adam', loss=tf.keras.losses.MeanSquaredError(), metrics=['mse'])
#이런 식으로 표현도 ok.
#하지만 딥러닝 자연어 자체가 일반적으로 분류 문제이기 때문에 MSE보단 Cross-entropy를 더 많게 사용.
2) 이진 크로스 엔트로피
- 이진 분류의 경우 ⇒ binary_crossentropy를 사용
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc'])
#binary_crossentropy 써주면 돼.
model.compile(loss=tf.keras.losses.BinaryCrossentropy(), optimizer='adam', metrics=['acc'])
#역시 이것도 ok
3. 범주형 크로스 엔트로피
- 주로 다중 클래스 분류일 경우 이를 이용
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
model.compile(loss=tf.keras.losses.CategoricalCrossentropy(), optimizer='adam', metrics=['acc'])
#원-핫 인코딩 생략하고, 정수값 레이블에 대해 다중 클래스 분류 수행하고 싶을 시,
'sparse_categorical_crossentropy'이용.
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['acc'])
model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(), optimizer='adam', metrics=['acc'])
2. 배치 크기에 따른 경사 하강법
- Batch = 가중치 등의 매겨 변수의 값을 조정하기 위해 사용하는 원래의 데이터 양 의미.
- 이에 따라 변하는 정도가 바뀌기 때문에 이의 설정이 매우 중요.
1) 배치 경사 하강법 = 전체 데이터 모두 이용하는 식
- 업데이트 오래 걸리고, 메모리 사용이 상대적으로 매우 큰 단점.
model.fit(X_train, y_train, batch_size=len(X_train))
2) 배치 크기 1인 확률적 경사 하강법(SGD)
- 랜덤으로 선택한 하나의 데이터에 대해서만 계산. 역시 속도적인 이익
model.fit(X_train, y_train, batch_size=1)
3) 미니 배치 경사 하강법
- 주로 2의 n제곱을 선택하는 게 일반적, default는 32
model.fit(X_train, y_train, batch_size=128)
3. 옵티마이저
1) 모멘텀
- 관성을 응용한 것.
- 하강법에 관성을 더 해주는 방식.
- 경사 하강법에서 계산된 접선의 기울기에 한 시점 전의 접선의 기울기를 일정 비율 반영.
- 로컬 미니멈에 잘못 빠져있을 때, 글로벌 미니멈으로 갈 수 있도록 도와줌
tf.keras.optimizers.SGD(lr=0.01, momentum=0.9)
2) 아다그라드
#매개변수마다 서로 다른 학습률을 적용시켜주는 방식.
tf.keras.optimizers.Adagrad(lr=0.01, epsilon=1e-6)
3) 알엡에스프롭(RMSprop)
아다그라드의 단점 => 이후에 가선 학습률이 지나치게 떨어져.단점 개선
tf.keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-06)
4) 아담(Adam)
RMSprop, Momentum 합친 방법, 방향, 학습륙 두 가지 모두 잠아.
tf.keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
5) 사용 방법
#optimizer로부터 호출할 수 있고, 단순히 문자열로 적어줘도 동작해.
adam = tf.keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['acc'])
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
5. 에포크와 배치 크기와 이터레이션
1) 에포크
- 전체 데이터에 대해 순전파, 역전파가 모두 끝난 상태
- 문제지 비유해서 문제지 모든 문제 끝까지 다 풀고, 채점해 한 번 끝난 상태를 의미.
- epoch = 50 → 문제지 50번 푼 것.
2) 배치 크기
- 문제지 예시에서 얼마나 풀고 옵티마이저를 통해 매개변수를 업데이트 하는 지를 의미.
- 정답지/실제값을 확인하는 시점.
- but, 배치 크기 ≠ 배치의 수
3) 이터레이션
- 한 번의 에포크를 끝내기 위해 필요한 배치의 수
- 전체 데이터 2000, 배치 크기 200 ⇒ 이터레이션 수 10.
'공부하는 습관을 들이자 > Deep Learning (NLP,LLM)' 카테고리의 다른 글
[딥러닝 자연어처리] 8-5. (6) 기울기 소실과 폭주 - 07) 케라스 훑어보기 (0) | 2023.12.20 |
---|---|
[딥러닝 자연어처리] 8-4. (4.) 역전파 이해하기 - (5) 과적합을 막는 방법들 (0) | 2023.12.19 |
[딥러닝 자연어처리] 8-2. (3). 행렬곱으로 이해하는 신경망 (0) | 2023.12.15 |
[딥러닝 자연어처리] 8. 1) 퍼셉트론 ~ 2) 2. 인공 신경망 훑어보기 (0) | 2023.12.14 |
[딥러닝 자연어처리] 7. 머신 러닝 개요 7) ~ 9) (0) | 2023.12.13 |