Continuando il tema un tempo sollevato nel nostro blog parleremo di quanto l'apprendimento automatico possa essere applicato a essa e in quale forma. Condivideremo le nostre esperienze e le soluzioni scelte sulla loro base l'esperto di IA di Apex Game Tools, Jakob Rasmussen.

Negli ultimi anni si parla molto del fatto che l'apprendimento automatico cambierà radicalmente l'industria dei giochi, poiché questa tecnologia è già diventata rivoluzionaria in molte altre applicazioni digitali. Ma non bisogna dimenticare che i giochi sono molto più complessi di un simulatore di guida, di un software di controllo dei droni o degli algoritmi di riconoscimento facciale nelle immagini.
Fino ad ora, nell'industria dei giochi si continua a utilizzare metodi tradizionali di IA, come i metodi a stati finiti, gli alberi comportamentali e, ultimamente, sempre più spesso, l'AI basata sull’utilità (sistemi basati sulla utilità). Queste IA vengono anche chiamate design-based (intelligenza artificiale progettuale) o sistemi esperti. Tuttavia, diventa sempre più evidente — e in primo luogo ai giocatori — che questi sistemi sono sempre meno adatti a creare avversari davvero avanzati, capaci di imitare il comportamento dei giocatori. Questo è particolarmente vero per le soluzioni creative. Questo può essere spiegato con il fatto che gli sviluppatori di intelligenza artificiale non riescono a tenere conto di tutte le possibili tattiche e strategie comportamentali e ad implementarle con successo nei sistemi tradizionali di IA. Per i giocatori, questo spesso significa che diventa noioso e prevedibile giocare contro un avversario il cui comportamento è facilmente memorizzabile.
Questo risultato è causato da molteplici fattori, ma uno dei principali è l'incapacità dell'IA di apprendere. Pertanto, quando si crea un'intelligenza artificiale per avversari, viene naturale considerare la transizione all'apprendimento automatico, che si è dimostrato eccellente in molte altre applicazioni. Tuttavia, ci sono alcuni aspetti da tenere a mente. L'IA di gioco deve essere in grado di adattarsi a qualsiasi situazione e sfruttare i vantaggi che essa offre, oltre a adattarsi a diversi stili di gioco dei rivali — giocatori reali e altre IA.
Come stanno le cose adesso
L'azienda britannica DeepMind, che si occupa dello sviluppo dell'intelligenza artificiale, ha recentemente dimostrato come l'IA possa imparare a giocare autonomamente a giochi, assimilare le loro regole e trovare modi per completare o vincere il gioco — per ora, però, solo con esempi di giochi semplici come i giochi di avventura. — ad esempio, gli scacchi e il gioco logico giapponese go. I risultati ottenuti per questi giochi dimostrano che l'intelligenza artificiale è in grado di formarsi una valutazione adeguata di quanto accade sul campo. Per quanto riguarda l'adattamento dell'IA ai diversi stili di gioco degli avversari, i risultati finora non sono così impressionanti.
Al giorno d'oggi, le reti neurali hanno già imparato a riconoscere immagini e a guidare automobili. Ma queste funzioni possono essere realizzate anche con architetture relativamente semplici, anche se alla fine risultano piuttosto profonde e complesse. Ad esempio, l'IA per il riconoscimento delle immagini su Facebook ha una profondità di circa 100 strati, il che la rende simile al cervello biologico — per la quantità e la complessità delle interconnessioni tra i neuroni che formano una grande rete.
IA di Gioco
Per quanto riguarda l'applicazione del machine learning nell'industria dei giochi, ci sono alcuni limiti che non sempre permettono di utilizzare questo tipo di architettura. Tra questi ci sono i requisiti di sistema, in particolare quelli relativi alla CPU, che determinano la capacità del computer di elaborare strutture di gioco complesse e la sua idoneità per lo storytelling e il gameplay.
In questo modo risulta che in molti giochi non è possibile organizzare l'hardware necessario per realizzare un complesso sistema di intelligenza artificiale, tantomeno un cluster di server, che esiste, ad esempio, per le reti di riconoscimento delle immagini su Facebook. A volte devono lavorare simultaneamente diversi IA — non solo sui computer, ma anche sui dispositivi mobili e su altre piattaforme meno potenti. Tutto ciò impone limitazioni sulla dimensione e sulla complessità dell'architettura di machine learning, poiché tutti i calcoli devono essere effettuati con una durata del frame di circa 1 o 2 millisecondi. Certamente, si possono usare varie tecnologie di ottimizzazione e distribuzione del carico tra i frame, ma non si riesce comunque a liberarsi completamente di queste limitazioni.
La complessità del gioco può causare seri problemi per l'IA. Infatti, in giochi come StarCraft II, la meccanica di gioco è di gran lunga più complessa rispetto ai giochi Atari. Pertanto, non ci si deve aspettare che, data una certa frequenza dei frame e con requisiti di sistema noti, il machine learning riesca necessariamente a comprendere l'intero stato di gioco e a interagire con esso. Così come un giocatore si guida spesso con l'intuizione nelle fasi iniziali del gioco, l'IA deve anche imparare a elaborare inizialmente lo stato del gioco per semplificare il suo successivo proseguimento. Ad esempio, in uno degli ultimi nelle mappe viene visualizzata solo l'informazione che gli sviluppatori hanno considerato importante: in un caso l'IA ha usato una vista ridotta dell'intera mappa, nell'altro — proprio come un giocatore, ha potuto muovere la telecamera, e così la sua percezione era limitata alle informazioni sullo schermo.

Visualizzazione del gioco dell'IA AlphaStar contro un giocatore in StarCraft II: nello screenshot sono mostrati i dati «grezzi» delle osservazioni iniziali, l'attività della rete neurale, alcune delle sue possibili azioni e coordinate, e anche l'esito previsto della partita
Questo è un aspetto particolarmente rilevante nel caso dei giochi. Spesso, le tradizionali tecniche di risoluzione dei problemi di apprendimento automatico non sono applicabili all'intelligenza artificiale dei giochi. Ad esempio, di solito non è obbligato a vincere o a fare tutto il possibile per vincere, come nel caso dei giochi Atari. Piuttosto, il ruolo dell'IA è quello di rendere l'esperienza di gioco più coinvolgente. Potrebbe essere necessario recitare un ruolo e comportarsi in conformità con il carattere del personaggio di cui è responsabile. In questo modo, le IA di gioco sono più legate al game design e allo storytelling e devono possedere gli strumenti necessari per gestire il proprio comportamento per raggiungere l'obiettivo prefissato. L'apprendimento automatico in senso stretto non è sempre adatto a questo scopo, quindi è necessario cercare qualcosa di diverso.
Problemi pratici dell'apprendimento automatico
Questi problemi si sono presentati durante lo sviluppo di un'intelligenza artificiale basata sull'apprendimento automatico per , dove l'IA deve comportarsi come comuni giocatori, ossia essere altrettanto flessibile e ingegnosa.
Come in Starcraft II, Unleashed è molto più complesso degli scacchi e del go per Atari. Il gameplay è intuitivo e facilmente comprendibile, ma per avere successo è necessario possedere particolari abilità nella gestione della meta. Il giocatore deve costruire labirinti, scatenare mostri contro i nemici e pianificare la propria strategia in economia, attacco e difesa delle strutture per tutta la durata del gioco. Per questo, è necessario bluffare e anticipare le mosse altrui, così come gestire la psicologia della meta: è proprio questo che rende il poker qualcosa di più di un semplice gioco statistico.

Screenshot di Unleashed
Nella ricerca dell'architettura più adatta per questi scopi, sono state inizialmente integrate nella partita tecnologie come e apprendimento profondo, per testare come si sarebbero comportate in uno stato grezzo come IA avversaria.
È stato orribile.
È stato subito evidente che in Unleashed è necessario risolvere molti problemi globali, per i quali è difficile adattare l'apprendimento automatico.
Uno degli aspetti è la costruzione di un labirinto efficace. Come in molti giochi in cui l'obiettivo è difendere una torre, qui i giocatori devono costruire un labirinto intorno ad essa, attraverso il quale i mostri tenteranno di avanzare. Questi dovranno essere eliminati utilizzando le armi disposte nel labirinto. Ideale sarebbe che il labirinto fosse il più lungo possibile, per infliggere un sufficiente ammontare di danno ai mostri e impedire loro di raggiungere la torre. Alcuni tipi di armi sono più efficaci contro certi mostri rispetto ad altri; pertanto, per una maggiore efficacia, è consigliabile posizionarli nel labirinto prima degli altri. La particolarità di Unleash risiede nel fatto che non esiste un labirinto perfetto: nel gioco ci sono così tanti tipi di mostri che, in un modo o nell'altro, almeno uno di essi passerà senza ostacoli attraverso una sezione del labirinto. Ogni labirinto deve essere adattato ai nuovi mostri lanciati da altri giocatori. In questo modo, è stato necessario non solo insegnare all'intelligenza artificiale a costruire labirinti, ma anche a crearne di efficaci per diversi scenari, con cui ci si può imbattere sia nella versione iniziale che in quella avanzata del gioco.
Inoltre, l'IA doveva imparare a prevedere quali mostri appariranno nel labirinto. Questo è in un certo senso il problema inverso rispetto alla costruzione del labirinto. Come in molti altri giochi, in Unleash non basta semplicemente rafforzare l'esercito e inviarlo nel campo nemico: è anche necessario spiare le difese avversarie e strutturare l'esercito in modo da colpire il più efficacemente possibile i punti deboli del nemico. L'esercito di mostri deve interagire tra loro in modo tale da attraversare con successo il labirinto. A volte è necessario anche rilasciare i mostri in un ordine specifico a seconda delle loro funzioni e ruoli. Questo aumenta ulteriormente il numero di combinazioni possibili.
Infine, poiché il giocatore deve sia creare labirinti che raccogliere un esercito di mostri, anche l'IA deve imparare a trovare un equilibrio tra attacco e difesa. È importante notare che maggiore è l'esercito di mostri che il giocatore accumula e più costruisce il labirinto, maggiore sarà la necessità di risorse. Pertanto, una strategia d'attacco corretta è estremamente importante sia per l'economia del gioco che per la vittoria. E per garantire la competitività, l'IA deve saper gestire le risorse in modo da creare un potente esercito di mostri senza compromettere la forza del labirinto. Investire al massimo nei mostri può essere economicamente vantaggioso, ma aumenta il rischio di essere catturato dai mostri avversari. D'altro canto, concentrarsi sul rafforzamento della difesa del labirinto può danneggiare la propria economia. Nessuno di questi scenari porterà alla vittoria. Così, il problema dell'ottimizzazione in Unleashed risulta essere più complesso rispetto a scacchi o Starcraft e include la necessità di sacrificare qualcosa e calcolare il proprio profitto su più mosse future.
Man mano che l'intelligenza artificiale si sviluppa, emergono numerosi problemi che non erano stati previsti. All'inizio, l'IA raggiungeva spesso un certo livello di sviluppo, durante il quale iniziava a comprendere alcuni aspetti del gioco, come quale arma nel labirinto fosse efficace contro tipi specifici di mostri o quali mostri attraversassero meglio certe sezioni del labirinto. Tuttavia, l'apprendimento era lento e portava a strategie uniformi.
La necessità di approcci paralleli
Mentre l'apprendimento dell'IA basata sul machine learning si sviluppava lentamente e non particolarmente con successo, diventava necessario un IA migliore e più affidabili IA competitive per le altre fasi di test e sviluppo. Per la loro realizzazione è stata utilizzata l'architettura Utility, tramite la quale è possibile creare IA speciali per il test e la verifica della qualità del gioco, per test interni e per il bilanciamento delle armi e dei mostri, nonché per la creazione di labirinti e mostri specifici. Tuttavia, durante lo sviluppo di Unleash, i creatori affinavano le loro abilità nel completamento dello stesso e poi decisero di utilizzare le conoscenze acquisite per creare un Utility IA più complesso. Così si rese chiaro che molti problemi che sorgono nei sistemi di intelligenza artificiale basati sul machine learning possono essere facilmente risolti tramite sistemi Utility che utilizzano le conoscenze in esse incorporate, e viceversa.
Ad esempio, è più efficace costruire labirinti con l'aiuto di Utility IA, basati su basi di conoscenza composte dai risultati dei test interni. È possibile descrivere e programmare facilmente un algoritmo per la costruzione del labirinto e per il posizionamento delle armi in esso in un modo che sarebbe più semplice per un giocatore umano difendere una torre da specifici mostri. Creare un esercito di mostri basato sulla conoscenza della base nemica è stata invece una sfida complessa per tali IA, poiché il numero di condizioni diverse e combinazioni da considerare era stupefacente. Con questo tipo di architettura IA, la ricerca di combinazioni appropriate di mostri richiederebbe un tempo infinitamente lungo. In queste condizioni, l'apprendimento profondo sarebbe stata la soluzione ideale per questo compito.
Creazione di IA ibride
È stato quindi deciso di combinare due approcci per creare un sistema ibrido di intelligenza artificiale basato sul machine learning e sull'Utility. L'idea era che, dove era necessario elaborare un'enorme quantità di combinazioni e stati di gioco, o dove era richiesto addestrarlo a qualcosa, venisse utilizzato il machine learning. Per altre attività, dove era meglio affidarsi all'esperienza personale degli sviluppatori, sono stati utilizzati i sistemi Utility. Il vantaggio di questo approccio risiede anche nel fatto che, se necessario, è possibile controllare meglio il comportamento dell'IA per garantire un seguito più preciso degli obiettivi assegnati. Ad esempio, si può utilizzare l'Utility dell'IA per garantire un equilibrio tra attacco e difesa, creando in questo modo diversi livelli di aggressività, o si possono creare diverse configurazioni di labirinti per diverse IA, in modo da formare stili di gioco individuali. È anche possibile assegnare alle reti neurali determinati sistemi di valori per formare diverse preferenze nella scelta di mostri aerei o terrestri, aggiungendo così personalità alle singole IA. Ci sono ancora molte altre opzioni per la realizzazione di soluzioni progettuali, e tutte evidenziano i punti di forza di un particolare tipo di architettura IA.
L'approccio ibrido è stato anche una risposta a un'altra domanda che il team di sviluppatori si è posto durante lo sviluppo dell'intelligenza artificiale per Unleash: è utile applicare un'unica rete neurale profonda globale basata sul machine learning per considerare tutti i dati in entrata e in uscita, o è meglio progettare l'IA con una struttura gerarchica?

Due architetture utilizzate in Unleash: a sinistra — una grande rete neurale profonda con architettura unificata, a destra — un sistema gerarchico, in cui ogni rete ha il proprio compito.
Eppure, si vorrebbe creare un approccio comune al sistema di intelligenza artificiale, la cui architettura non sarebbe influenzata dall'esperienza personale degli sviluppatori. Tuttavia, all'aumentare degli ingressi nel gioco, la rete neurale cresceva sempre di più. Allo stesso tempo, non era possibile separare l'addestramento dell'IA e insegnare loro una sola cosa: o difesa o attacco. E c'erano timori che un approccio più generale avrebbe portato a un aumento sostanziale del numero di calcoli.
Da qui è nata l'idea di creare un'architettura gerarchica, in cui ogni compito specifico sarebbe stato svolto da una rete neurale specializzata. Secondo questa idea, prima l'intelligenza artificiale deve prendere una decisione sulla distribuzione delle risorse tra attacco (aumento dell'esercito di mostri) e difesa (costruzione del labirinto). Non appena compie questa scelta, passa al livello successivo in base alla sua decisione e ottiene accesso alla parte necessaria dello stato del gioco, dopo di che prende decisioni dettagliate su quali mostri scegliere e quale arma installare nel labirinto.
Conclusione e prossimi passi
Con un approccio ibrido, l'IA Utility, con reti di apprendimento automatico incorporate, ricorda un'architettura gerarchica. E questa, a sua volta, somiglia al cervello biologico, in cui diversi centri nervosi sono responsabili ciascuno del proprio compito.
Attualmente, l'IA nemica in Unleash è molto difficile da battere: sono in grado di adattarsi a qualsiasi situazione di gioco, — ma nel frattempo, gli sviluppatori possono modificarne le impostazioni a loro discrezione. Secondo l'autore dell'articolo, col tempo, l'approccio ibrido dovrebbe diffondersi di più e apparire in molti altri giochi. Forse un giorno sarà possibile integrare nel processo di gioco un'intelligenza artificiale basata su apprendimento automatico in forma pura. Ma, ovviamente, ci vorrà ancora tempo. Nel frattempo, l'obiettivo è trovare un'architettura che si adatti da sola alle sfide che ha di fronte e trovi i modi ottimali per risolverle.
Fonte: habr.com
