Как стать автором
Обновить
25
0
Максим Савенков @MaxEdZX

Разработчик компьютерных игр

Отправить сообщение
О. А и правда. Ну я и дурак слепой :)
Простенькой лично я не видел, но простейший алгоритм самому написать недолго, если есть библиотека, реализующая базовый функционал (создание сетки, forward/backward pass, разные loss-функции).

А вообще, есть вот такая штука: github.com/samindaa/RLLib (для C++). С виду прям что-то очень мощное, десятки разных алгоритмов… Но я не разбирался в подробностях, как это всё использовать. У меня такое ощущение, что она реализует именно только алгоритмы RL, а базовый функционал сети ей нужен отдельно, но возможно я неправильно понимаю.
О, спасибо за наводку — выглядит вменяемо по документации И поддерживает GPU. Почему она мне не попадалась при поиске в Гугле?!
О, это прямо моя тема! Я недавно перебирал всякие либы для ML на C++. Итак, по порядку:

FANN — не C++, а C. Проставя в сборке, простая в использовании. Только CPU, причём без нормального распараллеливания по ядрам, кажется. Но самое худшее — нежданчики внутри, например параметр activation steepness, который судя по докам влияет лишь на скорость обучения, а в реальности — жестоко портит способность сетки различать разные входы, если их много, так как устанавливает жёсткий и низкий потолок на макс. сумму на входе нейрона. Да и вообще, в коде много подозрительных мест и магических чисел. Я ей сначала пользовался, но потом отказался.

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

TensorFlow C++ API — жуткий монстр. Собирается 30-40 минут на хорошей машине, при малейшей ошибке почему-то весь проект начинает пересобираться с нуля. Собирается (CMake, Bazel под Windows не вариант) только если строго следовать инструкциям, даже в тех местах, где они звучат как идиотизм (out of source build? Неа, не работает). В процессе сборки жрёт память гигабайтами, и у меня таки не собралось в конце концов с полным набором ядер. Сборка с неполным набором ядер — просто сломана. Ах, да, и даже если получится это всё собрать — нет способа выдрать из гигантского репозитория только либу и нужные хидера, потому что как обычно у Гугла (см. Breakpad) всё лежит огромной бессмысленной кашей. Но всё это можно было бы стерпеть, если бы не тот факт, что на C++ не реализовано пока что обучения (в планах вроде есть, но когда?). Точнее, оно как бы есть, но его как бы нет — придётся много кода писать руками, как я понял.

Microsoft CNTK. Поставляется в сборке, что радует. Только Release, без PDB, что не радует. При попытке собрать их собственный тест из репозитория — падает на первой же строчке. Документация отсутствует полностью («читайте хидер на X тысяч строк!»), примеры и тесты противоречивы, нет хелпер-функций для конструирования сетей, точнее, они есть, но только в рамках тестов, откуда их хорошо бы себе скопировать…

MxNet — честно говоря, не стал пробовать — очень запутанная терминология у них :( Почему нельзя как в tiny_dnn — сетка, слой, слой, слой, функция ошибки?! Нет, навыдумывали каких-то «Символов»… C++ API заявлен, но вроде как в «инкубаторе», так что можно юзать, или нет — не понятно толком.

Caffe — поддержка C++ заявлена в том плане, что «ну, у нас внутри всё написано на C++, поэтому линкуйтесь с нашей либой, и читайте исходники caffe.cpp, чтобы понять, как всё это работает». Пробовать не стал.

OpenNN тоже пробовал, но в самом начале пути, и возможно ступил — мне показалось, что в её парадигме невозможно реализовать Q-Learning, а мне был нужен именно он.
Вот все тут спорят, плохо это или хорошо, надо или не надо… Как будто время можно повернуть вспять, выжечь WA калёным железом, и заставить тех школьников учиться заново, по старинке. Но нет такого средства, и не будет (ну разве что глобальная ядерная война поможет, не дай бог такой помощи).

Статья вот заканчивается правильными словами:

Либо мы перестроим наши школы, чтобы они смогли принять такие инструменты, как Wolfram|Alpha, либо мы рискуем стать живыми артефактами в быстро развивающемся мире.


Пасту обратно в тюбик не запихнуть, и надо думать о том, как дальше жить в именно таких, а не других условиях. Ведь очевидно, что нельзя запретить использование вспомогательных инструментов полностью — и более того, чем дальше, тем проще будет доступ к ним. Это сейчас надо с телефона лезть куда-то — а ну как ещё лет через 20-50 нейроинтерфейсы доведут, и весь Wolfram|Alpha будет у детей прямо в голове?

Кто-то скажет, конечно, что это всё — гибель человечества (популярная была у фантастов одно время тема). Ну, что же, тогда она неотвратима, и надо видимо расслабиться и получить удовольствие, потому как прогресс назад повернуть без вреда для организма нельзя.

Я считаю — надо уже признать, что человек сливается с машиной. Пока ещё они, машины, не части нас, но скоро обязательно будут (или мы станем частью их, если у нас таки случится обещанный Курцвейлом mind uploading). Вы спрашиваете, как учить ребёнка, у которого таблица умножения (и решение любых уравнений) в телефоне. А я спрошу вас — как учить ребёнка, который таблицу умножения имеет прошитую в мозг. Разница между этими двумя вариантами не так уже велика. Исходить надо не из борьбы со шпаргалками и калькуляторами, которую школа всё равно проиграет, как проигрывала всегда, а из того, что у ученика есть моментальный доступ ко всему — от банальных справочных материалов, до ИИ и экспертных мнений. Чему и как учить в таком случае — вот какой вопрос надо решать, о чём надо спорить.

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

Если бы я стремился в этом комменте к красиво звучащим упрощениям, я бы сказал, что каждого ученика надо учить программированию, поскльку программирование есть объяснение задачи компьютеру (тупому, гаду!), в процессе которого ты хочешь-не хочешь, сам понимаешь объясняемый материал. Но привязываться к программированию было бы, всё же, излишним упрощением. Хотя в целом задача «Напиши свой Wolfram|Alpha» (или хотя бы 1% от него) мне кажется способствует изучению математики лучше, чем 1000 примеров из Сканави.
У меня тут знакомый собеседовался к одним японцам (в Японии). Они разрешили ему взять свой ноут, и оставили одного на час в комнате без Wi-Fi, и в таком режиме ему надо было решить 4 задачи. То есть, сиди, компилируй, пиши тесты — всё сколько хочешь, и в своей любимой IDE, а не на бумажке, или, упаси господи, на доске. Задачки, правда, всё равно абстрактные, не из жизни, что лично я считаю минусом, но по крайней мере, их позволили выполнять в более комфортные условиях — уже шаг вперёд.

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

А ещё важно умение задать Гуглу правильный вопрос, и среди тон хреновых ответов со StackOverflow найти нужный. Не знаю, как где, но в мобильной разработке из этого, кажется, 90% труда состоит — из выяснения, почему Андроид опять несёт чушь, хотя ты код чуть ли не из официальных туториалов брал. Причём по каждому вопросу на SO будет 50 ответов, и из них ровно 1 подходящий именно к твоей ситуации (это в хорошем случае). Чаще всего, это будет не первый ответ, а 4ый коммент к 5ому ответу в 3ей реинкарнации этого вопроса. Что удивительно, не каждый кандидат в программисты умеет искать и находить оные ответы! Вот это бы тоже неплохо проверять, правда, не особенно понятно как.
Мобильная разработка — это отдельный мир, где всё намного, намного хуже чем на десктопе, причём под любую платформу (под каждой проблемы свои). XCode славится падениями, внезапным отказом части функций дебаггера (в старых версиях, может сейчас лучше), загадочными ошибками при сборке (когда пять минут назад всё собиралось). Android Studio лишь недавно научилась отлаживать код на C++, жрёт тучу памяти на пустом месте (больше, чем Visual Studio, хотя казалось бы и VS не балерина далеко). Visual Studio, когда с работаешь над приложениями для Windows Phone, тоже начинает обрастать чудесными багами в сборке финального пакета, например (как в него (не)попадают нужные dll — одному богу известно, особенно если собирать через MSBuild).

А ещё есть проблема подписки пакетов, тоже своя на каждой платформе, но особенно болезненная на iOS, когда сертификаты внезапно протухают, теряются (т.е. физически он есть на диске, но IDE его не видит, хоть убей, хотя вчера видела).

Эмуляторы — отдельная песня с нецензурными словами. Почти все они слишком медленные, чтобы отлаживать в них игры (ну это наша специфика), более того, поведение на эмуляторе и на реальной железяке порой различается в неожиданных местах неожиданным образом. Кстати, выделяется здесь эмулятор Windows Phone, на котором даже игры с приличным FPS можно запускать. Зато есть проблемы с эмуляцией «ориентации экрана» (насколько я помню — с этим не я, а коллега мучился) — то ли какие-то лишние события приходят, каких не будет на реальном железе, то ли наоборот не приходят, но что-то в таком роде.

И это только IDE, а там дальше начинаются персональные проблемы каждой ОС, её версий, их WebView-компонентов (В Android 4.4.1 и 4.4.4 разные версии официального WebView с разным набором фичей HTML5, запретить приложению работать на 4.4.1 нельзя, но многие устройства 4.4.4 не получили). Про драйвера графических карт для Android ещё тоже можно рассказывать долго. Стандарты OpenGL не соблюдают ни одни, наверное, и каждый по своему (очень интересно заглянуть в файл в исходниках мобильной версии Chrome, где перечислены фичи и костыли, которые надо включать/выключать, в зависимости от имени GPU и версии дров; апдейты дров привязаны к апдейтам ОС для этого конкретного устройства, т.е. не существуют).

Внезапно отвалившийся HTTPS — это вот конечно странно и стрёмно. Похоже, честно говоря, что просто на устройстве часы съехали.

P.S. Кстати, на десктопе IDE тоже прекрасно падает порой. У меня VS 2005 когда-то падала регулярно в редакторе форм MFC, а вот свежая 2017 до апдейта падала на каждом выходе из неё. Сейчас перестала, зато начала добавлять файлы в проект по абсолютному пути вместо относительного… Причём если пересохранить файл солюшена — то она сама это исправляет. Но сначала делает неправильно. Баг зарепорчен, но воз и ныне там.
чем чаще общество будет бить чиновников, тем активнее придется им работать головой, тем меньше вероятность деградации мозга?


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

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

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

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

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

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

В свете вышесказанного, интересным выглядит пожалуй лишь проект мониторинга власть предержащих и лечение их таблеточками нахождением специальных людей, которые будут им на ухо твердить «ты смертный». Правда, все случаи «не утери» эмпатии, описанные в статье (Индра Нуйи, Черчиль) — self-reported, и потому лично у меня вызывают большое сомнение — так ли уж помогают слова матери или жены? Тут требуется большое реальное исследование — исследование настоящих политиков и лидеров компаний. На которое они едва ли согласятся.

В общем, вопрос этот, как мне кажется, гораздо сложнее, чем думают многие комментаторы. Хотя радует, что производятся какие-то исследования и подвижки на эту тему, но до того, чтобы на основе этих трудов принимать какие-то действенные меры в реальной жизни, мне кажется, ещё очень далеко.
Не получится, у меня телефон неподходящий, с Ubuntu Touch. Так что пока веб-версию не запустите, я не ваша аудитория.
Спасибо за статью, я сейчас работаю в т.ч. над AI для одной коллекционной карточной игры, попробую вдохновится написанным. А то пока у меня там всё как в первом примере про бильярд — в некоторых случаях AI просто забивает на алгоритм и ходит случайно, чтобы не быть слишком сложным…
Я всегда думал, что это из-за развития пиратства в России. С детства приходилось осваивать hex-редакторы, чтобы байты в exe-шнике поменять (а ещё раньше — останавливать загрузчик Спектрума и вводить всякие странные POKE). В смысле, на Западе это всё тоже было, да и шло оттуда во многом, но там это было всё-таки «не совсем принято», а у нас — норма. Ну, и если мы говорим именно про хакеров — то просто уважения к закону меньше у нас, вот и больше хакеров.
О, Imhonet наконец скончался? Столько лет его убивали редизайнами и отпиливанием фичей… А вот приведённое приложение мне не поможет — мне рекомендации нужны по книгам (тут справляются Goodreads и Fantlab), музыке (тут всё плохо) и играм (тут всё ужасно).
Поддерживаю про Сандерсона. Недавно открыл для себя этого автора — очень, очень качественное фэнтези. Разве что только первая книга вызывает порой ассоциацию со всякими разными компьютерными играми порой :) А так — интересные герои, продуманная магия, эпический сюжет, который с первого взгляда про очередную борьбу Бобра с Ослом и «Зима идёт!», но по ходу повествования появляются вопросы касательно чёрно-белости и мотивации обеих сторон. Единственный минус — товарищ взялся за эпическое произведение, размерами не меньше, а даже и больше «Песни льда и пламени», и хотя он пишет гораздо, гораздо быстрее Мартина, но очередной книги ждать всё равно долго — ненавижу читать недописанные сериалы :)
А мне кстати и «Чужая игра» понравилась. Но честно говоря, я вообще фанат Шумила, мне у него всё нравится :) Даже то странное, что он в последние годы пишет, хотя некоторое ощущение неправильности появилось, но стиль текста и повествования всё равно уникальный и очень мне нравящийся.
Потратив две недели на общение с саппортом, я так и не смог в нашем приложении получить в Firebase аналитику по INSTALL_REFERRER. Причём саппорт говорил, что utm-параметры из обычных ссылок вообще не должны приходить в аналитику — но они приходили (иногда, редко). И предлагал пользоваться Dynamic Links. Но от Dynamiс Links мне удалось получить событие dynamic_link_first_open ровно один раз за всё время — в остальных случаях, сколько бы человек не ставили приложение по ссылке, в статистике появлялись только обычные first_open'ы без параметров…

В общем, хотя симпатичная аналитика у Firebase, но заставить её работать — почему-то очень большое приключение оказалось, и в результате нам пришлось интегрировать другой треккер инсталлов (Tune) — там всё сразу заработало.

Открытые исходники всего и вся помогли бы хоть немного понять что может быть не так и построить гипотезы. Я уж даже декомпилировал jar аналитики, чтобы попытаться понять, что там может не работать, но только запутался ещё сильнее — из кода получается, что в first_open таки должны быть utm-параметры! Но только если они были переданы не так, как в ссылке, которую формируют все конструкторы, а чуть по другому…
У меня главная претензия к Хрому — проклятый минимализм. Дайте мне настраивать интерфейс, чтобы было меню, тулбары нужные мне с закладками и т.п., да хоть большие кнопки как в 3.5! FireFox ещё как-то можно было пинками привести в желаемый вид, но новый обещанный дизайн убивает — всё плоское, квадратное, уродское.
Металлический конструктор очень раздражал красивыми картинками на коробке, для которых в ней не хватало деталей :( И тем, что резьба срывалась довольно быстро на винтиках, во всяком случае, в той версии, которая у меня была в конце 80ых — начале 90ых.
Все «Дивный новый мир» вспоминают, а я — книги Буджолд и маточные репликаторы оттуда. Её мир тоже, конечно, не утопия, но эта технология как раз одна из любимых автором и видится исключительно позитивной. Женский взгляд на научную фантастику он, знаете ли, немного другой… Хотя, конечно, в реальности до оных репликаторов для человеческих эмбрионов с нуля ещё очень далеко.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность