Рыночный этикет или правила хорошего тона на минном поле - страница 37

 

Так, кажется я понял в чем моя ошибка. У меня фактически получается, что длина обучающего вектора равна числу весов! Потому, что я накапливаю коррекции, сравнивая выход нейрона с каждым отсчетом обучающего вектора, а надо сравнивать только с n+1 вым. Пишу новый код

Потому и графики такие ненормальные.

 

Вот, взгляни:


Синяя - обучающая выборка, красная - тестовая. Значения тангенсов в верхнем левом углу рисунка.

Странно, что мне пришлось совсем убрать начальную инициализацию весов. Только после этого результаты приобрели повторяемость. Есть еще некоторые вопросы, но сейчас я уже все... -:)

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

Файлы:
neyrona.rar  132 kb
 

По мне, так у тебя очень сложная логика нумерации люучающего вектора...

Возможно ошибка в банальной путанице индексов или в том, что ты обнуляешь веса всего один раз за всю процедуру набора статистики (W[i]<-0):

Обрати внимание, у тебя вектор D являющиейся входным для НС не пересчитывается с набором стстистики (индекс i). Возможно я и не прав, поскольку не до конца разбирался в этом. Мне легче было ввести сквозную нумерацию в твоём коде и вот, что получилось:

Теперь, твоя девушка чувствует начальную рандомизацию весов и адекватно обучается (обе линии проходят через начало координат). Красный цвет - обучающая выборка, синий - экзамен. Файл с подправленным вариантом прицеплен ниже.

Файлы:
modif.zip  16 kb
 

Знакомлюсь...

Скажи, Сергей, а почему у твоей двухслойки(да и с самого начала ты об этом говоришь) выходной нейрон без функции активации? И как тогда изменится производная? Т.е. была(для th) (1-OUT^2)

а станет (1-OUT) ?

P.S. Спасибо за помощь

 

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

У меня даже в и мыслях такого не было! Кроме того, входы там все простые - никаких гипертангенсов. Это потому, что ВР - регулярная функция, или просто для примера?

И еще вопрос: если девушку слегка недообучить - ну дать её всего 5-7 эпох - то тангенсы обеих мнк будут больше единицы, не говорит ли это о том, что девушка заглядывает в будущее(я не об синусе)?

 

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

Для двуслойной НС активация выходного нейрона не добавляет вычислительной мощности (эта архитектура уже имеет максимальную или равную вычислительную силу из всех возможных архитектур - 3-х, 4-х и т.д.), поэтому активацию выходного нейрона гипертангенсом разумно использовать, если выход далее будет интерпретироваться как вероятность точного прогноза.

В случае линейного выхода, производная равна не (1-OUT), а просто 1 - это производная от линейной функции y(x)=1*x.

Что касается единичных входов, то они, конечно, используются и во время обучения и во время работы. Молодец,что углядел! Я пропустил этот баг. Правильно нейрон представить так:

W[0] это вес, на который всегда подаётся 1. В случае одинокого нейрона эффект от использования смещения не сильно заметен. Хотя не трудно смоделировать ситуацию, когда он будет играть важную роль в ускорении процесса обучения и в этом случае.

если девушку слегка недообучить - ну дать её всего 5-7 эпох - то тангенсы обеих мнк будут больше единицы, не говорит ли это о том, что девушка заглядывает в будущее(я не об синусе)?

Нет, это говорит только о малом объёме статистического материала и плохом обучении. Посуди сам: нельзя знать что-то лучше, чем оно есть на самом деле. Этот предельный случай отвечает tg()=1 и быть больше 1 может быть только из-за стат разброса данных.

 
Neutron >>:

...привести ссылки на работы математиков


-:) Надеюсь, ты понимаешь насколько это бесполезно... по крайней мере в моем случае.

Сейчас поковыряюсь еще с этим одним нейроном. Надо чтобы все как следует в голове улеглось, да и код хочется разбить на простые блоки, а завтра попробую нарастить своей девушке еще один слой. А вот есть у меня вопрос довольно глупый: когда ты переписываешь код из Маткада в MQL - как проверяешь что получилось? Впрямую же не перепишешь - маткад вообще другая среда и логика построения программы там не такая как в MQL.

 

Тут, конешна, засада!

Я например, выводил тангенс угла наклона (в случае действительных входов), как интегральную характеристику качества работы НС или процент правильно отгаданных знаков (в случае бинарных) и сравнивал с таковыми в Маткаде. Правда, тебе до этого момента, нужно периписпть НС-ку по МКЛ стандарт, это когда нулевой отсчёт - последний и далее вглубь (в маткаде наоборот). Кроме того, обязательно нужно проверить корректность работы НС на винеровсом процессе, это когда ВР получается интегрированием случайной величины. Тут твоя девушка должна получить железную двойку на экзамене и это будет говорить о том,что она не списыват, т.е. танген угла наклона должен стремится к нулю прои числе кспериментов стремящимуся в бесконечность как 1/n.

Вот генератор винеровского ряда:

 

Это на винере:


 

Я так, на минутку загляну: от моего последнего графика, где собирался искать причину "чуда", опять ничего не осталось - iFractals меня бессовестно обманул. Как только написал свой iFractals - сразу стало все на свои места, т.е. чудо исчезло :)

Успехов, коллеги

Причина обращения: