본문 바로가기
AI데이터 엔지니어, 새싹

62th_121_Overfitting

by Leetora 2023. 12. 4.
import numpy as np
import matplotlib.pyplot as plt

x = np.sin

y = x + np.random.rand(200)

plt.plot(x, y)
plt.show()

학습을 하며 epoch 마다 LR이 달라지는 것

학습란에서 scheduler.step()를 추가해서 epoch에 따라서 lr이 조절되는 효과를 볼 수 있음

save loss to csv:

  • loss값을 csv로 저장하는 함수

utils.py

  • 진행했던 것들을 시각화해주는 함수
    스크린샷 2023-12-01 오후 2.11.21.jpg

모델한테 sin함수를 만든 적이 없음. 때문에

  • epoch을 많이 줘버리면 예상 loss는 0에 수렴하는 상태임을 알 수 있음

  • 부드러운 sin함수를 만드는 게 아니라 noise까지 학습해서 시각적으로 표현한다면 이렇게 된다스크린샷 2023-12-01 오후 2.12.21.jpg

  • noise를 적당히만 반영해서 sin함수를 학습하는 것이 이상적

  • noise를 지나치게 학습해 일반적인 sin함수에서 벗어나면 loss는 작을지 몰라도 실제 성능은 떨어짐

  • 이렇게 noise까지 학습해버린 상태를 overfitting이라고 말한다
    스크린샷 2023-12-01 오후 2.16.21.jpg

  • 학습이 너무 안된 경우는 underfitting이라고 지칭


loss가 줄면 성능이 반드시 늘어난다?

  • 마냥 이상적이라고 할 수는 없음
  • 어떻게 overfitting이 일어났는지 판단할 수 있을까?
    • data를 모두 학습시키는데 사용하는 게 아니라 overfitting 감시용으로 남겨둔다면?
    • 이렇게 학습에 참여하지 않은 데이터를 unseen data라고 하며, 이 과정을 vaildation
    • 데이터가 충분하다면 일반적으로 8:2로 나눈다

스크린샷 2023-12-01 오후 2.19.33.jpg

  • 학습에 대한 loss는 당연히 줄어든다
  • validation은 감소하다가 증가한다
    • 이를 overfitting이 발생했다고 말할 수 있음
      스크린샷 2023-12-01 오후 2.21.28.jpg
  • n_train _samples는 개수이므로 int처리를 해줘야 함

gradient를 써서 validation을 다 떼어줘야 하기 때문에 쓴 코드

Early Stopping

스크린샷 2023-12-01 오후 2.32.59.jpg

  • 계속 감소하진 않음 = 바로 멈춰선 안된다
  • validation이 증가하더라도 계속 진행하되, 개선이 없을 경우 종료한다
  • 이를 early stopping
  • pytorch에서 제공하지 않으므로 직접 제작을 해야한다
  • patient를 통해 얼마나 참을 것인지 기입

Dropouts and Batch Norms

neuron을 세팅할 때 초기 random값으로 시작을 하는데, 초기 parameter를 셋팅할 때, 비슷한 값으로 세팅된 뉴런이 있다면

  • 각각의 뉴런의 출발점이 비슷하다면?
  • 같은 flow를 따라가기 때문에 비슷한 뉴런이 될 가능성이 높음
  • 뉴런의 파라미터들이 달라진다는 것은 보고자 하는 패턴이 달라진다는 것

❓Dropout

  • 임의의 뉴런을 없애는(죽이는)
  • traing process에선 일정 확률로 뉴런이 deactivation됨
  • test oricess에선 모든 뉴런을 activation 시킨 상태(드롭아웃 X)

학습 시킬 때에만 dropout을 사용한다

dropout.train()에선 dropout이 적용되고, 뉴런을 죽인다
dropout.test()에선 dropout이 적용되지 않는다

보통 fully connected layer 뒤에 넣어준다
마지막 nn.Linear에서는 분류에

Batch Normalization

  • 레이어를 통과할 때마다 데이터의 분포가 바뀌게 됨

  • 비효율성을 야기하기 때문에 batch normalization을 시행

  • 에러 방지를 위해 표준편차에 e+8 정도를 곱해준다

  • 일반적으로 batch normalization은 fc 말고 conv layer에서 시행

  • C(conv) B(batch) R(relu)

  • dropout 보다 성능 상승이 확 올라가는 좋은 기법

'AI데이터 엔지니어, 새싹' 카테고리의 다른 글

70th_12_14(Mon)_시계열 데이터 분석  (0) 2024.01.08
73th_12_18(Mon)_Web Scrapping  (1) 2023.12.18
61th_11_30(Thu)_ResNet  (1) 2023.11.30
60th_11_29(Wed)_GoogLeNet  (0) 2023.11.29
59th_11_28(Tue)_VGG Implementation  (0) 2023.11.29