신경망이 일반화되지 않으면 어떻게해야합니까?


36

신경망을 훈련하고 있는데 훈련 손실은 줄어들지 만 검증 손실은 그렇지 않거나 매우 유사한 아키텍처와 데이터를 사용한 참조 또는 실험을 기반으로 기대했던 것보다 훨씬 줄어 듭니다. 이 문제를 어떻게 해결할 수 있습니까?


질문은

신경망이 학습하지 않으면 어떻게해야합니까?

이 질문에서 영감을 얻은 것으로, 신경망의 일반화 오류를 달성 가능한 것으로 입증 된 수준 으로 낮추는 방법에 대한 다른 질문은이 질문의 복제본으로 닫을 수 있도록 의도적으로 일반적인 질문이 남아 있습니다.

메타의 전용 스레드도 참조하십시오.

"왜 내 신경망이 잘 일반화되지 않습니까?"유형의 질문을 리디렉션 할 수있는 일반적인 질문이 있습니까?


4
포괄적 인 답변을 게시하려는 경우 Q와 A를 동시에 게시하는 것이 좋습니다 (사용자 인터페이스에서 허용). 그렇지 않으면 당신은 다른 사람들에게 답변을 쓰도록 장려하고 있으며 우리는 부분적으로 서로를 복제하는 여러 답변으로 끝날 수 있습니다 ... 어쨌든, 당신의 답변을 기대합니다.
amoeba는 Reinstate Monica

@amoeba 아, 나는 몰랐다 : 질문에 대답하려고 할 때 UI가 팝업을 열어서 Q & A를 함께 게시 할 수 없다고 생각했습니다. 내가 쓰려는 것보다 완전한 답을 얻으려면 복제본을 추가하는 것을 피할 것입니다.
DeltaIV

답변:


36

우선,의는 무엇을 언급하자 "내 신경 네트워크가 잘 일반화하지 않는다" 평균과 말과의 차이는 무엇입니까 "내 신경 네트워크가 잘 수행하지 않습니다"가 .

신경망을 훈련 할 때, 당신은 끊임없이라고 표시된 데이터의 집합을 평가하고 훈련 세트 . 모델이 제대로 작동하지 않고 훈련 세트에서 학습하지 않은 것으로 보이면 아직 일반화 문제 가없는 대신 이 게시물을 참조하십시오 . 모델 (예 : 검증 / 테스트 세트) 훈련 세트에 만족스러운 성능을 달성하지만, 잘에 이전에 보이지 않는 데이터를 수행 할 수없는 경우에는, 당신은 일반화의 문제가있다.

왜 모델이 제대로 일반화되지 않습니까?

가장 중요한 부분은 네트워크가 일반화되지 않는지를 이해하는 것입니다. 고용량 머신 러닝 모델에는 트레이닝 세트 를 기억 하는 기능이 있어 과적 합으로 이어질 수 있습니다 .

과적 합은 추정자가 학습 세트를 학습하기 시작한 상태로, 모든 유용한 관계 외에도 학습 샘플에서 노이즈 를 모델링하기 시작했습니다 .

예를 들어 아래 이미지에서 파란색 선이 어떻게 과도하게 잘 맞는지 확인할 수 있습니다.

그러나 왜 이것이 나쁜가요?

이전에 보지 못한 새로운 데이터 (예 : 검증 / 테스트 세트)에서 모델을 평가하려고 하면 모델의 성능이 예상보다 훨씬 나빠 집니다.

과적 합을 방지하는 방법?

게시물의 시작 부분에서 모델의 복잡성이 실제로 과적 합을 일으키는 원인이라는 것을 암시했습니다. 모델이 훈련 세트에서 불필요한 관계를 추출하고 고유 노이즈를 매핑 할 수 있기 때문입니다. 과적 합을 줄이는 가장 쉬운 방법은 모델의 용량 을 본질적으로 제한 하는 것입니다. 이러한 기술을 정규화 기술 이라고 합니다.

  • 매개 변수 규범 . 이는 각 모델의 가중치 업데이트 기능에 추가 용어를 추가하며, 이는 매개 변수의 표준에 따라 다릅니다. 이 용어의 목적은 실제 업데이트 에 대응 하는 것입니다 (즉, 각 가중치를 얼마나 많이 업데이트 할 수 있는지 제한). 이로 인해 모델이 특이 치 및 노이즈에 더욱 강해집니다. 그러한 정규화의 예는 L1 및 L2 정규화이며, 이는 Lasso , RidgeElastic Net 회귀 분석기 에서 찾을 수 있습니다 .
    신경망의 각 (완전히 연결된) 층은 단순한 선형 회귀와 매우 유사하게 기능하기 때문에 신경망에서 사용됩니다. 가장 일반적인 용도는 각 계층을 개별적으로 정규화하는 것입니다.
    keras 구현 .

  • 조기 중지 . 이 기법은 노이즈 모델링을 시작하기 전에 데이터에서 모든 의미있는 관계를 추출하는 방법을 익힌 시점에서 추정기의 트레이닝 단계를 조기에 중지하려고합니다. 이것은에 의해 수행되는 모니터링 검증 손실 (또는 사용자가 선택한 검증 메트릭을)와 종단 이 메트릭 때 훈련 단계를 정지가 개선 . 이런 식으로 우리는 추정자에게 유용한 정보를 배울 수있는 충분한 시간을 주지만 잡음으로부터 배울 수는 없습니다.
    keras 구현 .

  • 신경망 특정 정규화. 몇 가지 예는 다음과 같습니다.
    • 드롭 아웃 . 드롭 아웃 은 놀랍도록 잘 작동하는 흥미로운 기술입니다. 드롭 아웃은 네트워크에서 두 개의 연속 레이어 사이에 적용됩니다. 각 반복에서 두 계층을 연결하는 지정된 비율의 연결 (임의로 선택됨)이 삭제 됩니다. 이로 인해 후속 계층은 이전 계층 에 대한 모든 연결 에 의존합니다 .
      케 라스 구현
    • 전학 학습 . 이것은 특히 딥 러닝에서 사용됩니다. 이 작업 은 대규모 일반 데이터 세트에서 사전 학습 된 동일한 아키텍처를 사용하여 네트워크의 가중치를 다른 네트워크의 가중치로 초기화합니다 .
    • 깊은 신경망에 overfitting 제한 할 수있는 다른 사항은 다음과 같습니다 배치 정규화 (예 개시 모듈) 드롭 아웃뿐만 아니라 작동하는 regulizer으로 어떤 경우에 역할을 할 수 있습니다; SGD의 상대적으로 작은 크기의 배치 는 과적 합을 방지 할 수 있습니다. 숨겨진 레이어의 가중치작은 랜덤 노이즈 추가

모델 용량을 제한하는 것 외에 과적 합을 방지하는 또 다른 방법은 데이터 품질을 개선하는 것입니다. 가장 확실한 선택은 이상치 / 잡음 제거이지만 실제로는 그 유용성이 제한됩니다. 보다 일반적인 방법 (특히 이미지 관련 작업)은 데이터 확대 입니다. 여기서 우리는 훈련 예제를 무작위로 변환하여 모델에 다르게 나타나는 동안 동일한 의미 정보를 전달합니다 (예 : 이미지에서 왼쪽에서 오른쪽으로 뒤집기).
데이터 기능 보강 개요

실용적인 제안 :

  • 지금까지 가장 효과적인 정규화 기술은 dropout 이므로 가장 먼저 사용해야합니다. 그러나 드롭 아웃을 어디에나 배치 할 필요는 없습니다 (아마도 아닐 수도 있습니다)! 과적 합이 발생하기 쉬운 레이어는 가장 많은 매개 변수를 포함하므로 완전 연결 (FC) 레이어입니다. 이 레이어에 드롭 아웃을 적용해야합니다 (다음 레이어에 대한 연결에 영향을 미침).
  • 배치 정규화 는 정규화 효과 이외에도 여러 가지 다른 방식으로 모델을 지원합니다 (예 : 수렴 속도를 높이고 더 높은 학습 속도를 사용할 수 있도록합니다). FC 레이어에서도 사용해야합니다.
  • 앞에서 언급했듯이 교육 단계에서 예정보다 일찍 모델을 중지하는 것이 좋습니다. 조기 중지 의 문제점 은 특정 시점에서 모델이 다시 개선되지 않을 것이라는 보장이 없다는 것입니다. 조기 중지보다 더 실용적인 방법은 유효성 검사 세트에서 최고의 성능을 달성하는 모델의 가중치를 저장하는 것입니다. 그러나 이는 모델 성능에 대한 편견없는 추정치가 아니므로주의하십시오 (트레이닝 세트보다 우수). 당신은 할 수 있습니다 또한 검증 세트 overfit. 나중에 더 자세히.
    케 라스 구현
  • 일부 응용 프로그램 (예 : 이미지 관련 작업)에서는 ImageNet 가중치를 찾을 수 있도록 이미 설정된 아키텍처 (예 : VGG, ResNet, Inception)를 따르는 것이 좋습니다. 이 데이터 세트의 일반적인 특성으로 인해 이미지 관련 작업에 사용할 수 있도록 기능을 일반화 할 수 있습니다. 과적 합에 강건한 것 외에도 훈련 시간이 크게 줄어 듭니다.
    유사한 개념의 또 다른 용도는 다음과 같습니다. 작업에 많은 데이터가 없지만 다른 유사한 작업을 찾을 수있는 경우 전송 학습 을 사용 하여 과적 합을 줄일 수 있습니다 . 먼저 데이터 세트가 더 큰 작업에 대해 네트워크를 훈련시킨 다음 미세 조정 을 시도하십시오.처음에 원하는 모델로 대부분의 경우 초기 교육은 모델을 과적 합에보다 강력하게 만듭니다.
  • 데이터 확대 . 항상 더 큰 데이터 세트를 갖는 데 도움이 되지만 데이터 기능 보강 기술에는 단점이 있습니다. 보다 구체적으로, 데이터의 의미 론적 내용을 망칠 수 있으므로 너무 강력하게 기능 보강하지 않도록주의 해야합니다. 예를 들어 이미지 확대에서 이미지를 너무 많이 변환 / 이동 / 스케일하거나 강도 / 대비를 조정하면 이미지에 포함 된 많은 정보가 손실됩니다. 더욱이, 증강 기법은 각 작업에 대해 임시 방식으로 구현 될 필요가있다 (예를 들어, 필기 숫자 인식에서 숫자는 일반적으로 정렬되고 너무 많이 회전되어서는 안됨; 또한 어떤 방향으로도 뒤집어지지 않아야 함) 가로 / 세로 대칭이 아닙니다 (의료 이미지도 마찬가지).
    간단히 말해서 데이터 확대를 통해 비현실적인 이미지 를 생성 하지 않도록주의하십시오 . 또한 데이터 세트 크기를 늘리면 훈련 시간이 더 오래 걸립니다. 개인적으로, 훈련 세트에서 모델이 거의 손실에 도달하면 데이터 확대 사용을 고려하기 시작 합니다.0

9

충분히 깊은 신경망이 거대한 데이터 세트에서 임의의 레이블을 기억할 수 있다는 경험적 증거가 많이 있습니다 (Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, Oriol Vinyals, "딥 러닝을 이해하려면 일반화를 다시 생각해야합니다"). 따라서 원칙적으로 충분히 큰 NN을 얻음으로써 우리는 항상 훈련 오류 를 매우 작은 값으로 줄일 수 있습니다 . 실제로 작업이 아무리 무의미하더라도 상관없이 수치 정확도로 제한됩니다.

일반화 오류 와는 상황이 상당히 다릅니다 . 각 학습 문제에 대해 원하는만큼 일반화 오류를 생성 할 수있는 학습 가능한 NN 모델이 있는지 확신 할 수 없습니다. 이러한 이유로 첫 번째 단계는

1. 기대치를 정확하게 설정하십시오

찾고있는 일반화 오류, 데이터 세트 또는 참조를 찾을 수있는 가장 유사한 오류에 도달 할 수있는 아키텍처가 있음을 알려주는 평판이 좋은 참조를 찾으십시오. 예를 들어 여기를보십시오

현재의 최신 컨볼 루션 신경망은 무엇입니까?

다양한 작업에 대한 CNN의 현재 (답변 당시) SOTA (State Of The Art) 성능을 찾기 위해. 모든 인프라가 제대로 설치되었는지 테스트하기 위해 자체 데이터 세트를 학습하기 전에 이러한 참조 데이터 세트에서 이러한 결과를 재현하는 것이 좋습니다.

2. 훈련 절차에 결함이 없는지 확인하십시오

질문에 대한 답변에 설명 된 모든 확인

신경망이 학습하지 않으면 어떻게해야합니까?

훈련 절차가 정상인지 확인하기 위해 일반화 오류를 성공적으로 줄이기위한 전제 조건입니다 (NN이 학습하지 않는 경우 일반화를 배울 수 없음). 이러한 검사에는 다음과 같은 것들이 포함됩니다.

  • 단위 테스트
  • 데이터 세트 확인 (트레이닝 세트와 테스트 세트 모두에 대한 임의의 입력 / 레이블 샘플 몇 개를 살펴보고 레이블이 올바른지 확인하고, 입력 이미지의 너비와 크기를 확인하고, 트레이닝 / 테스트 세트에서 샘플을 섞어서 영향을 미치는지 확인하십시오. 결과; 등)
  • 무작위 배정 테스트
  • 전처리 및 패키지 버전 표준화
  • 수치 실험의 로그 북을 유지

3. 수렴을 시도하십시오

Leslie N. Smith와 Nicholay Topin의 “슈퍼 컨버전스 : 큰 학습 속도를 사용하는 신경망의 매우 빠른 훈련” 일부 사례에서는 Leslie N. Smith의 주기적 학습 속도 방법과 큰 학습 속도의 조합이 정규화 역할을하는 것으로 나타났습니다 수렴을 가속화하고 광범위한 정규화의 필요성을 줄입니다. 따라서 이것은 전에 시도해 보는 것이 좋습니다

4. 정규화를 MAXXX로 설정

정규화는 종종 훈련 시간 (나쁜)을 증가시키고, 훈련 오류를 증가 시키며 일반화 오류 (좋은)를 감소 시키지만 , 너무 많은 정규화는 실제로 두 가지 오류 (부족)를 증가시킬 수 있습니다. 이러한 이유로 훈련 시간이 증가하기 때문에 훈련 세트를 과적 합한 후에 는 한 번에 하나씩 다양한 정규화 기술을 도입하는 것이 좋습니다 . 정규화 자체가 반드시 일반화 오류가 작아진다는 것을 의미하지는 않습니다. 모델의 일반화 특성을 달성하려면 충분한 용량이 있어야합니다. 이것은 종종 정규화의 이점을보기 전에 충분히 깊은 네트워크가 필요하다는 것을 의미합니다.

가장 오래된 정규화 방법은 아마도 조기 정지 및 체중 감량입니다. 다른 것 중 일부 :

  • 배치 크기를 줄입니다. 배치 크기가 작을수록 일반적으로 작은 일반화 오류와 관련이 있으므로 시도해보십시오. 그러나 미니 배치의 유용성에 대해서는 논쟁의 여지가 있습니다. 제 경험상 그들은 ( 과 같은 미친 작은 크기를 사용할 필요가없는 한 ) 도움이되지만 Elad Hoffer, Itay Hubara, Daniel Soudry Train은 더 길지만, 더 일반화 : 신경 네트워크의 큰 배치 훈련 일반화 격차를 동의하지 않는다. 참고 일괄 규범 (아래 참조)를 사용하는 경우, 너무 작은 minibatches 매우 해로울 것.m=16
  • 적응 형 옵티 마이저보다는 SGD를 사용하십시오. 이것은 이미 @shimao에 의해 다루어 졌으므로 완전성을 위해 언급했습니다.
  • 드롭 아웃 사용 : LSTM을 사용하는 경우 LSTM 레이어의 입력 및 출력 장치에만 표준 드롭 아웃을 사용하십시오. 반복 단위 (게이트)의 경우 Yarin Gal 의 박사 과정에서 처음으로 표시된 것처럼 반복 드롭 아웃을 사용하십시오 . 논문 . 그러나 CNN을 사용하면 이제 드롭 아웃이 덜 자주 사용됩니다. 대신, 당신은 경향이 ...
  • ... 배치 정규화 사용 : 가장 최근의 CNN 아키텍처는 배치 정규화를 선호하여 드롭 아웃을 피합니다. 이것은 단지 유행 일 수도 있고, 명백하게 탈락과 배치 정규화가 잘 어울리지 않기 때문일 수 있습니다 (Xiang Li, Shuo Chen, Xiaolin Hu, Jian Yang, 차이에 의한 탈락과 배치 정규화의 불일치 이해 )를 누릅니다 . 대량 데이터 세트가있는 경우 배치 규범이 드롭 아웃보다 효과적이므로 CNN 아키텍처에서 드롭 아웃이 선호되지 않는 이유가 될 수 있습니다. 배치 정규화를 사용하는 경우 각 레이어의 가중치 및 바이어스 분포가 대략 표준 법선으로 보이는지 확인하십시오. RNN의 경우 배치 규범 구현이 복잡합니다. 무게 정규화 (Tim Salimans, Diederik P. Kingma,가중치 정규화 : 심층 신경망 훈련을 가속화하기위한 간단한 매개 변수화 는 실행 가능한 대안입니다.
  • 데이터 확대 사용 : 정규화 효과도 있습니다.

5. 하이퍼 파라미터 / 아키텍처 검색

도움이되지 않는 경우 여러 하이퍼 파라미터 설정 (Bayesian Optimization이 여기에 도움이 될 수 있음) 또는 여러 다른 아키텍처 변경 사항 (예 : GAN 아키텍처 및 작업중인 데이터 세트)을 테스트해야합니다. 발전기, 그러나 판별기에 추가되면 상황이 악화됩니다). 길고 지루한 실험의 결과를 잘 정리 된 로그 북에 기록하십시오.

GAN 용 PS 일반화 오류에 대해 이야기하는 것은별로 의미가 없습니다. 위의 예는 여전히 딥 러닝에 많은 연금술이 있으며, 잘 작동 할 것으로 예상되는 것들, 때로는 돈 이 없음을 나타냅니다 '아니오 또는 여러 번 정상적으로 작동하는 것'은 갑자기 새로운 데이터 세트를 찾기 위해 갑자기 엉망이됩니다.


5

문헌에서 본 일반적으로 사용되는 정규화 기술 목록은 다음과 같습니다.

  1. 배치 정규화를 사용하면 드롭 아웃이 더 이상 사용되지 않는 시점에 놀랍도록 효과적인 정규화 장치가됩니다. 단순히 필요하지 않기 때문입니다.
  2. 소량의 무게 감소.
  3. 좀 더 최근의 정규화 기술에는 Shake-shake (Xavier Gastaldi의 "Shake-Shake regularization") 및 컷 아웃 ( "Trance DeVries 및 Graham W. Taylor의 컷 아웃을 사용한 컨볼 루션 신경망의 정규화 개선")이 포함됩니다. 특히 컷 아웃을 쉽게 구현할 수있어 매우 매력적입니다. 나는 이것들이 드롭 아웃보다 잘 작동한다고 생각하지만 확실하지 않습니다.
  4. 가능하면 완전히 연결된 계층이있는 아키텍처보다 완전히 컨볼 루션 아키텍처를 선호하십시오. 하나의 완전히 연결된 레이어에 1 억 개의 매개 변수가있는 VGG-16과 레이어 수의 10 배, 더 적은 수의 매개 변수가있는 Resnet-152를 비교하십시오.
  5. Rmsprop 및 Adam과 같은 다른 옵티 마이저보다 SGD를 선호하십시오. 더 잘 일반화되는 것으로 나타났습니다. Nitish Shirish Keskar와 Richard Socher의 "Adam에서 SGD로 전환하여 일반화 성능 향상"

0

나는 Djib2011처럼 느끼고 자동화 된 방법에 대해 큰 지적을하지만 과적 합을 줄이기 위해 사용 된 방법이 그 일을했는지 ​​어떻게 알 수 있는지에 대한 근본적인 문제를 다루지는 않습니다. DeltaIV 답변에 대한 중요한 각주로서, 지난 2 년간의 최근 연구를 바탕으로 이것을 포함하고 싶었습니다. 신경망에 과적 합하는 것은 모델을 지나치게 암기하는 것뿐만 아니라 새로운 것을 배우거나 이상을 처리 할 수없는 모델에 관한 것입니다.

블랙 박스 모델에서 과적 합 탐지 : 모델의 해석 성은 모델의 일반화 능력을 얼마나 잘 알 수 있는지와 직접적으로 관련이 있습니다. 따라서 해석 가능한 많은 도표는 과적 합을 탐지하는 방법이며 위에서 제안한 방법이 얼마나 잘 작동하는지 알려줄 수 있습니다. 해석 가능성 플롯은 특히 검증 및 테스트 결과 플롯을 비교하는 경우이를 직접 감지합니다. 이 미공개 서적의 5 장과 6 장은 과적 합의 현장 탐지에서 최근의 발전에 대해 이야기합니다 : 해석 가능한 모델링

이 책을 바탕으로 과적자를 감지하고 제거하는 세 가지 다른 방법을 언급하고 싶습니다. 그래서 나는 하나의 마음이 아니라면 그것들을 강조하고 싶습니다 :

  1. 특징 선택 탐지 : 적은 수의 매개 변수와 적은 특징이 모델에 있습니다. 따라서 1 억 개 중 중요한 것만 포함하면 (대략 7,500 만 개) 일반화가 더 나은 모델이됩니다. 문제는 많은 신경망이 특히 # 2가 존재할 때 기능 선택에서 완벽하지 않다는 것입니다. 부트 스트랩 또는 부스팅은 근본적으로 두 가지를 모두 고칠 수는 없습니다 (와일드 부트 스트랩이라고하는 버전 만 가능). 간단히 말해서 신경망 정크 데이터를 제공하면 정크가 나옵니다. (위에 언급 된 L2 정규화는이를 돕는 데 매우 능숙합니다)

  2. 이상 감지 및 처리 : "이상 값"이 적을수록 모델이 일반화 될 수 있습니다. "이상 값"이란 데이터의 특이 값을 의미하는 것이 아닙니다. 데이터의 특이 치 (상자 그림에서 볼 수있는 종류)는 신경망에 대해 너무 좁은 정의입니다. 모델의 오류에서 특이 치를 고려할 필요가 있는데, 이는 다른 예외뿐 아니라 영향이라고도합니다. 따라서 네트워크를 실행하기 전에 이상을 감지하는 것이 중요합니다. 신경망은 한 가지 유형의 이상에 대해서는 견고하지만 다른 모든 유형에 대해서는 견고하지는 않습니다. 카운터 예제 방법, 비판 방법, 적대적 예제 방법 및 영향 그림은 특이 치를 발견 한 다음이를 인수 분해하는 방법을 파악하는 데 도움이됩니다 (즉, 매개 변수 변경 또는 일부 데이터 제거)

  3. 통계적 또는 윤리적 고려 사항을 기반으로 한 계층화 된 샘플링, 오버 샘플링 및 언더 샘플링 : 언더 샘플링 및 언더 샘플링 전문가 였지만 계층화 된 샘플링에 대해서는 알고 있지 않습니다. (인종, 성별, 성별)과 같은 중요한 요소를 클러스터링 한 다음 클러스터로 계층화 된 샘플링을 수행하는 것은 빅 데이터를 고려할 때 과적 합하지 않는 데 중요합니다. 이미지 감지를 할 때 인종 차별을 피하기 위해 일부 분야에서는 법적으로 클러스터링과 결합 된 계층화 된 샘플링이 필요합니다. 위에 링크 된 책은이를 수행하는 방법에 대해 간략하게 설명합니다.

PS 더 많은 링크를 포함시켜야합니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.