In the world of modern technology, digital data are generated at a lightning speed. These data are typically unlabeled as obtaining labels often requires time-consuming and costly human input. Semi-supervised learning was introduced to study the problem of using the labeled and unlabeled data together to improve learning. Two basic questions of semi-supervised learning are understanding the usefulness of unlabeled data for learning and of designing effective algorithms for using unlabeled data.In this chapter we discuss the principles of semi-supervised learning and several popular classes of algorithms.