피드 포워드 신경망에서 계층의 수와 각 계층의 노드 수를 선택하는 표준적이고 수용 가능한 방법이 있습니까? 신경망을 자동으로 구축하는 방법에 관심이 있습니다.
피드 포워드 신경망에서 계층의 수와 각 계층의 노드 수를 선택하는 표준적이고 수용 가능한 방법이 있습니까? 신경망을 자동으로 구축하는 방법에 관심이 있습니다.
답변:
나는이 질문에 대한 답을 얻었지만, 현존하는 대답이 그 질문의 주제와 일반적으로 관련된 링크를 가리키는 것 이상으로 질문에 관여한다고 생각하지 않습니다. 특히,이 링크는 프로그래밍 방식의 네트워크 구성을위한 하나의 기술을 설명하지만 네트워크 구성을위한 " 표준 및 허용되는 방법 " 은 아닙니다 .
작은 명확한 규칙을 따르면서, 유능한 네트워크 아키텍처 (즉, 뉴런 층의 수와 유형 및 각 층을 포함하는 뉴런의 수)를 프로그래밍 방식으로 설정할 수 있습니다. 이 스키마를 따르면 이것은 유능한 아키텍처를 제공하지만 최적의 아키텍처는 아닙니다.
그러나 일단이 네트워크가 초기화되면 여러 보조 알고리즘을 사용하여 훈련 중에 구성을 반복적으로 조정할 수 있습니다. 이들 중 하나의 제품군은 특정 횟수의 훈련 에포크 후 가중치 벡터의 (작은) 값을 기반으로 노드 를 잘라내어 작동합니다. 즉, 불필요한 / 중복 노드를 제거합니다 (자세한 내용은 아래 참조).
따라서 모든 NN에는 세 가지 유형의 레이어 인 input , hidden 및 output이 있습니다.
따라서 NN 아키텍처를 생성한다는 것은 각 유형의 레이어 수와 각 레이어의 노드 수에 대한 값을 얻는 것을 의미합니다.
입력 레이어
NN은 정확히 하나만 가지고 있습니다. 제가 알고있는 예외는 없습니다.
이 레이어를 구성하는 뉴런의 수와 관련하여이 매개 변수는 훈련 데이터의 모양을 알고 나면 완전히 고유하게 결정됩니다. 구체적으로, 그 층을 구성하는 뉴런의 수는 데이터의 특징 (열)의 수와 같습니다 . 일부 NN 구성은 바이어스 용어에 하나의 추가 노드를 추가합니다.
출력 레이어
입력 레이어와 마찬가지로 모든 NN에는 정확히 하나의 출력 레이어가 있습니다. 크기 (뉴런 수)를 결정하는 것은 간단합니다. 선택한 모델 구성에 따라 완전히 결정됩니다.
NN이 머신 모드 또는 회귀 모드 에서 실행 중입니까 (통계에도 사용되는 용어를 사용하지만 다른 의미를 할당하는 ML 규칙은 매우 혼동됩니다). 기계 모드 : 클래스 레이블을 반환합니다 (예 : "Premium Account"/ "Basic Account"). 회귀 모드는 값 (예 : 가격)을 반환합니다.
NN이 회귀 변수 인 경우 출력 레이어에는 단일 노드가 있습니다.
NN이 분류 자인 경우 softmax 를 사용 하지 않는 한 단일 노드도 포함합니다.이 경우 출력 계층에 모델의 클래스 레이블 당 하나의 노드가 있습니다.
숨겨진 레이어
따라서 이러한 몇 가지 규칙은 입력 및 출력 레이어 모두에 대한 레이어 수와 크기 (뉴런 / 레이어)를 설정합니다. 숨겨진 레이어가 남습니다.
숨겨진 레이어는 몇 개입니까? 데이터가 선형으로 분리 가능한 경우 (NN 코딩을 시작할 때 자주 알고 있음) 숨겨진 레이어가 전혀 필요하지 않습니다. 물론 데이터를 해결하기 위해 NN이 필요하지 않지만 여전히 작업을 수행합니다.
그 외에도, NN의 숨겨진 계층 구성 문제에 대한 주석이 많이 있습니다 (해설에 대한 훌륭한 요약 은 미친 철저하고 통찰력있는 NN FAQ 참조 ). 이 주제 내에서 합의가있는 한 가지 문제는 숨겨진 레이어를 추가 할 때의 성능 차이입니다. 두 번째 (또는 세 번째 등) 숨겨진 레이어로 성능이 향상되는 상황은 거의 없습니다. 하나의 숨겨진 레이어는 대부분의 문제에 충분합니다.
그렇다면 숨겨진 층의 크기는 몇 개입니까? 경험적으로 파생 된 몇 가지 규칙이 있는데, 가장 일반적으로 사용되는 방법은 ' 숨겨진 레이어의 최적 크기는 일반적으로 입력 크기와 출력 레이어 크기 사이 '입니다. Java의 신경망 소개 저자 인 Jeff Heaton 은 몇 가지 더 제공합니다.
요컨대, 대부분의 문제에 대해, 단지 두 가지 규칙을 사용하여 숨겨진 계층 구성을 설정함으로써 (두 번째 최적화 단계조차없이) 적절한 성능을 얻을 수있을 것입니다 : (i) 숨겨진 계층의 수는 1; 그리고 (ii) 해당 계층의 뉴런 수는 입력 및 출력 계층의 뉴런 평균입니다.
네트워크 구성 최적화
전정계산 성능 및 때로는 해상도 성능을 향상시키기 위해 (계층이 아닌 노드 별) 네트워크 크기를 조정하는 일련의 기술을 설명합니다. 이러한 기술의 요지는 네트워크에서 제거 된 경우 네트워크 성능 (즉, 데이터의 해상도)에 눈에 띄지 않는 노드를 식별하여 훈련 중에 네트워크에서 노드를 제거하는 것입니다. (정식 가지 치기 기술을 사용하지 않더라도 훈련 후 가중치 매트릭스를 보면 어떤 노드가 중요하지 않은지 대략적으로 알 수 있습니다. 무게가 0에 가깝게 보입니다. 분명히 훈련 중에 제거 알고리즘을 사용하는 경우 초과 (즉, '제거 가능') 노드를 가질 가능성이 더 높은 네트워크 구성으로 시작하십시오. 즉,
달리 말하면 훈련 중에 네트워크에 가지 치기 알고리즘을 적용하여 최적의 네트워크 구성에 접근 할 수 있습니다. 단일 "선불"(유전자 알고리즘 기반 알고리즘 등)로 수행 할 수 있는지 여부는 알 수 없지만 현재로서는이 2 단계 최적화가 더 일반적입니다.
@doug의 대답 이 저에게 효과적 이었습니다. 지도 학습 문제를 해결하는 데 도움이되는 추가 규칙이 있습니다. 뉴런 수를 아래로 유지하면 일반적으로 과적 합을 방지 할 수 있습니다.
자동화 된 절차의 경우 알파 2 (모델보다 훈련 데이터에서 2 배의 자유도)로 시작하고 훈련 데이터 세트의 오차 (손실)가 다음보다 상당히 작을 경우 최대 10까지 작동합니다. 테스트 데이터 세트.
N_h
(계층 당 숨겨진 뉴런의 평균 수) 솔루션 N_s = (N_i + N_o) * N_h ^ N_hidden_layers
입니다. 그러나 나는 여전히이 공식을 사용하지 않을 것입니다. 다른 정규화 방법을 구현할 계획이없는 경우 매우 기본적인 문제 (장난감 문제)에만 해당됩니다.
에서 자바를위한 신경 회로망 소개 (2 판) 에 의해 제프 히튼 -에서 자유롭게 사용할 수 미리보기 Google 도서 및 이전에 저자의 웹 사이트 :
숨겨진 레이어의 수
숨겨진 계층에 대해 실제로 결정해야 할 두 가지 결정이 있습니다. 신경망에 실제로 숨겨진 계층 수와 각 계층에 몇 개의 뉴런이 있는지. 먼저 신경망에 사용할 숨겨진 레이어 수를 결정하는 방법을 살펴 보겠습니다.
두 개의 숨겨진 레이어가 필요한 문제는 거의 발생하지 않습니다. 그러나 두 개의 숨겨진 레이어가있는 신경망은 모든 종류의 모양을 가진 함수를 나타낼 수 있습니다. 현재 숨겨진 계층이 둘 이상인 신경망을 사용해야하는 이론적 인 이유는 없습니다. 실제로 많은 실제 문제에 대해 둘 이상의 숨겨진 레이어를 사용할 이유가 없습니다. 표 5.1은 다양한 히든 레이어가있는 신경망 아키텍처의 기능을 요약 한 것입니다.
표 5.1 : 숨겨진 레이어 수 결정
| 숨겨진 레이어 수 | 결과 | 0-선형 분리 가능 기능 또는 의사 결정 만 나타낼 수 있습니다. 1-연속 매핑을 포함하는 모든 함수를 근사 할 수 있습니다 유한 한 공간에서 다른 공간으로. 2-임의의 정확도에 대한 임의의 결정 경계를 나타낼 수 있습니다 합리적인 활성화 기능을 가지고 있으며 부드러운 어떤 정확도로 매핑.숨겨진 뉴런 층의 수를 결정하는 것은 문제의 작은 부분 일뿐입니다. 또한 이러한 숨겨진 레이어 각각에 얼마나 많은 뉴런이 있는지 결정해야합니다. 이 과정은 다음 섹션에서 다룹니다.
숨겨진 레이어의 뉴런 수
숨겨진 레이어에서 뉴런의 수를 결정하는 것은 전체 신경 네트워크 아키텍처를 결정하는 데 매우 중요한 부분입니다. 이러한 레이어는 외부 환경과 직접 상호 작용하지 않지만 최종 출력에 큰 영향을 미칩니다. 숨겨진 레이어의 수와 이러한 숨겨진 레이어 각각의 뉴런 수는 신중하게 고려해야합니다.
숨겨진 레이어에 너무 적은 뉴런을 사용하면 언더 피팅이라는 것이 발생합니다. 언더 피팅은 숨겨진 레이어에 뉴런이 너무 적어 복잡한 데이터 세트의 신호를 적절히 감지 할 때 발생합니다.
숨겨진 레이어에 너무 많은 뉴런을 사용하면 몇 가지 문제가 발생할 수 있습니다. 첫째, 숨겨진 층에 너무 많은 뉴런이 과적 합을 초래할 수 있습니다. 신경망이 너무 많은 정보 처리 용량을 가지고 훈련 세트에 포함 된 제한된 양의 정보가 숨겨진 층에서 모든 뉴런을 훈련시키기에 충분하지 않을 때 과적 합이 발생한다. 훈련 데이터가 충분하더라도 두 번째 문제가 발생할 수 있습니다. 숨겨진 층에 지나치게 많은 수의 뉴런이 있으면 네트워크 훈련에 걸리는 시간이 늘어날 수 있습니다. 훈련 시간은 신경망을 적절히 훈련시키는 것이 불가능할 정도로 증가 할 수있다. 분명히, 숨겨진 층에서 너무 많은 뉴런과 너무 적은 뉴런 사이에 약간의 타협이 이루어져야합니다.
숨겨진 층에 사용할 올바른 뉴런 수를 결정하기위한 다음과 같은 여러 가지 규칙이 있습니다.
- 숨겨진 뉴런의 수는 입력 레이어의 크기와 출력 레이어의 크기 사이에 있어야합니다.
- 숨겨진 뉴런의 수는 입력 레이어 크기의 2/3에 출력 레이어 크기를 더한 값이어야합니다.
- 숨겨진 뉴런의 수는 입력 레이어 크기의 두 배보다 작아야합니다.
이 세 가지 규칙은 고려할 출발점을 제공합니다. 궁극적으로 신경망에 적합한 아키텍처를 선택하면 시행 착오가 발생합니다. 그러나 시행 착오 란 정확히 무엇을 의미합니까? 네트워크에서 임의의 수의 레이어와 뉴런을 던지기 시작하고 싶지 않습니다. 그렇게하려면 시간이 많이 걸릴 것입니다. 8 장 "신경망 정리"에서는 신경망에 대한 최적의 구조를 결정하는 다양한 방법을 모색합니다.
또한 researchgate.net 에서 찾은 답변 에서 다음 스 니펫 을 좋아 합니다 .
Steffen B Petersen · 알 보그 대학교
[...]
네트워크의 일반화 능력을 확보하기 위해서는 노드 수를 가능한 한 낮게 유지해야합니다. 노드가 너무 많으면 네트워크가 훈련 세트를 완벽하게 회수 할 수있는 메모리 뱅크가되지만 훈련 세트에 포함되지 않은 샘플에서는 제대로 수행되지 않습니다.
나는 현재 이것에 대한 경험적 연구를 진행하고 있습니다 (HPC 시설에서 프로세서 세기의 시뮬레이션을 승인합니다!). 내 조언은 "대규모"네트워크와 정규화를 사용하는 것입니다. 정규화를 사용하는 경우 네트워크 아키텍처가 덜 중요해집니다 (캡쳐하려는 기본 기능을 나타낼만큼 충분히 큰 경우). 그러나 정규화를 조정해야합니다. 매개 변수를 올바르게 설정하십시오.
아키텍처 선택의 문제점 중 하나는 모델의 복잡성을 지속적으로 제어하기보다는 개별적으로 제어하기 때문에 특히 이상적인 복잡성이 낮을 때 약간 둔감 한 도구가 될 수 있다는 것입니다.
그러나 이것은 모두 "무료 점심 식사"이론의 적용을받는 반면, 정규화는 대부분의 경우 효과적이지만, 항상 아키텍처 선택이 더 나은 경우가 있으며, 이것이 현재 문제의 진실인지 알아내는 유일한 방법이있을 것입니다 접근과 교차 검증을 모두 시도하는 것입니다.
자동화 된 신경망 빌더를 구축하려면 Radford Neal의 하이브리드 몬테 카를로 (HMC) 샘플링 기반 베이지안 접근 방식을 사용하고 단일 네트워크의 가중치를 최적화하는 대신 큰 네트워크를 사용하고 가중치를 통합합니다. 그러나 그것은 계산적으로 비싸고 약간의 "흑인 예술"이지만, Neal 교수가 얻은 결과는 그만한 가치가 있다고 제안합니다!
내가 아는 한 각 레이어에서 레이어 수와 뉴런을 자동으로 선택할 수있는 방법이 없습니다. 그러나 EANN (유전 알고리즘을 사용하여 토폴로지를 발전시킨 진화 인공 신경 네트워크)과 같이 토폴로지를 자동으로 구축 할 수있는 네트워크가 있습니다.
NEAT (Nuuro Evolution of Augmented Topologies) 는 좋은 결과를 제공하는 것으로 보였던 다소의 접근 방식이 있습니다 .
죄송합니다. 아직 코멘트를 게시 할 수 없습니다. 나와 함께 참아주세요. 어쨌든, 나는 최근에 본 논문 을 생각 나게하는이 토론 스레드에 부딪쳤다 . 나는 여기에 참여하는 사람들에게 관심이있을 것이라고 생각합니다.
AdaNet : 인공 신경망의 적응 구조 학습
코리나 코르테스, 자비에르 곤 잘보, 비탈리 쿠즈 네 초프, 메흐 라르 모리, 스캇 양; 기계 학습에 관한 제 34 차 국제 회의, PMLR 70 : 874-883, 2017의 절차.
초록 인공 신경망을 분석하고 학습하기위한 새로운 프레임 워크를 제시합니다. 우리의 접근 방식은 네트워크의 구조와 가중치를 동시에 적응 적으로 학습합니다. 이 방법론은 강력한 데이터 의존적 이론적 학습 보장을 기반으로하며 그에 따라 최종 네트워크 아키텍처가 주어진 문제의 복잡성에 적응할 수 있도록합니다.
덜 일반적이지만 효과적인 방법 을 제안하고 싶습니다 .
기본적으로 잠재적 옵션 중 일부 (레이어 당 임의의 수의 레이어 및 노드)를 시도하는 "유전자 알고리즘"이라는 알고리즘 세트를 활용할 수 있습니다. 그런 다음이 개체 집단을 유기체가 진화하는 것처럼 하나 이상의 부모를 결합 / 돌연변이하여 어린이를 만드는 "부모"로 취급합니다. 가장 좋은 아이들과 무작위의 괜찮은 아이들은 각 세대와 여러 세대에 걸쳐 보존되어 있습니다.
~ 100 이하의 매개 변수 (예 : 레이어 수, 레이어 유형 및 레이어 당 뉴런 수 선택)의 경우이 방법이 매우 효과적입니다. 각 세대에 대해 여러 가지 잠재적 인 네트워크 아키텍처를 생성하고 학습 곡선을 추정 할 수있을 때까지 부분적으로 학습하여 사용하십시오 (일반적으로 많은 매개 변수에 따라 100-10k 미니 배치). 몇 세대 후에는 기차와 검증이 오류 선택 (과적 합)이 자녀를 선택하기위한 목적 함수로 크게 다른 시점을 고려할 수 있습니다. 최종 모델을 선택하여 결론에 더 빨리 도달 할 때까지 매우 작은 데이터 하위 집합 (10-20 %)을 사용하는 것이 좋습니다. 또한 네트워크 초기화에 단일 시드를 사용하여 결과를 올바르게 비교하십시오.
10 ~ 50 세대는 적절한 규모의 네트워크에서 훌륭한 결과를 제공해야합니다.
숨겨진 레이어의 수와 이들이 달성 할 수있는 것 :
0-선형 분리 가능 기능 또는 의사 결정 만 나타낼 수 있습니다.
1-한 유한 공간에서 다른 유한 공간으로의 연속 매핑을 포함하는 모든 함수를 근사 할 수 있습니다.
2-합리적인 활성화 기능으로 임의의 정확도에 대한 임의의 결정 경계를 나타낼 수 있으며 모든 정확도에 대한 부드러운 매핑을 근사화 할 수 있습니다.
2 개 이상-추가 레이어는 레이어 레이어에 대한 복잡한 표현 (일부 자동 피처 엔지니어링)을 배울 수 있습니다.