Pull to refresh
46
Андрей Юношев@YoungSkipper

Делаю игры для мобильных. Изучаю ML.

14
Subscribers
Send message
>Интересно, зачем Vungle так старательно пытается усложнить жизнь своим пользователям?

Как раз упростить. Ответ простой. Vungle как и любая комерческая компания делает то что нужно тем клиентам которые приносят большую часть дохода. Очень и очень подавляющую часть дохода Vungle приносят крупные компании (я свангую что 95% дохода приносят несколько десятков компаний) — которым даже в голову не придет лазить на сайты отдельных сеток и смотреть дам доходы, да еще и по аккаунту целиком. Им нужно API чтобы подгружать в свои внутрение аналитические системы, с максимально детализированной разбивкой. А там дальш они уже попадут в развесистые отчеты которые и будут анализироваться.
Этот код вызовет предупреждение: компилятор увидит, что метод calculate_tax не является константным (const), поэтому он обеспокоится тем, что метод может изменить переменную base_price — и в этом случае иметь значение будет то, считаете ли вы налог по оригинальной base_price базовой цене, или по уже измененной.


Этот код вызовет предупреждение (если вызовет) в не зависимости от того помечен ли метод calculate_tax константным или нет. Компилятору вообще практически всегда наплевать на ваши const определения.
Не соглашусь насчет того, что в юнити «встроенная компонентная архитектура не применяется», ведь механика добавления компонентов на объекты, их поиск и взаимодействие (даже обращение к встроенному свойству transform или поиск объекта в сцене) — как раз использование этой самой архитектуры. Даже автоматический вызов функций Update, LateUpdate, OnGUI и т.д. тоже является ее частью.


На самом деле увы и да. Практически не применяется в любом достаточно крупном коммерческом проекте. И собственные компонентная система, и свое связывание компонентов их с объектами. И даже тупо искать объект на сцене стандартными методами очень плохая идея — нужное кэширование все равно и самому отслеживать добавление и удаление объектов на сцене.

И автоматические вызовы выше перечисленные не используются — ну вернее висит один объект в сцене которые их получает, и уже через собственную компонентную систеум диспатчит в свои компоненты.

Ибо ответ простой — все что предлагает «встроенная компонентная архитектура в Юнити» можно написать самим и оно будет работать и быстре (сильно быстрее, на порядк) и удобной.
С другой стороны даже на краткосрочных проектах это зло. Очень давно я занимался портирование j2me проектов на brew — на 3-4 проект, у меня, как и у любого «ленивого» программиста — родилась реализация всех базовых j2me методов на c++, плюс парсер java кода — и фактически 80% транслировалось на полу-автомате. И вместо базовых 2-3 месяцев на проект, у меня портирование стало занимать 2-3 недели. Рекорд вместо 2-х месяцев выделеных на проект — 7 рабочих дней. И не смотря на то, что у меня был фиксированная оплата за каждый проект (которую я оценивал при взятии проекта в работу) — то даже в таком случае приходилось отдавать проект сильно позже чем он был готов. Т.е. я его делал за 2 недели и потом 2 недели просто ждал. Ибо если отдавать сразу — то у посредника который собирал мне проекты, да и у заказчиков рождались неприятные мысли — типа раз все так просто, а не много ли мы платим. Или даже если они эти мысли гнали, то они пытались занижать сроки в дальнейшие проекты — что меня тоже не радовало, ибо фосмажры никто не отменял. И понятно, что в случае оплаты за время, подобного решения даже бы и не родилось. Что в целом конечно было бы в минус и мне, и посреднику и заказчикам.
Судя по всему задачи у вас достаточно короткие — типа сделал и через полгода-год-два забыл. В таком случае, подход хороший. Но он провоцирует прораммистов, решать задачу сугубо в рамках ТЗ, не задумывая о дальнейшем развитии и главнное поддержке проекта. Если вы себе это можете позволить — то да, почему бы нет — особенно, если вы не испытываете проблем с наймом.

Но в целом, для многих проектов это порочная практика — ибо любая задача может быть решена быстро, качественно но узкоспецилизированно, что не позволит в будушем генерализировать решение, и может привести к проблемам поддержки решения. А может за более долгое время — но в дальнешем ее расширять и поддерживать будет более просто. Ваш подход к оплате, не способствует к решениям второго типа — ибо при более долго времени есть шансы что вас оно не устроит (врядли вы в случаее успешных задач вникаете в причины почему они делались столько времени именно — для этого по сути нужно еще программиста), а во вторых если доработки будут делаться потом быстро — это не выгодно для программиста.
Это практикуется во многих компаниях, в которых количество программистов измеряется тысячами. Не всегда это акции в чистом виде, но бонусы завязанные на акции это регулярная практика и неотемлемая часть оффера очень много где. Это очень удобный механизм со стороны компании — он во первых позволяет, в случае если дела компании идут не очень хорошо, в том числе и по не зависимым от нее причинам, таким как например общее падение рынка, существенно экономить на бонусах естественным путем, с другой стороны это отличный способ удержания сотрудников — ибо подобные бонусы как правило завязаны на время работы в компании могут погашатся частично, и чем дальше по времени — чем больше. И они кстати достаточно существенные зачастую — за трехлетний период они составляют часто более 50% годовой зарплаты. Я бы вообще сказал, что именно для крупных компаний это скорее обычная практика, чем для средних.
>Хороший вопрос, но боюсь что ответ в простейшем случае — нет. Она ищет признаки, за которые можно зацепиться, на поиск которых >его «запрограммировал» создатель сети и проектировщик правил workflow.

Нет, нет. В этом и прогресс, в этом и отличие RNN от других алгоритмов. Никаких признаков в NN не «запрограммировали», она сама их нашла. В этом и суть. Не закладывается никаких зацепок. Изначально голая нейроная сеть, на вход которой подается пословно текст и все.

Я боюсь как раз в не понимании это особоенности NN и есть причина вашего топика.
У нас различное представление о сложности. И понимании, того что такое алгоритм и почему он не связан с оценочной функцией.

>Как соотносятся два эти ваши высказывания меж собой?

Очень просто, это не будет NN играющая, только в SC — это будет NN общего характера, которую потенциально можно будет применить и к другим играм. Как сейчас одна и таже сеть обучается и играет в различные Atari игры, так и это обудет одна сеть, которая сможет играть в WarCraft и т.п. игры
Смотрите.

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

Мы можем обучить NN по картинки отличать обезьяну от человека, аналогично. Причем даже когда последняя в одежде (и NN сама найдет уникальный признак «волосатое лицо» — указывать ей на это не нужно).

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

Если вы считаете, что человек смотря на картинку обезьяны с бананом и отвечающий что это такое делает анализ, то почему вы отказываете в этом NN?

Далее, что самое интересное — если вы дообучаете NN отделять новый фрукт, то это не сломает всей системы — она сможет отвечать на вопрос — это человек или обезьяна с этим фруктом
А давайте еще пример.

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

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

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

>Она как максимум тупо повторяет анализ человека, сделанный к тому же еще и брутом… (ну и делает распознавание заученных «картинок»)

А вот тут я не понял. Человек там не участвует, сеть обучается сама. Никаких специальных триков заточеных под специальную игру там нету.
Человек посмотревший выборк сможет. И нейросеть посмотрев выборку сможет. Тут опять же хитрые нюансы — скажем так потеницальном сможет, и в ряде случаев сможет даже лучше человек.
Почитайте вот эту статью — https://habrahabr.ru/post/303196/

```Напомню прошлые вехи. Первая сетка, которая победила в Imagenet Recongition challenge, сделала это с ошибкой 15% в 2012. В конце 2015 допилили до 3.08%. Разумная оценка среднего результата человека — ~5%. Прогресс, как мне кажется, впечатляет.```

Про размеченные данные я отвечу выше. Да, там есть нюансы — но не все так однозначно.
А вот, даже на Хабре есть — https://habrahabr.ru/post/279729/
Более того, вы можете это повторить у себя дома сами
Да безусловно я серьезно. Игры простые — но это вопрос в целом маштабирования (хотя и ряд других проблем есть)
Ключевые слова — deep reinforcement learning
Ключевой пейпер — http://www.nature.com/nature/journal/v518/n7540/abs/nature14236.html и https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf
Ключевики для гугла — «neural network Atari games»

Насколько я знаю, в Гугле уже активно работают над игрой в StarCraft
При этом мы же понимаем, что человек который никогда не виде обезьян, бананов и огурцов сделать такой анализ не сможет
Опять же упираемся в вопрос что такое знание семантики и принципов? Т.е. если у нас в обущающей выборке будет достаточно размеченных данных по каждому пункту — то да, она сможет сделать такой анализ
А можно на примере? Вот сети на вход подают картинку из видео игры + данные из ячейки памяти отвечающией за score

Далее, сеть научилась играть в игры — т.е. проходить уровень за уровнем. Означает ли это что она проанализировала игру, и нашла «неизвестные» признаки — т.е. как нужно играть в игру (какие кнопки нажимать) чтобы выйграть? Т.е. по факту нашла правила игры — является ли это ответом да на ваш вопрос?
API то было, но по сути это был software rendering — что на BREW телефонах того же времени делалось просто в коде самой игры. А тут просто они реализовали это в прошивке и прокинули из j2me вызов функций. Т.е. ни о каком хардварном ускорении речи не шло.

Ну все таки подобная графика, и наличие, на телефоне 3д ускорителя (по моему это был где-то 2004 год) и поддержка оным jst-184 сильно различные вещи. Если говорить о подобном 3д — я так 3д танчики (с видом из башни) писал еще для https://ru.wikipedia.org/wiki/Cybiko — что было раньше чем эта Нокия появилась на свет

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity