Ответы пользователя по тегу Искусственный интеллект
  • Как научить нейронку выигрывать в моей Phaser.js игре?

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

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

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

    Задача будет решена, но времени (вычислительных ресурсов) для этого может потребоваться очень много.

    Если интеллект твоего робота будет из двух сетей, то та что моторная можно обучить отдельно, другими алгоритмами, так как для нее легче сделать функцию ошибки (1/расстояние до цели например), это значительно сэкономит время. Так же можно вместо управляющей нейронки написать тупой код (например управляющая принимает решение, какие звезды собрать и когда уворачиваться от бомбы, просчитывая ее положение на основе известных тебе игровых алгоритмов)
    Ответ написан
  • Как интерпретировать значения FLOPs модели ML и FLOPS различных устройств (snapdragon процессор, например), GPU?

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

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

    К сожалению помимо FLOPS железа нужно смотреть еще и на софт, умеет ли он оптимально использовать мощности оборудования, и есть ли у него такая возможность в принципе (да, смартфоны могут быть очень мощными устройствами но доступ ко всей этой мощи может быть ограничен функционалом игр)
    Ответ написан
    Комментировать
  • Как сделать, чтобы AI меньше фантазировал в своих ответах?

    @rPman
    Известные большие языковые модели не обучались (я не слышал чтобы кто то это делал) с учетом достоверности результата. Т.е. единственное что они умеют делать - это притворяться человеком, писать правильные тексты, как если бы их писал человек. Потому что во время обучения, единственным критерием правильности был текст из обучающего примера. А туда попадает все что угодно. Странно то, что они стали проявлять дополнительные свойства, очень похожие на интеллект...

    А еще для генерации текста алгоритмы обычно используют вероятностную модель (есть разные алгоритмы, ищи параметры типа температура top_k, или еще вот алгоритм - mirostat. Весь смысл в том что если поставить температуру 0 то сеть будет выбирать наилучший следующий токен, а иначе по какому то алгоритму сможет перескакивать на альтернативы

    Чтобы компьютер вместе с текстом тебе выдавал ссылки и вообще какие то корректные данные, необходимо чтобы кто то заранее тебе проиндексировал (классическая база данных) интернет, а вот поиск по этой базе завернул бы через ИИ, чтобы поиск по ней производился не поиском по тексту а по смыслу. Чтобы что то скачать себе на комп и поиграть я такого не видел, на гитхабе есть проекты на основе как chatgpt так и llama, но как я понимаю все это на зачаточном уровне.

    p.s. посмотри perplexity.ai
    а еще посмотри майкрософтовского чат бота (работает только не из россии, только в браузере edge)
    Ответ написан
    2 комментария
  • Можно ли заставить нейросеть заставить избегать определенных состояний?

    @rPman
    Главный инструмент обучения нейросети (не единственный) - это создание функции ошибки и подбор параметров для ее минимизации.

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

    Классический но не единственный способ определения функции ошибки - это сумма всех расстояний (если вектор состояния это координаты в многомерном пространстве) между ожидаемым выходом и полученным текущей сетью. Самая простая метрика расстояния для одного 'эксперимента' - квадратный корень суммы квадратов разницы значений векторов, т.е. A(a1,a2,a3,...) - это вектор из обучающей выборки, а B(b1,b2,b3,...) то что вернула сеть, то расстояние sqrt((a1-b1)^2+(a2-b2)^2+...), соответственно полученные ошибки нужно просто сложить для всей обучающей выборки, и получить полную ошибку.

    Так вот, есть разные способы повысить/понизить значимость конкретному значению вход+выход из обучающей выборки - это:
    a) добавить коэффициент к ошибке, т.е. умножить ошибку на какое то фиксированное значение (для каждой пары вход-выход свое значение, по умолчанию 1), увеличивая этот коэффициент можно заставить нейросеть более строго изучать какие то конкретные примеры из обучающей выборки, а какие то наоборот, менее строго.
    b) исключать примеры из обучающей выборки или добавлять их несколько раз (я находил несколько исследований этого метода, точнее частично похожих на это)

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

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

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

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

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

    @rPman
    Боюсь ты не найдешь готовых решений
    Мало того, тут нужно искать размеченный датасет голов людей и радоваться этому богатству

    Решение для тебя - берешь несколько сотен тысяч видео (разные времена года), нанимаешь десяток человек в помощники и садишься размечать, затем берешь готовые решения по нейронкам, арендуешь на недельку себе кластер с gpu или на месяц другой игровую видеокарту и вперед с примерами от pytorch пилишь результат.

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

    p.s. после того как ты на все это портатишь от нескольких сотен тысяч рублей до миллионов, к тебе подойдет такой же как ты сейчас и скажет, а дай мне готовые веса твоей нейронки... куда ты его вежливо пошлешь?
    Ответ написан
    1 комментарий
  • Как начать работать с OpenAI gym?

    @rPman
    Формально ты сможешь понять как использовать готовые инструменты (99% решений) но понимания как это работает внутри не будет (чего обманываться, людей которые это понимают очень и очень мало) а что значит это понимание - когда готовые инструменты решения не дают, ты не будешь понимать что делать дальше, когда как это понимание позволит выбрать правильное направление действий (например поработать над весами нейронной сети, в т.ч. вручную, т.е. написать свой код который будет с ними что то делать)

    p.s. нейронные сети (основа большинства современного ИИ) - это не про алгоритмы, а про обучающие данные. Собственно собирать эти данные и подготавливать их к виду, которые нужны уже реализованным алгоритмам и есть большая часть работы.
    Ответ написан
    2 комментария
  • Какие существуют популярные библиотеки/фреймворки для создания нейросетей и машинного обучения для C++?

    @rPman
    Что не так то? нормальная документация с примерами - https://www.tensorflow.org/api_docs/cc
    Окей, из крупных проектов гуглится сразу opennn.net открыто доступно с примерами

    Только непонятно зачем тебе именно c++?

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

    И да, opencl - общепринятый язык описания кода для высокоэффективных вычислений на универсально любом оборудовании (cpu/сопроцессор/видеокарта/...) это по факту язык с c++ синтаксисом.
    Ответ написан
    4 комментария
  • Какие есть пути объединения Blockchain и AI?

    @rPman
    Создание ИИ, даже в упрощенном виде (не тот который человека заменяет а тот что для конкретных задач формулируется), обычно это две огромные задачи:
    1. описание проблемы и определение метрики качества ее выполнения
    если говорить про использование нейронных сетей то это обучающая выборка и функция ошибки (оценка качества соответствия обучающей выборке полученной нейронке)
    2. собственно создание ИИ
    в нейронках это создание сети ипоследовательное изменение этой сети с целью минимизации функции ошибки, плюс другие правки (например защита от переобучения)

    Первую задачу формализовать мягко говоря сложно, а для того чтобы ее можно было отдавать на откуп неуправляемого большинства - потребуется ее как то оценивать (на сколько качественно ее сделали), и это проблема не технического плана... но пусть, например эта задача уже решена централизованно, например создание проекта типа SETI@, Folding@ или BOINC, где некий центр определяет задачу и определяет какую то награду (закроем пока глаза на то что наличие такого центра в принципе убирает необходимость в использовании блокчейна)

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

    недостатки - все участники должны загружать огромный датасет, на каждом шаге по сети должно распространяться промежуточное значение нейронной сети и главное, чего нет в ней - время (т.е. сложность этой задачи) не поддается прогнозированию, в отличии от простого перебора хешей, тут нельзя выдать и главное проверить вероятность нахождения результата, а значит время на поиск блока будет случайым... кто знает как много ресурсов потратил участник чтобы сделать сеть лучше на минимально требуемое уменьшение фукнкции ошибки, сжег он киловат энергии или на малинке пару секунд считал, как правильно наградить этого участника?
    Ответ написан
    Комментировать
  • Реально ли использовать океан как нейросеть? Где почитать?

    @rPman
    Полагаю что тут 'ученый, как обычно, изнасиловал журналиста'. Заставить океан работать как огромный компьютер полагаю пока проблематично, все существующие исследования все же работают в ограниченных условиях лаборатории со внешним контролем (например считывание и интерпретация данных)

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

    что то типа этого
    Ответ написан
    1 комментарий
  • Как создать детектор чихания?

    @rPman
    Собираете данные обучающей выборки (сотню другую чихов, кашлей, хлопков в ладоши и просто фоновых звуков). Затем, с помощью готовых алгоритмов получаете спектр звука на интервале (2-3 длины типового чиха), и натравливаете на это дело нейронку.
    Ответ написан
    Комментировать
  • Может ли искусственная нейронная сеть открыть счёт и начать зарабатывать деньги?

    @rPman
    Боюсь если ваш ИИ сумеет самостоятельно дойти до понятия открытия счетов и зарабатывания денег, у вас возникнут проблемы отобрать их у него ;)
    Ответ написан
    Комментировать