Нейронные сети

Нейронные сети

Сообщение Kronos1026 » 20 окт 2015, 11:14

Добрый день, уважаемые пользователи форума, не знал куда определить мой вопрос, поэтому написал в данном разделе. Недавно начал заниматься изучением нейросетей, решил написать простенькую нейросеть с обучением сети с помощью алгоритма обратного распространения ошибки на php с использованием данных из статьи на хабре http://robocraft.ru/blog/algorithm/560.html.

Пример задачи, которую хочу решить с помощью нейронной сети:
на вход поступают 2 числа в диапазоне [0..1], на выходе хочу получить в качестве ответа 1 - если первое число больше второго и 0 - если второе число больше первого.

написал нейросеть (входной слой (2 нейрона), один скрытый слой (4 нейрона), выходной стой (1 нейрон)), но при попытке ее обучения получаю ужасные результаты. т.е. она стремится отдать результат в качестве 0,5, если увеличиваю скорость обучения сети, то ее начинает кидать из крайности в крайность (или всегда 1, или всегда 0) всне зависимости от входных данных.

Вопросы:
1) подходит ли нейронная сеть для решения подобных задач?
2) может кто-нибудь расписать алгоритм обучения еще проще (в частности пункт с изменением весов) - возможно там ошибка
сейчас вычисляю новый вес нейрона следующим образом

Код: Выделить всё
$this->weights[$i] = $this->weights[$i] + $n * $this->d * derivative_function($prev_output);


$this->weights[$i] - вес нейрона который будет меняться
$n - скорость обучения сети (в настоящее время = 1)
$this->d - ошибка для текущего нейрона (расчет идет по формуле в статье http://robocraft.ru/blog/algorithm/560.html)
derivative_function - функция производной логистической функции
Код: Выделить всё
function derivative_function($x){
    return logistic_function($x) * (1 - logistic_function($x));
}

logistic_function - логистическая функция
Код: Выделить всё
function logistic_function($x){
    return 1/(1 + exp(-1*$x));
}

$prev_output - выходное значение нейрона на предыдущем слое нейронной сети, связанный с текущим данным весом
3) что я делаю не так? )
Kronos1026
 
Сообщения: 1
Зарегистрирован: 20 окт 2015, 10:48
programming: php js

Re: Нейронные сети

Сообщение noonv » 29 окт 2015, 12:32

Kronos1026 писал(а):входной слой (2 нейрона), один скрытый слой (4 нейрона), выходной стой (1 нейрон)

попробуйте 2 выхода.

Kronos1026 писал(а):1) подходит ли нейронная сеть для решения подобных задач?

да.

Kronos1026 писал(а):3) что я делаю не так? )

сложно сказать :)

Вот только сегодня попалась статья:
http://www.wildml.com/2015/09/implement ... m-scratch/
Аватара пользователя
noonv
Администратор
 
Сообщения: 557
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++


Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

© 2009-2019 |  О проекте  |  Политика Конфиденциальности  |