title: How to train an artificial neural network to play Diablo 2 using visual input?
body: <p>I'm currently trying to get an ANN to play a video game and  and I was hoping to get some help from the wonderful community here.</p>
  
  <p>I've settled on Diablo 2. Game play is thus in real-time and from an isometric viewpoint, with the player controlling a single avatar whom the camera is centered on. </p>
  
  <p>To make things concrete, the task is to get your character x experience points without having its health drop to 0, where experience point are gained through killing monsters. Here is an example of the gameplay:</p>
  
  <p><img src="https://i.stack.imgur.com/2NslT.jpg" alt="here"></p>
  
  <p>Now, since I want the net to operate based solely on the information it gets from the pixels on the screen, it must learn a very rich representation in order to play efficiently, since this would presumably require it to know (implicitly at least) how divide the game world up into objects and how to interact with them.</p>
  
  <p>And all of this information must be taught to the net somehow. I can't for the life of me think of how to train this thing. My only idea is have a separate program visually extract something innately good/bad in the game (e.g. health, gold, experience) from the screen, and then use that stat in a reinforcement learning procedure. I think that will be <em>part</em> of the answer, but I don't think it'll be enough; there are just too many levels of abstraction from raw visual input to goal-oriented behavior for such limited feedback to train a net within my lifetime.</p>
  
  <p>So, my question: what other ways can you think of to train a net to do at least some part of this task? preferably without making thousands of labeled examples.</p>
  
  <p>Just for a little more direction: I'm looking for some other sources of reinforcement learning and/or any unsupervised methods for extracting useful information in this setting. Or a supervised algorithm if you can think of a way of getting labeled data out of a game world without having to manually label it.</p>
  
  <p><strong>UPDATE(04/27/12):</strong></p>
  
  <p>Strangely, I'm still working on this and seem to be making progress. The biggest secret to getting a ANN controller to work is to use the most advanced ANN architectures appropriate to the task. Hence I've been using a <a href="http://www.scholarpedia.org/article/Deep_belief_networks" rel="noreferrer">deep belief net</a> composed of factored <a href="http://cs.nyu.edu/~gwtaylor/thesis/4/" rel="noreferrer">conditional restricted Boltzmann machines</a> that I've trained in an unsupervised manner (on video of me playing the game) before fine tuning with <a href="http://www.stanford.edu/group/pdplab/pdphandbook/handbookch10.html#x26-1290009" rel="noreferrer">temporal difference back-propagation</a> (i.e. reinforcement learning with standard feed-forward ANNs).</p>
  
  <p><em>Still looking for more valuable input though, especially on the problem of action selection in real-time and how to encode color images for ANN processing :-)</em> </p>
  
  <p><strong>UPDATE(10/21/15):</strong></p>
  
  <p>Just remembered I asked this question back-in-the-day, and thought I should mention that this is no longer a crazy idea. Since my last update, DeepMind published their nature <a href="http://www.nature.com/nature/journal/v518/n7540/abs/nature14236.html" rel="noreferrer">paper on getting neural networks to play Atari games from visual inputs</a>. Indeed, the  only thing preventing me from using their architecture to play, a limited subset, of Diablo 2 is the lack of access to the underlying game engine. Rendering to the screen and then redirecting it to the network is just far too slow to train in a reasonable amount of time. Thus we probably won't see this sort of bot playing Diablo 2 anytime soon, but only because it'll be playing something either open-source or with API access to the rendering target. (Quake perhaps?)</p>