За последние 24 часа нас посетили 20264 программиста и 1085 роботов. Сейчас ищет 751 программист ...

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

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

  1. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Обучение с подкреплением работает не совсем так. И не факт, что подача съедаемых фишек будет плюсом, а не лишним шумом на входе.
     
  2. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Fell-x27, разве это не любая обратная связь?
    Да, в стратегии игры - это не самый показательный момент. Но в плане обучения это может дать заметный эффект.

    Отсмотрел я снимки сетей и немного приуныл. Среди пары десятков отсмотренных нейронов лишь у немногих едва заметные изменения (относительные) весов:
    [​IMG]
    Это выходной нейрон на ячейке 56 и его веса синапсов (изначально все были одинаковые).
    0 - входной нейрон с ячейки 56
    1- горизонталь 56 - 63
    2 - вертикаль 0 - 56
    3 - диагональ 7-56
    4-10 сегменты (от 2х2 до 8х8) примыкающие к этой ячейке.

    Какая-то тенденция к обучению есть, но уж очень слабая. Сама скорость общего изменения весов достаточно большая. Такое впечатление, что большая часть входных сигналов нейронами воспринимается как шум.
     
  3. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Вот ты сказал, что "удалось уйти от обратного распространения ошибки". А зачем от него уходить? Отличный алгоритм коррекции же. И на что ты его заменил? Может быть наоборот, стоит его использовать?
     
  4. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Этот алгоритм хорош в плане быстрого получения результата, но в природе его не существует. К тому же человек тоже ошибается. И в данном примере я мог бы знать результат только при завершении игры. А в моей модели нейрон при изменении весов опирается только на входные сигналы и выходное значение.
    P.S.: Но во всем есть свои плюсы - теперь я понял, что при создании архитектуры всем синапсам надо давать одинаковые веса - тогда результат будет точнее и лишен человеческого фактора.
     
    #29 Maputo, 17 мар 2018
    Последнее редактирование: 17 мар 2018
  5. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Ну тогда обучение на модели тоже можно назвать обучением с подкреплением. Ты ведь прогоняешь итерацию, смотришь результат, если он не удовлетворяет заданному уровню, ну...среднеквадратичной ошибки, например, ты фиксишь веса. И так до тех пор, пока не начнешь пробиваться через установленный порог, считая, что сеть сошлась. То есть как бы говоришь "верно" или "не верно". Но это не обучение с подкреплением, увы.

    То, что ты делаешь, больше похоже на генетические алгоритмы. В таком случае, если хочешь развития более активного, вводи в систему фактор мутации. Случайные изменения, полученные не в ходе обучения. И пусть уже такая нейросеть воюет сама с собой. Это может давать очень интересные результаты.

    Нейросети не про природу, они про математику. Если хочешь сделать что-то, превосходящее живой аналог, выходи за рамки, в которых этот аналог существует.
     
  6. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    В данном случае мутации - это игра с человеком. Эволюционирует она после победы (или ничьей) в двух партиях со своей предыдущей версией - сначала черными, а потом белыми после каждой партии с человеком.
    Я хочу лишь приблизиться к живому аналогу, а не превзойти его.
    Я бы даже свою сеть назвал интуитивной. В ней логика на последнем месте.
     
    #31 Maputo, 17 мар 2018
    Последнее редактирование: 17 мар 2018
  7. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Сбросил все веса на 1. До этого в скрытом слое были мной установлены у нейронов разные веса и во время обучения сеть опиралась на них. Теперь она в свободном плавании.
    Результат после 30 партий (веса нейрона из скрытого слоя, который связан со всеми нейронами входного слоя):
    [​IMG]
    Общее изменение весов - около 60%, а относительное ~1%.
     
  8. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Нет. Мутации - это случайные изменения. Игра с человеком - это уже отбор полезных или вредных мутаций.

    Слушай.. А у тебя не марковский процесс идет, чтоли? Сеть при выборе хода не учитывает свое предыдущее состояние? Погугли в сторону рекуррентных сетей, мб что понравится.
     
  9. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Fell-x27, процесс должен быть не марковским. У меня нейроны работают независимо от всей сети. И каждый ход меняют состояние своих весов, что влияет на последующие результаты. Та же рекуррентная сеть получаецца.
    Отбор полезных мутаций у меня как раз происходит, когда сеть играет сама с собой. Да и кто лучше человека может внести хаос в процесс?
     
  10. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Изменен алгоритм работы сети в игре. Теперь она работает фрагментарно. То-есть раньше делался обход по всем нейронам сети, а теперь запрашиваются только выходные нейроны ячеек, доступных для нее ходов. Они в свою очередь активируют лишь часть нейронов скрытого слоя. Все это позволяет уменьшить шумы для нейронов скрытого и выходного слоев, а так же повысить быстродействие сети.
    По результатам сеть стала чаще эволюционировать и выигрывать стало сложнее.
     
    [vs] нравится это.
  11. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Окей, тогда объясни, как у тебя меняются веса у нейронов? Если не бекпропагейшн, то как? Каждый нейрон такой "а сменю-ка я себе вес"? В какую сторону? Почему именно он? В какой момент? Не может ли статься, что у тебя не сеть играет, а каждая клетка на поле сама за себя?
     
  12. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Почти так. Нейрон даже не знает, что он в игру играет. Если у него на выходе получился слабый сигнал, но все-же получился - он увеличивает веса (в соответствии с единым алгоритмом). Если сигнал сильный - уменьшает веса (в соответствии с тем же алгоритмом). Ну и величина изменений зависит от уровня выходного сигнала.
    Алгоритм почти такой же как в "обратном распространении" используется при "градиентном спуске".
    Я больше полагаюсь на возможность моей модели опираться на кратковременную память и способность улавливать суть в шумах, если таковые у нее имеются. Пока это лишь гипотеза.
     
    #37 Maputo, 18 мар 2018
    Последнее редактирование: 18 мар 2018
  13. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Зачем? Что, если в данной ситуации вес надо сделать еще меньше? Если он все еще слишком большой?
    То есть...нейроны, в итоге стремятся к тому, чтобы усредниться, а ты удивляешься, что у них так мало отклонений по весам?
    --- Добавлено ---
    И как в итоге оценивать успешность конфигурации сети, если за N ходов у тебя происходит N изменений, суть которых в том, чтобы сильный сигнал глушить, а слабый усиливать, а фиксация результата идет только для последней конфигурации, причем по факту победы или проигрыша, что, в общем-то не позволяет посчитать ошибку?
     
  14. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Да. Все так. Нейрон стремится всегда выдавать сигнал 0.5. Но это значение он выдаст только в том случае, если на вход подать строго определенную комбинацию значений. Близкие комбинации дадут близкие к 0.5 значения и нейрон изменит веса незначительно. Так же и в случае, когда на нейрон перестанет поступать ранее изученная комбинация - он начнет приспосабливаться к другой. Вобщем всегда будет искать что-то общее среди всех приходящих на его входы комбинаций.
    А со скоростью обучения я разобрался - так и должно быть. У меня два коэффициента - сам сигнал (от 0 до 1) и шаг обучения (0.001)
     
  15. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Что-то не так с этой архитектурой, сдается мне. Что-то тут не так..
    Вообще, та же альфаго, для игры, собственно, в го, испольщует вообще сверточные сети и технику, сходную с распознаванием изображений. Но тут распознается не изображение, а ситуация на доске, помогая ей строить тактику. Но там, если копнуть глубоко, жесть и содомия творится, и целый кластер из сотен CPU нужен, чтобы она работала.
     
  16. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Fell-x27, как раз наоборот. Даже в PHP 5.6 с числами с плавающей точкой я проверял ситуацию работы нейросети равную 1 млн нейронов. На моем CPU с 2 ядрами по 2.8 ГГц и 2Гб встроенной оперативки и свопом (который в данном случае не играл роли) этот процесс занял 15-20 секунд, если память мне не изменяет.
    Что уж говорить о бинарнике с использованием целочисленных операций.
    P.S.: На серваке (он послабее) 300 нейронов, сон длится 400 итераций в течении 6 секунд - получаем 20 тыс. нейронов в секунду. Итого 1 млн. нейронов за 50 секунд. Хотя правильнее мерить не по нейронам, а по синапсам.
     
    #41 Maputo, 18 мар 2018
    Последнее редактирование: 18 мар 2018
  17. Maputo

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

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

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Это круто, но я-то не предположения свои описал про Альфу:

     
  19. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Fell-x27, там сверточные сети использовались и количество входных нейронов 17к+
    Плюс еще 13 слоев, которые работают по несколько раз за ход
    И ответ выдает за несколько мкс
    Нигде нет указания сколько нейронов там за эти 2 мкс обрабатывается. Может это чило - гугл. Но при этом 2 мкс.
    Моя ход делает за 20 мкс при 300 нейронах. Но сравнивать эти сети практически невозможно. Моя пока даже в реверси выиграть не может и работает на пыхе.
     
    #44 Maputo, 18 мар 2018
    Последнее редактирование: 18 мар 2018
  20. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Я в курсе :)
    --- Добавлено ---
    Ну..реверси не такая простая игра. С шашками, например, куда проще. А то, что на пыхе..ну так попробуй не на пыхе, а на C/C++. Через использование библиотек типа php-fann или php-ml.
     
    Maputo нравится это.
  21. Maputo

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

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

    [​IMG]

    После чего можно съесть все фишки. Повторение одного и того же дебюта дало свои плоды - она начала смещать меня к краю, но так и не поняла суть этой стратегии и как с ней бороться.

    После этого я устроил турнир между последними 8-ю сетями, которые получились в результате серий игр с новой стратегией.
    Турнир проходил попарно (использовались наиболее близкие версии сети) по 100 партий (поочередно черными и белыми)
    Вот результаты (первое число в скобках - количество ничейных партий):
    Код (Text):
    1. 1521375561 vs 1521373118 (3 : 44 : 53)
    2. 1521373027d vs 1521371725 (4 : 47 : 49)
    3. 1521371471 vs 1521350837 (2 : 43 : 55)
    4. 1521340048 vs 1521331222d (3 : 59 : 38)
    5. Script time 289.09659194946 sec.
    6.  
    7. 1521373118 vs 1521371725 (3 : 57 : 40)
    8. 1521350837 vs 1521340048 (3 : 61 : 36)
    9. Script time 146.8601500988 sec.
    10.  
    11. 1521373118 vs 1521350837 (2 : 37 : 61)
    12. Script time 73.45285987854 sec.
    А вот как теперь выглядят веса того же нейрона, что отслеживает диагональ 7-56:

    [​IMG]

    А вот чему научилась сеть:

    [​IMG]

    Хотя итог один, но прогресс заметен. Теперь она поняла, что не стоит занимать ячейки перед углами, но ошибается по мелочам.

    P.S.: Еще я понял, что игра в поддавки ее особо ничему не учит.
     
    #46 Maputo, 19 мар 2018
    Последнее редактирование: 19 мар 2018
  22. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Когда эксперты следили за игрой Седоля и АльфаГо, они тоже подмечали, что Альфа делала нелогичные и ошибочные, с их точки зрения, ходы. А потом херак - и Седоль не успевал понять, что вообще произошло.

    Я к тому, что логика нейросети может быть несколько за гранью понимания логики человека. Она недостаточно прямая для него.
     
  23. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Fell-x27, хорошо бы еслиб в моем случае оказалось так же. Но 100% уверенности у меня нет.
     
  24. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    А ее и не будет. Одна из проблем нейросетей - ты хрена с два продебажишь ее работу в рилтайме и никак не вытащишь логику принятого решения. Вся логика укладывается в "ну так математика отработала". И чем сложнее нейросеть, тем это острее. По этому их и дебажат опосредованно, через среднеквадратичное отклонение, сводящееся к некоему порогу.
     
    Maputo нравится это.
  25. Maputo

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

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