Comments 26
Не пойму, почему в скрытом слое именно шесть нейронов? Из каких соображений выбирается это число? Что за данные идут по каждому из шести синапсов между входным и скрытым слоем? Со входом и выходом все понятно…
Касательно именно 6 нейронов на скрытом слое — предположу что тут замешано «восприятие» сетью положения птички, на основании входных данных (+\-напротив препятствия, +\-напротив перехода от препятствия к пролёту, напротив пролёта, не вижу препятствия).
Все изложенное — некомпетентное ИМХО и мне тоже хотелось бы услышать «правильный ответ» от разбирающихся товарищей.
Чтобы понять что мы вообще аппроксимируем нужно построить график — по оси X расстояние до отверстия, а по оси Y — расстояние до центра отверстия. Теперь на пересечении каждого значения, где нужно прыгнуть поставьте точку. Соедините точки и получившаяся фигура и будет то, что мы хотим построить.
Если вы можете без нейронной сети написать функцию, которая строит такую фигуру — вам нейронные сети не нужны. Если напишите систему уравнений, которые решают ту же задачу — тоже. Если же думать не хочется — можно задать примерную структуру системы уравнений, которая теоретически должна решать задачу (т.е. выбрать структуру нейронной сети) и пусть компьютер подбирает коэффициенты этой системы уравнений (имеется в виду процесс обучения сети).
Количество слоев выбирается исходя из сложности функции, которую мы хотим решить (аппроксимировать). Логично, что для аппроксимации прямой хватает 2-х слоёв, а вот гиперболу двумя слоями не аппроксимируешь.
Количество нейронов же обычно подбирается экспериментально. Все упирается во время обучения и итоговую точность, которую нужно получить. В общем данные, которые идут после нейронов скрытого слоя это произведение очередного коэффициента и входящего значения. Для данного случая:
A1*x + A2*x +… +A6*x = 0.5
A1*y + A2*y +… +A6*y = 0.5
где An = вес нейрона, x и y — входящие значения.
Спасибо, что-то начинает вырисовываться.
Для данного случая:
A1*x + A2*x +… +A6*x = 0.5
A1*y + A2*y +… +A6*y = 0.5
а смысл в 6 нейронах тогда?
A1*x + A2*x +… +A6*x = (A1+A2+...+A6)*x = As*x
По теореме Арнольда-Колмогорова Nh = 2Ni+1; т.е. у нас 2 входа, т.е. Nh = 2*2+1 = 5. Т.е. достаточно 5-ти нейронов)
как писали выше, можно обучить с одним скрытым нейроном, что и выходит из выше показанной формулы, но для более сложных задач, одного нейрона точно не хватит (когда уже больше одного скрытого слоя)
> Что за данные идут по каждому из шести синапсов
это не важно, для вая НС это черный ящык. Никто не в состоянии интерпретировать внутренние данные НС. В общем случае НС внутри обощает паттерны, выделяет среди них общие и использует эти данные для следующих слоев.
просто посмотрите картинки аппроксимацией нейронной сети с одном скрытым слоем.
а что будет с сетью если добавить немножко проблем из реального мира?
например:
входа не точные и шумят, порой сильно или работают "на глаз" 100-200 пикс. например
входа имеют гистерезис т.е. из за малого выходного воздействия могут не измениться.
датчики имеют задержку по времени которая может изменяться со временем.
в популяции могут погибать так же и лидирующие особи, например с большим шансом в 20%
внешнее воздействие может не сработать или иногда сработать в обратную сторону
наверное очень сильно распухнет нейронная сеть сразу до десятков тысяч штук?
потому что появится необходимость ставить сложные узлы-фильтры входов, обвязывать обратной связью и ставить датчики на срабатывание выхода и тд и тп?
т.е. выйдет то что у меня всегда выходит — какой то адовый мегамонстр который учитывает все эти ньюансы просто в коде и HDL схеме без всяких нейронных сетей.
есть ли практическая польза от такого обучения?
человек если хорошо играет в одну логическую игру, то он вероятно сможет хорошо играть и в другую. знания из одной игры или вида деятельности помогает в другой игре или виде деятельности.
еще такая мысль. популяции может быть несколько, у каждой популяции разные условия. потом между популяциями устраивать соревнования. или скрещивание представителей из разных популяций.
Надо упомянуть, что у этой игры есть и строгое математическое решение: https://habrahabr.ru/post/217645/
1. создаём исходную популяцию из 10 объектов (птиц) со случайными нейронными сетями
Под «случайными нейронными сетями» имеется в виде нейронные сети с различными структурами сети или нейронные сети одной структуры с различными весами?
Алгоритм машинного обучения Flappy Bird