"New Neural"은 MetaTrader 5 플랫폼용 신경망 엔진의 오픈 소스 프로젝트입니다. - 페이지 39

 

방사형 기본 네트워크를 구축할 것인가?

그들은 강력한 버그를 가지고 있지만 빠르게 학습하지만 알려지지 않은 데이터에 대해서는 잘 예측하지 못합니다.

 
우크라이나 :

u - 활성제 입력

y 는 추가 역률입니다.

지수가 있는 곳마다 32비트를 초과하는 큰 숫자가 나오지 않도록 양수의 지수 계산을 피해야 합니다. 예를 들어, 시그마를 계산하는 것이 다음과 같이 더 좋습니다.

더블 x = -y*u;

이중 e=exp(-|x|);

if(x<=0) 반환 ( 1 ./( 1 .+e));

if(x>0) 리턴 (e/( 1 .+e));

이 공식은 매우 간단하게 유도됩니다. 지수 인수가 음수이면 공식을 변경하지 않고 그대로 둡니다. 양수이면 분자와 분모에 동일한 인수의 지수를 곱하지만 부호는 음수입니다.

 
비닌 :

djvu 보기에 문제가 있습니다. 나는 모든 책을 읽었습니다.
 
gpwr :

지수가 있는 곳마다 32비트를 초과하는 큰 숫자가 나오지 않도록 양수의 지수 계산을 피해야 합니다. 예를 들어, 시그마를 계산하는 것이 다음과 같이 더 좋습니다.

더블 x = -y*u;

이중 e=exp(-|x|);

if(x<=0) 반환 ( 1 ./( 1 .+e));

if(x>0) 반환 (e/( 1 .+e));

이 공식은 아주 간단하게 유도됩니다. 지수 인수가 음수이면 공식을 변경하지 않고 그대로 둡니다. 양수이면 분자와 분모에 동일한 인수의 지수를 곱하지만 부호는 음수입니다.

이상하게도 시그모이드 자체는 큰 음수 입력 조건에서도 올바르게 작동하지만 하이퍼탄젠트 함수는 실패합니다. 그래서 고전 알고리즘에 시그모이드 개그 를 추가로 가져왔습니다. 이 함수는 하이퍼탄젠트와 동일한 한계에서 작동하지만 더 빠르고 #IND에 문제가 없습니다.

또한 받음각을 조정할 때 (계수 y의 작은 값에서) 초탄젠트는 -1에 도달하지 않습니다.

일반적으로 하이퍼탄젠트를 미세하게 조정하고 싶은 사람은 함수가 유망하지 않다고 생각합니다. 결과를 저장해야 할 뿐만 아니라 지수의 계산을 두 번 사용하기 때문에 확인도 필요하고 도달하지 못하는 문제도 있습니다. 공격을 조정할 때 경계.

내 결론은 하이퍼탄젠트, 즉 시그모이드 규칙이 이동했다는 것입니다.

 
우크라이나 :

내 결론은 하이퍼탄젠트, 이동된 S자형 규칙입니다.

지원하다.
 
:
지원하다.

제한 [-1; 1]에서 시그모이드를 더 간단하게 구현할 수 있습니다.

 double sigma( double u, double y= 1 .) // [-1;1]
  {   
   return ( exp (-y*u));
  }

그러나 이 구현에는 #IND에도 문제가 있으므로 여러 검사를 작성하는 것보다 몇 가지 간단한 작업을 추가하는 것이 좋습니다.

+ - /가 여기에 추가되어 여러 검사에 대해 총 3개의 추가 작업을 수행합니다.

 double sigmah( double u, double y= 1 .) // [-1;1] сдвинутый сигмоид
  {
   return (( 2 ./( 1 .+ exp (-y*u)))- 1 .);
  }
 
우크라이나 :
 double sigmah( double u, double y= 1 .) // [-1;1] сдвинутый сигмоид
  {
   return (( 2 ./( 1 .+ exp (-y*u)))- 1 .);
  }

이것은 작동 범위[-1, 1]의 편의성과 속도 면에서 모두 최상의 옵션입니다. 정의 영역은 전체 숫자 라인입니다.

최근부터 많은 대안을 시도하고 실행 속도 를 테스트하면서 사용하고 있는 것이 바로 이 활성화 기능입니다.

 

그리고 나는 에코 그리드에서 이것을 좋아합니다.

 class RSDNFunction
{
public :
         static const NeuronType Type = ETYPE_RSDN;
public :
         double F( double x)
        {
                 // coeffs were added to adjust this function to bisigmoid for values from -5 to 5
                 return 5 *x/( 5 * sqrt (abs( 5 *x) ) + 5 );
        }

         double dF( double x)
        {
                 double root = sqrt ( 5 *abs( 5 *x) ) + 1 ;

                 return (root + 1 )/( 2 *root*root); // derived function 
        }
};
 

그런데.

시그모이드 유형 함수가 필요합니다.

요구 사항은 함수 자체와 미분(계산하기가 그리 어렵지 않음)의 정규형과 역함수와 미분의 정규형입니다.