-
[DL for VS #6] 성능 지표 - 정확도, 혼동 행렬, 정밀도, 재현율, F-점수, 시각화 예제Machine Learning/Deep Learning for Vision Systems 2023. 4. 12. 16:50
4. 딥러닝 프로젝트 시동 걸기와 하이퍼파라미터 튜닝
- 머신러닝 시스템의 성능 지표 정의하기
- 베이스라인 모델 설정하기
- 학습 데이터 준비하기
- 모델을 평가하고 성능 지표 해석하기
- 신경망을 개선하고 하이퍼파라미터 튜닝하기
4.1 성능 지표란
모델의 성능을 평가하는 지표에는 정확도, 정밀도, 재현율, F-점수 등이 있다.
4.1.1 정확도
정확도 = 정답을 맞힌 횟수 / 전체 표본 수
희귀질환 양성/음성 판정 시스템 예시에서, 정확도는 이 모델의 성능 평가하기 적합한 지표가 아니다. 전체 1백만 명 중 1명꼴로 발병한다면, 음성 예측 시스템은 99.999%의 정확도를 갖는다.(정확도 지표가 의미가 없음)
4.1.2 혼동 행렬
또 다른 지표를 정의하기 앞서 혼동 행렬(confusion mamtrix)를 알아야 함.
혼동 행렬은 모델의 분류 결과를 정리한 표.
질환이 있다고 예측(양성) 질환이 없다고 예측(음성) 질환이 있음(양성) 100 30 TP(진양성) FN(위음성) 질환이 없음(음성) 70 800 FP위양성 TN(진음성) TP(True Positive, 진양성) : 모델이 양성이라고 정확하게 예측(질환 있음)
TN(True Negative, 진음성) : 모델이 음성이라고 정확하게 예측(질환 없음)
FP(False Positive, 위양성) : 실제는 음성이지만 모델이 양성이라고 잘못 예측. 1종 오류(질환 없음)
FN(False Negative, 위음성) : 실제는 양성이지만 모델이 음성이라고 잘못 예측. 2종 오류(질환 있음)
귀무가설 : 실제 음성
대립가설 : 양성 진단
1종 오류 : 귀무가설(음성)이 실제로 옳으나 기각, 대립가설(양성)을 잘못 채택하는 것.
2종 오류 : 대립가설(양성)이 실제로 옳으나 기각, 귀무가설(음성)을 잘못 채택하는 것.
보통의 경우 1종 오류가 더 치명적인데, 질환판정모델에서는 2종 오류가 더 치명적임.4.1.3 정밀도와 재현율
정밀도(precision=특이성,specificity) = TP / (TP + FP)
- “맞다고 생각한 것 중에 진짜 맞는 거”
- 질환 판정 모델에서는 질환이 없는 사람을 얼마나 잘못 진단했는지.
- 다시말해 질환이 없는 사람을 양성으로 진단한 위양성이 얼마나 되는지
재현율(recall=민감도,sensitivity) = TP / (TP + FN)
- “진짜인 것 중에 진짜(P)임을 맞춘 거”
- 질환 판정 모델에서는 질환이 있는 사람을 얼마나 잘못 진단했는지 알려준다.
- 다시 말해 질환이 있는 사람을 음성으로 진단한 위음성이 얼마나 되는지
4.1.4 F-점수
재현율과 정밀도를 단일 지표로 한꺼번에 나타낸 지표.
F-점수는 정밀도와 재현율의 조화평균(harmonic mean)으로 정의됨.
F-점수 =( 2*정밀도*재현율 ) / (정밀도 + 재현율)
*어떤 경우에 F-점수를 사용할까?
질환 판정 모델에서 재현율이 더 중요하다. 그런데 모델의 위음성 판정이 거의 없어 재현율을 충분히 확보했지만 위양성 건수가 많아 정밀도가 낮다면 어떻게 해야 할까? 위양성 건수가 많다는 것은 바꿔 말하면 질환이 있는 환자를 놓치지 않으려면 불필요하게 추가 검사를 받는 환자가 늘어난다는 뜻.
정밀도 재현율 F-점수 분류기A 95% 90% 92.4% 분류기B 98% 85% 91% 위와 같은 분류기 A, B가 있다면 F점수를 비교하여 모델을 선정한다.
4.2 베이스라인 모델 설정하기
어떤 문제인지에 따라 신경망 구조에 맞는 베이스라인을 설정한다.
다음 사항을 고려해서 설정한다.
- 어떤 유형의 신경망을 사용해야 하는가? MLP, CNN, RNN 등
- YOLO나 SSD 등의 물체 인식 기법을 적용해야 하는가?
- 신경망의 층수는 얼마나 두어야 할까?
- 활성화 함수는 어떤 것을 사용할까?
- 최적화 알고리즘은 어떤 것을 사용할까?
- 드롭아웃, 배치 정규화 등의 규제화 기법을 사용해서 과적합을 방지해야 하는가?
4.3 학습 데이터 준비하기
학습 데이터 준비는 문제의 유형과 데이터의 성격에 따라 크게 달라진다.
4.3.1 훈련 데이터, 검증 데이터, 테스트 데이터로 분할하기
*테스트 데이터를 학습에 사용해서는 안 된다.
-> 처음 접하는 데이터를 이용해서 모델의 편향되지 않은 일반화 성능을 평가하기 위함.
*검증데이터는 학습 중 한 에포크가 끝날 때마다 모델의 정확도와 오차를 확인해서 대략적인 모델의 성능을 체크하고 파라미터를 튜닝하기 위한 데이터셋이다.
*다음 의사 코드는 모델 학습 과정을 간단히 표현한 것.
-------------------------------------------------------------------------------------------------------------
각 에포크마다 모든 훈련 데이터에 대해 다음을 반복
신경망에 오차 역전파
가중치 수정
훈련 데이터를 대상으로 한 모델의 정확도와 오차 계산
모든 검정 데이터에 대해 다음을 반복
검증 데이터를 대상으로 한 모델의 정확도와 오차 계산
--------------------------------------------------------------------------------------------------------------
모델 학습 중에는 한 에포크가 끝날 때마다 train_loss, train_acc, val_loss, cal_acc가 계산된다. 이 정보를 이용해서 현재 모델의 성능이 어느 정도인지, 과적합 또는 과소적합의 징후는 없는지 판단한다.
*훈련 데이터, 검증 데이터, 테스트 데이터를 잘 분할하는 방법
- 전통적으로 훈련:테스트 = 80:20 또는 70:30이고, 검증 데이터를 추가하면 60:20:20 또는 70:15:15의 비율을 많이 사용(과거 데이터셋의 규모가 수만 개일 때 사용되던 기준). 최근에는 거대한 규모의 데이터셋을 사용하므로 검증 데이터와 테스트 데이터는 전체의 1%로 충분한 경우가 있다. 학습에 충분한 양의 데이터를 사용하는 것이 좋기 때문. -> 규모에 따라 비율을 선택할 것.
- 데이터셋이 같은 분포를 따르는지 확인할 것 : 이미지의 고품질(높은 화질)과 저품질(낮은 화질)도 성능에 영향을 줌으로 데이터셋 (품질)분포를 확인해야한다.
4.3.2 데이터 전처리
회색조 이미지 변환 – 계산 복잡도를 경감시킬 수 있다.
이미지 크기 조절 – 신경망의 한계점 중 하나는 입력되는 모든 이미지의 크기가 같아야 한다.
데이터 정규화 – 데이터에 포함된 입력 특징(이미지의 경우 픽셀값)의 배율을 조정해서 비슷한 분포를 갖게 함.
데이터 강화 – 데이터 강화를 데이터 전처리로도 활용할 수 있다.
4.4 모델을 평가하고 성능 지표 해석하기
4.4.1 과적합의 징후
머신러닝 모델이 제 성능을 내지 못하는 주된 이유는 대부분 과적합(또는 과소적합)이다.
학습 오차와 검증 오차의 비교
훈련 데이터에 대한 성능은 높은데 검증 데이터에 대한 성능이 상대적으로 낮다면 과적합 가능성 높음.
예를 들어 train_error가 1%고 val_error가 10%ua 모델이 훈련 데이터 자체를 기억했기 때문에 검증 데이터에서 성능이 제대로 나오지 않음. ->하이퍼파라미터 조정
훈련 데이터에 대한 성능이 낮다면 과소적합 가능성 높음.
예를 들어 train_error가 14%고 val_error가 15%면 모델의 표현력이 낮아 데이터에 부합하지 못하는 것. 은닉층 추가 혹은 학습 에포크 수를 늘리거나 다른 신경망 구조를 사용해야 한다.
4.4.2 학습 곡선 그리기
4.4.3 실습 : 신경망의 구성, 학습, 평가
데이터 분할과 모델 구성, 학습, 성능 측정 결과의 시각화 예제.
https://colab.research.google.com/drive/1VGfeOZ-H3IMllvuMdlln5TgSM-_skTkr?usp=sharing
'Machine Learning > Deep Learning for Vision Systems' 카테고리의 다른 글
[DL for VS #8] 배치 정규화 (0) 2023.04.17 [DL for VS #7] 신경망 하이퍼파라미터 튜닝 (0) 2023.04.13 [DL for VS #5] 컬러 이미지 합성곱 연산 실습 (0) 2023.04.12 [DL for VS #4] CONV kernel, stride, padding, pooling, dropout (0) 2023.04.12 [DL for VS #3] 최적화 알고리즘-(배치, 확률적, 미니배치)경사하강법, 역전파 알고리즘 (1) 2023.04.08