"New Neural "は、MetaTrader 5プラットフォーム用のオープンソース・ニューラルネットワークエンジンプロジェクトです。 - ページ 39

 

ラジアルベースラインネットワークを構築するか?

学習が早い反面、未知のデータに対する予測能力が低いという強いバグがある。

 
ウラン です。

u- アクティベータ入力

y- 追加の力率。

指数がある場合は、32ビットを超える大きな数値が出ないように、正の数の指数を計算しないようにする必要があります。例えば,シグマを計算する場合は,次のようにするとよいでしょう。

double x = -y*u;

double e=exp(-|x|);

if(x<=0)return(1./(1.+e))

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

これらの式は非常にシンプルに導き出される。指数引数が負の場合は、数式を変更しないままとする。正の場合は、分子と分母に同じ引数の指数を掛けるが、符号は負とする。

 
ヴィン

djvu ビューアーの方ですね。私の本はすべて読めます。
 
gpwr

指数がある場合は、32ビットを超える大きな数値が出ないように、正の数の指数を計算しないようにする必要があります。例えば、シグマの計算はこのようにするのがよいでしょう。

double x = -y*u;

double e=exp(-|x|);

if(x<=0)return(1./(1.+e))

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

これらの式は非常にシンプルに導き出される。指数引数が負の場合は、数式を変更しないままとする。正の場合は、分子と分母に同じ引数の指数を掛けるが、符号は負とする。

不思議なことに、シグモイド自体は大きな負の入力でも正しく動作しますが、ハイパータンジェント関数は失敗するので、古典的なアルゴリズムに加えて、シグモイドシフトを 追加しています。この関数はハイパータンジェントと同じ極限で動作するが、より高速で、#INDの問題もない。

同様に、迎え角の調整では(係数yが小さい場合)ハイパータンジェントが-1;1にならないが、シフトシグモイドではそのような問題はない。

一般的に誰がハイパータンジェントを確定したいが、私は関数が期待できないと思う、私は指数が2回使用されているため、結果を保存する必要があることだけでなく、まだチェックを必要とする、さらに攻撃を調整するときに限界に到達するために失敗の問題。

私の結論は、ハイパータンジェントはダメで、シフトしたシグモイドがルールということです。

 
ウラン です。

私の結論は、ハイパータンジェントはダメで、シグモイドの法則にシフトすることです。

を出向させた。
 
ジュ
を出向させた。

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]の使い勝手と操作スピードの両面から、最適な選択肢といえます。定義域は、数値行全体である。

私が最近使っている活性化関数は、まさにこのものです。

 

そして、エコーグリッドで一番気に入っているのがこの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 
        }
};
 

ちなみに。

シグモイド関数が必要です。

必要なのは、関数そのものとその導関数の正規形(計算はそれほど難しくない)、逆関数とその導関数の正規形である。