신경망 디버깅


10

scipy.optimize.minimize (Conjugate gradient) 최적화 기능을 사용하여 파이썬에서 인공 신경망을 만들었습니다.

그라디언트 확인을 구현하고 모든 것을 다시 확인했으며 올바르게 작동하는지 확신합니다.

나는 그것을 몇 번 실행했고 '최적화가 성공적으로 종료되었습니다'에 도달했지만 숨겨진 레이어 수를 늘리면 성공적으로 종료 된 후 가설 비용이 증가합니다 (다른 모든 항목은 동일하게 유지됨).

직관적으로 데이터를 더 잘 맞출 수있는 더 복잡한 가설을 생성 할 수 있기 때문에 숨겨진 레이어 수를 늘릴 때 비용이 감소하는 것처럼 느껴지지만, 그렇지 않은 것 같습니다.

여기서 무슨 일이 일어나고 있는지, 신경망을 잘못 구현했는지 이해하고 싶습니까?

답변:


9

신경망으로 잘못하는 많은 방법이 있으므로 디버깅하기가 어렵습니다. 또한 직관을 해결하기 위해 숨겨진 계층이 추가 될 때마다 학습이 훨씬 어려워집니다. 그렇게 말하면 다음과 같은 가능성이 있습니다.

  1. 체중 감량을 추가했습니다. 더 많은 레이어를 추가하면 가중치가 추가되어 정규화 비용이 증가합니다.
  2. 숨겨진 단일 레이어가있는 모델이면 충분합니다. 숨겨진 레이어를 더 추가하면 네트워크에서 학습하기가 더 어려워집니다 (최적화 최적화 문제).
  3. 최적화 방법은 큰 일을하지 않습니다 (나는 scipy.optimize보다 climin을 선호합니다).
  4. 시그 모이 드 / 탄 활성화 기능을 사용하고 있습니다. S 자형 함수는 사라지는 그래디언트 문제를 일으켜 더 많은 레이어로 학습하기가 어렵습니다. ReLu 기능을 사용해보십시오.

신경망 훈련에는 많은 연습, 행운 및 인내가 필요합니다. 행운을 빕니다.


1
좋은 대답입니다. 그러나 2, 3, 4는 복잡한 방식으로 상호 작용할 수 있습니다. 디버깅은 ANN의 활성화 값, ANN의 무게의 크기를 확인하고 샘플 내 및 샘플 외 오류 및 옵티마이 저의 수렴 등을
주시

3

표준 신경망의 숨겨진 계층 수를 늘리는 것이 실제로 대부분의 경우 결과를 향상 시키지는 않습니다. 숨겨진 레이어 의 크기 를 변경하면 됩니다.

이 사실 (숨겨진 층의 수가 거의 없음)은 실제로 역사적으로 주목을 받았으며 딥 러닝 분야의 동기입니다. 딥 러닝은 예를 들어 다른 레이어를 훈련 할 때 기능의 하위 집합을 격리함으로써 다층 신경망을 훈련시키는 영리한 방법입니다.

YouTube 에서이 주제에 대한 좋은 소개 동영상


2
딥 러닝은 숨겨진 레이어 의 를 늘리는 것 입니다. 그렇지 않으면 뚱뚱한 학습이라고합니다 :)
Emre

@Emre는 분명히 그런 의미였습니다. 문장 부호를 저주하십시오!
eric chiang
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.