Skip to main content

Evolving Developmental Programs That Build Neural Networks for Solving Multiple Problems

  • Chapter
  • First Online:
Genetic Programming Theory and Practice XVI

Abstract

A developmental model of an artificial neuron is presented. In this model, a pair of neural developmental programs develop an entire artificial neural network of arbitrary size. The pair of neural chromosomes are evolved using Cartesian Genetic Programming. During development, neurons and their connections can move, change, die or be created. We show that this two-chromosome genotype can be evolved to develop into a single neural network from which multiple conventional artificial neural networks can be extracted. The extracted conventional ANNs share some neurons across tasks. We have evaluated the performance of this method on three standard classification problems: cancer, diabetes and the glass datasets. The evolved pair of neuron programs can generate artificial neural networks that perform reasonably well on all three benchmark problems simultaneously. It appears to be the first attempt to solve multiple standard classification problems using a developmental approach.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 119.00
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Hardcover Book
USD 159.99
Price excludes VAT (USA)
  • Durable hardcover edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Notes

  1. 1.

    https://archive.ics.uci.edu/ml/datasets.html.

  2. 2.

    https://publikationen.bibliothek.kit.edu.

  3. 3.

    The paper gives a link to the detailed performance of the 179 classifiers which contain the figures given in the table.

  4. 4.

    http://www.biostathandbook.com/wilcoxonsignedrank.html.

  5. 5.

    http://www.real-statistics.com/statistics-tables/wilcoxon-signed-ranks-table/.

  6. 6.

    Indeed, sometimes adjustments to a parameter in the fourth decimal place had a significant effect.

References

  1. Astor, J.C., Adami, C.: A development model for the evolution of artificial neural networks. Artificial Life 6, 189–218 (2000)

    Article  Google Scholar 

  2. Balaam, A.: Developmental neural networks for agents. In: Advances in Artificial Life, Proceedings of the 7th European Conference on Artificial Life (ECAL 2003), pp. 154–163. Springer (2003)

    Google Scholar 

  3. Boers, E.J.W., Kuiper, H.: Biological metaphors and the design of modular neural networks. Master’s thesis, Dept. of Comp. Sci. and Dept. of Exp. and Theor. Psych., Leiden University (1992)

    Google Scholar 

  4. Cangelosi, A., Nolfi, S., Parisi, D.: Cell division and migration in a ‘genotype’ for neural networks. Network-Computation in Neural Systems 5, 497–515 (1994)

    Article  Google Scholar 

  5. Downing, K.L.: Supplementing evolutionary developmental systems with abstract models of neurogenesis. In: Proc. Conf. on Genetic and evolutionary Comp., pp. 990–996 (2007)

    Google Scholar 

  6. Eggenberger, P.: Creation of neural networks based on developmental and evolutionary principles. In: W. Gerstner, A. Germond, M. Hasler, J.D. Nicoud (eds.) Artificial Neural Networks — ICANN’97, pp. 337–342 (1997)

    Google Scholar 

  7. Federici, D.: A regenerating spiking neural network. Neural Networks 18(5–6), 746–754 (2005)

    Article  Google Scholar 

  8. Fernández-Delgado, M., Cernadas, E., Barro, S., Amorim, D.: Do we need hundreds of classifiers to solve real world classification problems? J. Mach. Learn. Res. 15(1), 3133–3181 (2014)

    MathSciNet  MATH  Google Scholar 

  9. French, R.M.: Catastrophic Forgetting in Connectionist Networks: Causes, Consequences and Solutions. Trends in Cognitive Sciences 3(4), 128–135 (1999)

    Article  Google Scholar 

  10. Goldman, B.W., Punch, W.F.: Reducing wasted evaluations in cartesian genetic programming. In: Genetic Programming: 16th European Conference, EuroGP 2013, Vienna, Austria, April 3–5, 2013. Proceedings, pp. 61–72. Springer Berlin Heidelberg, Berlin, Heidelberg (2013)

    Google Scholar 

  11. Goldman, B.W., Punch, W.F.: Analysis of cartesian genetic programmings evolutionary mechanisms. Evolutionary Computation, IEEE Transactions on 19, 359–373 (2015)

    Article  Google Scholar 

  12. Gruau, F.: Automatic definition of modular neural networks. Adaptive Behaviour 3, 151–183 (1994)

    Article  Google Scholar 

  13. Gruau, F., Whitley, D., Pyeatt, L.: A comparison between cellular encoding and direct encoding for genetic neural networks. In: Proc. Conf. on Genetic Programming, pp. 81–89 (1996)

    Google Scholar 

  14. Harding, S., Miller, J.F., Banzhaf, W.: Developments in cartesian genetic programming: Self-modifying CGP. Genetic Programming and Evolvable Machines 11(3–4), 397–439 (2010)

    Article  Google Scholar 

  15. Hornby, G., Lipson, H., Pollack, J.B.: Generative representations for the automated design of modular physical robots. IEEE Trans. on Robotics and Automation 19, 703–719 (2003)

    Article  Google Scholar 

  16. Hornby, G.S., Pollack, J.B.: Creating high-level components with a generative representation for body-brain evolution. Artificial Life 8(3) (2002)

    Article  Google Scholar 

  17. Huizinga, J., Clune, J., Mouret, J.B.: Evolving neural networks that are both modular and regular: HyperNEAT plus the connection cost technique. In: Proc. Conf. on Genetic and Evolutionary Computation, pp. 697–704 (2014)

    Google Scholar 

  18. Jakobi, N.: Harnessing Morphogenesis, COGS Research Paper 423. Tech. rep., University of Sussex (1995)

    Google Scholar 

  19. Khan, G.M.: Evolution of Artificial Neural Development - In Search of Learning Genes, Studies in Computational Intelligence, vol. 725. Springer (2018)

    Google Scholar 

  20. Khan, G.M., Miller, J.F.: In search of intelligence: evolving a developmental neuron capable of learning. Connect. Sci. 26(4), 297–333 (2014)

    Article  Google Scholar 

  21. Khan, G.M., Miller, J.F., Halliday, D.M.: Evolution of Cartesian Genetic Programs for Development of Learning Neural Architecture. Evol. Computation 19(3), 469–523 (2011)

    Article  Google Scholar 

  22. Kitano, H.: Designing neural networks using genetic algorithms with graph generation system. Complex Systems 4, 461–476 (1990)

    MATH  Google Scholar 

  23. Kodjabachian, J., Meyer, J.A.: Evolution and development of neural controllers for locomotion, gradient-following, and obstacle-avoidance in artificial insects. IEEE Transactions on Neural Networks 9, 796–812 (1998)

    Article  Google Scholar 

  24. Kumar, S., Bentley, P. (eds.): On Growth, Form and Computers. Academic Press (2003)

    Google Scholar 

  25. McCloskey, M., Cohen, N.: Catastrophic Interference in Connectionist Networks: The Sequential Learning Problem. The Psychology of Learning and Motivation 24, 109–165 (1989)

    Article  Google Scholar 

  26. McCulloch, Pitts, W.: A logical calculus of the ideas immanent in nervous activity. The Bulletin of Mathematical Biophysics 5, 115–133 (1943)

    Article  MathSciNet  Google Scholar 

  27. Miller, J.F.: What bloat? cartesian genetic programming on boolean problems. In: Proc. Conf. Genetic and Evolutionary Computation, Late breaking papers, pp. 295–302 (2001)

    Google Scholar 

  28. Miller, J.F. (ed.): Cartesian Genetic Programming. Springer (2011)

    Google Scholar 

  29. Miller, J.F., Khan, G.M.: Where is the Brain inside the Brain? Memetic Computing 3(3), 217–228 (2011)

    Article  Google Scholar 

  30. Miller, J.F., Smith, S.L.: Redundancy and computational efficiency in Cartesian Genetic Programming. IEEE Trans. on Evolutionary Computation 10(2), 167–174 (2006)

    Article  Google Scholar 

  31. Miller, J.F., Thomson, P.: Cartesian genetic programming. In: Proc. European Conf. on Genetic Programming, LNCS, vol. 10802, pp. 121–132 (2000)

    Google Scholar 

  32. Miller, J.F., Thomson, P.: A Developmental Method for Growing Graphs and Circuits. In: Proc. Int. Conf. on Evolvable Systems, LNCS, vol. 2606, pp. 93–104 (2003)

    Google Scholar 

  33. Ooyen, A.V. (ed.): Modeling Neural Development. MIT Press (2003)

    Google Scholar 

  34. Ratcliff, R.: Connectionist Models of Recognition and Memory: Constraints Imposed by Learning and Forgetting Functions. Psychological Review 97, 205–308 (1990)

    Article  Google Scholar 

  35. Risi, S., Lehman, J., Stanley, K.O.: Evolving the placement and density of neurons in the HyperNEAT substrate. In: Proc. Conf. on Genetic and Evolutionary Computation, pp. 563–570 (2010)

    Google Scholar 

  36. Risi, S., Stanley, K.O.: Indirectly encoding neural plasticity as a pattern of local rules. In: From Animals to Animats 11: Conf. on Simulation of Adaptive Behavior (2010)

    Google Scholar 

  37. Risi, S., Stanley, K.O.: Enhancing ES-HyperNEAT to evolve more complex regular neural networks. In: Proc. Conf. on Genetic and Evolutionary Computation, pp. 1539–1546 (2011)

    Google Scholar 

  38. Rust, A., Adams, R., Bolouri, H.: Evolutionary neural topiary: Growing and sculpting artificial neurons to order. In: Proc. Conf. on the Simulation and synthesis of Living Systems, pp. 146–150 (2000)

    Google Scholar 

  39. Stanley, K., Miikkulainen, R.: Efficient evolution of neural network topologies. In: Proc. Congress on Evolutionary Computation, vol. 2, pp. 1757–1762 (2002)

    Google Scholar 

  40. Stanley, K.O.: Compositional pattern producing networks: A novel abstraction of development. Genetic Programming and Evolvable Machines 8, 131–162 (2007)

    Article  Google Scholar 

  41. Stanley, K.O., D’Ambrosio, D.B., Gauci, J.: A hypercube-based encoding for evolving large-scale neural networks. Artificial Life 15, 185–212 (2009)

    Article  Google Scholar 

  42. Stanley, K.O., Miikkulainen, R.: A taxonomy for artificial embryogeny. Artificial Life 9(2), 93–130 (2003)

    Article  Google Scholar 

  43. Suchorzewski, M., Clune, J.: A novel generative encoding for evolving modular, regular and scalable networks. In: Proc. Conf. on Genetic and Evolutionary Computation, pp. 1523–1530 (2011)

    Google Scholar 

  44. Turner, A.J., Miller, J.F.: Cartesian Genetic Programming encoded artificial neural networks: A comparison using three benchmarks. In: Proceedings of the Conference on Genetic and Evolutionary Computation (GECCO), pp. 1005–1012 (2013)

    Google Scholar 

  45. Turner, A.J., Miller, J.F.: Recurrent cartesian genetic programming. In: Proc. Parallel Problem Solving from Nature, pp. 476–486 (2014)

    Google Scholar 

  46. Vassilev, V.K., Miller, J.F.: The Advantages of Landscape Neutrality in Digital Circuit Evolution. In: Proc. Int. Conf. on Evolvable Systems, LNCS, vol. 1801, pp. 252–263. Springer Verlag (2000)

    Google Scholar 

  47. Yu, T., Miller, J.F.: Neutrality and the Evolvability of Boolean function landscape. In: Proc. European Conference on Genetic Programming, LNCS, vol. 2038, pp. 204–217 (2001)

    Google Scholar 

  48. Zar, J.H.: Biostatistical Analysis, 2nd edn. Prentice Hall (1984)

    Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Dennis G. Wilson .

Editor information

Editors and Affiliations

Appendices

Appendix: Detailed Algorithms

8.1.1 Developing the Brain and Evaluating the Fitness

The detailed algorithm for developing the brain and assessing its fitness is shown in Algorithm 1 There are two stages to development. The first (which we refer to as ‘pre’) occurs prior to a learning epoch loop (lines 3–6). While the second phase (referred to as ‘while’) occurs inside a learning epoch loop (lines 9–12).

Lines 13–22 are concerned with calculating fitness. For each computational problem an ANN is extracted from the underlying brain. This is carried by a function ExtractANN(problem, OutputAddress) which is detailed in Algorithm 9. This function extracts a feedforward ANN corresponding to each computational problem (this is stored in a phenotype which we do not detail here). The array OutputAddress stores the addresses of the output neurons associated with the computational problem. It is used together with the phenotype to extract the network of neurons that are required for the computational problem. Then the input data is supplied and the outputs of the ANN calculated. The class of a data instance is determined by the largest output. The learning loop (lines 8–29) develops the brain and exits if the fitness value (in this case classification accuracy) reduces (lines 23–27 in Algorithm 1). One can think of the ‘pre’ development phase as growing a neural network prior to training. The ‘while’ phase is a period of development within the learning phase. N ep denotes the user-defined number of learning epochs. N p represents the number of problems in the suite of problems being solved. N ex(p) denotes the number of examples for each problem. A is the accuracy of prediction for a single training instance. F is the fitness over all examples. TF is the accumulated fitness over all problems. Fitness is normalised (lines 20 and 22).

Updating the Brain

Algorithm 2 shows the update brain process. This algorithm is run at each developmental step. It runs the soma and dendrite programs for each neuron and from the previously existing brain creates a new version (NewBrain) which eventually overwrites the previous brain at the last step (lines 52–53).

Algorithm 2 starts by analyzing the brain to determine the addresses and numbers of non-output and output neurons (lines 3–11). Then the non-output neurons are processed. The evolved soma program is executed and it returns a neuron with updated values for the neuron position, health and bias. These are stored in the variable UpdatedNeurVars.

If the user-defined option to disallow non-output neuron movement is chosen then the updated neuron position is reset to that before the soma program is run (lines 16–17). Next the evolved dendrite programs are executed in all dendrites. The algorithmic details are given in Algorithm 6 (See Sect. 8.3.5).

Algorithm 1 Develop network and evaluate fitness

The neuron health is compared with the user-defined neuron death threshold NH death and if the health exceeds the threshold the neuron survives (see lines 22–28). At this stage it is possible that the neuron has been given a position that is identical to one of the neurons in the developing brain (NewBrain) so one needs a mechanism for preventing this. This is accomplished by Algorithm 3 (Lines 19 and 46). It checks whether a collision has occurred and if so an increment MN inc is added to the position and then it is bound to the interval [−1, 1]. In line 23 the updated neuron is written into NewBrain. A check is made in line 25 to see if the allowed number of neurons has been reached, if so the non output neuron update loop (lines 12–38) is exited and the output neuron section starts (lines 39–51). If the limit on numbers of neurons has not been reached, the updated neuron may replicate depending on whether its health is above the user-defined threshold, NH health (line 29). The position of the new born neuron is immediately incremented by MN inc so that it does not collide with its parent (line 30). However, its position needs to be checked also to see if it collides with any other neuron, in which case its position is incremented again until a position is found that causes no collision. This is done in the function IfCollision.

In CreateNewNeuron (see line 32) the bias, the incremented position and dendrites of the parent neuron are copied into the child neuron. However, the new neuron is given a health of 1.0 (the maximum value). The algorithm examines the non-output neurons (lines 39–51) and again is terminated if the allowed number of neurons is exceeded. The steps are similar to those carried out with non-output neurons, except that output neurons can not either die or replicate as their number is fixed by the number of outputs required by the computational problem being solved.

The details of the neuron collision avoidance mechanism is shown in Algorithm 3.

Algorithm 2 Update brain

Algorithm 3 Move neuron if it collides with another

Running the Soma

The UpdateBrain program calls the RunSoma program (Algorithm 4) to determine how the soma changes in each developmental step. The seven soma program inputs comprising the neuron health, position and bias, the averaged position, weight and health of the neuron’s dendrites and the problem type are supplied to the CGP encoded soma program (line 12). The array ProblemTypeInputs stores NumProblems+1 constants equally spaced between − 1 and 1. These are used to allow output neurons to know what computational problem they belong to.

The soma program has three outputs relating to the position, health and bias of the neuron. These are used to update the neuron (line 13).

Algorithm 4 RunSoma(Neuron)

Changing the Neuron Variables

The UpdateNeuron Algorithm 5 updates the neuron properties of health, position and bias according to three user-chosen options defined by a variable Incropt. If this is zero, then the soma program outputs determine directly the updated values of the soma’s health, position and bias. If Incropt is one or two, the updated values of the soma are changed from the parent neuron’s values in an incremental way. This is either a linear or nonlinear increment or decrement depending on whether the soma program’s outputs are greater than or less than or equal to zero (lines 8–16). The magnitudes of the increments is defined by the user-defined constants: δ sh, δ sp, δ sb and sigmoid slope parameter, α (see Table 8.1).

Algorithm 5 Neuron update function

The increment methods described in Algorithm 5 change neural variables, so action needs to be taken to force the variables to strictly lie in the interval [−1, 1]. We call this ‘bounding’ (lines 34–36).This is accomplished using a hyperbolic tangent function.

Running All Dendrite Programs and Building a New Neuron

Algorithm 6 Run the evolved dendrite program in all dendrites

Algorithm 6 takes an existing neuron and creates a new neuron using the updated soma variables, position, health and bias which are stored in UpdateNeurVars (from Algorithm 4) and the updated dendrites which result from running the dendrite program in all the dendrites. Initially (line 3–5), the updated soma variables are written into the updated neuron. The number of dendrites in the updated neuron is set to zero. In lines 8–11, the health of the non-updated neuron is examined and if it is above the dendrite health threshold for birth, a new dendrite is generated and the updated neuron gains a dendrite. If so, the neuron gains a dendrite created by a function GenerateDendrite(). This assigns a weight, health and position to the new dendrite. The weight and health is set to one and the position set to half the parent neuron position. These choices appeared to give good results.

Algorithm 7 Change dendrites according to the evolved dendrite program

Lines 12–33 are concerned with processing the dendrite program in all the dendrites of the non-updated neuron and updating the dendrites. If the updated dendrite has a health above its death threshold then it survives and gets written into the updated neuron (lines 22–28). Updated dendrites do not get written into the updated neuron if it already has the maximum allowed number of dendrites (line 25–27). In lines 30–33 a check is made as to whether the updated neuron has no dendrites. If this is so, it is given one of the dendrites of the non-updated neuron. Finally, the updated neuron is returned to the calling function.

Algorithm 6 calls the function RunDendrite (line 21). This function is detailed in Algorithm 7. It changes the dendrites of a neuron according to the evolved dendrite program. It begins by assigning the dendrites health, position and weight to the parent dendrite variables. It writes the dendrite program outputs to the internal variables health, weight and position. Then in lines 8–16 it defines the possible increments in health, weight and position that will be used to increment or decrement the parent variables according to the user defined incremental options (linear or non-linear). In lines 17–33 it respectively carries out the increments or decrements of the parent dendrite variables according whether the corresponding dendrite program outputs are greater than or less than or equal to zero. After this it bounds those variables. Finally, in lines 37–44 it updates the dendrites health, weight and position provided the adjusted health is above the dendrite death threshold (in other words it survives). Note that if Incr opt = 0 then there is no incremental adjustment and the health, weight and position of the dendrites are just bounded (lines 34–36).

Algorithm 2 uses a function CreateNewNeuron to create a new neuron if the neuron health is above a threshold. This function is described in Algorithm 8. It makes the new born neuron the same as the parent (note, its position will be adjusted by the collision avoidance algorithm) except that it is given a health of one. Experiments suggested that this gave better results.

Algorithm 8 Create new neuron from parent neuron

Extracting Conventional ANNs from the Evolved Brain

In Algorithm 1, a conventional feed-forward ANN is extracted from the underlying collection of neurons (line 15). The algorithm for doing this is shown in Algorithm 9. Firstly, this algorithm determines the number of inputs to the ANN (line 5). Since inputs are shared across problems the number of inputs is set to be the maximum number of inputs that occur in the computational problem suite. If an individual problem has less inputs than this maximum, the extra inputs are set to 0.0. The brain array is sorted by position. The algorithm then examines all neurons (line 7) and calculates the number of non-output neurons and output neurons and stores the neuron data in arrays NonOutputNeurons and OutputNeurons. It also calculates their addresses in the brain array.

Algorithm 9 The extraction of neural networks from the underlying brain

Algorithm 10 Find which input or neuron a dendrite is closest to

The next phase is to go through all dendrites of the non-output neurons to determine which inputs or neurons they connect to (lines 19–33). The evolved neuron programs generate dendrites with end positions anywhere in the interval [−1, 1]. The end positions are converted to lengths (line 25). In this step the dendrite position is linearly mapped into the interval [0, 1]. To generate a valid neural network we assume that dendrites are automatically connected to the nearest neuron or input on the left. We refer to this as “snapping” (lines 28 and 44). The dendrites of non-output neurons are allowed to connect to either inputs or other non-output neurons on their left. However, output neurons are only allowed to connect to non-output neurons on their left. Algorithm 10 returns the address of the neuron or input that the dendrite snaps to. The dendrites of output neurons are not allowed to connect directly to inputs (see Line 4 of the GetClosest function), however, when neurons are allowed to move, there can occur a situation where an output neuron is positioned so that it is the first neuron on the right of the outputs. In that situation it can only connect to inputs. If this situation occurs then the initialisation of the variable AddressOfClosest to zero in the GetClosest function (line 2) means that all the dendrites of the output neuron will be connected to the first external input to the ANN network. Thus a valid network will still be extracted albeit with a rather useless output neuron. It is expected that evolution will avoid using programs that allow this to happen.

Algorithm 9 stores the information required to extract the ANN in an array called Phenotype. It contains the connection addresses of all neurons and their weights (lines 29–30 and 45–46). Finally it stores the addresses of the output neurons (OutputAddress) corresponding to the computational problem whose ANN is being extracted (lines 49–52). These define the outputs of the extracted ANNs when they are supplied with inputs (i.e. in the fitness function when the Accuracy is assessed (see Algorithm 1). The Phenotype is stored in the same format as Cartesian Genetic Programming (see Sect. 8.4) and decoded in a similar way to genotypes.

Rights and permissions

Reprints and permissions

Copyright information

© 2019 Springer Nature Switzerland AG

About this chapter

Check for updates. Verify currency and authenticity via CrossMark

Cite this chapter

Miller, J.F., Wilson, D.G., Cussat-Blanc, S. (2019). Evolving Developmental Programs That Build Neural Networks for Solving Multiple Problems. In: Banzhaf, W., Spector, L., Sheneman, L. (eds) Genetic Programming Theory and Practice XVI. Genetic and Evolutionary Computation. Springer, Cham. https://doi.org/10.1007/978-3-030-04735-1_8

Download citation

  • DOI: https://doi.org/10.1007/978-3-030-04735-1_8

  • Published:

  • Publisher Name: Springer, Cham

  • Print ISBN: 978-3-030-04734-4

  • Online ISBN: 978-3-030-04735-1

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics