컨볼 루션 신경망 과적 합. 도움이되지 않는 탈락


16

나는 convnets와 함께 조금 놀고 있습니다. 특히, 고양이 또는 개 (각 12500)로 표시된 25000 개의 이미지로 구성된 kaggle cats-vs-dogs 데이터 세트를 사용하고 있습니다.

테스트 세트에서 약 85 %의 분류 정확도를 달성했지만 90 %의 정확도 달성 목표를 설정했습니다.

내 주요 문제는 과적 합입니다. 어쨌든 항상 발생합니다 (일반적으로 8 ~ 10 일 후). 내 네트워크의 아키텍처는 VGG-16에서 느슨하게 영감을 얻었습니다. 더 구체적으로 내 이미지는 128엑스128엑스 크기로 조정 된 다음 실행합니다.

Convolution 1 128x128x32 (kernel size is 3, strides is 1)
Convolution 2 128x128x32 (kernel size is 3, strides is 1)
Max pool    1 64x64x32   (kernel size is 2, strides is 2)
Convolution 3 64x64x64   (kernel size is 3, strides is 1)
Convolution 4 64x64x64   (kernel size is 3, strides is 1)
Max pool    2 32x32x64   (kernel size is 2, strides is 2)
Convolution 5 16x16x128  (kernel size is 3, strides is 1)
Convolution 6 16x16x128  (kernel size is 3, strides is 1)
Max pool    3 8x8x128    (kernel size is 2, strides is 2)
Convolution 7 8x8x256    (kernel size is 3, strides is 1)
Max pool    4 4x4x256    (kernel size is 2, strides is 2)
Convolution 8 4x4x512    (kernel size is 3, strides is 1)
Fully connected layer 1024 (dropout 0.5)
Fully connected layer 1024 (dropout 0.5)

마지막 레이어를 제외한 모든 레이어는 활성화 기능으로 relus를 갖습니다.

나는 여러 가지 컨벌루션 조합을 시도했습니다 (더 간단한 컨볼 루션으로 시작했습니다).

또한 이미지를 미러링하여 데이터 세트를 보강하여 총 50000 개의 이미지를 갖습니다.

또한 최소 최대 정규화를 사용하여 이미지를 정규화하고 있습니다. 여기서 X는 이미지입니다.

엑스=엑스0/2550

코드는 tensorflow로 작성되며 배치 크기는 128입니다.

훈련 데이터의 미니 배치는 결과적으로 과적 합하고 100 %의 정확도를 가지지 만 검증 데이터는 약 84-85 %에서 학습을 중단하는 것으로 보입니다.

또한 드롭 아웃 비율을 높이거나 낮추려고했습니다.

사용중인 최적화 프로그램은 학습 속도가 0.0001 인 AdamOptimizer입니다.

현재 지난 3 주 동안이 문제를 해결해 왔으며 85 %가 내 앞에서 장벽을 설정 한 것으로 보입니다.

기록적으로, 전학 학습을 사용하여 훨씬 더 높은 결과를 얻을 수 있다는 것을 알고 있지만이 네트워크를 자체 학습 경험으로 구축하는 데 흥미가 있습니다.

최신 정보:

다른 배치 크기로 SAME 네트워크를 실행하고 있습니다.이 경우 훨씬 작은 배치 크기 (128 대신 16)를 사용하고 있습니다 (85 % 대신 87.5 % 정확도). 즉, 네트워크는 어쨌든 과적 합하게됩니다. 여전히 50 %의 드롭 아웃이 어떻게 도움이되지 않는지 이해가되지 않습니다. 분명히 뭔가 잘못하고 있습니다. 어떤 아이디어?

업데이트 2 :

작은 크기 (128 대신 16)로 문제가 배치 크기와 관련이있는 것처럼 보입니다. 현재 테스트 세트에서 92.8 %의 정확도를 달성하고 있습니다. 배치 크기가 작을수록 네트워크가 여전히 적합합니다 (미니 배치가 끝납니다) 그러나 100 %의 정확도로 손실 (오류)이 계속 감소하고 일반적으로 더 안정적입니다. 단점은 실행 시간이 훨씬 느리지 만 기다릴만한 가치가 있습니다.


2
초과 피팅 평가에 대한 자세한 정보를 제공 할 수 있습니까? 예를 들어, 교육 및 검증 결과와의 차이와 함께 검증 정확도 가 어느 시점에서 저하 됩니까? 손실 기능은 어떻습니까?
닐 슬레이터

좋은 질문입니다. 따라서 과적 합을 통해 열차의 미니 배치가 100 %의 정확도와 0.08의 손실을 달성하는 반면 유효성 검사는 0.35 이하로 떨어지지 않고 정확도는 88 %로 유지됩니다. 유효성 검사에 따르면 그것은 (적어도 너무 많지 않은) 하락하지 않는 것처럼 보이며 평평한 것처럼 보이지만 미니 배치가 어떻게 그렇게 낮은 손실을 달성합니까?
후안 안토니오 고메즈 모리 아노

나는 당신에게 답을 알지 못하지만,이 행동-기차와 유효성 검사 사이의 큰 차이, 그러나 여전히 OK-ish 안정된 유효성 검사는 몇 번 전에 본 것입니다. 때로는 테스트 결과가 수용 가능하기 때문에 오버 피팅이라고 부르는 것이 거의 주저합니다.
Neil Slater '

"아직도 50 %의 드롭 아웃이 어떻게 도움이되지 않는지 이해할 수 없습니다."나는 사람들이 훨씬 높은 드롭 아웃 값을 사용하는 것을 보았습니다.
Ricardo Cruz

답변:


14

자, 많은 실험을 거친 후 결과 / 통찰력을 얻었습니다.

첫째, 훈련 세트의 모든 배치가 동일하고 작은 배치 는 네트워크 의 전반적인 성능을 향상시키기 위해 많은 도움이 되며, 부정적인 측면으로 훈련 과정은 훨씬 느립니다.

둘째, 데이터는 중요하지만 여기서 새로운 것은 없지만이 문제와 싸우는 동안 배운 것처럼 더 많은 데이터는 항상 약간 도움이되는 것처럼 보입니다.

셋째, 드롭 아웃은 많은 데이터와 반복이 많은 대규모 네트워크에서 유용합니다. 내 네트워크에서는 완전히 연결된 최종 레이어에만 드롭 아웃을 적용했으며 컨볼 루션 레이어는 드롭 아웃이 적용되지 않았습니다.

네 번째 요점 (그리고 이것은 내가 계속 배우고있는 것입니다) : 신경망 단어는 좋은 GPU에서도 (많은 비싼 NVIDIA 카드를 사용하는 floydhub 에서이 네트워크를 훈련했습니다) 훈련하는 데 많은 시간이 걸리므로 인내심이 핵심 입니다.

최종 결론 : 배치 크기는 배치 크기가 클 때 로컬 최소값에 도달하는 것이 더 쉽다고 생각하는 것보다 중요합니다.

내가 작성한 코드는 파이썬 노트북으로 사용할 수 있습니다.

https://github.com/moriano/loco-learning/blob/master/cats-vs-dogs/cats-vs-dogs.ipynb


결과를 게시 해 주셔서 감사합니다. 빠른 질문 : 비슷한 문제에 직면하고 있으며 게시 한 노트에서이 문제를 확인했습니다 NOTE USE EITHER mean centering or min-max, NOT BOTH. 현재 input_fn(Tensorflow Estimator API)에서 입력 이미지를 255로 나눕니다 . 그런 다음 모델 내부에서 배치 표준을 통해 해당 입력을 실행합니다. 여전히 정규화 중 하나만 수행해야합니까? 참조 github.com/formigone/tf-imagenet/blob/master/models/...
로드리고 - 실 베이라

필자는 255로 나누는 것이 각 이미지에 대해 한 번만 수행된다는 것을 이해하고 그 이유는 수치 안정성을 제공하기 때문에 0과 1 사이의 모든 값을 유지하는 것입니다.
후안 안토니오 고메즈 모리 아노

물론입니다. 그러나 [0, 1] 범위의 값을 일괄 정규화하는 것이 합리적이라고 생각하십니까?
rodrigo-silveira

즉, 나는 그것이있다, 모르는 동안 내가 사용했기 때문에 배치 정상화 :
후안 안토니오 고메즈 Moriano

3

Neil Slater가 제안한대로 유효성 검사 정확도의 학습 그림을 분석하는 것이 좋습니다. 그런 다음 유효성 검사 정확도가 떨어지면 네트워크 크기를 줄이려고 시도하는 경우 (너무 깊게 보임) 각 레이어 뒤에 CONV 레이어 및 BatchNormalization에 드롭 아웃을 추가하십시오. 과적 합을 제거하고 테스트 정확도를 높일 수 있습니다.


조언을 주셔서 감사합니다, 시도해 볼 것입니다. 그러나 CONV 레이어는 드롭 아웃을 필요로하지 않는다는 인상을 받았습니다. 내가 읽은 대부분의 논문에서 드롭 아웃은 항상 convolutins가 아닌 완전히 연결된 레이어에 적용되는 것으로 보입니다.
후안 안토니오 고메즈 Moriano

3

문제에 대한 몇 가지 가능한 해결책이 있습니다.

  1. 이전 레이어 (콘볼 루션 레이어)에서도 드롭 아웃을 사용하십시오.

  2. 당신의 네트워크는 그런 "쉬운"작업을 위해 다소 큰 것처럼 보입니다. 그것을 줄이십시오. 큰 아키텍처는 훨씬 더 큰 데이터 세트에 대해서도 교육됩니다.

"큰"아키텍처를 유지하려면 다음을 시도하십시오.

  1. 실제로 훈련 데이터를 늘리기위한 이미지 확대

  2. 대적 훈련을 시도하십시오. 때로는 도움이됩니다.


"귀하의 네트워크는"쉬운 "작업을 수행하기에는 상당히 큰 것 같습니다.이를 줄이십시오. 큰 아키텍처는 훨씬 더 큰 데이터 세트에 대해서도 교육을받습니다." 더 많은 컨볼 루션을 추가함에 따라 정확성이 증가했습니다 (처음에는 두 개의 컨볼 루션으로 68 %를 달성했습니다). 또한 이미 데이터 세트를 보강하고 있으며 50000 이미지로 작동합니다.
후안 안토니오 고메즈 모리 아노

2

아직 언급되지 않았으며 미래에 고려할 수있는 한 가지 : 여전히 완전히 연결된 레이어에서 드롭 아웃을 늘릴 수 있습니다.

탈락율이 90 % 인 논문을 한 번 읽었습니다. 많은 노드가 있었지만 (올바로 리콜하면 2048), 노드 수가 적은 레이어에서 직접 시도해 보았으며 어떤 경우에는 매우 도움이되었습니다.

나는 그것이 어떤 종이인지 찾아 보았다. 방금 기억 한 논문을 기억할 수는 없지만 90 % 드롭 아웃 률로 성공한 논문도 발견했습니다.

Karpathy, A., Toderici, G., Shetty, S., Leung, T., Sukthankar, R., & Fei-Fei, L. (2014). 컨볼 루션 뉴럴 네트워크를 이용한 대규모 비디오 분류. 컴퓨터 비전 및 패턴 인식에 관한 IEEE 회의 절차 (pp. 1725-1732).

Simonyan, K., & Zisserman, A. (2014). 비디오에서 동작 인식을위한 2 스트림 컨볼 루션 네트워크. 신경 정보 처리 시스템의 발전 (pp. 568-576).

Varol, G., Laptev, I., & Schmid, C. (2017). 행동 인식을위한 장기적인 시간적 컨볼 루션. 패턴 분석 및 머신 인텔리전스에 대한 IEEE 트랜잭션.


0

나도이 문제가 있었다. 몇 시간 동안 그것을 먹은 후 우연히 시스템과 짜 넣기에 데이터를 공급하기 전에 데이터를 섞기로 결정하여 작동하기 시작했습니다. 트릭을 한 것은 셔플 링 이었다는 것을 알아내는 데 약간의 시간이 걸렸습니다! 이것이 좌절에서 누군가를 구하기를 바랍니다!

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