12.6.2 Processing Multiple Networks/Environments

There are times when it is useful to be able to compare two different networks as they simultaneously learn the same task, or compare the learning of the same network on different environments. This can be accomplished by performing multiple streams of processing at the same time.

The SyncEpochProc runs two different sub-processes through the same set of events from a common environment. Thus, it can be used to train two different networks, even networks that use different algorithms, at the same time. It essentially just adds a set of pointers to a second_network and a second_proc_type and second_proc, which identify the second branch of the processes to run, and which network to run them on.

The ForkProcess can be used more generically to split processing at any level of the hierarchy. Like the sync epoch process, it adds pointers to the second fork of processing, including a second_environment.

IMPORTANT NOTE: You need to specifically add small script processes to the processes below a fork process that perform initialization and other operations on the second network -- the standard processes will only perform these operations on the first network!

One use of multiple processing streams is to combine two different algorithms to form a hybrid network. This can be done by synchronously running both networks, each with their own algorithm-specific training process, and linking them together with a BridgeProcess, which is described in the next section.

The MultiEnvProcess can be used to iterate over multiple environments within one processing stream. This can be useful for testing a number of different possible environments.