Защо Unity

Преди няколко месеца започнах да работя върху стратегическа видео игра, базирана на Гражданската война в Ливан. Експериментирах с куп двигатели, включително изграждането на мой собствен скапан и този, към който в крайна сметка имах най-голяма привързаност, беше Unity.

  1. Unity има богат визуален интерфейс за създаване на среди и поставяне на активи

2. Unity улеснява предоставянето на различни поведения на различни игрови обекти чрез Entity Component System, която третира обектите като видове сървъри, които изпращат съобщения до други обекти, за да взаимодействат с тях

3. Много активи и полезен код в Asset Store

Защо да създавате симулация? Защо не използвате бенчмарк?

На NeurIPS 2016 имах кратка дискусия с виден изследовател на Reinforcement Learning, където изтъкнах, че новото състояние на изкуството в игрите на Atari е безинтересно и по същество прекалява с масивните модели на прости игри.

Твърдя, че би било много по-интересно и продуктивно да се разработят нови видове среди, които тестват нови видове възможности 0 → 1 вместо 99,8% → 99,99%.

Но изследователят настоя, че това ще направи сравняването на документи по-предизвикателно. Имам ретроспекции към моите SAT дни.

Въпреки че през целия си живот съм се интересувал от игрите и обучението за подсилване през целия си професионален живот, никога не съм осъзнавал колко голяма е връзката между тях до преди няколко месеца

Какво е Unity ML агенти

Накратко Unity ML agents е плъгин на Unity, който ви позволява да свържете вашите игрови агенти (напр.: вражески AI) към Reinforcement Learning сървър, който отговаря за 3 неща

  1. Изпращане на необходимите RL данни: състояния, действия, награди
  2. Обучение на модела RL
  3. Въвеждане на действия обратно в играта от модела

Обучението с подсилване е декларативна техника за ИИ на играта

Декларативно, защото не трябвада разбирате как работи моделът RL, въпреки че помага.

Наистина трябва да направите само 2 неща и Unity ML агентите ще се погрижат за останалото.

  1. Кодирайте действия и състояния
  2. Задайте функция за награда

Така че нека отворим пример и да видим как работи всичко

Unity ML агенти с един поглед

Първото нещо, което ще видите в README, са 12 различни среди, в които една двойка изглежда има няколко идентични агенти.

Причината, поради която имаме симулации с множество идентични агенти, е, че много популярни RL алгоритми са извън правилата, което е изискан начин да се каже, че множество агенти могат да събират данни в един и същ кеш, който се нарича буфер за повторно възпроизвеждане. След това алгоритъм за обучение на RL ще се изпълнява върху целия този набор от данни.

Други забележителни акценти от README са

  1. Имитационно обучение Стартирайте RL обучението чрез набор от видео данни, на които играете симулацията
  2. Обучение по учебна програма: Където можете да свържете по-сложни среди заедно, след като агент се отличи с по-основна задача
  3. Оптимизация на проксималната политика и RL алгоритми за меки критици на актьори: примери за стабилни RL алгоритми, които ще гарантират, че вашите агенти няма да бъдат твърде „нестабилни“. Можете да изтеглите всеки алгоритъм, който харесвате, от Github и да го интегрирате, ако имате специфични нужди

Преминавайки към изтегляне на Unity, отворете папката \ml-agents\UnitySDK\Assets\ML-Agents\Examples\Template\Scene.unity и след това щракнете два пъти върху Soccer2 в раздела проекти.

Unity ML agents идва с 10 страхотни примера, но Soccer2 е едновременно прост и интересен, така че е страхотен първи пример.

В тази симулация има 4 агента. 2 червени и 2 сини всеки с нападател и вратар. Всички те бяха създадени чрез плъзгане на кубични сглобяеми конструкции към визуализатора на сцени и промяна на няколко от техните свойства като техния размер или цвят.

Ако щракнем върху BlueStriker, неговите свойства ще изскочат вдясно

Най-важните характеристики на BlueStriker са

  1. Трансформация: това е позиция, мащаб и въртене в пространството
  2. Мрежа:Това е куб (вместо това може да е хуманоид)
  3. RigidBody и Collider:Физически константи, свързани с агента
  4. Скрипт:Изглежда има няколко скрипта, които трябва да проверим

Код дълбоко гмуркане

Има 4 скрипта, свързани с футболната среда, така че нека ги разгледаме 1 по 1.

AgentSoccer

Отговаря за съхраняването на всички данни, които помагат за инстанцирането на агент, като неговия екип, роля и неговите физически свойства като сила на ритане.

Обикновено в среди като тези във фитнеса Open AI, състоянието на играта е това абстрактно нещо, което е твърдо кодирано.

В Unity обаче можем да накараме агента да прожектира лъчи от очите си и да симулираме сензор на камера, прикрепен към агента. Основната съставка са лъчи, които също се използват за откриване на сблъсъци и прожектиране на обекти на екрана.

Насъстояниеили наблюдениянаправени от всеки агент са

Наградитеса разработени по интересен начин, при който награждаваме вратарите за това, че са търпеливи, и наказваме нападателите за това, че са нетърпеливи.

Действиятаса кодирани чрез enum, където вратарите могат да се движат само в 4 посоки, а нападателите могат да се движат в 6. В този пример ние изрично налагаме различни поведения за различни роли, но ако обучаваме нашите RL алгоритми достатъчно дълго, трябва да очакваме агентите да научат, че специализацията във вратар и нападател е полезна и ако не е, тогава ние научаваме нова футболна стратегия.

Специфична за играта логикавключително, но не само, ритане на топки

SoccerAcademy

SoccerAcademy е контейнер за метаданни за симулация, така че основно съдържа препратки към обектите на Brain, които, когато са прикрепени към обект на Unity, го допълват със способността да извършват Reinforcement Learning и други различни неща като гравитационна константа, скорост на симулация и максимален брой стъпки.

SoccerBallController

SoccerBallController е логиката, прикрепена към топката. Когато агентите принудят топката да пресече врата, топката проверява кой от двата гола е в и увеличава резултата на правилния отбор.

SoccerFieldArea

SoccerFieldArea е слой за управление, който управлява множество симулации едновременно и актуализира GUI, така че можете лесно да следите кой отбор има по-добра стратегия.

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

Конфигуриране на алгоритми за обучение на подсилване

Има един последен свободен край, как да зададете хипер-параметри или да конфигурирате алгоритъма си за обучение на подсилване?

Едно от ключовите неща за RL, които трябва да запомните, е, че вече има много страхотни реализации на алгоритмите безплатно.

Професионалното правене на RL стига до експериментиране с различни хиперпараметри. Работният процес, управляван от конфигурация, прави това много по-лесно.

Разгледайте ml-agents/config/trainer_config.yaml и ще видите нещо, което изглежда така. „За щастие Unity вече коментира какво означават всички тези параметри.“

Ако изглежда, че не можете да намерите добър измамен лист за всички хипер-параметри на RL алгоритъм, с който работите, силно бих ви препоръчал или да създадете такъв, или да използвате по-добре документиран алгоритъм.

Конкретно за нападателя и вратаря ще забележите, че едва ли има разлика (с изключение на размера на партидата) между алгоритъма за обучение на нападателя и вратаря.

Следващи стъпки

Можете да стигнете доста далеч, като използвате Unity ML агенти за вашите изследователски проекти, видео игри или DYI роботи. Моята препоръка тук е да направите същото, което направих аз, и да кликнете върху различните примери.

По-специално наистина харесвам примера на Crawler и Reacher, защото те ви показваткак да моделирате скелетс помощта на Unity и след това да го накарате да постигне определени цели.

Има и куп компании, които изграждат симулатори на самоуправляващи се автомобили или симулатори на роботи, така че ако сте умен в това, можете да правите пари и от този вид неща.

За следващия път искам да говоря за нещо малко по-различно: AlphaZeroкоето е алгоритъм с общо предназначение, който може да реши повечето настолни игри с пълна информация.

Така че останете, ако искате да научите повече за походовите стратегически игри, търсенето на дървета в Монте Карло и теорията на игрите!