Designing Neural Networks

There are definitely a lot of decisions to be made in designing a neural net, and there is no one right answer. However, there are a few general questions that are often helpful to think about:

  1. What are you trying to generate as an output? Draughts seems like a challenging game to play with a neural net, because there are a lot of potential moves and the ones available change from turn to turn, but presumably you would want the output to be the next move.

  2. What are your inputs? This should include anything that you think would be useful in making the decision that you want the neural net to make. In the draughts example, you'd probably need to give the neural net the locations of all pieces on the board.

  3. Recurrent or feed-forward? Generally, unless there's a really salient reason for giving it information about what it's done in the past, it's best to use feed-forward, because the enables you to train the net with back-propagation. For draughts, for instance, you'd probably want to use a feed-forward network.

  4. Do you need a hidden layer? This is a harder question to know the answer to, and might require some experimentation, unless you know a lot about the high-dimensional space that your inputs occupy. Draughts is complex enough that it seems like it would require a hidden layer, but it's hard to be sure.

Obviously, there are a lot more decisions that can/have to be made about neural net set-up, but hopefully these will get you going.


Well, I think your problem is the problem of any other NN designer... One thing you have always to keep in mind is that NNs are heuristic models. Therefore, they learn from experience, similarly to us.. You cannot "insert" pure knowledge into the NN (that is possible in other machine learning algorithms) My approach to your problem, or any general problem I face, is to start with the questions: "How would I teach this to someone?", "what exercise will I propose so the person can learn it?"

You have to know/define the rules of the game, and which variables you can play with and what you want to achieve. Then, you have to train the network (get data) with the goal of wining the game, as if it'd be a child. After enough data and weight changes the NN should be able to answer reasonable plays to win the game... as more data you get, more accurate answer you might have, and therefore, a better player!

Although this may seem simple enough, there are many many aspects of training a neural network or any other machine learning algorithm that you have to take into account such as defining the type of model, a suitable loss function, proper architecture fine-tuning, training/testing data sampling, etc ad infinitum...

It's nothing conclusive nor linear, but is my perspective ;) Good luck!