。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

[네이버클라우드] 클라우드 기반의 개발자 과정 7기/AI

Ai 개념 정리 3

quarrrter 2023. 5. 10. 20:51

정확도 (accuracy score)

모델이 예측한 값 중에서 실제 데이터와 일치하는 비율을 나타내는 성능 지표.

일반적으로 분류 문제에서 많이 사용됨 / r2 score는 회귀 분석 모델의 적합도 평가하는 지표

 

from keras.metrics import accuracy
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=[accuracy])

history = model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))

loss, accuracy = model.evaluate(X_test, y_test)
print('Test accuracy:', accuracy)

 

과적합 (overfiting)

모델이 학습 데이터에 너무 과도하게 적합화되어 ,새로운 데이터에 대한 예측 성능이 저하되는 현상 [r2 score가 1].

모델이 학습 데이터에만 맞추어져 새로운 데이터에 대해 일반화(generalization) 능력이 부족하게 되는 것

주어진 데이터를 과적합시키지 않으면 모든 데이터가 올바로 분류되지 않지 않나? 할 수 있지만 몇 개의 데이터는 버리고 감! 그래서 0.9 대 일 때 엄청 높은 거임. 1은 과적합! 

 

Ealry Stopping

과적합을 방지하기 위한 방법 중 하나

학습 중 학습 데이터에 대한 성능은 계속해서 향상되지만 검증데이터에 대한 성능이 향상되지 않거나 감소하는 지점에서 학습 조기 종료. 검증 데이터(validation data)에서 수행함 

from keras.callbacks import EarlyStopping
earlystopping = EarlyStopping(monitor = 'val_loss', patience=100, mode='min',
								restore_best_weights=True)
                                
                                
#restore_best_weights=True
최적의 성능을 보인 가중치를 자동으로 복원하여 저장해둡니다. 
따라서 모델 훈련 중 최적의 성능을 보였을 때 멈추고, 해당 가중치를 불러와서 저장하면 됩니다.
이 옵션을 사용하지 않으면 가장 마지막에 저장된 모델의 가중치가 사용됩니다.

#patience=100
patience는 EarlyStopping 콜백이 얼마나 기다릴지를 결정하는 매개변수입니다. 
즉, 지정된 에포크 수(epochs)만큼 검증 손실이 감소하지 않을 경우 훈련이 조기 중지됩니다.

#mode='min'
mode 매개변수는 검증 손실 감소의 방향을 나타내는데, 
'min'으로 설정하면 검증 손실이 감소하면 모델이 개선된다는 것을 의미합니다. 
따라서 'min' 모드에서는 검증 손실이 patience만큼 지속적으로 감소하지 않으면 훈련이 조기 중지됩니다.

콜백(callback)

특정 이벤트가 발생했을 때 실행되는 함수들의 모임 

딥러닝 모델 훈련에서는 훈련 중 검증손실이 더 이상 개선되지 않거나, 특정 epoch이후로 성능 향상이 없는 경우 훈련을 자동으로 중지하도록 하는 기능을 구현한다. 

ex) EarlyStopping, ModelCheckPoint 

 

ModelCheckPoint 

Keras 콜백 중 하나로, 훈련 중 모델의 가중치를 저장할 수 있게 해줌 

fit() 함수에 넣음

monitor='val_loss', 와 mode='min'으로 설정하면 검증 손실이 최소가 되는 시점에 모델의 가중치가 저장됨

save_best_only=True 로 설정하면 가장 좋은 성능을 보인 가중치만 저장됨 

 

# Model Check Point 
mcp = ModelCheckpoint(
    monitor='val_loss',
    mode='auto',
    verbose=1,
    save_best_only=True,
    filepath='./_mcp/tf18_cali.hdf5'  #파일명 체크 
)

start_time = time.time()
hist = model.fit(x_train, y_train, epochs=5000, batch_size=200, 
                validation_split=0.2,  
                callbacks=[earlyStopping, mcp], 
                verbose=1) 
                
                #검증 데이터의 손실값이 더이상 개선되지 않거나(val_loss가 감소하지 않는 경우) 
                일정 횟수(patience) 이상 연속적으로 개선되지 않는 경우 학습이 조기 종료되며, 
                최적의 가중치가 ./_mcp/tf18_cali.hdf5 파일에 저장

---복습

회귀분석(Regresstion): 연속된 값을 예측

분류분석(Classification): 종류를 예측

  • 이진분류 (binary classification)
    • 참 또는 거짓을 판별하기 때문에 출력값이 1개
    • 출력 값을 activation:sigmoid를 이용하여 0과 1로 가공
  • 다중분류 (multi classification)
    • 타깃의 종류가 여러 개이기 때문에 출력 값도 여러 개
    • softmax 함수를 사용하여 0과 1사이의 값으로 가공 후 one-hot encoding(하나만 1, 나머지 0)
    • softmax: 각 클래스가 정답일 확률을 0~1사이의 값으로 정규화해줌
      • 정규화 이유: x값을 특정 범위로 제한하기 때문에 최적화 빠르게 됨
      • 원핫인코딩 이유: 컴터가 잘 인식하는 숫자여서, 큰 값을 가진 클래스가 중요하다고 인식하지 않도록

 

 

 

optimizer: 손실 함수의 값을 최소화하기 위해 모델의 가중치를 조정하는 알고리즘 

손실 함수: 모델이 예측한 값과 실제 값 사이의 차이를 측정하는 함수 (mse, crossentropy 등)

가중치: 입력데이터에서 출력데이터로 변환을 정의하는 매개변수

 

[optimizer]

1. Gradient Descent : 기울기를 이용해 x의 값을 어디로 옮겼을 때 함수가 최소값을 찾는지 알아보는 방법

문제점: 극소값(내가 찾은 최소값,local)에 도달할 순 있지만, 전체 최소값(global) 보장은 없음. 훈련이 느림

2. Momentum: 관성을 적용하여 변수가 가던 방향으로 계속 가도록 속도 추가 

global에 이르기 전에 기울기가 0이되는 local minimum에 빠지는 것을 방지 

3. Adagrad: 학습이 많이된 변수는 학습을 느리게, 덜 된 변수는 더 빨리 학습

문제점: 학습이 오래 진행될 경우 step size가 너무 작아져서 거의 움직이지 않는 상태가 됨

4. RMSProp: Adagrad + 지수가중이동평균 => 최신 기울기들이 더 크게 반영됨 (지그재그로 움직임)

5. Adam: RMSProp + Momentum / 곡선이어서 속도도 빠르고 계속 움직일 수 있음