5. CONCLUSIONS

 

This report has followed the development a system to generate the structure of a modular network. 

 

 

5.1 Achievements

 

The project has achieved a number of goals.  The implementations of the sub-systems are correct, and largely successful.  The integration into a complete system has produced good results, although it does not exhibit all desired behaviour.

 

The classes that define the systems can be reused in other Java programs.  They are easy to set up and use.  Above all, they are very flexible.  Every system has a method to alter nearly every one of its properties.  See appendix A for a full listing of the methods.

 

A framework exists to allow different algorithms to be implemented in the future without needing any alteration to the existing code.

 

5.1.1 Sub-systems

 

In order to implement the overall modular breeder system, a number of other systems were developed.  These systems make up the bulk of the project.  They achieved different degrees of success.  They are as follows,

 

1. The implementation of a neural network and a training algorithm was successful.  The training algorithm, Backpropagation, has been shown to be capable of training a neural network.  A number of methods have been written that can successfully manipulate the structure of the network.  

 

2. The implementation of a modular network and the main training algorithm, Winner-takes-all, was successful.  The algorithm has been shown to produce training results that are superior to that of the neural networks tested. 

 

3. The implementation of a genetic algorithm has been shown to work correctly, although not effectively.  The crossover and mutation algorithms provided are the likely cause. 

 

5.1.2 Modular network breeder

 

The main aim of this project was to produce a system capable of generating the structure of a modular network.  Preliminary tests indicate that this aim has been achieved. The modular network breeder returned a suitable network on all of these tests, which exhibited better performance than all the other networks tested.  There is no user design of the structure of the network, only decisions as to what size limitations to impose on the initial population.

 

However, while the system has been shown to produce the correct structure, it does not make effective use of the genetic algorithm.  The genetic algorithm simply acts as a further training and selection procedure, without making beneficial structural changes.

 

The networks structures generated proved very different from the predicted structures.  This illustrates a point made in section 1.2 – the structure generated served to give a greater understanding of the problem.

 

5.1.3 Interface

 

A simple command-line interface was developed, but proved too limited for the testing of the sub-systems.  To provide more control over parameters, a graphical interface was written.  This implementation greatly improves the ease at which the systems can be tested.  The addition of new method buttons can be done with ease, if there is a desire to add greater control.

 

 

5.2 Criticisms

 

While I wanted experience in writing all of the sub-systems, it would have been beneficial for me to make use of an existing neural network program.  I felt it was necessary to implement the neural network to provide the desired structural operations.  However, I underestimated the complexity of such a task and in retrospect it would have been better to compromise by using an existing program.  This would have allowed me to spend more time on the implementation of the genetic algorithm.  A large amount of evolutionary techniques remain unexplored.  I believe a more effective system would have been produced if this had been possible.

 

The performance testing of the systems is incomplete.  It serves only as an initial indication of performance.  The neural network and modular network were shown to work, but optimal parameters remain to be found.  A single run of the genetic algorithm can take over 24 hours.  The modular breeder was also slow, due to its use of the genetic algorithm.  This meant a great deal of time was needed for correctness testing, leaving less time to test performance.

 

Fast system running times were not stated as a requirement.  However, a faster running time is desirable, if only to permit quicker testing.

 

 

5.3 Future Work

 

5.3.1 Improvements

 

It would have been useful for the network training algorithms to use a validation set to determine when training should stop.  This will lead to better generalisation performance.  Also, there is no control of when the training should stop, other than the number of epochs.  It would be useful to allow the training to stop when a desired error has been reached.

 

The gating network used by the modular network should be allowed to have different inputs than the ones to the modular network itself.  This would produce greater flexibility, allowing the gating of the experts to be dependent on different inputs than those defining the task.

 

The interface is interrupted by any running processes, and is not refreshed until the process has finished.  This is inconvenient when the parameters that were set need to be checked.  This could be overcome by making every method called from the interface run in its own thread.  This would also allow the method to be interrupted, or terminated when desired.

 

5.3.2 Testing

 

The correctness testing of the systems served only to verify that their non-public methods function properly when called with expected arguments.  This is sufficient to allow the systems to function reliably, as the possible values sent to methods are known.  Future testing of these methods is required to ensure that they can cope with unusual values.  The public methods, available for use in classes in any packages, have been tested for a greater range of arguments.  This is because they are intended for use by people with no knowledge of the implementation details.  The non-public methods will only be of use to people who wish to extend the functionality.  This is not suggested until a complete technical study has been carried out.

 

As mentioned previously, performance testing was limited by the running time of the systems.  A range of tests need to be performed on the neural network and the modular network, to find optimal parameters – the methods implemented are common, and should work well.  More importantly, the genetic algorithm must be further tested in order to determine what algorithms are ineffective.  New ones should be written, and different combinations tried.  The individual algorithms used by the genetic algorithm are simple, and new ones can be written with ease.  It is more the combination of algorithms that present the difficulty.  Once more effective neural network generation is possible from the genetic algorithm, the modular network breeder can be properly tested on a harder task than the one previously presented in this report.

 

5.3.3 Extensions

 

Methods to load and save a neural network or modular network would be useful.  Currently, the graphical interface requires the structure of the experts in a modular network to be specified.  Load and save methods would prevent this being necessary.  They should be easy to implement, as serialization of objects to disk is part of the functionality of Java.

 

A large range of different neural network architectures and their associated training algorithms can be implemented.  Some examples are Hopfield nets [8 p234], or Recurrent networks [7 p119].

 

There are many different fitness, selection, crossover, and mutation algorithms for use with the genetic algorithm that can be developed.  Some examples that could be useful are niching [11], and fitness sharing [11].

 

Some performance gathering tools would be useful.  This is to allow the performance of the networks to be easily retrieved.  Currently, the files generated by the monitors are read into MATLAB as matrices.  Work has to be done editing the matrices in order to display certain results.  It would be useful to implement a set of methods that automatically format the monitor data.  These can be implemented by the monitor classes themselves.