이번에는 모델 튜닝에 대하여 알아보자

모델의 성능이 좋지 않으면 다른 모델을 써도 된다.

하지만, 모델이 확정이 되었고 모델 자체를 튜닝하는데 어떤 것들이 필요한지에 대해 알아본다.

  1. ⭐️모델의 구조 변경 - 레이어 수 / 필터 수 / pooling / filter 크기
    • 일반적으로 인공 신경망이 깊으면 깊을수록 성능이 좋다고 함
    • 하지만 파라미터 수가 늘어나면서 학습이 느려지고, overfitting이 될 수도 있음
    • 학습을 돌리게 되면 accuracy 그래프나 loss 그래프 결과를 보고 잘 생각해서 변경해야 함
  2. ⭐️input의 크기 - 이미지 크기 / 시퀀스 길이
    • 이미지 처리 모델 중 EfficientNet : 레이어 수, 필터 수, 이미지 크기를 자동으로 조절해서 최적의 개수를 구해주는 모델
  3. 학습 반복 수(epoch) / 배치(batch) 수
    • 과적합일 경우 Early stopping을 이용할 수도 있는 거고, 반복 수를 늘려서 경황을 지켜볼 수도 있음
    • 일반적으로 배치 수가 많으면(즉, 한번 학습 할 때 많은 배치가 들어오면) 학습이 잘되는 것으로 알려져 있음
    • 다만, 배치 수를 마냥 늘리게 되면 overfitting의 영향이 있을 수 있고, 메모리에 문제가 생길 수도 있음
  4. 최적화 알고리즘(optimizer) / 학습률(learning rate)
    • loss 그래프나 accuracy 그래프를 보고 너무 천천히 떨어지는 것 같으면 학습률을 조금 더 높여주면 됨
    • 갑자기 변동이 생기거나 잘 안내려 갈 경우 학습률을 낮춰주면 됨
    • 최적화 알고리즘은 보통 Adam 사용
    • SGD, momentom + 스케줄링을 사용하기도 함 
  5. 과적합인 경우, 정규화 적용(드롭아웃, L2 정규화 등)
    • 과적합인 경우 : 예를 들어, train accuracy가 92% 인데 test accuracy가 50%이면 과적합이라고 볼 수 있음
    • 과적합을 방지하기 위해 정규화를 적용함
    • 드롭아웃을 0.5비율로 했을 때 정규화 영향이 별로 없다 싶으면, 0.7 ~ 0.8까지도 올려줄 수 있음
    • 드롭아웃은 output layer에는 절대 사용하면 안 됨
    • 일반적으로 L2 정규화를 많이 사용하는 것 같음
    • L2 정규화를 통해서 페널티 파라미터를 조절하면 됨
    • 페널티가 커지면 커질 수록 정규화의 영향이 커짐
    • 패널티가 너무 커지면 학습이 정상적으로 되지 않을 가능성이 있음
    • 배치 정규화는 정규화 효과가 매우 좋아서 기본적인 모델에 다 들어가 있음
    • 안 들어가 있을 경우 배치 정규화를 사용해보길 추천
  6. ⭐️데이터 증식
    • 과적합도 방지해주지만, 데이터를 확장시켜주기 때문에 정확도를 높여줌
    • GAN, 명암조절, 대칭 이동 등으로 데이터 증식
  7. 손실 함수
    • 모델 구조에 따라서 적절한 손실 함수를 사용해야 함
    • 과적합일 경우 weighted loss function을 사용할 수도 있음
  8. 활성화 함수
    • 기본적으로 ReLU를 사용함
    • ReLU를 변형한 다른 활성화 함수를 사용했을 때 성능이 좋아질 수도 있음
  9. 샘플링 방법(undersampling, weighted sampling 등)
    • 직접적인 모델 튜닝 방법은 아니지만, 모델에 데이터를 어떻게 주입시키냐에 따른 것
    • 어떤 데이터가 어떤 식으로 들어왔는지가 중요
    • 샘플링을 할 때 배치수를 적절하게 해야 함
  10. ⭐️초기 모델 파라미터(initial parameters)
    • gradient descent의 기본적인 관점은 local min과 global min을 구분하지 못한다는 것(어디서 시작하냐에 따라서 각각의 종착지가 다르다는 것)
    • 그래서 초기 모델 파라미터를 임의로 세팅할 수도 있고, 좋은 모델로부터 학습된 파라메타를 받아와서 시작하는 방법이 있음
    • 좋은 모델로부터 학습된 파라메타를 받아와서 시작하는 방법을 pretrained 한다고 함

 

위 10가지도 중요하지만, 구글링해서 다른 사람들이 어떻게 했는지 많이 찾아보고, 논문을 많이 읽을수록 잘할 수 있어지는 것이다.

명심!

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

데이터 불균형이 무언인지 알아보쟈

데이터 불균형이란?

  • 데이터 세트 내의 클래스의 분포가 불균형한 것을 의미함
  • 데이터 불균형이 있을 경우 비교적 많이 있는 데이터에 대해 overfitting이 일어날 수 있음
  • 전체적인 모델 성능에 좋지 않은 영향을 미침

 

불균형 데이터 종류

  • 정상 거래 vs 사기 거래(정상 거래 > 사기 거래)
  • 기체 결함(정상 기체 > 문제 기체)
  • 높은 클릭률(유튜브 동영상 클릭률)
  • 희귀 질병 vs 질병(질병 > 희귀 질병)

 

불균형 데이터 해결

  1. 데이터 증식 - 모자란 데이터 수집 및 임의 생성(평행 이동, 대칭 이동, GAN 등을 이용)
  2. 샘플링 기법
    • under sampling - 적은 수의 데이터를 기준으로 데이터 개수를 맞춤
    • over sampling - 기존에 많았던 데이터를 기준으로 데이터 증식을 통해 모자란 데이터를 채워 넣어 기존 데이터를 다 사용함
    • under sampling + over sampling 해도 됨
    • weighted random sampling - 미니 배치를 기준으로 기존 데이터에서 밸런스하게 뽑아서 넣어줌, 예를 들어 미니배치 사이즈가 30일 경우, 각각의 데이터에서 10개씩 뽑아서 데이터를 만듦, 파이토치에서 기본적으로 제공해줌
  3. 가중 손실 함수 - Loss function에서 라벨이 많은 경우 가중치를 적게 줌
    • 라벨별로 데이터가 10, 50, 40개 존재할 경우
    • 가중치를 1/10, 1/50, 1/40을 줄 수도 있고
    • 100/10, 100/50, 100/40을 줄 수도 있음
    • 파이토치에서 기본으로 제공해주기 때문에 weight값만 정해주면 됨
  4. 평가 기준 정의
    • accuracy : 전체 / 맞춘 수
    • accuracy가 90% 일 때 좋은 모델이라고 할 수 있을까?
    • 아니다. 불균형한 데이터에서 가장 많은 데이터를 잘 맞추는 것일 수 있음
    • 각각 라벨마다 따로 봐줘야 함
    • 여러 가지 평가 기준이 있으니 참고해서 진행해야 함

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

호로록 빨리 지식을 머리에 마구마구 집어 넣어보쟈

딥러닝을 포함한 머신러닝 분야에서 중요한 과적합에 대해서 알아보쟈

과적합이란?

  • 맨 왼쪽 그래프에서는 우리가 알고자 하는 값을 전혀 예측하지 못함 - 과소적합
  • 가운데 그래프는 학습 데이터로 학습 후 예측 값이 잘 되고 있음 - 적정, 좋은 모델
  • 학습 데이터로 학습을 했는데, 학습을 너무 잘해서 학습 데이터에 너무 잘 맞춰진 예측식을 만들다 보니까 학습 데이터가 보지 못한 시험 데이터에 대해서는 제대로 예측하지 못하는 경우가 있음 - 과적합

 

과적합 해결

  • 학습 데이터를 많이 확보
    • 학습 데이터 생성에는 돈과 시간이 많이 들어가기 때문에 학습 데이터를 많이 만드는데 어려움이 있을 수 있음
    • 그래서 학습 데이터를 확보하기 위해 아래와 같은 방법을 사용함
      1. 데이터 증식(Data Augmentation)
        • 기존 데이터 10개를 가지고 평행이동이나 대칭 이동을 해서 새로운 데이터 10개를 생성함
        • 그래서 훈련 시 기존 데이터 10개와 새로 생성한 데이터 10개를 합친 20개를 사용함
      2. 조기 종료(Early Stopping)
        • 학습을 하면 입력 값을 모델에 넣고 출력 값을 뽑아내고, 뽑아낸 예측 값을 실제 값과 비교를 해서 Loss를 계산해서 최적화를 진행함
        • 학습 반복 횟수가 늘어날수록 기존에 있던 학습 데이터를 맞출 확률이 높아짐
        • 기존에 있던 학습 데이터는 잘 배워지기 때문에 Loss가 작아짐
        • 시험 데이터는 학습에는 관여하지 않고 평가하는데 쓰이기 때문에 잘 맞추다가 과적합이 있다면 학습 반복 횟수가 늘어날 수록 Loss가 높아짐
        • 조기 종료 시점을 확인하여 과적합을 방지함
        • 굴곡이 2개가 생길 수도 있기 때문에 학습 반복 횟수인 epoch를 크게 해서 어떻게 그래프가 나오는지 확인해야 함
      3. L1, L2 정규화(L1, L2 Regularization)
        • Loss function에서 가장 아랫부분인 w*까지 간다면 train data에 최적화가 되었다는 것을 알 수 있음
        • 최소점까지 가지 못하게 방해물을 줌
        • 바운더리 경계를 만들어서 그 안에서만 처리하도록 함
        • Loss function 뒤에 정규화 텀(바운더리)을 붙여줌
        • L1 : 절댓값 미분이기 때문에 V 형태의 그래프, 0 기준 왼쪽은 -1, 0기준 오른쪽은 1 , 0 기준에서는 subgradient를 이용하면 됨
        • L2 : weight decay라고도 함
      4. 드롭아웃(Dropout)
        • 계산할 때 랜덤으로 노드를 제거하여 계산을 하지 못하도록 하는 방법
        • 들어오는 값에 0을 곱해서 노드를 없애는 것처럼 함
      5. 드롭커넥트(DropConnect)
        • 드롭아웃은 노드를 없애는 반면, 드롭커넥트는 일부 가중치를 0으로 만드는 것
      6. 교란라벨(DisturbLabel)
        • 과적합을 방지하기 위해 일부 실제 값을 틀린 라벨로 바꿔치기하는 것
      7. 배치 정규화(Batch Normalization)
        • 층과 층 사이에 배치 정규화를 넣어줌으로써 과적합을 해결함
        • 데이터에 대해서 항상 같은 분포에서 계산이 되도록 해줌
        • 각 배치마다 정규화된 정도가 다를 수 있어서, 감마와 베타를 곱하고 더해서 shift를 해줌
      8. 라벨 스무딩(Label Smoothing)
        • Loss를 계산할 때 어떤 특정 비율로 실제 값을 조정해주는 것
      9. 노이즈 주입(Noise Injection)
        • 입력값 자체나 레이어 중간의 임의의 노이즈를 주입
        • train data 자체에 노이즈를 추가함
        • 계산 과정에 노이즈를 추가함
      10. 교차 검증(Cross Validation)
        • 과적합을 직접적으로 해결하는 방법은 아님
        • 과적합이 됐는지 안됐는지 판단하는 척도
        • Train data, Validataion data, Test data로 나눔
        • Test data는 오로지 검증할 때만 사용함
        • 교차 검증은 Train data를 kfold 한 후 순차적으로 Validation data를 두는 것
        • 위 이미지는 3fold 예시
        • 예를 들어, 5fold일 경우 TTTTV, TTTVT, TTVTT, TVTTT, VTTTT 이런 식으로 할 수 있음
        • 단점 : 평균 loss 또는 평균 accuracy로 모델을 판단하기 때문에, k가 3일 경우 3번을 학습시켜야 하기 때문에 시간이 오래 걸린다는 단점이 있음

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

+ Recent posts