GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.4 (5)<< < Пред. | След. > >>   Поиск:  
 Автор Тема: На: Обратное распространение ошибки
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 31 июл 08 10:16
Цитата:
Автор: dereyly
ЗЫ ваш код я пока не смотрел... а мой врят ли вам поможет, т.к. MATLAB неочень популярен в кругах программистов


А Вы бы попробывали прогнать мою тестовую задачу через Ваш алгоритм, и сказали бы сколько итераций это заняло ?

Входы (3шт. на пример):
double[,] y0 = { { 7, 4, 5 }, { 6, 4, 5 }, { 7, 5, 6 }, { 6, 3, 5 }, { 8, 5, 6 } };
Выходы (1шт. на пример):
double[] d = { 10, 20, 40, 50, 60 };
Требуемая точность: 0.001
Нормализуются только выходы делением на 100.

И если он сделает это меньше чем за 1000 итераций, мне любой код подойдет ...
[Ответ][Цитата]
dereyly
Сообщений: 9
На: Обратное распространение ошибки
Добавлено: 31 июл 08 18:36
занес в стандартную ф-ию матлаба с методом rprop... сошлось за 92 итерации... могу потом свой старенький код реанимировать
[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 31 июл 08 18:49
Цитата:
Автор: dereyly

занес в стандартную ф-ию матлаба с методом rprop... сошлось за 92 итерации... могу потом свой старенький код реанимировать


Да, было бы хорошо ... а Вы не в курсе, где можно скачать матлаб ?

В принципе, я проверял на Neural Network Wizard, сходилось вроде как за 8000-13000 итераций (хотя вначале мне показалось, что на близком примере сошлось за 40 итераций (правда возможно я там что сделал не так, например, точность не ту потребовал)) стандартным алгоритмом (что все же соответствует моему схождению) ... но все очень зависит от начальных случайных весов ... (а один раз даже не захотел сходится вообще более 50000 итераций) ...

Поэтому хотелось бы сверять там, где можно увидеть код как это делается ... Если не сложно кинте сюда или мне на почту Ваш код ...
[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 31 июл 08 19:33
Цитата:
Автор: dereyly

По поводу rprop
2. Вычисляем градиент


КАК ??? градиент чего ?
или так же как в стандартном алгоритме с помощью процедур ??

public double F(double x)
{
return (1.0 / (1.0 + Math.Exp(-x)));
}
public double FF(double Fx)
{
return Fx * (1.0 - Fx);
}
[Ответ][Цитата]
dereyly
Сообщений: 9
На: Обратное распространение ошибки
Добавлено: 31 июл 08 21:44
Цитата:
Автор: tac
Да, было бы хорошо ... а Вы не в курсе, где можно скачать матлаб ?

ищите торренты (torrents.ru thepiratebay.org)... правда последний 2008а содержит вирусы... ну это как и с любой дрйгой пираткой нужно держать антивир востро

Но нельзя нейронные сети связывать только с матлабом есть масса опенсорсных библиотек посмотрите на sourceforge.net
[Ответ][Цитата]
dereyly
Сообщений: 9
На: Обратное распространение ошибки
Добавлено: 31 июл 08 22:05
Цитата:
Автор: tac

КАК ??? градиент чего ?
или так же как в стандартном алгоритме с помощью процедур ??

public double F(double x)
{
return (1.0 / (1.0 + Math.Exp(-x)));
}
public double FF(double Fx)
{
return Fx * (1.0 - Fx);
}

грубо говоря градиент и есть ошибка распространяемая обратно
delta_m2 = (y2 - (d[i] / 100)) * FF(y2);
delta_m1[j] = delta_m2 * w2[j] * FF(y1[j]);
т.е. делты это частные производные а все вместе можно их считать градиентом
(хотя я мож где то напутал)

только надо учесть что в блочном методе изменения накапливаются... допустим суммируются
[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 31 июл 08 23:14
Цитата:
Автор: dereyly

грубо говоря градиент и есть ошибка распространяемая обратно
delta_m2 = (y2 - (d[i] / 100)) * FF(y2);
delta_m1[j] = delta_m2 * w2[j] * FF(y1[j]);
т.е. делты это частные производные а все вместе можно их считать градиентом
(хотя я мож где то напутал)

только надо учесть что в блочном методе изменения накапливаются... допустим суммируются


Что-то не получается ...
А если изменения не накапливать ?


[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 01 авг 08 3:06
Знаете, я думаю, мой алгоритм все же верен (хотя полностью не могу быть уверен), но у обратного распространения есть существенная проблема - результат (в смысле скорости сходимости) сильнейшим образом зависит от входов, скажем так если решать задачу XOR и на вход подавать
double[,] y0 = { { 0, 0 }, { 0, 1 }, { 1, 0 }, { 1, 1 } };
то сходится достаточно приемлимо до 100 итераций.
Но если несколько обобщить (чтобы решать задачу "шахматная доска") и подавать входы
double[,] y0 = { { 0, 0.039 }, { 0, 0.078 }, { 0, 0.117 }, { 0, 0.156 } };

то ждать прейдется около 100.000 итераций

Вывод однозначен: нужно нормализовать не делением и получая непрерывное число, а делать бинарный вектор ... собственно, этим перцептрон Розенблата и MLP серьезно отличаются ... но приходим к выводу, что для MLP ВЫГОДНО также бинаризовать входных-выходные данные, иначе MLP не может даже пытаться конкурировать с перцептроном Розенблата.
А вот дальше начинается самое интересное ... для MLP действительно похоже не столь важно число А-элементов, в отличии от перцептрона ... это как то связанно с "математикой" - эти сети существенно разные в этом месте ... И здесь становится интересно, кто кого ...? Или быстрые А-элементы перцептрона Розенблата, но много или медленные нейроны MLP, с алгоритмом, где нужно угадать подходящие число А-элементов (т.к. как мало, так и много может оказатся плохо !!!) ...

Прошу делится своим опытом в обучении этими алгоритмами (например, как Вы подбираете коэффициенты, число А-элементов и т.п. для той или иной задачи ... есть ли какие нибудь закономерности, есть ли универсальные параметры, при которых наверняка алгоритм сойдется ... сравнительно, у перцептрона Розенблата таких проблем нет, дал нужно количество А-элементов - получи сходимость ... а здесь один геморой, или я чего то не понимаю ? ) ...


Кстати, до сих пор у меня не было т.н. нейрона смещения, которому на вход всегда подается 1, может это как то влияет ?
[Ответ][Цитата]
daner
Сообщений: 4593
На: Обратное распространение ошибки
Добавлено: 01 авг 08 11:48
1. нейрон смещения полезная штука, так что добавьте.
2. Я тоже не раз слышал, что правильнее работать с бинарными векторами. Попробуйте, переведите ваш пример в бинарный и посмотрите на скорость... это все минутное дело.
[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 01 авг 08 14:19
Цитата:
Автор: daner
2. Я тоже не раз слышал, что правильнее работать с бинарными векторами.


А Вы не в курсе, може это в какой нибудь статье описано ?
[Ответ][Цитата]
daner
Сообщений: 4593
На: Обратное распространение ошибки
Добавлено: 01 авг 08 16:08
Цитата:
Автор: tac
А Вы не в курсе, може это в какой нибудь статье описано ?

не. со статьей не смогу помочь.
[Ответ][Цитата]
гость
89.208.11.*
На: Обратное распространение ошибки
Добавлено: 01 авг 08 18:20
не удержался.


"Вывод однозначен: нужно нормализовать не делением и получая непрерывное число, а делать бинарный вектор"

идиот, для этого не надо было таких экспериментов делать, это и так очевидно.

ушел в сумрак.
[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 01 авг 08 19:40
Цитата:
Автор: гость

не удержался.

"Вывод однозначен: нужно нормализовать не делением и получая непрерывное число, а делать бинарный вектор"

идиот, для этого не надо было таких экспериментов делать, это и так очевидно.

ушел в сумрак.


Не знаю, какому идиоту это очевидно, но пока этого не будет в какой либо статье, я не могу это использовать с очевидностью, тем более, что возможность не дискретных входов-выходов для MLP преподносится как существенный прорыв, некоторые даже пишут о следующем поколонии перцепронов из-за этого ... все это бред, конечно ... но, это же нужно опровергать корректно, а не голословно !!!
[Ответ][Цитата]
daner
Сообщений: 4593
На: Обратное распространение ошибки
Добавлено: 01 авг 08 20:26
Цитата:
Автор: tac
Не знаю, какому идиоту это очевидно, но пока этого не будет в какой либо статье, я не могу это использовать с очевидностью, тем более, что возможность не дискретных входов-выходов для MLP преподносится как существенный прорыв, некоторые даже пишут о следующем поколонии перцепронов из-за этого ... все это бред, конечно ... но, это же нужно опровергать корректно, а не голословно !!!

Ну во-первых, MLP с дробными числами работает. То что увеличивается срок обучения, еще не говорит о том, что сеть вообще не обучается.
Во-вторых, вы же еще не поняли причину, так чего зря словами кидаться?
Кстати, если совсем точнее, то вектор лучше составлять не бинарный а дуполярный.
т.е. не из 1 и 0, а из 1 и -1. Тогда работает еще лучше.
[Ответ][Цитата]
dereyly
Сообщений: 9
На: Обратное распространение ошибки
Добавлено: 02 авг 08 15:49
Цитата:
Автор: tac
Что-то не получается ...
А если изменения не накапливать ?

Ну это как пытаться ехать по дороге и для того чтобы ехать идеально прямо резко дергать руль то вправо то влево... а если рамерность блока достаточно большая то можно поворот пропустить =)

Ну вообще не на форумах методы надо читать... а то я вечно все забываю:
я еще забыл сказать что коэффициент обучения вычисляется для КАЖДОГО веса...
еще одно отличие от "адаптивного" шага и переход к более сложным методам типо квазиньютоновских
[Ответ][Цитата]
 Стр.4 (5)1  2  3  [4]  5<< < Пред. | След. > >>