За последние 24 часа нас посетили 21499 программистов и 1025 роботов. Сейчас ищут 710 программистов ...

Нейросеть, которая обучается во сне

Тема в разделе "Беседы", создана пользователем Maputo, 13 мар 2018.

  1. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    А переведите тему в про раздел и закрепите.
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Ну...тут не то чтобы вебдев, к сожалению.
     
  3. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Abyss, я думаю "беседы" самое то.

    Нашел способ коррекции "ошибок". Если при определенной комбинации фишек на игровом поле "дергать" тот выходной нейрон, куда (по мнению учителя) должна совершить ход сеть, то его выходной сигнал подтянется к 0.5 и у этого нейрона в этой ситуации будет приоритет.
    НО! У меня большие сомнения на счет того стоит ли форсировать события и давать возможность человеку решать, что правильно, а что нет?
     
    #53 Maputo, 20 мар 2018
    Последнее редактирование: 20 мар 2018
  4. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Решил доверить этот процесс не человеку, а компьютеру.
    Теперь после каждой игры с человеком нейросеть "переосмысляет" свои ходы.
    Т.е.: если она проиграла то ей на вход подается последовательность состояний игрового поля и на выходе запрашиваются все доступные варианты ходов, кроме тех, что она выбирала. Если она выиграла - тогда в этой последовательности запрашиваются на выходе нейроны совпадающие с ее ходами.

    Вобщем попытка показать разницу между поражением и победой. При поражении ей принудительно дается шанс подумать о других возможных ходах. При победе выбранные ходы закрепляются.
     
  5. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Из-за обнаруженного "бага" состояние сети пришлось откатить на 3 дня назад, для сохранения чистоты эксперимента.

    Тактический прием с захватом центра пришлось учить заново, но результаты (как мне кажется) лучше:
    [​IMG]
     
  6. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    За счет последних новшеств удалось трехдневный процесс обучения уложить в один день. Веса распределились похожим образом, но разница все же есть.
    Нейрон 7-56 до обнаружения "бага":
    [​IMG]
    Он же после сброса состояния на 3 дня назад и переобучения:
    [​IMG]

    Разницы практически нет, если не считать небольшого смещения весов в сторону синапса ячейки 56
    Но вот на нейроне, отслеживающем все игровое поле разница куда более заметна.
    До обнаружения "бага":
    [​IMG]
    После переобучения:
    [​IMG]
    По другим показателям из-за отключения сохранения после сна сеть эволюционирует реже. Про плюсы в обучении пока ничего не могу сказать - подвижки имеются, но пока не выигрывает.
    Вот тут она меня подловила:
    [​IMG]
    Но закрепить преимущество не смогла, вследствии чего и проиграла.
     
    igordata нравится это.
  7. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Удалось обнаружить, что длительный и частый сон теперь вредит сети. Поэтому время сна сократил еще вдвое и интервал увеличил до 50+ партий.
    Жалко было терять обученные сети - провел турнир между 64 снимками сетей, которые обучались с ошибкой в коде. В победители вышла одна из последних версий.
    Вот какими стали веса синапсов у нейрона, следящего за всем игровым полем:
    [​IMG]
    Веса стали выравниваться, что не может не радовать.
    Ей даже пару раз удалось у меня выиграть, но потом она была автоматически погружена в сон (на локальном сервере он длится намного дольше), после чего стала делать глупости. Я и решил, что такой сон в данной ситуации вредит. Может и вообще вреден, а может надо точнее его настраивать. Этот вопрос еще предстоит исследовать. Но в начале обучения он помогает подогнать веса под рабочие значения.
    Эту версию сети не стал загружать на сервер - слишком много "мутаций".
     
  8. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Maputo и каким же образом ты отказался от обратного распостранения ошибок?
    600 нейронов на 5 слоёв? если бы это была фанн то структура крайне неудачная
    --- Добавлено ---
    @Maputo как на счёт сна который активируется после Н проигышей? так как после выигрыша учится то нечему
     
  9. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @abrdabr, от обратного распространения ошибки через всю сеть. Похожий алгоритм у меня используется внутри нейрона, независимо от "ошибки" всей сети.
    Зейчас 300 нейронов на 3 слоя. То была первая "ленивая" архитектура.
    Сон помогает частично избавиться от шумов (правда, бывают полезные шумы), а они есть и при выигрыше и при проигрыше. К тому же и победы закреплять тоже надо. Вообще все партии сети еще и "переосмысляют".
     
  10. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Maputo можно полную структуру увидеть? типа распределение нейронов по слоям.
    так чем сон отличается от "эпохи обучения"?
    но сравнивая с человеческим сном и видюшкой с ютуба о "ходе бога", рекомендую вставить в сон рандомный ход, что позволит не толлько перенимать опыт но и "творить"
    полагаю сейчас у тебя дизбаланс "закреплялок" и "переобучалок", что нейтрализовать выйдет только математическим угадыванием ))))
    --- Добавлено ---
    вау, я выиграл))) только сегодня научился играть, но телефон меня делал как лоха, сложность была "глубина просчёта один ход". Всётаки нейросеть знает чего я хочуDDDDDDDDDDDD
     
  11. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    По сути так и есть, даже больше - на вход подаются рандомные числа (тот же шум, но не имеющий никакой логики, кроме логики алгоритма псевдослучайной последовательности). Возможно его действие больше похоже на электрошок, чем на сон.
    Входной слой - 64 нейрона
    Скрытый слой (178 нейронов) состоящий из нейронов отслеживающих горизонтали, вертикали, диагонали и сегменты (2х2, 3х3, 4х4, 5х5, 6х6, 7х7, 8х8)
    Выходной слой 64 нейрона (каждый из которых связан с одним нейроном входного слоя и несколькими нейронами скрытого слоя, чьи синапсы подключены к этому же нейрону входного слоя)
    Ее же обучал в основном я)))) А я сам плохо в реверси играю)
     
  12. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Maputo с одним скрытым далеко не уедешь, оч уж ограничена будет в вариациях. сча дай бог склероза провангую оптимальную последовательность 64-40-(72или96)-х-64 х потомучто не помню формулу((( но вроде тоже 40 или просто с меня плохая ванга....
    может её пора ставить против программ? типа перенести на локалку и как соперника запустить прогу какуюнить?
    но если сам учишь то вот мой опыт за сегодня: ходить нужно по углам DDDD
     
    Maputo нравится это.
  13. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Возможно. Но судя по весам - она еще далека от среднего уровня обучения. Я хочу посмотреть как она будет играть при разнице в весах более 50% на всех нейронах. Возможно она сама подскажет какие связи избыточны. Но она так же обладает и памятью. Я надеюсь, что ее должно хватить на все дерево возможных состояний доски.
    Пока она обучается в турнирах сама с собой. Точнее несколько версий эволюционировавшей сети. И не всегда выигрывает последняя версия.
     
  14. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Maputo нее на всё дерево её полюбому не хватит, точнее у тебя ресов не хватит на всё дерево. Да и при малейшей смене архитектуры произойдёт огромнейшее перестроение связей, что потребует переобучения, вставить лишний слой в обученую неросеть будет куда хуже чем провести пару эпох обучения.
    тогда откатывай эволюцию назад и отправляй спать снова))))
    но на мой взгляд чего-то не хватает, на рандоме многому не научишься, а лишнее обучение на старых данных это лишь трата ресурсов...
    как реализовал взаимодействие между сетками? ну типа шмоп, файлы, сокеты?
     
  15. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    По поводу смены архитектуры я думал. Процесс не должен сопровождаться катастрофическими последствиями (по моему предположению). Сеть должна сама решать как использовать дополнительные ресурсы. Я пробовал обнулять выходной слой - он восстанавливался. Просто при встраивании нового нейрона в сеть надо правильно подобрать веса синапсов, присоединенных к его выходу нейронов. По моим расчетам его вес стоит брать наименьшим из имеющихся весов и выровнять общую сумму. А при надстраивании слоев вообще не должно быть проблем.
    Финалисты турнира загружаются на сервер. При этом в игру грузится победитель, а первая эволюция будет в случае победы над проигравшим.
    Просто файлы. Загружается последний. Противник самой сети - предпоследний. При эволюционировании сеть сохраняется в новый файл и указатель из-за этого смещается.
    Про рейскондишн я тоже думал, но серьезных последствий не должно быть - на крайняк при одновременном сохранении либо чья-то сеть не запишется, либо затрет одну версию другая, но сами сети хранятся во время игры в сессии
     
  16. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Провел турнир между последними сетями. Залезаю на сервер, чтобы загрузить последнюю версию, а тут сюрприз в виде еще нескольких снимков сети:
    [​IMG]
    Спасибо)
    Последняя - моя. Разница в 3 секунды.
    Проведу завтра турнир с учетом этих версий.
     
  17. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Он иногда читирит :( 4 хода за раз пришло, судя по всему с коннектом беда была
     
  18. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @gruth, с коннектом бывает беда, но она не так происходит. Приходят старые состояния игры. Думал добавить токен, но решил, что это у меня с инетом проблемы. А когда несколько ходов за раз - это в пределах правил. Если у противника нет доступных ходов, то он пропускает ход. Это часть стратегии - отжать край и двигаться от этого края, съедая все фишки.

    Вот например:
    [​IMG]
    Последние ходы по 4 и по 3 за раз она сделала, потому что у меня не было доступных ходов.
     
    #68 Maputo, 22 мар 2018
    Последнее редактирование: 22 мар 2018
  19. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Исследовал веса синапсов в скрытом и выходном слое. По результатам можно сказать, что нейроны скрытого слоя переходят в завершающую стадию обучения. Чего не скажешь о нейронах выходного слоя - они еще в самом начале. Возможно сказывается, то что теперь сеть работает фрагментарно и выходные нейроны запрашиваются реже нейронов скрытого слоя, а может то что нейроны скрытого слоя не находились в равновесии.

    Нейрон на диагонали 7-56 (скрытый слой)
    [​IMG]

    Нейрон следящий за всем игровым полем (скрытый слой)
    [​IMG]
    Нейрон выходного слоя на ячейке 56
    [​IMG]
     
    #69 Maputo, 22 мар 2018
    Последнее редактирование: 22 мар 2018
  20. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    А вот почему я еще возлагаю надежды на положительное действие "сна":

    [​IMG]
    Это тот же нейрон выходного слоя на ячейке 56 после 50000 итераций "сна". Разница между весами усилилась. Но в игре себя такая сеть показала ужасно. Память стерта напрочь. Последнее время я играл 4 идентичных партии, которые заканчивались в несколько ходов. Удалось добиться от нее изменения дебюта, а после длительного "сна" это все забылось и не пыталось переучиваться, даже после проведения турнира между 12-ю сонными версиями, которые получились в результате поиска оптимальных настроек "сна":

    [​IMG]
    Если судить по выходным значениям (циферки между ходами - абсолютное отклонение от 0.5) - сеть играет пальцем в небо. Когда она уверена в своем ходе - значение должно быть близко к 0.
    Эту версию не загружал на сервер.
     
    #70 Maputo, 23 мар 2018
    Последнее редактирование: 23 мар 2018
  21. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Maputo так, а что ты хотел от 50000 снов, она уже после 1000 видела один и тот же сон
     
  22. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @abrdabr, я хотел подтянуть веса. Это просто эксперимент.
     
  23. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Maputo я тоже когда начинал то думал чем больше эпох и нейронов, тем умнее будет сетка, но оказалось всё не так просто...
    могу предложить тогда ещё один эксперимент, который мне делать лень, а результат интересен:
    младенец рождается с большим числом синапсов чем у взрослого человека, в результате обучения разрушается до 80% их.
    так вот по аналогии не прибавлять слои\нейроны\синапсы, а убавлять типа создать сеть с более-менее сложной структурой и проверить реакцию на удаление нейрона, затем сетки, или их обнуления.
    Если надумаешь делать, то отпиши результаты.
     
    manchot нравится это.
  24. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @abrdabr, для такого эксперимента нужна обученная сеть. У меня пока такой нет. Могу лишь сказать, что предыдущая сеть была инвалидом из-за ошибки в коде. Когда я исправил ошибку - она играла совершенно ужасно (даже не могу слова подобрать). Но до исправления ошибки она приспособилась делать неплохие ходы. Потом я взял срез из 64 таких сетей-инвалидов и устроил между ними турнир. Победитель после этого смог пару раз меня обыграть. То-есть сеть адаптируется к новым обстоятельствам. Нет такого чтобы все рушилось из-за одного нейрона.
     
    denis01 нравится это.
  25. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Maputo в больших нейросетях да, особенно после дополнительных эпох обучения, но в маленьких с разрушения фательны, точнее не столько фатальны, сколько уменьшают результативность. К примеру возьмём сетку(фанн) 1-40-2 которая определяет подано ли положительное-отрицательное число, дадим ей три-четыре примера и сотню эпох обучений, результат будет 0.99 добавим один нейрон и результат будет 0.7
    я про то что на результативность нейросети влияет в первую очередь структура, а не количество эпох, количество входных данных и структуру нейросети в большинстве своём приходится делать наугад, опираясь лишь на интуицию. Для мелких, математических нейросетей мне удалось выработать несколько правил, формул оптимизирующих структуру, но потом я это дело кинул))))
    Так вот, а этот эксперимент, позволил бы подтвердить моё предположение.