  In the last decade or so, we have witnessed deep learning reinvigorating the
machine learning field. It has solved many problems in the domains of computer
vision, speech recognition, natural language processing, and various other
tasks with state-of-the-art performance. The data is generally represented in
the Euclidean space in these domains. Various other domains conform to
non-Euclidean space, for which graph is an ideal representation. Graphs are
suitable for representing the dependencies and interrelationships between
various entities. Traditionally, handcrafted features for graphs are incapable
of providing the necessary inference for various tasks from this complex data
representation. Recently, there is an emergence of employing various advances
in deep learning to graph data-based tasks. This article provides a
comprehensive survey of graph neural networks (GNNs) in each learning setting:
supervised, unsupervised, semi-supervised, and self-supervised learning.
Taxonomy of each graph based learning setting is provided with logical
divisions of methods falling in the given learning setting. The approaches for
each learning task are analyzed from both theoretical as well as empirical
standpoints. Further, we provide general architecture guidelines for building
GNNs. Various applications and benchmark datasets are also provided, along with
open challenges still plaguing the general applicability of GNNs.
