=DeaD= писал(а):Удачные фрагменты жизни желательно оценивать при жизни, это называется обучение на ходу, зачем его исключать?
На принципиальных схемах роботов с самообучением рисуют блок "критик", или модуль "набор правил", везде по разному, но цель в этот блок/модуль должна задаваться извне. Робот не может сам себе "смысл жизни" придумать. Сам он только кластеризации какой-нибудь научится.
"Мне хорошо" - это уже биология. Роботу должно быть "хорошо", когда он достигает цели.
Самообучение выберет топик-стартер или классику с обучающей выборкой - цель всё равно надо задать.
Вообще создалось впечатление, что цель - "выжить", прожить как можно дольше. Т.е. как топик-стартер изначально описывал - жрать батарейки и избегать опасностей, и ничего не делать, может даже просто стоять в зоне спокойствия. Абсолютно бесполезная для создателя цель, но мало у нас что ли непрактичных роботов делают?
В Ваших постах я увидел критику в мой адрес по поводу того, что не дал четкое ТЗ и не обозначил свой интерес. Прошу прощения.
Немного попробую внести ясность.
ТЗ: собрать некий модуль управления роботом, который будет самостоятельно подстраивать свои алгоритмы исходя из условий окружающей среды. Адекватно оценивая свои силы, я поставил себе задачу разработать этот самый модуль для простейших двухколесных роботов. Например, расположив положительные элементы (то, что хорошо), в определенном порядке мы сможем из одной и той же конструкции получить либо простейшего «БИМ», либо «Ланй рейсер», либо еще что-либо. Отрицательные элементы (что плохо) необходимы для самосохранения, чтобы элементарно робот не разбил себе «табло» с разбегу о стену.
Почему ИНС? Потому что нейрон – универсальный программный блок, ИМХО. Меняя архитектуру ИНС, можно добиться различных результатов.
Мой интерес: отличный ребус, который мне мешает спать по ночам. При этом я получаю колоссальное удовольствие, пытаясь решить его.
Что я уже имею: 1. Некий прообраз нейрона. Его я так называю нейроном, т.к. он схож по внешнему строению. 2. Общее понимание взаимодействия нейронов в сети, решающих данную задачу.
Почему не нейрон с википедии: 1. Реакция у него однозначная, либо сработать либо нет. Мне нужен такой, который с состояния «не знаю» мог перейти в состояние «скорее сработаю, чем не сработаю», «конечно сработаю», «не сработаю» и т.д. 2. Или не понял, или он не срабатывает в комбинации «или - или», «и - или». 3. Не понял, как ему настраивать весовые значения, чтобы выполнялся пункт 2. Основная проблема реализации – в процессе проработки алгоритма взаимодействия всплывают всевозможные подводные камни в понимании процесса, например, сейчас думаю, как избавиться от шума, поступающего с внешней среды.
Могу объявить требования к моим нейронам без элемента «плохо»: 1. Прежде чем действовать, слой нейронов должен запросить «разрешение» у элемента, стоящего выше. Самый первый слой «просит» разрешение у блока «хорошо/плохо». Остальные слои запрашивают разрешение у вышестоящих слоев. 2. Реакция на сигналы у нейрона происходит случайным характером, по принципу, если должно быть «хорошо», то вероятность срабатывания выше, если никак, то ближе к нулю, но не ноль. Соответственно, в процессе обучения вес варьируется от «ближе к нулю», до максимального значения. 3. Весовые диапазоны нейрона должны растягиваться или сужаться в зависимости от частоты положительного подкрепления. Например, если элементов «хорошо» много, то диапазон сужается. А если между «хорошо» и «хорошо» необходимо долго работать вхолостую, весовые диапазоны растягиваются. 4. Если ни один нейрон в слое не сработал, слой «дает разрешение» нижестоящему слою решить задачу. Необходимо для сложных действий, например, если есть задача оттолкнуться «ногой», то для начала эту ногу нужно подтянуть под себя и упереться.
Алгоритм: 1. Запросить разрешение на активацию нейрона 2. Считать входные показатели 3. Срабатывание (0/1) 4. Выполнение команды 5. Проверка блока удовольствия/боли (оценка реакции) 6. Корректировка весовых значений 7. Возвращение в исходное состояние
К вопросу реализации: Продолжайте кидать в меня камни, но я владею поверхностно только Delphi (в мое детство еще в школе давали азы программирования, было интересно – немного освоил)
Поэтому, реализация для начала, алгоритмы и блок схемы. Вопрос, где эти алгоритмы реализовывать не рассматривается, т.к. это уже следующий шаг.
gar_anat писал(а):Почему не нейрон с википедии: 1. Реакция у него однозначная, либо сработать либо нет. Мне нужен такой, который с состояния «не знаю» мог перейти в состояние «скорее сработаю, чем не сработаю», «конечно сработаю», «не сработаю» и т.д.
это определяется функцией активации нейрона, м.б. стоит полистать чтото более существенное, есть доступные материалы и для новичков
gar_anat писал(а):2. Или не понял, или он не срабатывает в комбинации «или - или», «и - или». 3. Не понял, как ему настраивать весовые значения, чтобы выполнялся пункт 2.
никак, для это этого нужно больше одного слоев
gar_anat писал(а):Основная проблема реализации – в процессе проработки алгоритма взаимодействия всплывают всевозможные подводные камни в понимании процесса, например, сейчас думаю, как избавиться от шума, поступающего с внешней среды.
сеть сама избавиться от шума, либо под "шумом" вы имеете чтото другое
gar_anat писал(а):Могу объявить требования к моим нейронам без элемента «плохо»: .....
изучение уже существующих достижений в этой области даже на уровне новичка избавило бы вас от необходимости изобретать велосепед (по крайней мере трехколесный) и существенно ускорило прогресс, впрочем соглашуть что и самому доходить до всего занятие увлекательное
1. «это определяется функцией активации нейрона, м.б. стоит полистать чтото более существенное, есть доступные материалы и для новичков.» С функцией активации у меня проблем нет. По крайней мере пока.
2. «никак, для этого нужно больше одного слоев» А в моей версии все это должно быть в одном нейроне. Результирующий выход один. По сути, в моей версии программный нейрон – это некое устройство (функция), выдающее 0/1 на выходе и должна быть применима к исполняющему устройству (мотор, например). Пока играюсь с двумя/тремя входами, пытаясь организовать внутри логику «И/ИЛИ». Элемент «НЕ», почему-то вообще не смог туда воткнуть.
3. «сеть сама избавиться от шума, либо под "шумом" вы имеете что-то другое» У меня не избавляется , смотрю в сторону "установки" предварительного фильтра сигналов, фильтрующих шум.
4. Последний пост. Если «рожу» сам, буду прыгать от счастья.
gar_anat писал(а): С функцией активации у меня проблем нет. По крайней мере пока.
откуда тогда проблема №1?
gar_anat писал(а):А в моей версии все это должно быть в одном нейроне. Результирующий выход один. По сути, в моей версии программный нейрон – это некое устройство (функция), выдающее 0/1 на выходе и должна быть применима к исполняющему устройству (мотор, например). Пока играюсь с двумя/тремя входами, пытаясь организовать внутри логику «И/ИЛИ». Элемент «НЕ», почему-то вообще не смог туда воткнуть.
боюсь некоторые ограничения нейрона преодолеть невозможно, в противном случае это будет уже не нейрон, а некая узкозаточенная программая схема с которой вам уже никто не поможет..
gar_anat писал(а): С функцией активации у меня проблем нет. По крайней мере пока.
откуда тогда проблема №1?
gar_anat писал(а):А в моей версии все это должно быть в одном нейроне. Результирующий выход один. По сути, в моей версии программный нейрон – это некое устройство (функция), выдающее 0/1 на выходе и должна быть применима к исполняющему устройству (мотор, например). Пока играюсь с двумя/тремя входами, пытаясь организовать внутри логику «И/ИЛИ». Элемент «НЕ», почему-то вообще не смог туда воткнуть.
боюсь некоторые ограничения нейрона преодолеть невозможно, в противном случае это будет уже не нейрон, а некая узкозаточенная программая схема с которой вам уже никто не поможет..
Проблема №1 - это отсутствие у меня должного уровня знаний и некорректная формулировка В общем. Мой нейрон имеет N входов и один выход. Задачи "ядра": 1. Определить какие комбинации входов являются значимыми, убирая не значимые входы и шум. 2. Определить насколько полученные комбинации являются полезными/вредными. Соответственно, реакция меняется от уровня полезности. В пункте 1 комбинаций входов может быть несколько, и они должны выстроиться в четкую структуру "И"/"ИЛИ". Например: (вход 1 и вход 2) или вход 3 = хорошо для срабатывания этого нейрона. Реакция: сработать с вероятностью 75%. Насчет узкоточечной программной схемы - так и есть, это узконаправленный программный процессор, сеть из которых и будет моей будущей НС. Про помощь - тему-то я другую делал, и ответ я получил еще на второй странице. Но что-то закрутилось тут...до сих пор дискутируем, очевидно вопрос применения ИНС живет в умах многих.
gar_anat писал(а): Задачи "ядра": 1. Определить какие комбинации входов являются значимыми, убирая не значимые входы и шум. 2. Определить насколько полученные комбинации являются полезными/вредными. Соответственно, реакция меняется от уровня полезности.
вы пытаетесь впихнуть в один нейрон то что обычно решает сеть нейронов, с учетов ваших знаний и общих навыков программирования я бы рекомендовал вам чего полегче
Fayras писал(а):боюсь некоторые ограничения нейрона преодолеть невозможно, в противном случае это будет уже не нейрон, а некая узкозаточенная программая схема с которой вам уже никто не поможет..
gar_anat, если вы придумаете "настолько свой" нейрон, то следом вам придется придумывать свои алгоритмы обучения вашей сети. А это мягко говоря - не так уж и просто.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
люди, перестаньте говорить "ты не сможешь", "это сложно".. человек выбрал свой путь..
«Как сердцу выразить себя? … Мысль изреченная есть ложь!» В этом мире меня подводит доброта и порядочность... "двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"