Я создал играбельный верхний мир Pokémon. Он очень похож на обычную видеоигру, можете попробовать сыграть в него в браузере здесь:


Хотя он похож на видеоигру, я не писал код игры. На самом деле это нейросеть, подражающая видеоигре.

Программа? Игра? Нейросеть?


Программы: последовательности команд, преобразующих ввод в вывод


Человек может выполнить эти команды, чтобы преобразовать ввод в вывод:

Команды

  1. Берём два введённых числа
  2. Суммируем числа
  3. Делим пополам, чтобы получить вывод

Например, (190, 10)→100 или (2, 4)→3

Показанные выше команды — это программа, написанная на естественном языке для людей. В ней не указаны промежуточные этапы (как сложить два числа? что вообще такое число?), но это нормально, потому что у людей есть знания, позволяющие им заполнить пробелы в информации.

Программы обычно пишутся на языках программирования и для компьютеров


Компьютер может выполнить эти команды, чтобы преобразовать ввод в вывод:

print((
    int(input("1st number: ")) + int(input("2nd number: "))
) / 2)

Это тоже программа (такая же, как и первая), но теперь записанная на языке программирования. Компьютеры могут напрямую преобразовывать языки программирования в компьютерные языки.
То есть если мы напишем программу на языке программирования, то человеку не придётся её выполнять. Мы можем приказать сделать это компьютеру.

Проблема «буквального исполнения желаний джинном»


Недостаток написания программы для компьютера (а не человека) заключается в том, что компьютеры практически не имеют фоновых знаний. Компьютер всегда послушно и безынициативно выполняет написанные нами команды.

Это часто приводит к ситуациям «буквального исполнения желаний джинном», когда компьютер делает то, что мы написали, а не чего мы хотели.


Видеоигра — это разновидность программы


Видеоигра — это некая программа, получающая в качестве ввода сигналы от элементов управления (например, [«вверх», «вниз»]), и создающая в качестве вывода видеокадры. Pokémon является хорошим примером этого.


Нейронная сеть — это тоже разновидность программы


Нейросети напоминают покемона Дитто среди программ. Мы можем написать («обучить») нейросеть имитировать любую другую программу, которая существует или предположительно может существовать.


В принципе, мы можем обучить нейросеть имитировать видеоигру, а затем использовать обученную сеть вместо «реальной» игры, и никто не заметит разницы.


Однако «принципы» часто сбивают с толку: как на практике получить сеть, работающую в качестве игры? Что конкретно нужно сделать? Что, если это не сработает?

Как вообще написать нейросеть?


Нейросети пишутся массивами данных


Большинство программ (и большинство видеоигр) пишется как код на традиционных языках программирования. Однако нейросети «пишутся» массивами данных. Команды «ввод→вывод» для нейросети в буквальном смысле написаны как большой список желательных пар «ввод→вывод».

То есть, чтобы имитировать игру Pokémon при помощи нейросети, мне сначала нужен массив пар «(сигналы управления, память)→(видеокадр)», который показывает все игроподобные поведения, которые должна демонстрировать моя сеть.

Собираем массив данных


Я скачал, обрезал и отмасштабировал несколько видео с прохождением Pokémon, чтобы получить набор референсных выводов (видеокадров).


В этих видео отсутствовала соответствующая информация о вводе (управлении). Я просто разметил её на основании собственных догадок.

Чтобы избежать необходимости разметки ввода или вывода «памяти», я планировал просто передавать в качестве данных предыдущий кадр.


Такая система, в которой «всё, что за пределами экрана, забывается», будет… мягко говоря, поверхностной. Однако мне показалось, что, если сеть сможет имитировать этот массив данных, этого будет достаточно для демо.


Пишем код обучения


Пишем необученную нейросеть


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

Внутри этой нейросети будет множество магических чисел «изучаемых параметров», каждый из которых будет управлять поведением одного нейрона сети. При другом выборе значений параметров сеть будет вести себя иначе. Изначально параметры задаются случайным образом и сеть не делает ничего полезного.

Я написал сеть примерно с 300 тысячами параметров — очень мало по стандартам нейросетей.


Пишем код оценивания


Далее нам потребуется способ оценки того, насколько хорошо наша нейронная сеть имитирует массив данных. Мы напишем код «оценивания», он будет брать случайные пары (ввод→вывод), пропускать эти вводные данные через сеть и оценивать, насколько точно выводы сети соответствуют истинным референсным выводам из массива данных.

По стандарту наша оценка замеряет величину погрешности между прогнозом нейросети и референсным выводом из массива данных. Чем меньше погрешность, тем лучше, а ноль — это наилучшая оценка.

В моём случае сеть со случайно инициализированными параметрами создавала одинаковый серый кадр для любого ввода и имела плохие оценки. Мне нужны были более качественные параметры.


Пишем цикл обучения


Чтобы параметры были хорошими, мы создадим цикл обучения — фрагмент кода, который будет многократно прогонять код вычисления оценки и вносить небольшие изменения в параметры сети, чтобы улучшать её оценку. (Этот код проверяет для каждого параметра, улучшится ли оценка при незначительном уменьшении или увеличении этого параметра. Потом код немного сдвигает все параметры в их направлении улучшения оценки, и надеется на лучшее.)

Также цикл обучения периодически показывает нам визуализации.


В процессе выполнения цикла обучения параметры меняются, а средняя оценка становится всё лучше и лучше. На наших глазах цикл обучения постепенно превращает случайным образом инициализированную недифференцированную сеть в нейросеть для имитации нашего конкретного массива данных.


Со временем изменения в обучении начинают нейтрализовать друг друга и оценка постепенно прекращает улучшаться. Если всё получилось, то у нас есть сеть с хорошими оценками, успешно имитирующая поведение «ввод→вывод» из массива данных.


Если всё действительно получилось, наша сеть научилась основным правилам имитации, которые сработают и для неизвестных ей входящих данных.

Наша процедура обучения отдаёт предпочтение конфигурациям параметров, близким к исходным случайным значениям и максимально неинформированным о конкретном примере массива данных, а сети всё равно обычно недостаточно нейронов для запоминания всего массива данных целиком, поэтому у нас есть большой шанс на обобщение.


Спустя некоторое время прогнозы сети стали достаточно неплохими, да и оценки выглядели нормально. Я преобразовал свой массив данных в программу, которую можно выполнять. Настало время её запустить.

Джинн наносит удар


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


Какого чёрта? Циклы обучения — это код, а в коде могут быть баги… но обучение сошлось к нужному результату. Сеть «переобучилась»? Является ли эмуляция Pokémon «ИИ-полной»?

В моём посте глубокое обучение «врезалось в стену»?

Три проблемы нейронных сетей


К сожалению, даже если вы закодировали идеальный цикл обучения, существует три проблемы «джинна, исполняющего желания в буквальном смысле», которые обучение устранить не может. Это три причины, по которым написанная нами нейросеть может быть не тем, что нам нужно.

Проблема 1 — ей не хватает мощи. Нейросеть не может добавить себе нейронов.



Наша сеть может быть слишком слабой, чтобы описать полную связь «ввод→вывод», описанную массивом данных (даже если найти лучшие параметры).

Даже если продолжить обучение, недостаточно мощная сеть всё равно постоянно будет иметь низкие оценки.

Надо сделать так, чтобы структура нашей сети соответствовала задаче, или просто была более выразительной (множество нейронов/слоёв), чтобы решение (множество параметров, дающее идеальную оценку) на самом деле существовало.

В данном случае я хотел, чтобы моя сеть была маленькой/достаточно простой, чтобы её можно было выполнять в веб-браузере без специальных оптимизаций производительности с моей стороны, поэтому я намеренно сделал её маломощной.

Я попробовал удвоить мощность модели примерно до 600 тысяч параметров, и попытался наилучшим образом распределить эту мощность, исходя из своего понимания задачи эмуляции игры. Мне удалось сделать потери при обучении чуть меньше, и при тестировании модели она начинала неплохо, но всё равно со временем ломалась.


Чёрт. Что ещё может быть не так с моей сетью?

Проблема 2 — недостаточно информации. Сеть не может сама дать себе отсутствующую входящую информацию.



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

При дальнейшем обучении сеть с недостаточным количеством информации, вероятно, будет получать несовершенные оценки во всём (из-за «размытых» прогнозов, объединяющих несколько догадок смешением). Со временем сеть с недостаточным количеством информации, вероятно, начнёт получать идеальную оценку на массиве данных для обучения благодаря простому запоминанию, но не совершенствуясь в общем.

Нам нужно передавать сети всю необходимую информацию для каждого примера и устранять все несогласованные данные в соответствующих выводах, чтобы каждый вывод можно было точно получить из соответствующего ввода при помощи одного общего правила.

В данном случае сети сильно мешало отсутствие истинного ввода с данными памяти. Тем не менее, я всё равно предпринял шаги для уменьшения неопределённости в моём массиве с покадровыми данными:

  1. Я прошёлся по массиву, чтобы исправить ошибки в разметке сигналов управления.
  2. При обучении я позволял сети сделать множество различных догадок относительно каждого примера, и давал оценку только лучшей догадке, чтобы симулировать наличие дополнительной входящей информации.

После работы над решениями проблем 1 и 2 прогнозы моей сети для обучающего массива данных стали выглядеть чуть лучше, а потери ещё больше снизились. При использовании нейросети в качестве видеоигры она какое-то время работала нормально, но потом всё равно превращалась в мешанину.


Подумав, я пришёл к выводу, что проблемы 1 и 2 должны были вызвать только несовершенства, а не катастрофический провал. Наверно, на мою сеть влияет что-то другое, какая-то ужасная «проблема 3»…

Проблема 3 — недоопределённость. Сеть не может читать наши мысли о требованиях к «вводу→выводу», которые отсутствуют в массиве данных.




Возможно, мы требуем от сети поведения «ввод→вывод», которое не было записано как пары «ввод→вывод» в обучающий массив данных. Это плохо, очень плохо. Это даже хуже, чем проблемы 1 и 2, потому что величина ошибки для входящей информации, не присутствующей в массиве данных, потенциально безгранична.

Каждое важное нам поведение «ввод→вывод» должно быть записано в обучающий массив данных как пара «ввод→вывод». А в идеале — много пар, много вариаций, чтобы для получения идеальной оценки сети требовалось бы обучиться общему правилу для всей этой категории вводов.

В данном случае я хотел передавать сети в цикле её собственный вывод и получать на выходе напоминающие игру видеокадры, пусть даже спустя много итераций.

Однако при обучении я не сообщил сети о таком требовании к «вводу→выводу». Я обучал сеть только на создание вывода в виде видеокадров, соответствующих вводу в виде реальных видеокадров. Во время тестирования я вызывал неопределённое поведение.

Решение проблемы «наша сеть работает при обучении, но не при тестировании» заключается, разумеется, в использовании сложной стратегии регуляризации разметке тестовых данных и обучении на них тоже.

Если мы будем продолжать это делать, то постепенно множество обучающей входящей информации расширится, включив в себя ту входящую информацию, на которой мы тестируем сеть, и неопределённое поведение больше вызываться не будет.


В данном случае это всего лишь означало, что мне нужно время от времени делать так, чтобы во время обучения вводами сети были предыдущие выводы сети (вместо «реальных» кадров), благодаря чему сеть научится продолжать игровой процесс после предыдущего кадра, спрогнозированного сетью.

Занявшись этим, я решил параллельно время от времени отбрасывать кадры ввода (замена случайным статическим шумом с вероятностью 1%, полностью чёрным экраном с вероятностью 1%), чтобы сеть обучалась инициализировать игровой процесс с пустого экрана.


Наконец-то успешное обучение


После решения всех трёх проблем моя сеть стала достаточно мощной, информированной и определённой. Обученная сеть достаточно хорошо имитировала массив данных, даже «тестового сценария» с длительным игровым процессом. Именно эту версию я использовал для веб-демо.


Дальнейшая работа всегда может усовершенствовать сеть (можно подчистить массив данных, добавить больше данных, оптимизировать код работы сети в веб-браузере, увеличить сеть, оптимизировать цикл обучения, выполнять обучение дольше). Если мы устраним проблему отсутствующей входящей информации ввода, то может быть, даже заставим работать инвентарь, бои и так далее… но эта сеть уже достаточно хороша для демонстрации концепции.

В чём же смысл?


Нейронные сети — это не «чёрные ящики»


Если вы работали только с нейросетями, созданными другими людьми, то можете решить, что сети — это заранее подготовленные системы, способные на выполнение только одной задачи; то есть «чёрные ящики», уникальным образом подстроенные под конкретный набор задач, которые выполняют нейронные сети.


В Интернете часто встречаются подобные заявления:

Нейронные сети — это просто новый алгоритм для поджаривания тоста; почему все в таком восторге?

(Можно заменить «поджаривание тоста» игрой в шахматы, написанием стихов, созданием картины или любой другой задачей, которую выполняют нейросети.)

Есть и более восторженная точка зрения:

Я люблю нейронные сети и использую их для всех задач, связанных с подогревом хлеба!

Но даже энтузиасты обычно признают, что нейросети загадочны, а их практическое применение ограничено:

Нейронные сети — по-прежнему ненадёжные «чёрные ящики», ломающиеся по странным причинам, которые мы никак не можем отладить. Они являются самым современным решением для определённых типов задач, поэтому они полезны; однако нейросети пока не готовы выполнять любые задачи.

В будущем мы найдём способ объединения прогрессивных нейросетей с традиционным кодом модульным и интерпретируемым образом, сможем использовать лучшие стороны старого, при этом задействуя новое, и т. д., и т. п.

Это кажется очень разумным и мудрым: кому же не понравится беспристрастное признание недостатков с последующим призывом объединения лучшего из двух миров?

Однако я считаю такой образ мышления ошибочным. По моему опыту, нейросети — это не «чёрные ящики». Это просто программы, делающие то, что они обучены делать. Им часто не удаётся сделать то, что вам хочется, по тем же скучным причинам («джинн»), по которым постоянно ломается любая компьютерная программа.

Более того, когда дело касается «интерпретируемости», у традиционного кода есть очень специфическая проблема, которую нейронные сети полностью решают.

Проблема кода


Проблема кода заключается в том, что каждая новая написанная строка кода ещё сильнее обфусцирует поведение «ввод→вывод» программы.

Для определения простой программы написание традиционного кода на традиционном языке программирования подходит великолепно. Достаточно лишь написать в нужном порядке требуемые шаги, после чего всё работает. Чтобы понять, что «делает» код, достаточно его лишь прочитать.

Однако код живой. Чтобы понять, что же делает код на самом деле, его нужно запустить. И при добавлении новых строк кода разрыв между тем, что код «делает», и тем, что он делает на самом деле, становится всё больше.

Достигнув некого объёма кода, вы получаете непредсказуемую среду выполнения, необъяснимое поведение, загадочные баги, «исправление» которых занимает неделю и добавляет ещё три новых бага. Вы полностью зависимы от сквозного тестирования (нужно пропустить код через массив входящих данных, подождать завершения и сравнить выводы программы с заведомо правильными выводами), чтобы вообще получить какие-то гарантии «ввода→вывода».

«Модульный и интерпретируемый код» — звучит отлично, пока ты не увидишь сто модулей по сто тысяч строк кода в каждом и кто-нибудь не попросит тебя их интерпретировать.

Магия данных


Программисты (и особенно программисты игр) научились переносить сложность программ на данные. Числа переносятся в файлы конфигураций, одномерные массивы — в аудиофайлы, двухмерные массивы — в файлы изображений, и так далее.

В отличие от кода, данные легко понимать и легко редактировать. В отличие от кода, разные элементы данных можно безопасно параллельно редактировать несколькими командами людей. В отличие от кода, данные не живые.

Благодаря переносу сложности в файлы данных программа может продолжать расти (100 МБ… 1 ГБ… 10 ГБ), а доля сложности программы, написанная в живом коде, становится всё меньше и меньше. Поведение «ввода→вывода» движется в сторону неопределённости, но сублинейной скоростью.

Нейронные сети: программа, целиком состоящая из данных


Нейронные сети одновременно являются и решением проблемы «каждая новая строка кода ещё больше обфусцирует поведение „ввод→вывод“», и естественной конечной точкой стратегии переноса сложности в данные, которой уже пользуются программисты.

При работе с нейросетью нужное поведение «ввод→вывод» программы прописывается в явной форме как данные в обучающем массиве данных. Каждое «для этого ввода верни вот этот вывод», каждое «за исключением этого случая, здесь поступай вот так». Всё это находится в данных.

Вне зависимости от сложности поведения программы, если вы записываете её как нейросеть, программа остаётся интерпретируемой. Чтобы понять, что же действительно делает нейронная сеть, достаточно прочитать массив данных.

Игры через нейросеть… серьёзно?


Разумеется, концепция видеоигры, написанной как нейросеть, пока ещё не получила развития.

Наряду с проблемами «недостаточной мощности, недоинформированности и недоопределённости» и наряду с культурной инертностью методик «модульности и интерпретируемости» существует также ужасное замедление (примерно в 16 раз), когда вычисления выполняются посредством активации нейронов, а не нулями и единицами. Для игр это неприятная новость.

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


Поэтому я считаю, что нейронные сети поглотят игры снаружи, начав с готовых видеокадров, потом перейдя на G-буферы, один за другим заменяя слои «модульного и интерпретируемого» кода.

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

Этот слой кода слишком сложный. Похоже, никто не знает, как сделать его быстрее или лучше, да и не понимает, как он вообще работает.

И мы всё равно передаём его вывод нейросети.

А не может ли сеть просто… выполнять и эту задачу?

Так как нейросети — это программы, то ответ всегда будет утвердительным. Они могут имитировать что угодно. Если, конечно, вы очень-очень точно опишете нужное вам поведение.


День первый обучения нейросети.

— Дитто, превратись вот в это!

Комментарии (44)


  1. YMA
    13.09.2022 11:21
    +2

    Демка выглядит психоделично.

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


    1. IvanPetrof
      13.09.2022 11:31
      +1

      в процессе сна наша собственная нейросеть создает порой весьма сложные миры с отличной графикой и звуком

      этот вопрос весьма интересен. Вполне может быть, что мозг не создаёт миры «с отличной графикой» а всего лишь создаёт ощущение (воспоминания) о том «что графика была отличная»


      1. arseniy2
        13.09.2022 11:46
        +2

        ну не знаю. мне во в сне иногда снились довольно впечатляющие вещи. думаю многим тоже. лично я уверен, что "графика" там супер. после просыпания образы ещё какое-то время помнятся.


        1. IvanPetrof
          13.09.2022 12:04
          +7

          думаю, мозг довольно трудно поймать на лжи. Он как шулер — способен в любой момент подкинуть в колоду нужную карту.
          Бывает, к примеру, что когда спишь, в комнате раздаётся какой- то звук и этот звук слышится во сне (например кто-то звонит в дверь, а во сне кажется, что звонит телефон (который с проводом). При этом сон логически непротиворечив, и спящему кажется, что этот телефон уже был в приснившейся комнате ещё до того, как зазвонил. Т.е. Мозг «задним числом» может что-то достраивать события, чтобы небыло противоречий.

          P.s. Есть такой фильм, «шестой день»" по моему, где герою загружали в мозг воспоминания о хорошем отпуске.


          1. arseniy2
            13.09.2022 17:42

            Да я читал про такое. Только вот какая разница? Картинка то всё равно была сгенерирована и если, например, человек умеет рисовать, он может этот образ изобразить. Также как и глюки под веществами.


            1. IvanPetrof
              13.09.2022 18:49
              +5

              Когда вы смотрите глазами, вы не видите всю картинку в 4К разрешении. Вы видите чётко только самый центр, остальное — весьма расплывчато. Плюс часть картины вы вообще не видите (слепое пятно. Даже два), плюс какие-то части мозг специально не видит (нос), фотошопя его в реалтайме. Представление о «всей картине» мозг складывает из кусочков за счёт микродвижений глаз. И это всё равно не 4К картинка. Это скорее внутреннее трёхмерное «образное» представление сцены. Именно это представление наблюдает наше сознание.
              Поэтому часто возникают разные глюки, когда вы ищете какой-то предмет, в упор смотрите на него и " не видите". Т.е. Глаз видит все пикселы изображения, но зрительная кора, по какой-то причине не распарсила этот предмет и не сгенерировала его модель для внутреннего наблюдателя. А потом через некоторое время — "«опана, так вот же он лежит на самом видном месте».

              Попробуйте закрыть глаза и протяните руку к какому-либо предмету. Я думаю, вы сможете даже встать и пройтись по комнате с закрытыми глазами как минимум 1 круг без фатальных последствий. При этом, если с закрытыми глазами вы попытаетесь представить предметы в комнате, то опять таки вы не «увидите» полной картины в голове. Комната как бы будет «вспыхивать» фрагментами. Причём чем больше сосредотачиваешься на детализации одного фрагмента, тем больше размываются остальные.
              И именно в этих «образах» (не в пикселах) и снятся потом сны.


              1. arseniy2
                13.09.2022 21:17

                Дык и что с того? Окружающий мир я также точно не вижу во всех полных деталях. Какая разница для моей памяти? Что от сна, что от наблюдения окружающего мира в памяти образы одинаково впечатляющи.

                Вероятно вы говорите о чём то другом. Может о некоем полноценном объекте-мире, который можно исследовать со всех сторон. С тех сторон, что во сне человек даже не видел. А там нету никакого полноценного объекта, а тупо запись видеокамеры. При чём камера вот такая неполноценная, где четко только в серёдке.


                1. yatanai
                  14.09.2022 03:50
                  +2

                  Он говорит что графония нет. Мозг не умеет в графоний, мозг умеет говорить себе что он видит графоний, но его всё ещё нет. Но благодаря тому что мы можем реконструировать образы, они могут быть воссозданны в активной фазе, в виде письма-рисунка.

                  Тоесть даже настолько вычислительно крутая биологическая система не смогла в графоний, но научилась обманывать сама себя что бы создавать склеенные образы в попытке что-то новое найти.


                  1. IvanPetrof
                    14.09.2022 04:41
                    +1

                    Именно так. Сознание смотрит не на реальную картинку "«из глаз». Оно смотрит на сгенерированную модель. и это не пиксельная модель, а образная. И сознание верит, что это и есть реальная картинка (мозг так устроен. Он всегда не доверяет внешней информации и проверяет её на соответствие своим критериям правдивости, но всегда верит тому, что сам породил).


                    1. arseniy2
                      14.09.2022 09:44
                      +1

                      Так ведь вышесказанное противоречиво. Человек говорит, мозг не умеет в графоний и тут же говорит, что умеет конструировать. Так ведь это и есть графоний. Как например, когда читаешь книгу, в голове возникают образы(не такие впечатляющие и яркие, кстати, как во время ярких снов). Может быть у вас такого нет?

                      Вообще, если б мозг не умел в графоний мы бы не могли визуально узнавать окружающий мир, как минимум. Или отличить разные стили изображений. Кто-то, полагаю, различает это хуже.

                      И при чём тут пиксели? Графоний - это не обязательно пиксели.

                      Мой мозг помимо графония также умеет в звуки и музыку.


                      1. IvanPetrof
                        14.09.2022 10:40

                        Скажем так. Он умеет в графоний. Но не на таком уровне, чтоб отрендерить картинку. Зпчем? Кто на неё будет смотреть? А главное — чем? Зрительной корой? Т.е. Ещё раз распознавать сгенерированное изображение?
                        Это ресурсоёмко, да и не нужно.
                        Зрительная кора подключена к глазкам и занимается первичным распознаванием сырых тру-пикселей и задачей классификации. на выходе получается модель и именно её вы «видите». И верите ей. Это не картинка. Это ощущение картинки. А также ощущение того, что картинка «вах какая красивая». Поэтому, чтобы представить себе в голове красивую картинку, не нужно её генерировать в виде картинки. Достаточно сгенерировать ощущения от неё. И вы будете абсолютно уверены, что только что видели первоначальную картину в том виде, как её увидел глаз.


                      1. arseniy2
                        14.09.2022 10:56

                        я уже, по сути, ответил на это. вы путаете графоний, который для всех(для посторонних наблюдателей), и графоний который лично для меня.

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

                        и зачем вы себе противоречите? сначала пишете - может в графоний, но на слабом уровне, а потом пишете, что картинки нет.


                      1. IvanPetrof
                        14.09.2022 12:04

                        Хорошо
                        не может в графоний. Так вас устроит?
                        (честно говоря я уже немного притомился вам объяснять свою мысль. получается немного одно-да-потому. Лучше если в этом вопросе каждый останется на своём теоретическом диване :))


                      1. arseniy2
                        14.09.2022 13:50

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

                        например, если бы это было не так, то не было бы всяких глюков под психоделиками или психическими расстройствами.

                        судя по отзывам, глюки под психоделиками не то что яркие сны, а эпически ярчайшие сны.

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

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

                        ваша мысль понятна, но ИМХО, совершенно ошибочна. вероятно, в связи с отсутствием способности воображать картинки и отсутствием ярких снов.


                      1. IvanPetrof
                        14.09.2022 14:31

                        совершенно ошибочна. вероятно, в связи с отсутствием способности воображать картинки

                        спасибо, доктор. извините, что сразу не разобрался с кем говорю. Представляю как глупо я выглядел со своими примитивными рассуждениями в Ваших профессиональных глазах. Вы совершенно правы. Теперь мне всё понятно. Я поражён вашими способностями постановки диагнозов через интернет. Если вы не против, я буду рекомендовать Вас своим знакомым.


                      1. arseniy2
                        14.09.2022 14:39

                        я не ставил диагнозов. "Вероятно" - не видите? А оно там написано. Более того упомянул, как раз, что не рылся о работе мозга по этому вопросу. Что и означает, что мои суждения обывательские.


                      1. IvanPetrof
                        14.09.2022 15:03

                        Скромность только украшает вас. Именно таким и должен быть настоящий профессионал своего дела. Вы, как изволили заметить, даже ещё не поставили диагноз, но уже помогли мне во всём разобраться. Доктор, (разрешите к вам именно так обращаться, раз вы этого не отрицали), вы со своими предположениями попали в самую точку. Не каждому это дано. Теперь моя жизнь, надеюсь, заиграет новыми красками. И я, как и все нормальные люди, наконец-то, смогу в графоний…
                        За сим разрешите откланяться, не смею больше отнимать вашего драгоценного времени.
                        Большое Вам Спасибо!


                      1. arseniy2
                        14.09.2022 14:35
                        +1

                        "Он умеет в графоний. Но не на таком уровне, чтоб отрендерить картинку. " - художник может карандашом нарисовать воображаемые картинки. Не наблюдая этих картинок в реале. Вот вам и рендеринг.


                      1. yatanai
                        15.09.2022 14:49

                        Смотри, у тебя лежит кусок камня на дороге, твой мозг запомнил тип "лежит угловатый камень", ты идёшь и переступаешь его даже не видя. Вопрос - Как ты четко обогнул ногой камень и не столкнулся если мозг оперирует только высшими абстракциями?

                        Ответ - он примитивно реконструирует модель. На это тратится много ресурса "внимание" и чем больше его уходит тем точнее реконструкция по форме. Причём работает это на всех уровнях.

                        И опять, дед тебе говорит - мозг не делает графония, он делает из графония абстракции а потом их же и мешает между собой, типо 10%собаки и 90%человека, обана новый образ, а выглядит то кааак реалистично!

                        Технически можно конструировать в голове образы а потом смотреть на них, но это как бы клиника, ахаха.


                      1. arseniy2
                        15.09.2022 16:46

                        давай с терминами определимся. что такое графоний?


        1. IvanPetrof
          13.09.2022 12:16

          В психологии есть такое понятие, как «ложные воспоминания», когда человек может быть абсолютно уверен в чём-то, и даже в деталях это описывать (например, вспоминать какие-то события), но по факту этого небыло. Или было, но не так.
          Так же есть версия, что большинство воспоминаний «из далёкого детства» являются ложными.


      1. YMA
        13.09.2022 12:37

        Возможно, но зачастую объекты из снов помнятся еще долго, и, если бы я умел рисовать - мог бы их воспроизвести на бумаге. Так что образы мозгом явно создаются.

        Вот прямо сегодня во сне я занимался пристраиванием в добрые руки каких-то животинок, выглядящих как помесь крысы, ежа и краба. Под конец сна мне правда кто-то сказал, что это демоны были - так что не играйте перед сном в HoMM 5 за Инферно ;)


        1. IvanPetrof
          13.09.2022 12:46

          тут весьма сложный философский вопрос. Где гарантия, что вы нарисуете именно то, что видели во сне, а не то, что вы сейчас думаете, что видели?))


          1. YMA
            13.09.2022 12:53
            +1

            "Зуб даю, да..." :) Поскольку вопрос философский - обратное также недоказуемо.


          1. arseniy2
            13.09.2022 17:54
            +1

            по-моему, это без разницы в контексте вопроса. например, я проснулся и мне кажется, что я увидел что-то крутое. даже если это мозг сейчас более детально дорисовывает в процессе воспоминания сна, то это всё равно несознательное придумывание. мне кажется, что я это вспоминаю. я же не прилагаю усилий чтобы это выдумать. оно само.


      1. GospodinKolhoznik
        13.09.2022 20:41
        +3

        Много лет назад я во сне увидел зебру ходящую на двух ногах и обмахивающуюся веером. Наверное я сплю, подумал я, ведь зебры так не умеют. И я решил определить, сон это или нет, для этого я наклонился и стал разглядывать дорожный бордюр. Я думал, что если это сон, то бедт видно, что бордюр плохо детализирован. Я ошибся - бордюр был супер детализирован. На нем были видны зернистая структура бетона, пыль, микротрещены, в микротрещинах пропрастала то-ли плесень то-ли какой то мох. Я тогда решил, что точно не сплю, что во сне такой детализации быть не может.


        1. YMA
          13.09.2022 22:40

          Аналогично - бывает такое, причем мне дёмка напомнила еще одну особенность генерируемых нашей нейросетью образов - они динамичны и "плавают" - скажем, во сне я могу выйти из машины, а при попытке сесть обратно обнаружить, что машина уже совсем игрушечных размеров, и я туда никак не помещаюсь.


          1. yatanai
            14.09.2022 04:08

            Ужасная тема, всё зависит от генов и обучения в итоге.

            Моя кулстори... Мои сны настолько были продуманны, что один раз я загремел в дурку из-за этого. (Я отказывался принимать реальность) Тоесть оно могло вести себя прям как в жизни и активно быть под +15 героев где у каждого своя логика и история. Всё предметы прям идеально взаимодействовали, физика там, всё на высоте. НО... Были странности... В одном из снов где я оборонял крепость от нашествия непонятной хрени, вроде все дерутся, да? Но тут я боковым зрением вижу как молния ударила в Пикачу... Ладно. (Смешное в том, что пока ты во сне тебе кажется это логичным) Самое ужасное было когда это происходило со неявными абстракциями. Когда у тебя насыщенная жизнь фентези наемника, у тебя есть девушка/деньги/признание, всё хорошо. Потом заходя в один из трактиров, с "причудливой дверью", попадаешь в советскую столовку, пугаешься, возвращаешься обратно а очереди к трактору нет, возвращаешься обратно, так же все пропали, понимаешь что ты во сне и ловишь лютейший припадок с истерикой.

            Как хорошо что они перестали мне снится, ах-ах (и да мне снилось не только фэнтези, там вообще все жанры)


        1. VDG
          14.09.2022 09:47
          +2

          Было со мной почти похожее (да и некуда и не делось). Ехал давным давно зимним утром в промёрзшем автобусе. Дыхнул от скуки на стекло и стал рассматривать выросшие снежные узоры. Особенно понравилась одна снежинка, и подумал, что такая сверхвысокая детализация может быть способом для проверок во сне ты или нет. Тут я вспоминаю, что сплю и меня выбрасывает ))


    1. Tarakanator
      13.09.2022 14:47
      +1

      Мы уже в шаге от того, что midjourney(или что-то подобное) прикрутят к симулятору свиданий.


  1. jamiederinzi
    13.09.2022 11:24
    +4

    В детстве я представлял себе игры как огромные клеточные автоматы, которые хранят в себе все возможные состояния экрана и набор условий "если сейчас на экране такой кадр и игрок нажал эту кнопку, перейти вот к тому кадру"

    То есть я понимал, что так быть не может, но на большее моих, ограниченных if'ами и for'ами, знаний о программировании не хватало.

    Ну и вот дожили, кто-то и правда такое (ну, подобное) реализовал


    1. IvanPetrof
      13.09.2022 11:39

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


      1. arseniy2
        13.09.2022 11:51

        хотелось бы тогда игрушек с такой графой, как аниме мультик. Badlands, Dragons Lair, вот это всё. в смысле игрушек - как платформеры, экшн, со свободой управления


      1. NemoVors
        13.09.2022 15:51
        +1

        Был и смешанный формат. Началось все с Resident Evil (не помню, были ли раньше), где использовали фон-картинку в высоком разрешении и 3д персонажа поверх нее в худшем качестве, зато подвижного.

        А потом был FearEffect, где вместо статических фонов использовались закольцованные пререндеренные видеоролики. А поверх них уже персонаж. Из-за чего мир перестал быть статичным. Смотрится неплохо даже сейчас (с поправкой на разрешение, конечно). Зато игра 3 диска занимала... при относительно малом времени прохождения.

        А наборы видеороликов - это квесты. Игромеханически довольно примитивные. Зато на тот момент очень красивые. ПО X-files был такой. Но там все портила статичная камера и интерфейс, разрушающий погружение. Теоретически, нейросеть уже сейчас может дополнить подобные ролики возможностью крутить головой, рисовать фон, встраивая в него важные объекты и т.д. Другой вопрос, какие мощности потребуются, чтобы это в 60 фпс вытянуть:) .


      1. LeXaNe
        13.09.2022 16:08
        +2

        Рандеву с незнакомкой ))


  1. WildLynxDev
    13.09.2022 12:16
    +2

    Как сделать из игры размером несколько килобайт игру размером несколько гигабайт ничего не меня в графике и игровом процессе.

    Меня это несколько пугает - новый виток системных требований включая дорогущий AI-Accelerator в обязательных.

    А ещё минус толпа народа которая эти игры кодила.


    1. Format-X22
      13.09.2022 23:09

      Ничего, будет плюс толпа учителей нейросетей.


  1. VPryadchenko
    13.09.2022 13:23

    Ещё можно попробовать взять языковую диалоговую модель и натренировать ее генерировать ответы сервера какой-нибудь игры в ответ на запросы клиента.


    1. SchwarzFuchs
      15.09.2022 09:42

      Поздравляю с изобретением AI Dungeon (если я правильно уловил идею).


      1. VPryadchenko
        15.09.2022 12:18

        Не, не это я имел ввиду) Я имел ввиду построить диалоговую модель на TCP/UDP запросах/ответах, чтобы сеткой эмулировать игровой сервер (той же контры, например)


  1. GospodinKolhoznik
    13.09.2022 21:03

    Вам надо было в качестве обучающей выборки дать нейросетке игру Hylics https://store.steampowered.com/app/397740/Hylics/ Психоделичность мира получился бы целостной.


  1. perfect_genius
    13.09.2022 22:48

    Непонятно, что мешало автору записать свои видео с отображением на экране ввода. В начале я даже подумал, что он решил отправить нейросети кроме картинки ещё и состояние памяти игры, чтобы в ней нашла закономерности.


  1. ryzhehvost
    15.09.2022 23:13

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


  1. OlegSinitsyn
    16.09.2022 07:01

    Хороший результат. Но он достигнут на простой игре ходилке. Если взять игру посложнее, сложность реализации вырастет по экспоненте. А если игра будет со структурированным сюжетом, цена ее имитации нейросетью превратится в число гугл.