Цель: показать, способна ли нейронная сеть (или ее данная реализация) воспринимать «окружающий» мир, самостоятельно обучаться и на основе собственного опыта принимать решения, которые можно считать относительно разумными.
Задачи
- Описать и построить информационную модель.
- Реализовать модель и объекты на языке программирования
- Реализовать основные свойства, присущие разумным созданиям.
- Реализовать мыслительный аппарат и механизмы «восприятия» объектом модели окружающего мира
- Реализовать механизм взаимодействия объекта модели с окружающим миром и другими объектами
1. Информационная модель
Для описания информационной модели нужно понять какие основные характеристики объекта мы хотим увидеть, в качестве «основных» характеристик разумного существа я выделил следующие:
- Наличие механизмов восприятия окружающего мира;
- Наличие механизма взаимодействия с окружающим миром;
- Наличие памяти;
- Наличие мыслительных систем (какие бы они ни были);
- Возможность принимать решения о взаимодействии с окружающим миром на основе информации, которая воспринимается и опыта.
Под окружающим миром примем пространство в плоскости с эвклидовой метрикой, с некоторым конечным количеством моделируемых объектов.
Механизмы восприятия в пространстве могут быть различны, в данной модели такими механизмами приму 4 сенсора, объекта, которые могут дать информацию о окружающем мире. Под информацией об окружающем мире будет подразумеваться некое значение, пропорциональное расстоянию до ближайшего другого объекта. Так как 4 сенсора будут смещены относительно «центра» объекта он получит представление о том, где находится ближайший объект (в теории).
Механизм взаимодействия в модели примем следующий: 4 «движителя», каждый из которых представляет то, насколько быстро объект стремится двигаться в том или ином направлении. 4 «движителя» позволят свободно перемещаться в пределах плоскости. Взаимодействием в таком случае будет возможность двигаться в пространстве.
Наличие памяти возможно реализовать следующим образом: объекту будет сохранять информацию о данных с сенсоров и текущих «ускорениях» в движителях, таким образом имея массив из подобной информации можно составить полную информацию о том, что происходило с объектом.
Под мыслительной системой будет подразумеваться нейронная сеть в той или иной конфигурации.
Возможность принимать решения обусловлена архитектурой нейронной сети, опыт и воспринимаемая информация предоставляется памятью и сенсорами.
Для того, чтобы решения имели какой либо смысл примем «стремления» для объектов:
1. «Съесть» другой объект (в нашем случае объект будет «съеден» другим в случае, если приблизится на достаточное расстояние и будет «достаточно силен»).
2. «Не быть съеденным», в нашем случае стараться не позволить другим объектам приблизиться к себе, чтобы не дать им возможности себя «съесть».
Для принятия решения о «силе» ближайшего объекта примем еще 1 канал информации, который будет сообщать «сильнее ли ближайший объект».
Таким образом, описанная модель объекта удовлетворяет всем поставленным требованиям.
2. Реализация модели
Для реализации модели будет использоваться язык программирования C#. В качестве реализации нейронной сети будет применяться Encog Machine Learning Framework. Он очень гибкий и быстрый, не говоря уже о простоте использования.
Код модели достаточно простой, это не единственная возможная его реализация, данную модель может дополнить и изменить каждый.
Функционирование объекта в данной реализации модели построено вокруг функции DoLive(), в которой поочередно происходят следующие жизненные этапы объекта:
RefreshSense — обновление данных сенсоров (огляделся вокруг);
Move — сделал шаг (переместился в пространстве);
SaveToMemory — обновил память, запомнил текущую обстановку;
Train — «обучился», проанализировал память;
Compute — принял решение о положении движителей на основе опыта и информации о ближайшем объекте;
Output — задал параметры движителей на основе принятого решения:
Таким образом, протекает каждый жизненный цикл всех объектов на протяжении всего их существования.
3. Проверка модели
Для просмотра результата моделирования потребуется каким либо образом извлечь информацию о текущем состоянии модели на каждом ее этапе, т.к. модель динамическая наиболее эффективным будет использование видеозаписи. Для реализации вывода в видео файл воспользуемся библиотекой AForge.Video.FFMPEG.
Пример 1. Без информации о силе ближайшего объекта (нет стремления избежать гибели):
Пример 2. Высокая «инертность» мышления (реже останавливается поразмышлять о окружающем его мире и проанализировать опыт):
Пример 3. Конечный вариант реализации
Пример 4. С функциями «размножения» и «охоты»
Пример 5. Расширенная модель, «генетическое» наследование «удачных» генов, мутации генов при наследовании, большее генетическое разнообразие (16 видов активации нейронов, различное число и конфигурация слоев)
Пример 6. Расширение возможностей восприятия, объекты воспринимают не только ближайший объект, но и другие объекты также.
Пример 7. Частичное наследование памяти от «родителя».
4. Выводы
Объектам подавалось минимум информации, не было никаких правил относительно движения или управления движителями, только информация об окружающем пространстве, объектах и обратная связь о своем состоянии. Этой информации оказалось достаточно, чтобы объекты "научились" самостоятельно находить и «поедать» «слабых» и «убегать» от «сильных».
В целом нейронная сеть может использоваться для моделирования действий, достаточно разумных.
Применение нейронных сетей в моделировании может иметь и прикладное значение, например в управлении игровыми объектами, достаточно описать "возможности", далее объекты будут «жить» своей жизнью, используя доступные возможности для своей выгоды. Принцип показанный в статье может найти применение в робототехнике, достаточно дать программе доступ к сенсорным системам, системам управления и поставить цель, благодаря памяти и нейронной сети устройство может самостоятельно "научиться" управлять доступными системами так, чтобы поставленная цель была достигнута.
Все материалы, исходные коды бесплатны и доступны всем желающим.
Надеюсь данная статья поможет тем, кто хочет научиться использовать нейронные сети.
Комментарии (69)
Mistx
21.08.2015 10:04Шикарно, а над своим фреймворком не думали? Очевидно же, что для роботов понадобится такое…
vpuhoff
21.08.2015 10:49+3Для роботов можно его хоть сейчас применять, нужно только решить вопрос с сенсорным восприятием и не забыть сменить «цель» с уничтожения всего живого.
Mistx
21.08.2015 10:56Применять, можно, в частном порядке и с Вашей помощью. Но я говорил о фреймворке: наборе документированных стандартных блоков кода, с помощью которых любой программист сможет быстро создать интеллект робота, с учётом доступных сенсоров и рабочих органов.
vpuhoff
21.08.2015 13:41Ясно, это будет не сложно, попробую сделать такой фрэймворк, опишу потом в формате статьи. Спасибо за идею.
savostin
21.08.2015 10:11+1Я бы выбрал такой порядок: RefreshSense > SaveToMemory > Train > Compute > Output > Move
vpuhoff
21.08.2015 10:52Полностью согласен, на самом деле он такой и есть, так как весь процесс циклический то move в начале всегда проходит после output в конце, не считая момента появления на свет объекта, в первый раз он просто стоит на месте.
avvor
21.08.2015 10:41+2Было б интересно если бы было еще размножение, тогда бы эта штука могла жить долго и не заканчивались тем что остается только несколько сильных нейронов.
vpuhoff
21.08.2015 10:53В начале так и сделал, но им этот процесс видимо нравится больше чем охота и все заканчивалось тем, что на экране не оставалось места, где бы не «размножались» объекты. Чуть позже выложу видео того как это выглядит.
Mistx
21.08.2015 11:10+1А если генетический алгоритм им при размножении задать, определяющий фенотип, и способности, а потом оставить на несколько лет покрутиться на супер ЭВМ, то там потом и поговорить можно будет с кем нибудь?
crystalbit
21.08.2015 11:20Вспомнился рассказ Днепрова «Крабы идут по острову», как раз именно на эту тему
Mistx
21.08.2015 11:25Это я к тому, что нет уверенности, что мы сами на такой ЭВМ не «крутимся»…
crystalbit
21.08.2015 11:44Теперь вспомнился «Тринадцатый этаж» :)
Хотел дополнить свой предыдущий комментарий, но уже поздно было, напишу тут. У Днепрова все рассказы с большим упором на технику, про инженеров. В «Крабы идут по острову» в военных целях разработали робота, который поедал металлы и делал копию себя, всегда не очень точную (со случайными отклонениями). И вот два человека высадились на пустом острове, предварительно закопали бруски из разных металлов как пищу для роботов. Выпустили похожего на краба маленького робота и стали ждать с расчётом на то, что роботы начнут войну, поедая друг друга, когда кончится весь металл. И в итоге отбора останется идеальный экземпляр.vpuhoff
21.08.2015 12:04интересная тактика, такое вполне можно добавить в модель и посмотреть, что из этого выйдет.
vpuhoff
21.08.2015 11:41Похожая идея была в романе Д.Симмонса «Гиперион», в нем все разумные машины «развились» из подобных «одноклеточных»
vpuhoff
21.08.2015 11:40Это можно сделать, достаточно «передать по наследству» конфигурацию сети, как раз об этом думал для следующей статьи.
lair
21.08.2015 14:14Правильно ли я понял, что, фактически, все, для чего вы используете нейронную сеть — это, имея на входе набор расстояний до объекта, так подрыгать ложноножками, чтобы минимизировать (или максимизировать, в случае «угрозы») все эти расстояния?
vpuhoff
21.08.2015 14:23Так и есть) У объектов ничего кроме глаз\ушей\носа и «ложноножек» нет:)
lair
21.08.2015 14:26А как вы оцениваете эффективность принятого решения?
vpuhoff
21.08.2015 14:35+1За успешное приближение к другому объекту увеличивается «счетчик силы», более сильные объекты могут пообедать более слабыми. Слабые погибают, сильные выживают. Другой оценки эффективности нет.
lair
21.08.2015 14:36За успешное приближение
Что такое «успешное приближение»?
увеличивается «счетчик силы»
Он участвует в тренировке/оценке?
Слабые погибают, сильные выживают.
«выживаемость» как-то участвует в тренировке/оценке?vpuhoff
21.08.2015 14:44+1Приближение к другому объекту на очень маленькое расстояние,. «успешное», если при этом остался в живых.
«Счетчик силы» не участвует в тренировке, но косвенно влияет на решение, он нужен для того, чтобы оценить нужно ли приближаться к объекту или лучше от него убегать. Выживаемость она либо есть, либо ее нет (не выжил), в тренировке не участвует.lair
21.08.2015 14:46Приближение к другому объекту на очень маленькое расстояние,
Что такое «очень маленькое расстояние»?
Он не участвует в тренировке, но косвенно влияет на решение, он нужен для того, чтобы оценить нужно ли приближаться к объекту или лучше от него убегать.
Насколько я помню, у вас это решение напрямую принимается в кодеif
-ом, безо всякой сети.
Выживаемость она либо есть, либо ее нет (не выжил), в тренировке не участвует.
Тогда как же нейронная сеть понимает, что она успешно «убежала»?vpuhoff
21.08.2015 15:03Расстояние выбрано опытным путем, оно достаточно малое, чтобы случайно сблизиться было бы крайне сложно, в последней версии это расстояние равно 0.008, при «размере» выделенного пространства 1х1.
Насколько я помню, у вас это решение напрямую принимается в коде if-ом, безо всякой сети.
Верно, таким образом мы задаем сети цель, то есть то, что мы хотим получить. Задается это не в явно, а посредством передачи «шаблона» {0,0,0,0} — мы хотим чтобы на сенсорах были нули или шаблона {1,1,1,1} — на сенсорах единицы. Нельзя получить у сети решение не предоставив ей задачи.
Тогда как же нейронная сеть понимает, что она успешно «убежала»?
Она этого не знает, если она не убежала ее функционирование прекращается. Если же она смогла уйти это отразится на ее памяти, как это повлияет на саму сеть неизвестно. Как раз это и было интересно определить в первую очередь.lair
21.08.2015 15:05Расстояние выбрано опытным путем, оно достаточно малое, чтобы случайно сблизиться было бы крайне сложно, в последней версии это расстояние равно 0.008, при «размере» выделенного пространства 1х1.
Но как вы считаете это расстояние?
Если же она смогла уйти это отразится на ее памяти,
Каким образом?
Пока у меня создается ощущение, что «выживаемость» в вашем описании — это иллюзия. Вы оптимизируете строго один параметр (матрицу расстояний).vpuhoff
21.08.2015 15:14Но как вы считаете это расстояние?
<spoiler title="«Обычная» функция расчета расстояния, ничего особенного">
double GetDist(double x1, double x2, double y1, double y2) { return Math.Sqrt(Math.Pow(x1 - x2, 2) + Math.Pow(y1 - y2, 2)); }
Каким образом?
Объект все данные сенсоров, «положение» «ложноножек» в каждый ход, после производит повторное обучение сети.
Насчет выживаемости сказать трудно, с одной стороны поведение сети выглядит разумным, с другой стороны очевидно разумом там и не пахло, а значит так или иначе это просто оптимизация.
Я не ставил цели получить объект играющий в покер, было интересно проверить будут ли объекты«биться головой об стену»вести себя нерационально или же покажут признаки разумного поведения.lair
21.08.2015 15:17То есть внезапно, вы вводите в качестве оценки новую величину, которой раньше в системе не было?
Я не ставил цели получить объект играющий в покер, было интересно проверить будут ли объекты «биться головой об стену» вести себя нерационально или же покажут признаки разумного поведения.
Признаков разумного поведения они не покажут. Оптимизация параметров по заданному извне критерию — это вряд ли разум.vpuhoff
21.08.2015 15:23Поэтому я и уточнил «принимать решения, которые можно считать относительно разумными». Я не говорил что перед объектами не будет поставлена задача, если ее не ставить, им нечего будет делать и соответственно не получится за ними наблюдать.
kraidiky
21.08.2015 15:15Я прям совсем советую в качестве виртуального мира использовать unity. Я сем свою сеть, которую сейчас пишу, буду тестить на «выживание» именно там. Плюсы для вас, и для меня:
1) Готовая реализованная физика мира с правилами, настраиваемыми в широких диапазонах.
2) С# в качестве внутреннего языка.
3) Реализация множества готовых алгоритмов для виртуальности, например RayTracing
4) Хорошая и лёгкая визуализация всего происходящего в системе.vpuhoff
21.08.2015 15:16Согласен, цель этого исследования проверить в более «простых» условиях имеет ли смысл использовать нейронные сети для управления объектами. Дальше планировал как раз использовать полноценную среду и более сложные объекты.
kraidiky
21.08.2015 15:52В том то и фокус, что если бы знали Unity на уровне двухдневных курсов вам было бы проще использовать её, чем делать свою визуализацию со стеночками и точечками. Лёгкий старт можно получить в виде видеоуроков на ютубе. Так что как будете в следующий раз писать — вот вам хороший инструмент.
vpuhoff
21.08.2015 16:08Согласен, с unity уже немного познакомился, там не намного сложней, но не проще рисования на bitmap:) У меня на отрисовку и запись в видео идет около 10 строк, из которых половина drawcircle. К тому же есть и другая проблема, вычисление 20 объектов с несколькими тысячами нейронов в сети (в каждом объекте) не такая тривиальная задача, поэтому «отрисовка» немного не в реальном времени, что намного красивее смотрится в видео, после генерации.
kekekeks
21.08.2015 20:092) С# в качестве внутреннего языка.
А что, туда .NET 4.0 уже завезли?kraidiky
21.08.2015 23:56Там дурацкий монгакомпилятор, который подтягивает библиотеки по ситуации. Не совсем то же самое, что из ВижуалСтудио, но в процессе разработки разница, по большому счёту не чувствуется, если вы не полезете байткод читать. Кроме того сейчас ВизуалСтудио стремительно интегрируется с Юнити, так что уже и нормальная отладка доступна, и скоро, я думаю, и полноценный компилятор и последний дотнет будут нативно.
kekekeks
22.08.2015 00:57Так дотнет завезли четвёртый или там всё ещё Mono 2.6 со всеми вытекающими?
kraidiky
22.08.2015 02:01Я ж говорю, что пока вытекающие, кажется. Хотя если свой считающий код писать, то дотнет не особо то упирается.
kekekeks
22.08.2015 12:20Ну и зачем такое счастье, если можно взять XNA/MonoGame и не иметь проблем с подключением библиотек и использованием свежих возможностей языка?
kraidiky
22.08.2015 18:43-1А зачем вам вообще нужны свежие возможности языка если вы занимаетесь не приделыванием интерфейсиков к базам данных, а научными расчётами? Со времён Фортран-77 в решение таких задач ничего принципиально не поменялось. И прочти все без исключения языковые навороты нового времени расчёт только замедляют.
И я, конечно, много чего в C# не использую, но из подключаемых библиотек в Unity проблемы до сих пор имел только с родной System.Linq которая не завелась на iOS-е.kekekeks
22.08.2015 18:51+1А зачем вам вообще нужны свежие возможности языка если вы занимаетесь не приделыванием интерфейсиков к базам данных, а научными расчётами
В .NET 3.5 не было Task Parallel Library, ParallelLinq, BigInteger/Complex. В C# 3.0 не было необязательных параметров, ко/контрвариантности и разного рода сахара типа интерполяции строк, инициализаторов. Практически все библиотеки, включая используемый автором поста encog не поддерживают .NET 3.5. Этого достаточно или продолжать?kraidiky
22.08.2015 22:49— Task Parallel Library — Можете указать научную библиотеку для которой именно TPL было бы необходимым условием? Это всё, конечно, удобно, но если вы делаете нейронную сеть со слегка небанальной архитектурой то паралелизацию вам всё равно придётся делать ручками. Потому что адский ад паралельных обращений к переменным, потому что небанальное понимание какие очереди рассчётов можно запускать после каких и потому, что накладные расходы библиотеки, скорее всего больше чем вес самой расчётной задачи, если у вас в потоках вычислений всего по несколько нейронов.
— ParallelLinq — По вполне очевидным причинам не может использоваться при написании нейронной сети, кроме как по приколу.
— BigInteger — Только для очень специфичных задач. Я в своё время написал обычную сеть с обратным распространением работающую полностью в целых числах, так мне long хватило ваще за глаза. И то это было сделано скорее по принципу, а не потому что нужно. Один раз участвовал в вычислении и распечатывании факториала 10000, но даже и там оно бы не пригодилось — мы считали сразу в десятичной системе, что бы не переводить потом из системы в систему число, которое в 64Кб памяти не помещается.
— Complex — Пффф. Все кому нужно было давно за 30 минут себе свой написали.
— C# 3.0 не было необязательных параметров — В монодевелопе совершенно замечательно работают и не пищат.
— ко/контрвариантности — Безусловно важная фича для построения красивой объектной архитектуры и исключения дублирования методов, но, блин, на кой она фиг в рассчётных задачах? Правильное ООП это не для этого случая хотя бы потому, что виртуальные методы дают дополнительные накладные расходы. asm, наверное чаще встречается.
— разного рода сахара типа интерполяции строк — Ну и на кой? Даже в анализе текста для машинного обучения и то конкатинация строк встречается только для формирования логов в консоль.
— инициализаторов — Вот это без балды полезная фича, хотя без неё можно прожить.
Этого достаточно или продолжать?
Можно не продолжать, и так понятно, что для вас все эти фичи важны как красивые примочки, но на кой они в данном случае вы ни на секунду не задумались, вам это не важно.
Единственное осмысленное возражение — то что библиотеки повадились хотеть 4.0 просто по умолчанию. Но если бы вы что-то своё писали подавляющее количество свежих вохможностей вам бы ни в пень не сдались.kekekeks
22.08.2015 22:52библиотеки повадились хотеть 4.0
Они его «повадились» использовать по причине упрощения написания и поддержки кода.в пень не сдались
С таким подходом можно вообще шарп не использовать, в нём же куча ненужного.kraidiky
22.08.2015 23:40А во многих областях наук и не используют. В физике до сих пор половина лучших библиотек написана на Фортране 77. :)
Библиотекам уровень среды, очень часто ставится на один ниже последнего из соображений предельно далёких от упрощения написания и поддержки кода. Я по работе андроидные игрушки делаю, так мы тоже выпускаемся на версии на 1 ниже самой новой. Тут дело не в каком-то особо устарелом подходе. Просто ваши конкретные примеры при написании ядра библиотеки реально не только не нужны, но иногда и вредны.vpuhoff
23.08.2015 12:53Согласен, полноценный .net в unity не помешал бы. Как оказалось интегрировать в него encog задача такая уж простая, требуется полноценный 4 framework.
vpuhoff
23.08.2015 12:55Как оказалось Encog весь утыкан ParallelLinq, так что видимо все таки может использоваться.
kraidiky
23.08.2015 18:18Вот сейчас реально заинтриговали. Надо слазить, посмотреть в исходный код. Может они его для сокращения записи в очень редко выполняющихся операциях используют. Сам я тоже таким грешил, пока не потребовалось оптимизировать.
vpuhoff
24.08.2015 00:59Возможно, хотя к примеру в Compute она используется для параллельной обработки.
andreymironov
21.08.2015 19:01+2Ах, ностальгия! Четыре сенсора… четыре двигателя… как же давно это было *roll_eyes*… 2011 год. В общем, когда-то писал подобное, но только без нейронки, чистая эволюция. Летающие роботы. Почитать о сути исследования можно тут. Скачать программу-реализацию можно на моём сайте. Картинка:
vpuhoff
22.08.2015 02:08Интересная модель получилась, залипал на кувыркающийся кубик минут 10) Можно было бы повторить с нейронной сетью, посмотреть что получится.
michael_vostrikov
22.08.2015 09:34+1Как уже сказали, у вас решение принимается не с помощью нейросети, а напрямую в коде. Ради интереса убрал всю работу с нейросетью. Заменил блок принятия решения
Скрытый текст//thinking //если я тот кто ближе слабее попробовать съесть, если нет драпать if (nearlife!=null ) { if (nearlife.borncount > borncount) { double[][] SenseData = { new double[] { 0, 0, 0, 0 } }; trainingSet = new BasicMLDataSet(Input, SenseData); } else { double[][] SenseData = { new double[] { 1, 1, 1, 1 } }; trainingSet = new BasicMLDataSet(Input, SenseData); } IMLData output = network.Compute(trainingSet[0].Ideal); if (output[0] > pL) { pL += 0.001; } else { pL -= 0.001; } if (output[1] > pR) { pR += 0.001; } else { pR -= 0.001; } if (output[2] > pB) { pB += 0.001; } else { pB -= 0.001; } if (output[3] > pT) { pT += 0.001; } else { pT -= 0.001; } }
vpuhoff
22.08.2015 11:17Вы все правильно сказали, нейронная сеть в контексте «догнать»\«убежать» может быть легко заменена на пару строк кода. Но у нейронной сети даже в простейшей задаче есть преимущество, решение не зависит от числа «ног» у нашего объекта, к примеру если объект будет представлять из себя нечто сложнее чем шарик с 4 ногами, к примеру такое:
Написать формулы для управления всем этим добром будет на порядок сложнее.
Очевидно конечно, что правильное описанный алгоритм будет работать лучше чем абы как сформированная нейронная сеть. Если бы я выбирал самолет с автопилотом то точно не выбрал бы тот, которым управляет нейронная сеть, во всяком случае не такая как в примерах.
Ошибки в коде конечно есть, исправляю по мере их появления, этот проект является частью следующего и призван проверить возможности нейронной сети для управления объектами, конфигурация которых будет намного сложней.
vpuhoff
22.08.2015 11:21Отдельно уточню, в коде не говорится напрямую какой ногой нужно шевелить для достижения результата, в коде говорится что «нужно приблизиться» и «нужно отдалиться», как именно это будет делаться (пошевелить ухом, двинуть ногой или чихнуть) мы не знаем и объекту не говорим, решение о том какой из доступных ей объектов задействовать для достижения цели принимает сеть.
michael_vostrikov
23.08.2015 20:25Ну вообще-то говорится. Если первый(нулевой) элемент выхода сети больше, чем левый двигатель, то увеличить тягу левого двигателя. Это очень точно и очень конкретно. Это явно связывает первый элемент с левым двигателем. Вам так не кажется? Если нет, то почему?
vpuhoff
24.08.2015 01:02А кто вам сказал что левый сенсор находится именно слева?) Суть как раз в том, что ничего такого мы сети не сообщили, она сама разобралась где у нее лево, где право и т.д. Потенциально, если у неё будет 472 сенсора со всех сторон и под разными углами и 243 двигателя, как попало натыканных по всей поверхности для нее не составит труда разобраться с тем какое влияние оказывает на нее каждый из них.
michael_vostrikov
24.08.2015 06:42У меня немного другой взгляд на нейросети (и в частности на обучение с учителем), но возможно вы правы) Удачи в исследованиях
FiresShadow
Напоминает ИИ от Google самостоятельно освоил 49 старых игр Atari
vpuhoff
Все верно, я использовал тот же принцип, но задачу выбрал чуть полегче для разминки. К тому же у них используется более сильная нейронная сеть, в моем примере она попроще, но для наглядности в самый раз.
mephistopheies
так тут тоже Q-learning или что?
vpuhoff
Даже не задумывался над этим, сейчас глянул, если верить описанию выходит тут тоже Q-learning. Когда писал алгоритм думал только над логикой.
mephistopheies
ну просто странно что если
то ни разу не упомянуто не то что бы ссылка на эту статью, а понятия обучение с подкреплением или по не русски reinforcement learning
вы градиент весов как расчитываете?
vpuhoff
Для управления нейронной сетью я использую framework Encog, насколько я помню он напрямую зависит от используемой функции активации, в данном фреймворке их 19, использовать можно любой, результаты будут различны. Для меня пока не столько важна сама сеть, сколько механизмы ее использования, поэтому я не углубляюсь пока в ее архитектуру.
mephistopheies
я вот что то порылся в вашем коде, а так же в мануале этого Енкога, не нашел ничего про то какая там целевая функция юзается; скорее всего MSE просто; но в общем не нужно вводить в заблуждение народ, у вас не deep Q-learning, а просто нейросетка которая обучается обычным обучением с учителем
vpuhoff
В целом соглашусь, ибо когда писал, опирался только на логику, в основе нет какой либо конкретной литературы, только то, что уже имелось в голове. Судя по описанию алгоритма Q-learning сходства у них есть, но это не тот самый алгоритм однозначно.
mephistopheies
оп, не в ту ветку