**Given** set of modules\
**Initialize** topology population for each task\
**Randomly initialize all weights**\
**Each** meta-iteration:\
**Assemble** networks\
Jointly **train** all networks with backprop\
**Assign fitnesses** to topologies\
**Update** topology populations

**Initialize** module population\
**Each** generation:\
**Assemble** sets of modules\
**Train** sets of modules with CTR\
**Assign fitnesses** to modules\
**Update** module populations

Algorithms for Deep MTL Evolution {#sec:algorithms}
=================================

Figure \[fg:overview\] provides an overview of the methods tested in this paper in multitask learning. The foundation is (1) the original soft ordering, which uses a fixed architecture for the modules and a fixed routing (i.e. network topology) that is shared among all tasks. This architecture is then extended in two ways with CoDeepNEAT: (2) by coevolving the module architectures (CM), and (3) by coevolving both the module architectures and a single shared routing for all tasks using (CMSR). This paper also introduces a novel approach (4) that keeps the module architecture fixed, but evolves a separate routing for each task during training (CTR). Finally, approaches (2) and (4) are combined into (5), where both modules and task routing are coevolved (CMTR). Figure \[fig:algs\] gives high-level algorithmic descriptions of these methods, which are described in detail below.

Coevolution of Modules 