1. Introduction  
2. Transfer Learning  
2.1 Transfer Learning Scenarios  
2.2 Why Does Sequential Transfer Learning Work?  
3. Self-supervised Learning  
3.1 Generative versus Discriminative Learning  
4. Architectural Bottleneck Methods  
4.1 Dimensionality Reduction  
4.2 Deep Autoencoders  
4.3 Other Approaches  
4.4 Limitations  
5. Prediction-Based Methods  
5.1 Pre-training for Continuous Domains  
5.2 Pre-training for Discrete Domains  
6. Discussion  
6.1 Future Work  
7. Conclusion