자동 인코더는 의미있는 기능을 배울 수 없습니다


24

이 두 가지와 같은 50,000 개의 이미지가 있습니다.

데이터 예 데이터 예 2

그들은 데이터 그래프를 묘사합니다. 이 이미지에서 기능을 추출하고 싶어서 Theano (deeplearning.net)에서 제공하는 자동 인코더 코드를 사용했습니다.

문제는 이러한 자동 인코더가 기능을 배우지 않는 것입니다. RBM을 시도했지만 동일합니다.

MNIST 데이터 세트는 훌륭한 기능을 제공하지만 내 데이터가 전혀 생성되지 않는 것 같습니다. 아래 예제를 동봉합니다.

MNIST에서 생성 된 필터 :

니 미스트 필터

내 데이터에 대한 교육을 통해 생성 된 필터 :

내 데이터에서 필터

숨겨진 레이어 크기와 학습 에포크에 대한 많은 다른 순열을 사용했지만 결과는 항상 동일합니다.

왜 작동하지 않습니까? 자동 인코더가이 이미지에서 기능을 추출 할 수없는 이유는 무엇입니까?

편집하다:

비슷한 문제가있는 사람. 해결책은 정말 간단했고 원인은 정말 바보였습니다. RGB 인코딩에서 픽셀 값의 범위를 0-1 범위로 다시 스케일하는 것을 잊었습니다.

값의 크기를 조정하면 문제가 해결되었습니다.

답변:


15

신경망을 디버깅하려면 일반적으로 하이퍼 파라미터를 조정하고 학습 된 필터를 시각화하며 중요한 메트릭을 플로팅해야합니다. 사용중인 하이퍼 파라미터를 공유 할 수 있습니까?

  • 배치 크기는 얼마입니까?
  • 학습률은 얼마입니까?
  • 어떤 종류 의 오토 인코더를 사용하고 있습니까?
  • Denoising Autoencoder를 사용해 보셨습니까? (어떤 부패 가치를 시도 했습니까?)
  • 숨겨진 레이어는 몇 개이고 어떤 크기입니까?
  • 입력 이미지의 크기는 얼마입니까?

훈련 로그를 분석하는 것도 유용합니다. 에포크 (X 축)의 함수로서 재구성 손실 (Y 축)의 그래프를 플로팅합니다. 재건 손실이 수렴 또는 분기되고 있습니까?

다음은 인간 성별 분류를위한 오토 인코더의 예입니다. 분기는 1500 epoch 이후 중지되었으며 하이퍼 파라미터가 조정되었으며 (이 경우 학습률 감소), 분기되고 결국 수렴 된 동일한 가중치로 다시 시작되었습니다.

수렴하는 것이 있습니다 : (우리는 이것을 원합니다)

바닐라는 "제한되지 않은"것은 단순히 신원 매핑을 배우는 문제를 일으킬 수 있습니다. 이것이 커뮤니티가 Denoising, Sparse 및 Contractive 맛을 만든 이유 중 하나입니다.

여기에 작은 데이터 하위 집합을 게시 할 수 있습니까? 내 자동 엔코더 중 하나의 결과를 기꺼이 보여줄 것입니다.

참고 로, 그래프가 데이터의 벡터로 쉽게 표현 될 수있을 때 왜 그래프 이미지를 사용하는지 먼저 물어볼 수 있습니다. 즉,

[0, 13, 15, 11, 2, 9, 6, 5]

위와 같은 문제를 재구성 할 수 있다면 본질적으로 자동 엔코더 수명을 단축시키는 것입니다. 먼저 생성 분포를 배우기 전에 이미지를 보는 방법을 배울 필요가 없습니다.

후속 답변 (데이터 제공)

다음은 1000 개의 숨겨진 단위, 단일 레이어 Denoising Autoencoder의 필터입니다. 일부 필터는 무작위로 보입니다. 교육을 너무 일찍 중단하고 네트워크에서 이러한 필터를 배울 시간이 없었기 때문입니다.

내가 훈련 한 초 매개 변수는 다음과 같습니다.

batch_size = 4
epochs = 100
pretrain_learning_rate = 0.01
finetune_learning_rate = 0.01
corruption_level = 0.2

필터가 여기에 게시하기에 충분했기 때문에 58 번째 시대 이후 프리 트레이닝을 중단했습니다. 내가 당신이라면 시작하기 위해 1000x1000x1000 아키텍처로 풀 3 층 스택 디노 이징 오토 인코더를 훈련시킬 것입니다.

미세 조정 단계의 결과는 다음과 같습니다.

validation error 24.15 percent
test error 24.15 percent

처음에 보면 우연보다 더 나은 것처럼 보이지만 두 레이블 사이의 데이터 분석을 보면 정확히 같은 백분율 (75.85 % 수익성 및 24.15 % 비영리)을가집니다. 즉, 네트워크가 신호에 관계없이 단순히 "수익성있는"응답을하는 법을 배웠습니다. 나는 아마도 더 큰 그물로 이것을 오랫동안 훈련 시켜서 무슨 일이 일어나는지 볼 것입니다. 또한이 데이터는 일종의 기본 재무 데이터 세트에서 생성 된 것으로 보입니다. 위에서 설명한대로 문제를 벡터로 재구성 한 후 Recurrent Neural Networks를 살펴 보는 것이 좋습니다. RNN은 이와 같은 시계열 데이터에서 발견되는 일부 시간적 종속성을 캡처하는 데 도움이 될 수 있습니다. 이것이 도움이되기를 바랍니다.


내 배치 크기는 20입니다. 학습 속도는 0.1로 설정되어 있습니다. 나는 계약 및 노이즈 제거 자동 엔코더를 사용해 보았습니다. 하나의 숨겨진 레이어를 사용합니다. 나는 50에서 1000 개의 뉴런을 모두 시도했습니다. 이미지를 25x25로 조정하여 이미지가 mnist보다 작습니다. 가치있는 것을 위해이 아카이브에 모든 데이터를 동봉합니다. 자동 인코더 및이 데이터의 결과를 보여 주시겠습니까?
b93dh44

아카이브 : mega.co.nz/…
b93dh44

좋아, 나는 그 데이터로 네트워크를 훈련시켰다. 답변에서 편집 내용을 참조하십시오.
sabalaba

정말 흥미로운 것 같습니다. 코드를 게시 할 수 있습니까? 정말 감사하겠습니다. 네트워크에 훈련을 방해하는 코드에 버그가 있다고 생각합니다. 미세 조정 단계를 보신 적이 있습니까? 내 자동 인코더는 미세 조정없이 사전 훈련만한다고 생각합니다. 마음에 들지 않으면 솔루션을 보여 주시겠습니까?
b93dh44

내 회사이기 때문에 내 코드를 게시 할 수 없지만 Denoising Autoencoder를 만드는 예제 코드가있는이 자습서를 가리킬 수 있습니다 : deeplearning.net/tutorial/dA.html . 모든 하이퍼 파라미터 조언이 해당 코드에 적용됩니다.
sabalaba

3

의견을 말할 충분한 담당자가 없으므로 이에 대한 답변을 드리겠습니다. 그러나 나는 정확한 이유를 모른다.

  1. 왼쪽 아래 영역의 패턴은 두 번째 예제와 유사하며 오른쪽 아래 모서리의 패턴은 면밀히 검사 할 때 첫 번째 예제와 매우 유사합니다. 문제는 소스 데이터의 다양성이 얼마나됩니까? 50000 개의 이미지가 모두 동일한 패턴의 변형 인 경우,이 3 가지 의미있는 기능 맵은 자동 인코더가 모든 데이터를 설명하고 재구성하기에 충분할 수 있습니다.

  2. 둘째, 재구성 오류와 실제 재구성 된 이미지를보고 싶을 수 있습니다. 좋은 결과는 어떻습니까? 재구성 오류가 낮 으면 아래 설명 된 공명으로 인해 초과 적합이있을 수 있습니다 (또는이 세 패턴의 조합으로 관심있는 모든 데이터를 설명하기에 충분할 수 있음). 그렇지 않으면, 자동 인코더는 데이터를 재구성하는 방법을 배울 수 없으며 더 큰 자동 인코더 또는 더 나은 훈련 알고리즘이 필요합니다.


1.이 데이터에는 많은 다양성이 있다고 생각합니다. 이 50,000 개의 그래프 각각은 약간 다릅니다. 오토 인코더가 단 3 개의 필터만으로 그것들을 재구성 할 수는 없다고 생각합니다. 2. 재구성 오류를 추정하기위한 팁이 있습니까? 내가 사용하는 코드가 오류를 제공하지만 실제로 많은 정보를 제공하지 않는 숫자입니다. 재구성 오류를 입력 크기 또는 숨겨진 레이어 수와 비교해야합니까?
b93dh44
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.