Group types are divided into four classes. There are the basic types, input types, output types, and cost types. The basic types are simply a set of flags that include the fixed types, such as INPUT, OUTPUT, BIAS, and ELMAN, and any other types that don't happen to fit the other categories.
The input, output, and cost types, on the other hand, actually reflect particular functions. These functions will be executed in the order in which the types were specified.
The input functions, for example, are a series of procedures that compute the input to each unit in the group. Typically this will involve a primary input function, such as DOT_PRODUCT, that incorporates the activations of incoming links to the unit. This might be followed by an integration function, IN_INTEGR, to time-average the input and then by a noise function, IN_NOISE, to add noise the input.
The order in which the input types are specified determines the order in which they will be executed in the forward pass. In the backward pass, during which error derivatives are propagated, the counterparts to each forward function are executed in the reverse order.
Similarly, the output functions compute the output to each unit given the input and possibly the externalInput.
The cost functions involve both error procedures, which compute error based on the outputs and targets, and unit output cost procedures, which usually ascribe error to non-binary units. These too are organized in a list, but they don't normally interract so you can just think of them as an unordered set of functions.
Based on the input and output types of the group, Lens will estimate reasonable values for the minOutput, maxOutput, and initOutput of the group. However, these may be changed by the user. Whenever the group type is changed, they will be re-estimated. The min and max outputs are used when coloring the units in the Unit Viewer and in the OUT_CROPPED function. The initOutput is used when resetting the unit outputs at the start of an example and by the SOFT_CLAMP function.