딥러닝 학습방법

딥러닝 학습방법

코딩펭귄 2023. 1. 6. 09:54

- 부적합 : train, test 데이터셋 모두에서 성능이 떨어지는 경우

- 과적합 : train, valid 데이터셋 성능이 우수하나 test 에서 떨어지는 경우

 

- Gradient vanishing 기울기소실 / exploding 기울기폭주 : 학습의 역전파 과정에서 이상가중치 발생

-- > 적용가능한 해결방안 : 활성함수변경, 가중치초기화, 정규화(요즘 사용안하는 추세임)

 

모델 학습 하이퍼파라미터

**주의 : 모델 찾을때 최근 3년 넘어가는건 사용하지말기 & 너무최신꺼는 버그가 많음**

1) Loss Function

- 모델이 도출한 output과 정답지target의 차이를 수치화하는 함수

- 회귀분석문제에는 MSE / classification에는 Cross-Entropy

- 이진분류문제는 Binary Cross-Entropy

2) optimizer

- 가중치가 구성하는 공간을 탐색하여 모델loss 가 최저가 되는지점 찾아내는 알고리즘

- 기본형 SGD(경사하강법),,이를 활용한기법으로 : Momentum, AdaGrad(RMSprop), Adam(Momentum+AdaGrad)

3) Learning rate

- optimizer 보폭 조절할수있는 하이퍼파라미터

- 이값이 크면 optimizer의 이동이 크고, 작으면 작게이동함

- 0.01을 기본으로 사용

4) 배치의 크기 batch size

- mini batch 를 주로 사용, 일반적으로 컴퓨터에서 가능한 최대크기로 설정

 [ batch size 따라 stochastic, full batch, mini-batch ]

- stochastic: 학습 시 소요되는 연산량 적음. 하나씩만 학습하므로 학습 효율 저조

- full batch: 많은 컴퓨팅 자원 소모. 데이터셋 전체를 학습하므로 양질의 학습 가능

=>  mini-batch: 절충 방식. 사용자의 컴퓨팅 환경에 맞춰 1회 학습량을 조절할 수 있음

주의할점 : augmentation 적용할때, 랜덤스케일 걸어뒀으면  터진다 (resize나 scale 없다면 full batch 사용) 보통 32

yolo5 : 논문이 없음 -> yolo7 : 무거움

 

 

학습횟수 /  epoch / step

object detection은 학습이 좀 많이 돼야함

- 학습횟수 = epoch의 횟수

- epoch : 전체데이터셋에대해 한 번 학습 진행하는것

- step : 한 epoch에 사용되는 mini-batch의 개수 ('iteration'은 보통 step을 의미) 

이해해보기

활성함수

sigmoid : 요즘엔 잘 사용하지는 않지만(gradient vanishing 이슈), 이진분류에는 사용함

- 모델의 각 layer단의 출력값을 조절하기위해 사용

- 현재는 ReLU, Leaky ReLU가 자주 사용됨

image net zoo- model

- Tensorflow, PyTorch, MxNet 등에서 빠른 학습을 위해 모델을 모아 놓은 것

 

모델 선택과 학습

- 기존모델 사용시 : 일반적으로 ImageNet 기준 성능 좋았던모델 사용,, ResNet50, VggNet16 등

- 새로운모델 사용시 : 모델구조 설계개발및 최적화진행

 

object detection 모델

- OpenMMLab : cuda환경 맞춰주면 그나마 사용하기 쉬움

- Detection Zoo : Detectron2 : facebook ai research에서 개발한 pytorch기반의 object detection, segmentation 라이브러리

 

성능측면 : 무거운 딥러닝 모델

1) VGG-16 (파라미터는 많으나, 생각보다 빠르고 성능이 좋음)

2) ResNet50-SE (ResNet101이나 ResNet152 대비 efficient, GPU 서빙의 마지노선)

3) ResNeXT101-SE + FPN (FPN은 detection등에 적용할 때 성능에 큰 영향)

4) Xception 계통 (의외로 효율적이고 강력한 모델, group-conv 기반)

5) EfficientNet-B4 (효율적이고 성능이 좋지만, dw-conv 기반)

 

속도측면 :  가벼운 딥러닝 모델

1) ResNet-18 (ResNet-50보다 빠르지만, 여전히 크기가 큼)  / 2) Xception 계통 (CPU용, Xception을 작게 만들어 사용)

3) MobileNetV1 (CPU용, MobileNetV2보다 더 좋을 때가 많음) / 4) YOLO 계열 / 5) SSD 계열

 

 

회귀모델 성능지표

1. 평균 절대 오차 2. 평균 제곱 오차 3. 평균 제곱근 오차 4. 평균 절대 비율 오차

평균절대오차 : 특이값이 많은 경우에 주로 사용

평균절대비율오차 : 단점) 실제 정답이 1보다작을 경우,무한대의 값으로 수렴할 수 있음

 

분류모델 성능평가지표

- Accuracy, precision, recall, F1score

- confusion matrix(혼동행렬, 오차행렬) : 모델이 두개의 클래스를 얼마나 헷갈려하는지 알수있다

 

 

 

 

 

1) Accuracy 정확도

- 모델이 전체문제중 정답을 맞춘 비율, 1에 가까울수록 좋다 (데이터 불균형할때 Recall, Precision까지 같이 봄)

2) Precision 정밀도 : PPV - 잘 사용 안됨

3) Recall 재현율 : Sensitivity 민감도= TPR (true positive rate)

- 의료쪽 데이터에서 많이 사용

4) F1 score

 

 

객체인식모델의 성능지표

1) IOU  : 젤많이 사용됨 : 실제 경계 박스와 예측 경계 박스가 정확히 일치할수록 IoU가 1에 가까워진다

- 실제 객체위치 bouding box와 예측한 bounding box 두 box가 중복되는 영역의 크기를 통해 평가하는 방식으로, 겹치는 영역이 넓을수록 잘 예측한것으로 파악한다

2) Precision Recall Curve

3) Averate Precision (AP , 평균 정밀도)

- ap 0.5~0.9 사이의 평균이 높아야됨

- ap 곡선(average precision curve) : precision과 recall을 고려한 종합적 평가지표

4) maP : mean Average Performance

- 각 클래스별로 AP를 구한후 (전체)평균낸것

- 어떤 라벨이 제대로 못잡는지 알게됨

 

Pretrained Backbone

Backbone이란?

- Detection, Segmentation 등 고도화된 이미지 처리 인공지능 모델에서 이미지 특징 추출을 위해 사용되는 Image Classification 모델

- backbone 을 사용해야하는 이유 : 더 좋은 backbone을 사용한다면 : 더 좋은 detection수준을 가질것으로 기대

Fine tuning이란?

- Transfer learning: Pre-trained model을 가져와 사용하는 것  / Finet uning: 사전 학습된 가중치를, 사용 목적에 맞도록

업데이트하는 것

- fine tuning 전략 : 1. 전체 모델 새로 학습: 사전 학습된 모델의 구조를 사용하되, 데이터셋에 맞춰 새로 학습시키는 방법.

  / 2. Convolutional base의 일부만 고정하고, 나머지 계층과 Classifier 새로 학습 / 3. Convolutional base는 고정하고, Classifier만 새로 학습  --- 우리가 fine tuning 을 손댈필요는 거의 없을것

 

Mixup Training

- Data augmentation 기법의 일종으로 두 데이터와 라벨을 일정 비율로 섞어 새로운 데이터를 생성 하는 방법

- 비슷한것끼리 분류할때는 잘 안씀, 패턴이 단순하면(라벨이 여러개가 아니라) 큰의미 없음

 

Model ensemble

- 여러 모델 결합하여 모델의 정확도 향상시키는것 (대회에서 순위굳히기 용도, 평소엔 잘 안씀, 모델이 너무 많아지므로)

1) Bagging : Bootstrap Aggregation의 약자. 데이터셋으로부터 여러 개의 샘플을 추출(bootstrap)하여 모델들을 학습시키며, 문제에 대한 모델들의 결과를 집계(aggregate)하여 최종 결과 도출 

2) Boosting : 약 학습기들이 순차적으로 결합하여 문제 해결 규칙 형성. 잘못분류된 데이터가있을경우 이를 평균치로 땡기는것(대회에서 사용, 잘 안씀)

- 차이 : Bagging : 병렬학습, 빠른학습속도, 각 모델학습이 독립적임

Boosting : 순차학습(한모델의 학습결과가 다음모델에 영향미침), 느린학습속도, 오버피팅 발생할수있음