회귀에 대한 신경망 훈련은 항상 평균을 예측합니다


9

이미지에서 상자의 (x, y) 위치를 예측하는 작업 인 회귀를위한 간단한 회선 신경 네트워크를 훈련하고 있습니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

네트워크의 출력에는 x와 y에 각각 하나씩 두 개의 노드가 있습니다. 나머지 네트워크는 표준 컨볼 루션 신경망입니다. 손실은 상자의 예측 위치와 실제 위치 사이의 표준 평균 제곱 오차입니다. 이 이미지 중 10000 개를 교육하고 2000 년에 유효성을 검사하고 있습니다.

내가 겪고있는 문제는 상당한 훈련 후에도 손실이 실제로 감소하지 않는다는 것입니다. 네트워크의 출력을 관찰 한 후 두 출력 노드 모두에서 네트워크가 0에 가까운 값을 출력하는 경향이 있음을 알았습니다. 따라서 상자 위치의 예측은 항상 이미지의 중심입니다. 예측에는 약간의 편차가 있지만 항상 0 정도입니다. 아래는 손실을 보여줍니다.

여기에 이미지 설명을 입력하십시오

나는이 그래프에 표시된 것보다 더 많은 시대를 위해 이것을 실행했으며 손실은 여전히 ​​감소하지 않습니다. 흥미롭게도 여기서 손실은 실제로 한 지점에서 증가합니다.

따라서 네트워크는 적절한 학습을 ​​배우기보다는 훈련 데이터의 평균을 예측하는 것 같습니다. 왜 그런지에 대한 아이디어가 있습니까? Adam을 최적화 프로그램으로 사용하고 있으며 초기 학습 속도는 0.01이며 활성화는 relus입니다.


내 코드 (Keras) 중 일부에 관심이 있다면 아래에 나와 있습니다.

# Create the model
model = Sequential()
model.add(Convolution2D(32, 5, 5, border_mode='same', subsample=(2, 2), activation='relu', input_shape=(3, image_width, image_height)))
model.add(Convolution2D(64, 5, 5, border_mode='same', subsample=(2, 2), activation='relu'))
model.add(Convolution2D(128, 5, 5, border_mode='same', subsample=(2, 2), activation='relu'))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(2, activation='linear'))


# Compile the model
adam = Adam(lr=0.01, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(loss='mean_squared_error', optimizer=adam)


# Fit the model
model.fit(images, targets, batch_size=128, nb_epoch=1000, verbose=1, callbacks=[plot_callback], validation_split=0.2, shuffle=True)

이미지가 실제 샘플의 상위 예입니까? 그게 5 개의 샘플인가요? 이미지에 일반화하는 데 도움이되는 정보가없는 것 같습니다. 즉, 흰색 사각형의 x, y 위치를 찾기 위해 신경망이 필요하지 않으며 이미지를 구문 분석하고 흰색 픽셀을 찾을 수 있습니다. 이 모델의 비전에 대해 좀 더 설명하십시오. 다음 위치를 예측할 수있는 일시적인 패턴이 있습니까?
photox

안녕하세요, 예, 이미지는 5 개의 개별 샘플입니다. 어떻게 렌더링되는지 잘 모르겠지만 5 개의 개별 정사각형 이미지 여야합니다 (도움이되도록 레이아웃을 약간 변경했습니다 ...). 예,이 작업에 신경망이 필요하지는 않지만 신경망으로 회귀를 수행하는 방법을 배우는 데 도움이되는 테스트 실험 일뿐입니다. 일반화하는 데 도움이되는 정보가 없다는 것은 무슨 의미인지 이해하지 못합니다 .... 각 훈련 쌍은 정사각형 이미지와 정사각형 (x, y) 위치의 2 차원 벡터로 구성됩니다. 감사합니다 :)
Karnivaurus

1
1) 첫 번째 conv 레이어의 입력 모양은 3 (rbg) 채널을 사용하지만 데이터는 회색조 (1 채널)입니다. 2) 많은 conv 레이어와 필터가 필요하지 않습니다. 실제로 단일 레이어라고 생각합니다. 소수의 작은 커널은 괜찮을 것입니다.
photox

이미지가 실제로 대상과 일치합니까?
user31264

1
@photox가 말했듯이 전환 레이어는 필요하지 않습니다. 이를 추가하면 옵티마이 저가 좋은 솔루션을 찾기가 더 어려워집니다. 3 개의 conv 레이어를 제거하면 "모델"이 작동하는 것 같습니다.
Pieter

답변:


8

옵티마이 저가 (하위) 최적 솔루션으로 수렴 할 수 없습니다. 왜? 문제가 너무 쉽고 모델이 너무 복잡합니다.

너무 쉬운 문제

@photox가 이미 말했듯 이이 문제는 단일 숨겨진 레이어로만 해결할 수 있습니다. 심지어 숨겨진 레이어 없이도 가능하다고 생각합니다. 이 문제는 선형 분리 가 가능하기 때문 입니다.

이것을 설명하겠습니다. 숨겨진 레이어와 선형 활성화 기능이없는 신경망을 상상해보십시오 (선형 회귀라고도 함). 정사각형의 x 위치를 계산하기 위해 각 픽셀은 x 출력에 연결됩니다. 픽셀의 첫 번째 열은 무게와 연결됩니다1/width. 두 번째 열은 무게와 연결됩니다2/width. 마지막 열 (예 : 열)까지 계속n무게와 연결된 n/width. 일부 픽셀이 0이 아니기 때문에 출력 활성화는 사각형의 x 좌표에 선형입니다. 따라서 선형 함수는 사각형의 위치를 ​​계산할 수 있습니다.

몇 가지 해결책이 있습니다.

  • 더 어려운 문제를 선택하십시오 (예 : 이미지 분류)
  • 소금과 후추 또는 백색 소음과 같은 소음 추가
  • 예를 들어 배경에 다른 색의 원이 많을 때 붉은 사각형의 위치를 ​​예측하여 문제를 더 어렵게 만듭니다.

너무 복잡한 모델

모델에는 옵티마이 저가 최적의 최적 값을 찾는 데 도움이되지 않으면 서 많은 복잡성을 추가하는 몇 개의 부품이 있습니다.

예를 들어, 컨볼 루션 레이어. 첫 번째 레이어에는 32 개의 컨볼 루션 필터가 있습니다.5×5. 이 필터가 무엇을 배우기를 기대하십니까? 이미지 분류에서이 필터는 가장자리, 모서리, 그라디언트 및 얼룩을 감지하는 방법을 배웁니다. 그러나이 경우에 적합한 필터는 거의 없습니다. 왼쪽에서 오른쪽으로 또는 그 반대로, 위에서 아래로, 그 반대로를 생각할 수 있습니다. 귀하의 경우에는 랜덤 노이즈를 추가하는 약 28 개의 필터가 있습니다. 이들 (또는 전체 레이어)을 삭제하면 옵티마이 저가 최적의 것을 쉽게 찾을 수 있습니다.

또 다른 예는 많은 추가 매개 변수가있는 Adam 최적화 프로그램입니다. Adam 옵티마이 저는 이러한 매개 변수와 잘 작동하지만 SGD기본값 을 가진 간단한 옵티 마이저로 시작하지 않는 것이 좋습니다 .

따라서 여러 최적화를 수행 할 수 있습니다.

  • LinearRegressionscikit-learn에서 사용하십시오 . 좋아, 이것은 당신이 원하는 것이 아니라 단지이 모델이 얼마나 복잡한지를 설명하고 싶습니다.
  • 전환 레이어 제거
  • 숨겨진 Dense레이어 의 크기를 줄입니다
  • 기본 SGD옵티 마이저 사용
  • 숨겨진 레이어를 사용하는 경우 sigmoid활성화를 시도해야 합니다. 숨겨진 레이어의 각 노드는 사각형이 특정 위치에 있는지 감지하는 것으로 생각할 수 있습니다.
  • 이 방법으로 문제가 해결되지 않으면 학습 속도를 조금 실험하여 너무 높거나 낮은 지 알아보십시오.

추신

나는 당신이 Adit Deshpande 의이 blogpost 를 좋아한다고 생각합니다 .


이 솔루션으로 옵티 마이저 동작이 변경되었는지 알려주십시오.
Pieter

고마워, 그것은 매우 유용합니다. 귀하의 제안을 시도하고 있습니다. 그러나 첫 번째 요점을 이해하지 못합니다. 문제가 너무 단순하면 더 복잡한 문제보다 최적화하기가 어려운 이유에 대해 혼란 스럽습니다. 주어진 네트워크에서 더 간단한 문제가 더 복잡한 문제보다 최적화하기 어려운 이유는 무엇입니까? 간단한 문제에서, 나는 매우 강력한 그라디언트와 강력한 글로벌 최적이있을 것이라고 생각했을 것입니다. 그러나 첫 번째 요점은 문제의 단순성으로 인해 최적화가 어려워지고 더 복잡한 문제가 최적화에 도움이된다고 제안하는 것입니다.
Karnivaurus

나는이 문제의 원인으로 이들 중 하나를 구입하지 않습니다. "복잡한"모델은 더 적합 할 수 있어야하므로 훈련 데이터를 맞추는 데 어려움이 없어야합니다. "쉬운"문제는 해결하기 어렵게하지 않아야합니다 ... "쉬운"은 어쨌든 상대적인 용어입니다. 아마도 그의 신경망 아키텍처가 그의 데이터에서 신호를 포착 할 수 없다고 말할 수도 있습니다. "단순하지만"근본적으로 다른 모델 일지라도 말입니다.
JacKeown

> "문제가 너무 단순하면 더 복잡한 문제보다 최적화하기가 어려운 이유에 대해 혼란스러워합니다." 복잡한 모델에는 사용하지 않는 모델링 용량이 많기 때문입니다. 이 과잉 용량은 노이즈를 발생시키고 실제 신호를 찾기 어렵게 만듭니다.
Pieter

> "이 문제의 원인으로 이들 중 하나를 구매하지 않습니다"-답변을 되돌아 보면 실용 관점에서 작성되었습니다. 복잡한 모델이 제대로 수렴되지 않으면 디버깅하는 방법 중 하나가 더 간단한 모델을 사용하는 것입니다.
Pieter

0

내 데이터 세트와 동일한 문제에 직면하고 있습니다. 필자의 경우 예측 변수는 매우 작은 분산으로 집중되어 있습니다. 예측 변수의 분산을 확인하고 분포가 어떻게 분포되어 있는지 확인해야합니다.예측하려는 변수의 분포

그러나 출력 변수의 일부 변환을 수행하여 스케일을 수정하거나 변경할 수 있습니다. 이로 인해보다 균일 한 유형 분포가 발생할 수 있습니다. 예를 들어, 이미지 인식 작업에서 히스토그램 이퀄라이제이션 또는 대비 향상은 때때로 올바른 의사 결정을 위해 작동합니다.


-1

일반적인 과적 합 문제처럼 보입니다. 데이터가 더 나은 결과를 얻기에 충분한 정보를 제공하지 않습니다. 열차 데이터 의 모든 뉘앙스를 기억하기 위해 훈련 할 복잡한 NN을 선택합니다 . 손실은 그래프에서와 같이 절대 0이 될 수 없습니다. BTW 유효성 검사에 버그가 있거나 유효성 검사 세트가 유효성 검사에 적합하지 않은 것 같습니다. 유효성 검사 손실도 0이되기 때문입니다.


5
문제는 네트워크가 거의 항상 0을 출력한다고 말합니다. 이는 과적 합이 아닌 심각한 과적 합의 경우입니다 . 또한 학습 곡선에서 훈련과 검증 오류 사이에 차이가 없어 과적 합이 문제가 아님을 나타냅니다 (오류가 0이 아니고 스케일이 로그 임)
user20160

-1

나는 실제로 매우 비슷한 문제를 해결하고있었습니다. 기본적으로, 나는 흰색 배경에 많은 점을 가지고 있었고 배경에 처음 놓인 점을 인식하기 위해 NN을 훈련하고있었습니다. 내가 일한 방식은 완전히 연결된 뉴런 층을 사용하는 것입니다 (따라서 1 층 NN). 예를 들어 100x100 이미지의 경우 10,000 개의 입력 뉴런 (픽셀)이 2 개의 출력 뉴런 (좌표)에 직접 연결됩니다. PyTorch에서 픽셀 값을 텐서로 변환하면 평균을 빼고 표준 편차로 나누어 데이터를 자동으로 정규화하고있었습니다. 일반적인 머신 러닝 문제에서는 문제가 없지만 이미지의 컬러 픽셀 수가 차이가있을 수있는 이미지 (예 : 흰색 픽셀이 몇 개만있는 이미지)에는 적합하지 않습니다. 그래서, 모든 픽셀 강도 값을 255로 나눠서 수동으로 정규화했습니다 (따라서 모든 강도 값을 정규 분포에 맞추는 일반적인 정규화 기술없이 현재 범위는 0-1 범위입니다). 그런 다음 훈련 세트에서 픽셀의 평균 좌표를 예측했기 때문에 여전히 문제가있었습니다. 그래서 내 솔루션은 학습 속도를 매우 높게 설정하여 거의 모든 ML 강사 및 자습서와 비교했습니다. 대부분의 사람들이 말한 것처럼 1e-3, 1e-4, 1e-5를 사용하는 대신 확률 구배 강하와 함께 1 또는 0.1의 학습 속도를 사용하고있었습니다. 이로 인해 문제가 해결되었고 네트워크에서 마침내 훈련 세트를 외우는 방법을 배웠습니다. 테스트 세트를 너무 잘 일반화하지는 않지만 적어도 다소 효과가 있습니다. 다른 모든 사람들이 귀하의 질문에 제안한 것보다 더 나은 솔루션입니다. 이제 모든 강도 값을 정규 분포에 맞추려고 시도하는 일반적인 정규화 기술없이 0-1 범위에있게됩니다. 그런 다음 훈련 세트에서 픽셀의 평균 좌표를 예측했기 때문에 여전히 문제가있었습니다. 그래서 내 솔루션은 학습 속도를 매우 높게 설정하여 거의 모든 ML 강사 및 자습서와 비교했습니다. 대부분의 사람들이 말한 것처럼 1e-3, 1e-4, 1e-5를 사용하는 대신 확률 구배 강하와 함께 1 또는 0.1의 학습 속도를 사용하고있었습니다. 이로 인해 문제가 해결되었고 네트워크에서 마침내 훈련 세트를 외우는 방법을 배웠습니다. 테스트 세트를 너무 잘 일반화하지는 않지만 적어도 다소 효과가 있습니다. 다른 모든 사람들이 귀하의 질문에 제안한 것보다 더 나은 솔루션입니다. 이제 모든 강도 값을 정규 분포에 맞추려고 시도하는 일반적인 정규화 기술없이 0-1 범위에있게됩니다. 그런 다음 훈련 세트에서 픽셀의 평균 좌표를 예측했기 때문에 여전히 문제가있었습니다. 그래서 내 솔루션은 학습 속도를 매우 높게 설정하여 거의 모든 ML 강사 및 자습서와 비교했습니다. 대부분의 사람들이 말한 것처럼 1e-3, 1e-4, 1e-5를 사용하는 대신 확률 구배 강하와 함께 1 또는 0.1의 학습 속도를 사용하고있었습니다. 이로 인해 문제가 해결되었고 네트워크에서 마침내 훈련 세트를 외우는 방법을 배웠습니다. 테스트 세트를 너무 잘 일반화하지는 않지만 적어도 다소 효과가 있습니다. 다른 모든 사람들이 귀하의 질문에 제안한 것보다 더 나은 솔루션입니다.

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