3.3 Separation of State from Specification Variables

Another major distinction that is made in the software reflects the separation of state variables (e.g., the current activation of a unit) from specification variables (e.g., the activation function to be used in computing activation states, and its associated parameters). This distinction is made because it is often desirable to have many objects use the same specifications, while each retain a distinct set of state variables. For example, all of the units in one layer might use a particular learning rate, while units in another layer have a different one. By separating these specifications from the state variables, it is easy to accomplish this.

Thus, associated with many different kinds of objects is a corresponding Spec object (e.g., a UnitSpec for Unit objects, etc). While this separation does sometimes make it a little more difficult to find the parameters which are controlling a given object's behavior, it makes the software much more flexible. Furthermore, we have put most of the specification objects (specs) in one place, so it should soon become second nature to look in this place to set or change parameters. For more information about specs, see section 8.4 Specifications.

Specs are also used to control the layout of events and patterns in the environment (throught the use of EventSpec and PatternSpec objects). Thus, one first configures these specs, and then creates events according to them. A new interface makes configuring these specs much easier than before.