깊은 신경망에서 언더 피팅과 싸우는 방법


50

인공 신경망 (NN)으로 시작했을 때 나는 주요 문제로 과적 합과 싸워야한다고 생각했다. 그러나 실제로는 NN이 20 %의 오류율 장벽을 넘어 설 수조차 없습니다. 나는 임의의 숲에서 내 점수를 이길 수 없습니다!

나는 NN이 데이터의 트렌드를 포착하기 위해해야 ​​할 일에 대해 매우 일반적인 조언을 찾고 있습니다.

NN을 구현하기 위해 Theano Stacked Auto Encoder 를 자습서의 코드 와 함께 사용 하여 MNIST 데이터 세트를 분류하는 데 훌륭한 (오류율 5 % 미만) 작동합니다. 이것은 다층 퍼셉트론이며, softmax 레이어가 맨 위에 있고 나중에 각각의 숨겨진 인코더가 자동 인코더로 사전 학습 됩니다 ( 자습서 8 장에 자세히 설명되어 있음 ). ~ 50 개의 입력 기능과 ~ 10 개의 출력 클래스가 있습니다. NN은 시그 모이 드 뉴런을 가지며 모든 데이터는 [0,1]로 정규화됩니다. 나는 많은 다른 구성을 시도했습니다 : 숨겨진 레이어와 뉴런 (100-> 100-> 100, 60-> 60-> 60, 60-> 30-> 15 등), 다른 학습 및 사전 훈련 요금 등

그리고 내가 얻을 수있는 가장 좋은 것은 유효성 검사 세트에서 20 % 오류율과 테스트 세트에서 40 % 오류율입니다.

다른 한편으로, scikit-learn에서 Random Forest를 사용하려고하면 유효성 검사 세트에서 12 %의 오류율과 테스트 세트에서 25 % (!)를 쉽게 얻습니다.

사전 훈련을받은 나의 깊은 NN이 어떻게 그렇게 나쁜 행동을 할 수 있습니까? 어떻게해야합니까?

답변:


34

딥 네트워크의 문제점은 튜닝 할 수있는 하이퍼 파라미터가 많고 솔루션 공간이 매우 작다는 것입니다. 따라서 좋은 것을 찾는 것은 엔지니어링 작업보다는 예술과 비슷합니다. 튜토리얼에서 작업 예제로 시작하고 매개 변수를 사용하여 결과가 어떻게 변경되는지 확인하십시오. 이것은 매개 변수와 결과 사이의 종속성 (최종 및 중간)에 대한 좋은 직관을 제공합니다 (공식적인 설명은 아니지만).

또한 다음 논문이 매우 유용하다는 것을 알았습니다.

둘 다 RBM을 설명하지만 일반적으로 딥 네트워크에 대한 통찰력을 제공합니다. 예를 들어, 핵심 요점 중 하나는 네트워크를 계층별로 디버깅해야한다는 것입니다. 이전 계층에서 기능을 제대로 표현하지 못하면 추가 계층에서이를 수정할 가능성이 거의 없습니다.


14

ffriend의 답변은 신경망이 어떻게 정확하게 조정하기 어려운지에 대한 더 많은 정보를 얻을 수있는 훌륭한 지침을 제공하지만, 현재 신경망의 최상위 분류 아키텍처에 사용되는 몇 가지 특정 기술을 나열하는 것이 도움이 될 수 있다고 생각했습니다. 문학.

정류 된 선형 활성화

f(z)=(1+ez)1f(z)=max(0,z)

relu 활성화에는 두 가지 큰 장점이 있습니다.

  • 그 출력에 해당하는 영 (제로에 근접하지 단지 작은 값) 인 및z0
  • 이의 도함수는 또는 경우 상수 입니다.z0z>0

입력 을 수신하는 유닛 은 본질적으로 "off"(출력은 0)이고 입력 을 수신하는 유닛 은 단일 선형으로 축소 되기 때문에 relu 유닛의 네트워크는 기본적으로 기하 급수적으로 많은 선형 네트워크의 앙상블처럼 작동 합니다 해당 입력에 대한 모델. 또한, relu 활성화를 갖는 딥 네트워크는 소실 구배 문제 를 피하는 경향이 있고 층별 프리 트레이닝없이 트레이닝 될 수 있기 때문에 상수 도함수가 중요하다 .z0z>0

이러한 주제에 대한 유용한 논문은 Glorot, Bordes 및 Bengio ( http://jmlr.csail.mit.edu/proceedings/papers/v15/glorot11a/glorot11a.pdf )의 "딥 스파 스 정류기 신경망"을 참조하십시오 .

탈락

지난 몇 년간 많은 연구 그룹이 과도 훈련을 피하기 위해 분류기 네트워크에서 "드롭 아웃"사용을 옹호 해 왔습니다. (예 : Sropstava, Hinton, Krizhevsky, Sutskever 및 Salakhutdinov의 "드롭 아웃 : 신경망의 과적 합을 방지하는 간단한 방법" 참조 ) http://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf 드롭 아웃은 훈련 중에 네트워크가 처리하는 각 입력에 대해 주어진 계층의 단위의 일정한 비율이 임의로 0으로 설정됩니다. 이렇게하면 0으로 설정되지 않은 단위가 "누락 된"단위를 "만들"도록합니다. 드롭 아웃은 분류 작업에서 신경망 모델에 매우 효과적인 정규화 기인 것 같습니다. http : // fastml 에서 이에 대한 블로그 기사를 참조하십시오 .


7
그러나 문제는 과적 합이 아니라 과적 합에 관한 것입니다.
Valentas

8

Microsoft Research 연구원의 다음 논문을 읽고 싶을 것입니다.

Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun : arxiv의 이미지 인식위한 딥 레지 듀얼 학습 .

그들은 당신과 비슷한 문제를 겪었습니다.

더 깊은 네트워크가 수렴을 시작할 수 있으면 성능 저하 문제가 발생합니다. 네트워크 깊이가 증가하면 정확도가 포화 (놀랍지 않을 수 있음) 된 다음 빠르게 저하됩니다. 예기치 않게, 이러한 분해는 과적 합에 의해 야기되는 것이 아니며, 적절한 깊이있는 모델에 더 많은 층을 추가하면 [11, 42]에보고 된 바와 같이 실험에 의해 철저히 검증 된 바와 같이 높은 훈련 오류가 발생 합니다.

이 문제를 해결하기 위해 스킵 아키텍처를 사용했습니다. 이를 통해 매우 깊은 네트워크 (1202 계층)를 교육하고 ILSVRC 2015 챌린지에서 최고의 결과를 달성했습니다.


ans 고마워요, 만약 당신이 유효성 검증 acc가 훈련 acc보다 높으면 다음에 무엇을해야합니까? val 세트의 적은 수의 데이터에 대해 발생할 수 있지만 때로는 val 세트에 의존하지 않습니다. val acc가 training acc보다 높은 다른 이유가 있습니까?
Sudip Das
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.