"Neural net이 working하지 않는 37가지 이유"의 두 판 사이의 차이

ph
이동: 둘러보기, 검색
24번째 줄: 24번째 줄:
 
* 올바른 문제를 풀고 있는건가 다시 점검(주식데이터 같은건 원래 랜덤이다. 관계가 있을리 없다)
 
* 올바른 문제를 풀고 있는건가 다시 점검(주식데이터 같은건 원래 랜덤이다. 관계가 있을리 없다)
 
* 데이터 자체가 너무 더러울 수 있다. noise가 너무 많다거나, mis-label이 너무 많다거나 하는 문제들. 일일이 눈으로 확인해보는 수밖에 없다.
 
* 데이터 자체가 너무 더러울 수 있다. noise가 너무 많다거나, mis-label이 너무 많다거나 하는 문제들. 일일이 눈으로 확인해보는 수밖에 없다.
* shuffle 꼭 할것. ordered data가 들어가면 학습이 잘 안된다.
+
* shuffle 꼭 할것. ordered data가 들어가면 학습이 잘 안된다.  
 
* class imbalance 문제 점검. [http://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/ 참고할 글]
 
* class imbalance 문제 점검. [http://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/ 참고할 글]
 +
* 트레이닝셋은 충분한가. finetuning말고 scratch부터 하려면 많은 데이터가 필요하다.
 +
* batch안에 최대한 많은 label이 들어가도록.
 +
* batch size를 줄여라. batch size가 너무 크면 generalization능력을 떨어트리는 것으로 알려져 있다. [https://arxiv.org/abs/1609.04836 arXiv:1609.04836]
 +
==II. Data Normalization/Augmentation==
 +
* 정규화 할것
 +
** 정규화 하고 training/validation/test set을 나누는 것이 아니고, 먼저 나눈 후 training set에 대해 평균, 분산을 구해 정규화하는 것이다.
 +
* data augmentation 너무 많이 하면 underfit한다.
 +
* pretrained model쓸 때는 입력에 항상 주의할것. 예) 구간이 [0, 1], [-1, 1], [0, 255]중 어느것인가
 +
==III. Implementation issues==
 +
* 좀 더 간단한 문제부터 풀어보라. 예를들어, 객체의 종류와 위치를 맞추는 것이라면, 일단 종류만 맞춰보라
 +
* 우연히 맞을 확률 점검. 예를들어, 10개의 클래스를 맞추는 문제에서 우연히 맞을 negative log loss는 \(-\ln(0.1) = 2.302\)다.

2017년 7월 25일 (화) 23:27 판

원문: https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working-4020854bd607

점검 리스트등으로 활용 가능해 보여서 일부를 발췌하여 옮겨둔다.


만일 학습이 잘 안된다면,

먼저 해볼 것

  1. 동작한다고 알려진 모델을 가져다가 해본다. 평이한 loss를 쓰면 더 좋다
  2. regularization, data augmentation 등 모두 off
  3. finetuning하고 있다면, preprocessing을 다시한번 체크하라. 원래 모델에게 주어진 preprocessing 그대로 해야 한다.
  4. input data가 correct한지 확인
  5. 적은 데이터셋(2~20샘플)으로 시작하라. 그 데이터셋에 overfit시킨 다음 조금씩 데이터를 더해보라.
  6. 위에서 빼놓은 것들을 더해간다. regularization, data augmentation, custom loss, complex models, etc.

그래도 안되면 다음을 점검하라

I. Dataset issues

  • dimension을 뒤바꾸거나, 모두 0으로만 이루어진 벡터를 넣고 있거나, 같은 배치만 반복해서 넣거나 하는 어이없는 실수들이 많으니 하나하나 찍어보면서 점검할것.
  • 랜덤 데이터를 넣어보고 에러의 변화를 살펴보라. 만일 비슷하다면 net의 중간 어디선가 데이터가 (모두 0이 된다든지 하는 식으로) garbage로 변하고 있다.
  • 입력 몇개만 가지고 생성되는 label과, 그 입력을 shuffle해보고 생성되는 label이 같은지 점검해볼것
  • 올바른 문제를 풀고 있는건가 다시 점검(주식데이터 같은건 원래 랜덤이다. 관계가 있을리 없다)
  • 데이터 자체가 너무 더러울 수 있다. noise가 너무 많다거나, mis-label이 너무 많다거나 하는 문제들. 일일이 눈으로 확인해보는 수밖에 없다.
  • shuffle 꼭 할것. ordered data가 들어가면 학습이 잘 안된다.
  • class imbalance 문제 점검. 참고할 글
  • 트레이닝셋은 충분한가. finetuning말고 scratch부터 하려면 많은 데이터가 필요하다.
  • batch안에 최대한 많은 label이 들어가도록.
  • batch size를 줄여라. batch size가 너무 크면 generalization능력을 떨어트리는 것으로 알려져 있다. arXiv:1609.04836

II. Data Normalization/Augmentation

  • 정규화 할것
    • 정규화 하고 training/validation/test set을 나누는 것이 아니고, 먼저 나눈 후 training set에 대해 평균, 분산을 구해 정규화하는 것이다.
  • data augmentation 너무 많이 하면 underfit한다.
  • pretrained model쓸 때는 입력에 항상 주의할것. 예) 구간이 [0, 1], [-1, 1], [0, 255]중 어느것인가

III. Implementation issues

  • 좀 더 간단한 문제부터 풀어보라. 예를들어, 객체의 종류와 위치를 맞추는 것이라면, 일단 종류만 맞춰보라
  • 우연히 맞을 확률 점검. 예를들어, 10개의 클래스를 맞추는 문제에서 우연히 맞을 negative log loss는 \(-\ln(0.1) = 2.302\)다.