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.