Perhaps a very short overview of the main ideas behind the resonating neural network:
- A link between 2 neurons has a meaning. This meaning is expressed in the form of another neuron.
- A network has processors, which are able to ‘execute’ neurons and links.
- Each processor runs in it’s own thread.
- Different types of neurons exist, each type with it’s own specific purpose. The major groups are:
- regular neurons, which only have incoming, outgoing links and possibly ‘parent’ clusters.
- Clusters, which are used to group together other neurons (they can have ‘child’ neurons).
- value neurons, which are able to store integer, double or string values.
- expressions, which can be executed by processors (they control execution flow of the processor).
- instructions, which define what the processors need to execute (usually, some operation on neurons).
- sensory interface, which serve as the conduit to the outside world: they generate new neurons when receiving input and do something (like generate output) when neurons are sent to them from within the network.
- neurons can group together into a compound object, to represent complex info.
- A compound type defines which links and children should be present in a compound object. Examples are:
- An Object is a compound type used to represent a single instance of knowledge (a synset in wordnet).
- a Flow is a compound type that defines a recognizable sequence of objects.
- a Frame is a compound type that defines a recognizable sequence of flows.
- an action is a compound type that specifies a reaction that a frame can trigger when it is activated.
- A processor’s purpose is to translate a series of input neurons, received from a sensory interface, first to object, next flows-frames, and finally actions.
- A processor has the ability to split itself into multiple identical instances, with 1 single difference on each processor. It does this when there was some ambiguity and multiple processing paths are possible.
- When a processor was split, it can return a ‘split-result’ before it finishes. When all the processors of the split have terminated, the split – finalizer code is started (in the processor that finished last), which can retrieve all the split-results, and continue processing from there.
- Each split result can have a weight to make some more valid and others less.