artificial neural network in a tic tac toe symfony console application - symfonycon 2014

Post on 04-Jul-2015

1.056 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Among all the C libraries bindings PHP offers, there is one for FANN: Fast Artificial Neural Network (libfann). With it you can easily create a neural Network with different activation functions for each neuron/ layer. ANNs (Artificial Neural Networks) are used for machine learning and for recommendation systems. In this Talk we will show an implementation (and running demo) of a basic IA that will learn to play Tic Tac Toe leveraging the Symfony console componente as UI While we demo, we will show a detailed log of what is going on. SymfonyCon Madrid 2014

TRANSCRIPT

with PHP on a Symfony Console TicTacToe game

Artificial Neural Networks

ANN with PHP SymfonyCon Madrid 2014

Agenda

1. Demo

2. Symfony Console

3. Symfony Console Helpers

4. ANN Theory

6. PHP + FANN

7. Show me the code

8. Demo

9. Q&A

ANN with PHP SymfonyCon Madrid 2014

Demo

vs.

ANN with PHP SymfonyCon Madrid 2014

Symfony Console

ANN with PHP SymfonyCon Madrid 2014

Symfony Console - Installation

#!/usr/bin/env php<?phprequire __DIR__ . ‘/../vendor/autoload.php';

use Symfony\Component\Console\Application; $app = new Application(); $app->run();

bin/console

{ ... "require": { "symfony/console": "~2.5" } ...}

composer.json

ANN with PHP SymfonyCon Madrid 2014

Symfony Console - Installation

#!/usr/bin/env php<?phprequire __DIR__ . ‘/../vendor/autoload.php';

use Symfony\Component\Console\Application; $app = new Application(); $app->run();

bin/console

{ ... "require": { "symfony/console": "~2.5" } ...}

composer.json

$ php bin/console

$ chmod +x bin/console$ bin/console

ANN with PHP SymfonyCon Madrid 2014

ANN with PHP SymfonyCon Madrid 2014

Symfony console style guidehttps://github.com/symfony/symfony-docs/issues/4265

Created by @javiereguiluzImproved by Symfony community

ANN with PHP SymfonyCon Madrid 2014

Symfony Console Helpers

Progress bar

Table

Question

Formatter

ANN with PHP SymfonyCon Madrid 2014

<?php// create a new progress bar (10 units)$progress = new ProgressBar($output, 10); // start and displays the progress bar$progress->start(); $i = 0; while ($i++ < 10) { // ... do some work // advance the progress bar 1 unit $progress->advance(); } // ensure that the progress bar is at 100%$progress->finish();

Command.php

Progress bar

ANN with PHP SymfonyCon Madrid 2014

We all techies love progress bars

ANN with PHP SymfonyCon Madrid 2014

Table

<?php $table = new Table($output); $table ->setHeaders(array('Component', 'Package')) ->setRows(array( array('Console', 'symfony/console'), array('Form', 'symfony/form'), array('Finder', 'symfony/finder'), array('Config', 'symfony/config'), array('...', '...'), )) ; $table->render();

Command.php

ANN with PHP SymfonyCon Madrid 2014

Question

<?php

$helper = $this->getHelper('question'); $question = new ConfirmationQuestion( 'Dou you want to play again? ', false ); if (!$helper->ask($input, $output, $question)) { $output->writeln("Bye bye!"); return; } $output->writeln("Let's play again!");

Command.php

ANN with PHP SymfonyCon Madrid 2014

Formatter

<?php $formatter = $this->getHelper('formatter'); $formattedLine = $formatter->formatSection( 'Game finished', 'Player one wins.'); $output->writeln($formattedLine); $errorMessages = array( 'Error!', 'Move already done.’ ); $formattedBlock = $formatter ->formatBlock($errorMessages, 'error'); $output->writeln($formattedBlock);

Command.php

ANN with PHP SymfonyCon Madrid 2014

Our helper

ANN with PHP SymfonyCon Madrid 2014

Board

<?php

// Board example usage $board = new Board( $output, $this->getApplication() ->getTerminalDimensions(), 3, // Board size false // Don’t override the screen );

// Update and display the board status$board->updateGame(0,0,1);

Command.php

ANN with PHP SymfonyCon Madrid 2014

Board

<?php

// Board example - four in a row$board = new BoardHelper( $output, $this->getApplication() ->getTerminalDimensions(), 4, // Board size false // Don’t override screen true // Board with backgrounded cells );

// Update the board status (Player 1) $board->updateGame(0,0,1);

// Update the board status (Player 2) $board->updateGame(0,1,2);

Command.php

ANN with PHP SymfonyCon Madrid 2014

Board

<?php

// Example TicTacToe with overwrite$board = new TicTacToeHelper( $output, $this->getApplication() ->getTerminalDimensions(), 3, // Board size true // Overwrite screen);

// Update the board status and display$board->updateGame(1,1,1); $board->updateGame(0,0,2); $board->updateGame(2,0,1); $board->updateGame(0,2,2); $board->updateGame(0,1,1); $board->updateGame(2,1,2); $board->updateGame(1,0,1); $board->updateGame(1,2,2); $board->updateGame(2,2,1);

Command.php

ANN with PHP SymfonyCon Madrid 2014

Board<?phpnamespace PHPGames\Console\Helper; class Board{ /** * @var \Symfony\Component\Console\Output\OutputInterface */ private $output; /** * Clears the output buffer */ private function clear() { $this->output->write("\e[2J"); } // ...

Board.php

Instruction thatclears the screen

ANN with PHP SymfonyCon Madrid 2014

There is a bonus helper

ANN with PHP SymfonyCon Madrid 2014

Symfony Console - HAL

<?php

$hal = new HAL($output); $hal->sayHello();

Command.php

ANN with PHP SymfonyCon Madrid 2014

Computer model that intends to simulate how the brain works

Artificial Neural Networks

ANN with PHP SymfonyCon Madrid 2014

Input neuron

A typical ANN

Hidden neuron

Output neuron

Signal & weight

ANN with PHP SymfonyCon Madrid 2014

Activation FunctionsFunctions to process the input and produce a signal as output

ANN with PHP SymfonyCon Madrid 2014

Activation Functions• Step - output is 0 or 1

• Linear Combination - output is input sum plus a linear bias

• Continuous Log-Sigmoid

ANN with PHP SymfonyCon Madrid 2014

Activation Functions• Step - output is 0 or 1

• Linear Combination - output is input sum plus a linear bias

• Continuous Log-Sigmoid

ANN with PHP SymfonyCon Madrid 2014

Activation Functions• Step - output is 0 or 1

• Linear Combination - output is input sum plus a linear bias

• Continuous Log-Sigmoid

ANN with PHP SymfonyCon Madrid 2014

BackpropagationBackward propagation of errors

Passes error signals backwards through the network during training to update the weights of the network

ANN with PHP SymfonyCon Madrid 2014

ANN Types

ANN with PHP SymfonyCon Madrid 2014

ANN types• Feedforward neural network

Information goes only in one direction, forward.

• Radial basis function network (RBF) Interpolation in multidimensional space.

• Kohonen self-organizing network A set of artificial neurons learn to map points in an input space to coordinates in an output space.

ANN with PHP SymfonyCon Madrid 2014

ANN types• Feedforward neural network

Information goes only in one direction, forward.

• Radial basis function network (RBF) Interpolation in multidimensional space.

• Kohonen self-organizing network A set of artificial neurons learn to map points in an input space to coordinates in an output space.

ANN with PHP SymfonyCon Madrid 2014

ANN types• Feedforward neural network

Information goes only in one direction, forward.

• Radial basis function network (RBF) Interpolation in multidimensional space.

• Kohonen self-organizing network A set of artificial neurons learn to map points in an input space to coordinates in an output space.

ANN with PHP SymfonyCon Madrid 2014

ANN Learning

ANN with PHP SymfonyCon Madrid 2014

ANN Learning

• Supervised

• Unsupervised

• Reinforcement

• Supervised

• Unsupervised

• Reinforcement

ANN with PHP SymfonyCon Madrid 2014

ANN Learning

• Supervised

• Unsupervised

• Reinforcement

ANN with PHP SymfonyCon Madrid 2014

ANN Learning

• Supervised

• Unsupervised

• Reinforcement

ANN with PHP SymfonyCon Madrid 2014

With some slights adaptations to solve

We've used Reinforcement Learning

ANN with PHP SymfonyCon Madrid 2014

Temporal Credit Assignment Problem

ANN with PHP SymfonyCon Madrid 2014

(WTF) ANN withArtificial Neural Networks with PHP

What The Fann

ANN with PHP SymfonyCon Madrid 2014

ANN with PHP SymfonyCon Madrid 2014

Meet libfann & PECL fann$~> sudo apt-get install libfann; sudo pecl install fann

(WTF) ANN with

ANN with PHP SymfonyCon Madrid 2014

(WTF) ANN with OS X1. Install autoconf 2. Install cmake 3. Compile FANN 4. Install php fann extension with PECL 5. Add the extension to php.ini

$ brew install autoconf

ANN with PHP SymfonyCon Madrid 2014

(WTF) ANN with OS X1. Install autoconf 2. Install cmake 3. Compile FANN 4. Install php fann extension with PECL 5. Add the extension to php.ini

$ brew install cmake

ANN with PHP SymfonyCon Madrid 2014

(WTF) ANN with OS X1. Install autoconf 2. Install cmake 3. Compile FANN 4. Install php fann extension with PECL 5. Add the extension to php.ini

$ cd FANN-2.2.X-Source $ cmake . $ sudo make install

ANN with PHP SymfonyCon Madrid 2014

(WTF) ANN with OS X1. Install autoconf 2. Install cmake 3. Compile FANN 4. Install php fann extension with PECL 5. Add the extension to php.ini

$ sudo pecl install fann

ANN with PHP SymfonyCon Madrid 2014

(WTF) ANN with OS X1. Install autoconf 2. Install cmake 3. Compile FANN 4. Install php fann extension with PECL 5. Add the extension to php.ini

extension=fann.so

ANN with PHP SymfonyCon Madrid 2014

Enjoy!

(WTF) ANN with

ANN with PHP SymfonyCon Madrid 2014

Show me the code!

(WTF) ANN with

ANN with PHP SymfonyCon Madrid 2014

Demo

vs.

ANN with PHP SymfonyCon Madrid 2014

ANN with PHP SymfonyCon Madrid 2014

The two neurons behind this talk

ANN with PHP SymfonyCon Madrid 2014

Eduardo Gulias

• EmailValidator (Symfony >= 2.5, Drupal 8).

• ListenersDebugCommandBundle (ezPublish 5).

• PHPMad UG co-founder (Former Symfony Madrid).

• Team leader at

@egulias

ANN with PHP SymfonyCon Madrid 2014

Ariel Ferrandini

• Symfony simple password encoder service. (Symfony >=2.6).

• Symfony DX application collaborator.

• PHPMad UG co-founder.

• Team leader at Paradigma Tecnológico

@aferrandini

ANN with PHP SymfonyCon Madrid 2014

Resources• Wikipedia (http://en.wikipedia.org/wiki/Artificial_neural_network)

• Introduction for beginners (http://arxiv.org/pdf/cs/0308031.pdf)

• Introduction to ANN (http://www.theprojectspot.com/tutorial-post/introduction-to-artificial-neural-networks-part-1/7)

• Reinforcement learning (http://www.willamette.edu/~gorr/classes/cs449/Reinforcement/reinforcement0.html)

• PHP FANN (http://www.php.net/fann)

ANN with PHP SymfonyCon Madrid 2014

Resources

• Repo PHPGames (https://github.com/phpgames/ANNTicTacToe)

• Repo Board helper (https://github.com/phpgames/BoardHelper)

• Repo HAL helper (https://github.com/phpgames/HALHelper)

ANN with PHP SymfonyCon Madrid 2014

Thank you!

https://joind.in/12951

ANN with PHP SymfonyCon Madrid 2014

Questions?

https://joind.in/12951

top related