Нейронная сеть Непрерывная функция активации Тан-Сигмоида и случайные веса - PullRequest
3 голосов
/ 28 ноября 2011

Мне действительно нужна помощь в реализации функции непрерывной активации светло-коричневого сигма в очень простой нейронной сети. Если бы вы могли привести простой пример, который был бы великолепен, но если бы вы могли изменить его в моем исходном коде , я был бы чрезвычайно признателен! Кроме того, в каком диапазоне должны начинаться случайные веса (т.е. в каком диапазоне)?

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Диапазон веса зависит от того, какой диапазон входных данных у вас есть. В некоторых реализациях веса также могут быть отрицательными.

Для возможных функций сигмоида, проверьте здесь (tanh не единственная возможность):

http://en.wikipedia.org/wiki/Sigmoid_function

Подсказка: обычно вы можете вычислить NN с умножением матрицы.

http://www.dtreg.com/mlfn.htm

http://en.wikipedia.org/wiki/Neural_network

P.S .: вероятно, не очень хорошая идея делать это в JavaScript.


вы можете реализовать его через exp (x), см .: http://www.javascripter.net/faq/mathfunc.htm

          sinh(x)    exp(x) - exp(-x)     exp(2x) - 1
tanh(x) = ------- = ------------------ = -------------
          cosh(x)    exp(x) + exp(-x)     exp(2x) + 1

, что дает вам:

function tanh(x) {
   e = Math.exp(2*x);
   return (e - 1) / (e + 1) ;
};

другое решение - сохранить таблицу со значениями функции tanh в массиве и определить функцию JavaScript, которая интерполирует значения tanh для x на основе значений tanh, хранящихся в массиве


как правило, люди не хотят [-inf ... + inf] в качестве диапазона входных значений, и не хотят [-1 ... + 1] в качестве диапазона выходных значений - поэтому вы может потребоваться другая сигмоидальная функция!

вам нужно взять ожидаемый диапазон входных значений и ожидаемый диапазон выходных значений и использовать их для сдвига действительной сигмоидальной функции, диапазонов веса и значения порога.

обычно используется порог 0,7 или более. Вам нужно поэкспериментировать с этим.

0 голосов
/ 28 ноября 2011
this.output = 2 / (1 + Math.exp(-2 * input)) - 1;
...