문제

불연속적인 값 대신 연속적인 값 범위를 허용하고 출력하도록 신경망을 설정하려면 어떻게 해야 합니까?몇 년 전에 신경망 수업을 하면서 기억나는 바에 따르면 활성화 함수는 0과 1 사이의 값을 산출하는 시그모이드였습니다.신경망이 실제 값의 스칼라를 생성하도록 하려면 어떻게 해야 합니까?0에서 10 사이의 값을 원한다면 그 값에 10을 곱하면 되지 않을까 생각했습니다.음수 값이 있으면 어떻게 되나요?이것이 사람들이 일반적으로 하는 일입니까, 아니면 다른 방법이 있습니까?입력은 어떻습니까?

감사해요

도움이 되었습니까?

해결책

현장에서 많은 작업 신경 진화 연속 입력 및 출력으로 신경망을 사용하는 것이 포함됩니다.

몇 가지 일반적인 접근법이 있습니다.

  • 값 당 하나의 노드
    • 선형 활성화 기능 - 다른 사람들이 언급했듯이, 제한된 범위의 Sigmoid 함수에 대해 우려하는 경우 출력 노드에서 비 Sigmoid 활성화 기능을 사용할 수 있습니다. 그러나 이로 인해 출력이 임의로 커질 수 있으므로 훈련 중에 문제가 발생할 수 있습니다.
    • Sigmoid 활성화 기능 - 단순히 시그 모이 드 출력 (또는 음수 값을 원하는 경우 이동 및 스케일링)을 스케일링하는 것은 신경 진화에서 일반적인 접근법입니다. 그러나 Sigmoid 기능이 너무 가파르지 않도록하는 것이 좋습니다. 가파른 활성화 기능은 "유용한"값 범위가 작아서 네트워크 가중치가 작아지는 것을 의미합니다. (이것은 주로 유전자 알고리즘의 문제로, 작은 가중치가 필요할 때 잘 작동하지 않는 고정 중량 수정 전략을 사용합니다.)

regular sigmoid
(원천: natekohl.net)
steep sigmoid
(원천: natekohl.net)

  • 값 당 여러 노드 - 여러 노드에 대해 단일 연속 값을 확산시키는 것은 연속 입력을 나타내는 일반적인 전략입니다. 네트워크 규모가 증가하는 비용으로 네트워크가 플레이 할 수있는 더 많은 "기능"을 제공하는 이점이 있습니다.
    • 비닝 - 여러 노드에 단일 입력을 퍼뜨립니다 (예 : RBF 네트워크, 여기서 각 노드는 입력에 의해 부분적으로 활성화 될 다른 중심이있는 기본 함수입니다). 원활한 표현을 잃지 않고 개별 입력의 이점을 얻을 수 있습니다.
    • 이진 표현 - 단일 연속 값을 2로 나눕니다N 청크를 한 다음 해당 값을 N 노드의 이진 패턴으로 네트워크에 공급하십시오. 이 접근법은 작지만 부서지기 쉬우 며 연속적인 방식으로 변화하는 입력을 초래합니다.

다른 팁

출력( * )이 특정 함수여야 한다는 규칙은 없습니다..실제로 우리는 일반적으로 추가하다 출력을 특정 형식으로 확장하거나 강제하기 위해 주어진 노드에서 자체적으로 구현되는 함수의 끝 부분에 있는 일부 산술 연산입니다.

전부 아니면 전무 출력 및/또는 0.0~1.0 정규화된 출력으로 작업할 때의 장점은 작업을 더 쉽게 처리할 수 있게 만들고 오버플로 등의 문제를 방지한다는 것입니다.

( * ) 여기서 "출력"은 네트워크 내의 특정 노드(뉴런)의 출력 또는 네트워크 전체의 출력으로 이해될 수 있습니다.
Mark Bessey가 지적했듯이 [네트워크 전체에 대한] 입력과 [네트워크의] 출력은 일반적으로 일부 필터링/변환을 받습니다.이 응답과 Mark의 의견에서 암시된 것처럼 네트워크의 "숨겨진" 계층에 정규화/표준 노드를 갖고 입력 및/또는 출력에 필요한 일부 정규화/변환/이산화를 적용하는 것이 바람직할 수 있습니다. 네트워크;그러나 이러한 실행은 일반적으로 신경망의 필수 요구 사항이 아니라 실용성의 문제일 뿐입니다.

일반적으로 입력과 출력 모두에서 일부 필터링 (레벨 변환 등)을 수행해야합니다. 분명히 입력을 필터링하면 내부 상태가 변경되므로 훈련하려는 신호를 잃지 않도록 일부 고려 사항이 주어져야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top