인공 신경망의 뉴런 수 및 계층 수 추정
레이어 수와 레이어 당 뉴런 수를 계산하는 방법을 찾고 있습니다. 입력으로서 저는 입력 벡터의 크기, 출력 벡터의 크기 및 훈련 세트의 크기 만 가지고 있습니다.
일반적으로 최상의 네트는 다른 네트 토폴로지를 시도하고 오류가 가장 적은 것을 선택하여 결정됩니다. 불행히도 그렇게 할 수 없습니다.
이것은 정말 어려운 문제입니다.
네트워크의 내부 구조가 많을수록 네트워크는 복잡한 솔루션을 더 잘 표현할 수 있습니다. 반면에 너무 많은 내부 구조는 느리거나 훈련이 분산되거나 과적 합으로 이어질 수 있습니다. 이로 인해 네트워크가 새로운 데이터로 잘 일반화되지 않을 수 있습니다.
사람들은 전통적으로이 문제에 여러 가지 방법으로 접근했습니다.
다른 구성을 시도하고 무엇이 가장 잘 작동하는지 확인하십시오. 훈련 세트를 훈련 용과 평가 용으로 두 부분으로 나눈 다음 다른 접근 방식을 훈련하고 평가할 수 있습니다. 불행히도 귀하의 경우이 실험적 접근 방식을 사용할 수없는 것처럼 들립니다.
경험 법칙을 사용하십시오. 많은 사람들이 무엇이 가장 잘 작동하는지에 대해 많은 추측을했습니다. 은닉층의 뉴런 수와 관련하여 사람들은 (예를 들어) (a) 입력 및 출력 레이어 크기 사이에 있어야하고, (b) (입력 + 출력) * 2/3에 가까운 값으로 설정해야한다고 추측했습니다. (c) 입력 레이어 크기의 두 배보다 크지 않습니다.
엄지 손가락의 규칙에 문제가 있다는 것입니다 항상 계정에 정보의 중요한 조각을하지 않는 , 테스트 세트는 어떤 훈련의 크기와 문제가 얼마나 "어려운"와 같은 등, 따라서, 이러한 규칙 자주 사용됩니다 "무엇이 가장 잘 작동하는지 살펴 보자"접근 방식의 대략적인 출발점으로 사용됩니다.네트워크 구성을 동적으로 조정하는 알고리즘을 사용하십시오. Cascade Correlation 과 같은 알고리즘 은 최소 네트워크로 시작한 다음 훈련 중에 숨겨진 노드를 추가합니다. 이렇게하면 실험 설정이 약간 더 간단 해지고 (이론상) 성능이 향상 될 수 있습니다 (실수로 숨겨진 노드를 부적절하게 사용하지 않기 때문입니다).
이 주제에 대한 많은 연구가 있습니다. 그래서 정말로 관심이 있다면 읽을 것이 많습니다. 특히이 요약에 대한 인용 을 확인하십시오 .
Lawrence, S., Giles, CL 및 Tsoi, AC (1996), "어떤 크기의 신경망이 최적의 일반화를 제공합니까? 역 전파의 수렴 속성" . 기술 보고서 UMIACS-TR-96-22 및 CS-TR-3617, University of Maryland, College Park, Advanced Computer Studies 연구소.
Elisseeff, A. 및 Paugam-Moisy, H. (1997), "정확한 학습을위한 다층 네트워크의 크기 : 분석적 접근" . Advances in Neural Information Processing Systems 9, Cambridge, MA : The MIT Press, pp.162-168.
실제로 이것은 어렵지 않습니다 (수십 개의 MLP를 코딩하고 훈련 한 것을 기반으로 함).
교과서 적 의미에서 아키텍처를 "올바르게"얻는 것은 어렵습니다. 즉, 아키텍처의 추가 최적화로 성능 (해상도)을 개선 할 수 없도록 네트워크 아키텍처를 조정하는 것은 어렵습니다. 그러나 드문 경우에만 그 정도의 최적화가 필요합니다.
실제로 사양에 필요한 신경망의 예측 정확도를 충족하거나 초과하기 위해 네트워크 아키텍처에 많은 시간을 할애 할 필요가 거의 없습니다. 이것이 사실 인 세 가지 이유 :
네트워크 아키텍처를 지정하는 데 필요한 대부분의 매개 변수 는 데이터 모델 (입력 벡터의 기능 수, 원하는 응답 변수가 숫자인지 범주인지 여부, 후자의 경우 고유 한 클래스 레이블 수)을 결정하면 수정됩니다. 당신은 선택했습니다);
실제로 조정할 수있는 나머지 아키텍처 매개 변수는 거의 항상 (내 경험상 100 %) 고정 아키텍처 매개 변수에 의해 매우 제한 됩니다. 즉, 이러한 매개 변수의 값은 최대 및 최소 값에 의해 엄격하게 제한됩니다. 과
훈련을 시작하기 전에 최적의 아키텍처를 결정할 필요가 없습니다. 실제로 신경망 코드가 훈련 중에 네트워크 아키텍처를 프로그래밍 방식으로 조정하기 위해 작은 모듈을 포함하는 것은 매우 일반적입니다 (가중치 값이 0에 접근하는 노드를 제거하여 일반적으로 호출 됨). " 가지 치기 .")
위의 표에 따르면 신경망의 아키텍처는 6 개의 매개 변수 (내부 그리드의 6 개 셀)로 완전히 지정됩니다 . 그 중 2 개 (입력 및 출력 레이어의 레이어 유형 수)는 항상 1 개이고 1 개입니다. 신경망에는 단일 입력 레이어와 단일 출력 레이어가 있습니다. NN에는 적어도 하나의 입력 레이어와 하나의 출력 레이어가 있어야합니다. 둘째, 두 계층 각각을 구성하는 노드의 수는 입력 벡터의 크기에 따라 입력 계층이 고정되어 있습니다. 즉, 입력 계층의 노드 수가 입력 벡터의 길이와 같습니다 (실제로는 하나 이상의 뉴런이 거의 항상 바이어스 노드 로 입력 계층에 추가됩니다 .
마찬가지로 출력 계층 크기는 응답 변수 (숫자 응답 변수에 대한 단일 노드)에 의해 고정되며 (softmax가 사용된다고 가정하고 응답 변수가 클래스 레이블 인 경우 출력 계층의 노드 수는 단순히 고유 한 노드의 수와 같습니다. 클래스 레이블).
이는 은닉 레이어의 수와 각 레이어를 구성하는 노드의 수라는 재량권이있는 두 개의 매개 변수 만 남깁니다 .
숨겨진 레이어의 수
데이터가 선형 적으로 분리 가능한 경우 (NN 코딩을 시작할 때 자주 알 수 있음) 히든 레이어가 전혀 필요하지 않습니다. (그게 사실이라면이 문제에 NN을 사용하지 않을 것입니다. 더 간단한 선형 분류기를 선택하십시오.) 이들 중 첫 번째 (숨겨진 레이어의 수)는 거의 항상 하나입니다. 이 가정 뒤에는 많은 경험적 가중치가 있습니다. 실제로 단일 은닉층으로 해결할 수없는 문제는 또 다른 은닉층을 추가하여 해결 될 수 있습니다. 마찬가지로, 추가 히든 레이어를 추가하는 것과 성능 차이가 있다는 합의가 있습니다. 두 번째 (또는 세 번째 등) 히든 레이어로 성능이 향상되는 상황은 매우 작습니다. 대부분의 문제에는 하나의 숨겨진 레이어로 충분합니다.
귀하의 질문에서 어떤 이유로 든 시행 착오로 최적의 네트워크 아키텍처를 찾을 수 없다고 언급했습니다. 시행 착오없이 NN 구성을 조정하는 또 다른 방법은 ' 정리'. 이 기술의 요지는 네트워크에서 제거 될 경우 네트워크 성능 (즉, 데이터 해상도)에 눈에 띄게 영향을 미치지 않는 노드를 식별하여 훈련 중에 네트워크에서 노드를 제거하는 것입니다. (공식적인 가지 치기 기술을 사용하지 않더라도 훈련 후 가중치 행렬을 보면 어떤 노드가 중요하지 않은지 대략적인 아이디어를 얻을 수 있습니다 .0에 매우 가까운 가중치를 찾으십시오.이 가중치의 양쪽 끝에있는 노드입니다. 정리 중에 제거되는 경우가 많습니다.) 분명히 훈련 중에 정리 알고리즘을 사용하는 경우 초과 노드 (예 : '정리 가능')가있을 가능성이 더 높은 네트워크 구성으로 시작합니다. 즉, 네트워크 아키텍처를 결정할 때 가지 치기 단계를 추가하면 더 많은 뉴런쪽에 오류가 발생합니다.
달리 말하면 훈련 중에 네트워크에 가지 치기 알고리즘을 적용하면 사전 이론이 제공 할 가능성이있는 것보다 최적화 된 네트워크 구성에 훨씬 더 근접 할 수 있습니다.
히든 레이어를 구성하는 노드의 수
하지만 히든 레이어를 구성하는 노드의 수는 어떻습니까? 허용되는이 값은 어느 정도 제약이 없습니다. 즉, 입력 레이어의 크기보다 작거나 클 수 있습니다. 그 외에도 NN의 히든 레이어 구성 문제에 대한 해설이 많이 있습니다 (해설에 대한 훌륭한 요약은 유명한 NN FAQ 참조 ). 경험적으로 파생 된 많은 규칙이 있지만이 중 가장 일반적으로 의존하는 것은 히든 레이어의 크기가 입력 레이어와 출력 레이어 사이에 있다는 것 입니다. Jeff Heaton, " Introduction to Neural Networks in Java"는 방금 링크 한 페이지에 언급 된 몇 가지를 더 제공합니다. 마찬가지로 응용 프로그램 지향 신경망 문헌을 스캔하면 숨겨진 계층 크기가 일반적으로 입력 및 출력 계층 크기 사이에 있음을 거의 확실하게 알 수 있습니다. 그러나 사이는 중간에 의미하지 않는다, 사실, 그것은 일반적으로 더 가까이 입력 벡터의 크기에 숨겨진 레이어의 크기를 설정하는 이유는 숨겨진 레이어가 너무 작은 경우, 네트워크 성사 수렴해야 할 수도 있다는 것입니다.. 초기 구성의 경우 더 큰 크기로 오류가 발생합니다. 더 큰 히든 레이어는 더 작은 히든 레이어에 비해 네트워크에 더 많은 용량을 제공하여 수렴하는 데 도움이됩니다. 실제로이 정당성은 다음 보다 큰 히든 레이어 크기를 권장하는 데 자주 사용됩니다. (더 많은 노드) 입력 계층-즉, 빠른 수렴을 장려하는 초기 아키텍처로 시작하여 '과잉'노드를 잘라낼 수 있습니다 (매우 낮은 가중치 값으로 숨겨진 계층의 노드를 식별하고이를 제거 할 수 있습니다.) 리팩터링 된 네트워크).
나는 단 하나의 노드 만있는 숨겨진 레이어가 하나 뿐인 상용 소프트웨어에 MLP를 사용했습니다. 입력 노드와 출력 노드가 고정되어 있기 때문에 숨겨진 레이어의 수를 변경하고 일반화를 수행하면됩니다. 히든 레이어 수를 변경하여 하나의 히든 레이어와 하나의 노드로 달성 한 것에서 큰 차이를 얻지 못했습니다. 노드가 하나 인 숨겨진 레이어 하나를 사용했습니다. 그것은 꽤 잘 작동했고 또한 계산 감소는 내 소프트웨어 전제에서 매우 유혹적이었습니다.
'Programing' 카테고리의 다른 글
equals (null) 대신 NullPointerException이 발생하면 나쁜 생각입니까? (0) | 2020.10.19 |
---|---|
내장 된 Visual Studio 디버거 서버에서 Web.debug.config를 어떻게 사용할 수 있습니까? (0) | 2020.10.19 |
시작시 예외 코드 : 0xE0434352로 충돌하는 .NET Windows 응용 프로그램을 수정하려면 어떻게해야합니까? (0) | 2020.10.19 |
Brew 설치 사용시 SHA1 오류 (0) | 2020.10.19 |
IIS8 Win8 및 runAllManagedModulesForAllRequests =“true” (0) | 2020.10.19 |