다중 레이어 퍼셉트론 (MLP) 아키텍처 : 은닉층 수와 은닉층 크기 선택 기준?
고유 벡터가 10 개인 경우 입력 계층에 10 개의 신경 노드를 가질 수 있습니다 .5 개의 출력 클래스가 있으면 출력 계층에 5 개의 노드를 가질 수 있습니다. 그러나 MLP에서 숨겨진 계층의 수와 신경의 수를 선택하는 기준은 무엇입니까? 1 개의 은닉층의 노드?
숨겨진 레이어는 몇 개 입니까?
와 모델 제로 숨겨진 레이어를 해결할 선형 분리 데이터를. 따라서 데이터가 선형 적으로 분리되지 않는다는 것을 이미 알고 있지 않다면이를 검증해도 문제가되지 않습니다. 작업에 필요한 것보다 더 복잡한 모델을 사용하는 이유는 무엇입니까? 선형 적으로 분리 할 수있는 경우 더 간단한 기술이 작동하지만 Perceptron도 작업을 수행합니다.
데이터가 비선형 기술에 의한 분리가 필요하다고 가정하고 항상 하나의 숨겨진 레이어로 시작하십시오 . 거의 확실하게 당신이 필요로하는 전부입니다. MLP를 사용하여 데이터를 분리 할 수있는 경우 해당 MLP에는 아마도 단일 히든 레이어 만 필요합니다. 이것에 대한 이론적 정당성이 있지만 내 이유는 순전히 경험적입니다. 많은 어려운 분류 / 회귀 문제가 단일 은닉 계층 MLP를 사용하여 해결되지만 데이터를 성공적으로 모델링하는 데 사용 된 다중 은닉 계층 MLP를 만난 적이 없습니다. -ML 게시판, ML 교과서, 학술 논문 등 어디에 있든 그들은 확실히 존재하지만 그 사용을 정당화하는 상황은 경험적으로 매우 드뭅니다.
히든 레이어에는 몇 개의 노드가 있습니까?
MLP 학술 문헌에서. 내 자신의 경험 등 여러 가지 경험 법칙 ( RoT ) 을 모아서 자주 의존하며 신뢰할 수있는 가이드 (예 : 가이드가 정확하고 정확하지 않은 경우에도 일반적으로 다음에 무엇을해야할지 분명했습니다) :
수렴 개선에 기반한 RoT :
모델 구축을 시작할 때 은닉층에있는 더 많은 노드 쪽에 오류 가 있습니다.
왜? 첫째, 히든 레이어에있는 몇 개의 추가 노드는 아무런 해를 끼치 지 않을 가능성이 높으며 MLP는 여전히 수렴합니다. 반면에 히든 레이어의 노드 수가 너무 적 으면 수렴을 방해 할 수 있습니다. 이런 식으로 생각하면 추가 노드는 반복 (훈련 또는 모델 구축) 중에 네트워크에 신호를 저장 / 해제하기위한 추가 가중치와 같은 초과 용량을 제공합니다. 둘째, 히든 레이어의 추가 노드로 시작하면 나중에 (반복 진행 중에) 쉽게 정리할 수 있습니다. 이것은 일반적이며 사용자를 지원하는 진단 기술이 있습니다 (예 : 중량 매트릭스의 시각적 묘사 인 Hinton Diagram, 중량 값의 '열지도').
입력 레이어의 크기와 출력 레이어의 크기에 따른 RoT :
경험상이 [숨겨진] 레이어의 크기는 입력 레이어 크기 ...와 출력 레이어 크기 사이에있는 것입니다 ....
숨겨진 노드의 수를 계산하기 위해 다음의 일반 규칙을 사용합니다. (입력 + 출력 수) x 2/3
주요 구성 요소에 기반한 RoT :
일반적으로 입력 데이터 세트 분산의 70-90 %를 캡처하는 데 필요한 차원 [주성분]만큼 숨겨진 노드를 지정합니다 .
그러나 NN FAQ 작성자는 이러한 규칙을 "말도 안되는"(문자 그대로)이라고 부르는데, 그 이유는 훈련 인스턴스 수, 대상의 잡음 (응답 변수 값) 및 특징 공간의 복잡성을 무시하기 때문입니다.
그의 관점에서 (그리고 그가 말하는 내용을 항상 알고있는 것처럼 보였습니다) MLP에 어떤 형태의 정규화가 포함되는지 아니면 조기 중지가 포함되는지에 따라 은닉층의 뉴런 수를 선택합니다 .
히든 레이어의 뉴런 수를 최적화하는 유일한 유효한 기술 :
모델을 만드는 동안 집착 적으로 테스트하십시오. 테스트를 통해 "잘못된"네트워크 아키텍처의 서명이 드러납니다. 예를 들어, 적은 수의 노드 (테스트 결과에 따라 필요에 따라 점진적으로 증가)로 구성된 은닉 계층이있는 MLP로 시작하는 경우 훈련 및 일반화 오류는 모두 편향과 과소 적합으로 인해 높아집니다.
그런 다음 과적 합과 높은 분산으로 인해 일반화 오류가 증가하기 시작할 때까지 숨겨진 계층의 노드 수를 한 번에 하나씩 늘립니다.
실제로 저는 이렇게합니다.
입력 레이어 : 데이터 vactor의 크기 (내 모델의 기능 수) + 1 바이어스 노드의 경우, 물론 응답 변수는 포함하지 않음
출력 레이어 : 내 모델에 의해 결정되는 단독 : 회귀 (1 개의 노드) 대 분류 (소프트 맥스를 가정 한 클래스 수와 동일한 노드 수)
숨겨진 레이어 : 시작하려면 , 하나의 숨겨진 레이어입력 레이어의 크기와 동일한 수의 노드가 있습니다. "이상적인"크기는 더 큰 것보다 더 작을 가능성이 높습니다 (즉, 입력 계층의 수와 출력 계층의 수 사이의 노드 수). 다시 말하지만 이것은 단지 경험적 관찰이며 벌크 이 관찰은 내 경험입니다. 프로젝트가 필요한 추가 시간을 정당화 한 경우 적은 수의 노드로 구성된 단일 히든 레이어로 시작한 다음 (위에서 설명했듯이) 일반화를 계산하면서 한 번에 하나씩 노드를 히든 레이어에 추가합니다. 오류, 훈련 오류, 편향 및 분산. 일반화 오류가 감소하고 다시 증가하기 직전에 해당 지점의 노드 수를 선택합니다. 아래 그림을 참조하십시오.
It is very difficult to choose the number of neurons in a hidden layer, and to choose the number of hidden layers in your neural network.
Usually, for most applications, one hidden layer is enough. Also, the number of neurons in that hidden layer should be between the number of inputs (10 in your example) and the number of outputs (5 in your example).
But the best way to choose the number of neurons and hidden layers is experimentation. Train several neural networks with different numbers of hidden layers and hidden neurons, and measure the performance of those networks using cross-validation. You can stick with the number that yields the best performing network.
To automate the selection of the best number of layers and best number of neurons for each of the layers, you can use genetic optimization.
The key pieces would be:
- Chromosome: Vector that defines how many units in each hidden layer (e.g. [20,5,1,0,0] meaning 20 units in first hidden layer, 5 in second, ... , with layers 4 and 5 missing). You can set a limit on the maximum number number of layers to try, and the max number of units in each layer. You should also place restrictions of how the chromosomes are generated. E.g. [10, 0, 3, ... ] should not be generated, because any units after a missing layer (the '3,...') would be irrelevant and would waste evaluation cycles.
- Fitness Function: A function that returns the reciprocal of the lowest training error in the cross-validation set of a network defined by a given chromosome. You could also include the number of total units, or computation time if you want to find the "smallest/fastest yet most accurate network".
You can also consider:
- Pruning: Start with a large network, then reduce the layers and hidden units, while keeping track of cross-validation set performance.
- Growing: Start with a very small network, then add units and layers, and again keep track of CV set performance.
'IT박스' 카테고리의 다른 글
git 브랜치 간 특정 폴더의 차이점 (0) | 2020.08.25 |
---|---|
C # UTF-8에서 ISO-8859-1 (Latin1) H로 문자열 변환 (0) | 2020.08.25 |
asp.net webapi 2 요청 및 응답 본문을 데이터베이스에 기록해야합니다. (0) | 2020.08.25 |
SQL에서 복합 기본 키를 어떻게 정의 할 수 있습니까? (0) | 2020.08.25 |
dapper.net에서 트랜잭션을 사용하는 방법은 무엇입니까? (0) | 2020.08.25 |