Перейти к содержимому

Лидеры


Популярный контент

Показан контент с высокой репутацией 07.10.2019 в Сообщения

  1. 1 балл
    (проект в разработке) Цель данного проекта - создание нейросети и условий для ее самообучения. В идеале, это будет бомжовый робот минимальной комплектации (возможно даже без жесткого диска), который в зависимости от окружающих условий будет определять свою полезность. Также, он будет "программироваться" снаружи с помощью окружения оставленного другими роботами, формирующими "улей". Апогеем будет саморепликация. Кроме достижения цели, важен и процесс. Наблюдать за самообучением и выбором действий у нейросети очень интересно. Нейросеть изнутри: Мигающие точки - нейроны, линии - синапсы (связи), справа эмулятор мира майнкрафт на движке Love 2d. Нейросети устроены похожим образом. Есть входные значения, скрытые слои и выходные значения. В моей программе робот собирает информацию вокруг себя. На вход подается: Есть ли блоки над, под и перед ним Насколько много клеток он "разведовал" за последнее действие Его позиция в виде значений x,y,z от 0 до 1 Иногда я тестирую со значениями стороны куда он смотрит, возможностью двигаться, расстоянию до последней удачной копки Нейросеть "думает" и выдает 5 значений, которые соответствуют действиям движения 1) вперед, 2) вниз, 3) вверх, 4) вправо, 5) влево. Робот выполняет большее из этих значений. Далее, после действия, я вычисляю коэффициент полезности r [0..1] для этого действия. -- swingSucces: количество вскопанных блоков за действие [0..3] -- input.exploreSucces: коэффициент разведки [0..1], где 0 - уже разводовал все 3 блока, 1 - впервые проверил эти 3 блока -- logic(input.sweetsD < input.old.sweetsD): расстояние до последней удачной копки увеличилось 0, или уменьшилось 1 r = (swingSucces + input.exploreSucces + logic(input.sweetsD < input.old.sweetsD)) / 5 Нейросеь обучается, и в выбранное выходное значение приписывается r a остальные уменьшаются\увеличиваются на 1-r for i=1, #output do output[i] = switch i when actKey (output[i]+val^2)/2 when rndKey (output[i]+(1-val))/2 when oppositeKey (output[i]+(1-val))/4 else output[i] nn:propagate(output) Теперь матан. В начале я использовал обычный Персептрон, найденный готовый на ЛУА, но который мне пришлось править. Проблема в том, что он не может учитывать последние состояния. Нейросети с памятью называются "Long short-term memory" или LSTM, где каждый нейрон выглядит вот так: Найдя библиотеку synaptic.js, хитрыми путями я извлек из нее готовую LSTM сеть, которая получилась на 53 000 строк. Но это не проблема, если зайдет, я перепрограммирую ее на LUA. Текущее состояние сети - отстой. Я неправильно ее обучаю, так как не знаю какие значения выдавать для "обратного распространения ошибки". Круча разные коэффициенты, у меня получилось научить ее двигаться по спирали, как карьерный робот. Сейчас, когда я добавил во входные значения расстояние до последней удачной копки, он научился "кушать" как яблоко, но с огромный количеством лишних действий. В самом майне блоков намного больше и это выглядит вот так. На первом скрине работал 1 робот, на втором штук 6. Сейчас в их действиях слишком много шума. Я специально не даю им кирки, что бы они не унеслись в бесконечность. Фидбек Мне нужно помощь. Подскажите, что лучше подавать на вход, и как обучать сеть. Главная проблема, что для обучения я должен указать какие значения должны быть на выходах при текущих условиях, а я и сам не знаю. Обычно, робот теряется в пустом пространстве и я не знаю какое действие ему казать как "единственно правильное". А так, буду сюда отписываться и отчитываться о процессе разработки. Update 20.06.19, веб-версия эмулятора
  2. 1 балл
    В общем я много думал, и это не вариант. Если превратить выходные нейроны во внутренний слои и с них снимать значения, то последний один нейрон а.к.а "полезность" просто настроится всегда показывать 0. Для нейросети это беспроигрышный вариант - робот забился в угол, нейросеть определяет что польза будет 0, и ты ей обратным распространением ошибки подкрепляешь и передаешь 0. В общем, не выйдет так делать. Последние 3 дня работаю над экспортом эмулирующей программы в браузер, но и развлекаюсь добавляя анимации
  3. 1 балл
    Если интерфейс масштабируется, то хватит простенького API, чтобы можно было послать на него состояние и расположение нейронов, отдельно команду роботу. Хотя, мне бы хватило визуализатора самого робота, а то в 2D поигрался и надоело. 3D мне проще в самом майне тестить.
  4. 1 балл
    Целую неделю вожусь с графикой. Это поможет сделать нейросеть более нагляднее. А еще, я собираюсь за эту неделю перевести программу тестирования на HTML5, в браузер, так что каждый сможет попробовать свои собственные формулы для обучения. В интерфейсе можно будет брать любые параметры на входе, рассчитывать их как угодно и выдавать результат нейросети. Посмотрим, вдруг кто то из вас найдет метод лучше чем я. P.S. Зачем удалили сообщения? Норм же общались...
  5. 1 балл
    В целом, улей это достаточно крутая идея. И у меня есть парочка идей по этому поводу. 1) В улье должна заправлять "матка" - специальный сервер, который будет подключаться через интернет-карту к реальному компьютеру, исполняющему, допустим, Python-программу (нейросеть на 4МБ ОЗУ - такое себе). Она анализирует (хотя это скорее ИИ, а не нейронка) задачу, которая ей дана - допустим, создание определенного количества роботов, разбивает ее на несколько мелких (создание робота = поиск ресурсов + крафт компонентов + крафт робота) и делегирует их роботам. Основная задача "матки" - недопущение собственной разрядки и разрядки роботов. 2) Роботы также должны иметь нейросеть или ИИ, но куда меньшие, предназначенные для решения "маточных" задач из разряда принеси-подай, добудь-поставь.
  6. 1 балл
    Я тоже такую оболочку делал, но идея себя быстро исчерпала.
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...