일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C++
- chromeSetup.exe꺼짐
- 크롬설치
- 로봇청소기
- 바로꺼짐
- 크롬 설치 안됨
- ChromeStandaloneSetup64안됨
- 삼성 sw 역량테스트
- 백준 14503번
- 크롬설치파일꺼짐
- 연산자 끼워넣기
- 백준 14888번
- chromeSetup.exe 안됨
- Today
- Total
공대생의 개발 일기장
인공지능 응용 - 7주차(Loss Graph, Validation Loss, Drop out) 본문
# Loss graph
import matplotlib.pyplot as plt
plt.plot(history.history['loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
# Loss graph를 그린다. 물론 'loss', 'epoch'에 대한 부분은 추가 코드가 있다. 강의노트 확인!
# Accuracy graph
plt.plot(history.history['accuracy'])
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.show()
# 정확도 graph도 마찬가지.
여기서 Epoch(에포크)는 머신러닝에서 전체 훈련 데이터셋을 한 번 모두 학습하는 과정을 말한다. 즉, Epoch은 전체 데이터셋에 대해 학습을 완료한 횟수를 의미하는 것이다. Epoch이 높을수록 모델은 더 많은 학습을 하게 되는데 Epoch을 무작정 높이면 학습 시간이 오래 걸리기 때문에 적절한 수준에서 Early stopping 기법 등을 사용하여 모델의 성능을 평가하고 학습을 조절해야 한다.
사실 딥러닝에서는 전체 데이터셋이 매우 크기 때문에 한 번에 학습 하기 어렵다. 그렇기 때문에 6주차에서 포스팅은 안했지만 공부했던 작은 배치 (mini-batch) 단위로 나누어서 각 배치에 대해 모델을 학습시키는 과정이 이를 위한 것이고 이 모든 배치에 대한 학습이 완료한 경우 1 Epoch라고 할 수 있다. 이걸 미니배치학습(mini-batch-learning)이라고 한다.
Loss(손실)는 모델이 예측한 값과 실제 정답의 차이를 계산한 값이다. 딥러닝은 점점 학습하는 거라고 생각하자. Loss를 이용해서 모델의 예측 값과 실제 값 사이의 차이를 점점 최소화시키기 위해 사용하는 지표이다.
손실 함수(loss function)는 모델이 예측한 값과 실제 값 사이의 차이를 계산하는 함수로, 학습 도중에 최적화되는 대상 함수이다. 손실 함수의 종류에는 회귀 문제에서는 보통 평균 제곱 오차(MSE)나 평균 절대 오차(MAE)를 사용하고, 분류 문제에서는 교차 엔트로피 오차(Cross-entropy loss)를 사용한다.
이러한 Loss(손실)을 최소화하기 위해서는 모델의 가중치(weight)와 편향(bias)을 업데이트하는 과정이 필요하고 이 때, 역전파(backpropagation) 알고리즘이 사용됩니다. 손실 함수를 미분하여 기울기(gradient)를 계산하고, 이를 이용하여 가중치와 편향을 조정하는 것이다. 이 과정을 반복해서 손실을 최소화하는 최적의 가중치와 편향을 찾는다.
참고로 batch는 딥러닝 학습 과정에서 한 번에 처리하는 데이터의 개수를 의미한다.
# Training loss + Validation loss graph 그리기
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()
Validation Loss에 대해서 알아보자.
딥러닝에서 모델 학습 시, 모델이 학습 데이터에 과적합(overfitting)되지 않도록 하기 위해 일반적으로 학습 데이터와 별도의 검증 데이터(validation data)를 사용한다. 학습 데이터를 이용하여 모델을 학습한 후, 검증 데이터를 이용하여 모델의 성능을 평가하며, 이를 통해 모델의 하이퍼파라미터를 조절하거나 학습을 조기에 중단하는 것이다. 이때 검증 데이터에 대한 손실(loss)를 validation loss라고 한다.
모델이 학습 데이터에서는 잘 동작하지만 검증 데이터에서는 성능이 낮아지면, 이는 모델이 학습 데이터에 과적합되었다는 것을 의미합니다. 따라서 모델을 학습할 때는 validation loss가 적절하게 감소하도록 학습을 잘 조절해야 한다.
Drop out의 경우에는 음... 나도 잘 모른다. 아직 공부가 덜 되있기도 하고 아니 애초에 내가 인공지능 공부자체가 좀 처음이라 부실하다...대충 Dropout은 딥러닝 모델에서 과적합을 방지하기 위한 정규화(regularization) 기법 중 하나이고, 학습 과정에서 랜덤하게 뉴런의 일부를 제거(dropout)해 모델이 특정 뉴런에 너무 의존하지 않도록 만들어준다고 보면 된다.
그럼 뉴런은 뭐냐? 생명과학에서의 뉴런과는 당연히 다르다. 뉴런(Neuron)은 인공신경망(Artificial Neural Network)의 기본 단위로(대충 AI에서 중요한가봄), 입력(input)을 받아 가중치(weight)와 곱한 후 활성화 함수(activation function)를 거쳐 출력(output)을 만드는 함수이다.
*이 글은 내가 나중에 보려고 작성하는 글이다. 남한테 도움은 안된다.
'Python & 인공지능' 카테고리의 다른 글
인공지능 활용 - 6주차(Stochastic Gradient Descent) (0) | 2023.05.04 |
---|---|
인공지능 활용 - 5주차(Regression) (0) | 2023.05.04 |
인공지능 활용 4주차(K-Nearest Neighbor) (0) | 2023.05.03 |
인공지능 활용 - 3주차(Numpy, matplotlib) (0) | 2023.05.03 |
인공지능 활용 - 2 주차 (0) | 2023.05.03 |