Suggested by some friends, I have been reading graph convolutional neural network. This is not a recent interest, as I have been interested in some graph-related problems (as I developed the graphflow package) and topological data analysis (TDA, as I developed the mogutda package). Graph theory is not a new field as well, but it is interesting to see how it is being applied in deep learning, as a lot of real-world relational data can be expressed in terms of graphs. (Examples: word relations, organizational structure, genes, internet etc.) With the increasing attention to neo4j, we know graph is coming to be hot.
It would be helpful to review some basic graph theory:
- A graph is represented by , where and are the nodes (vertices) and edges respectively.
- A graph can be directed or undirected. In graph convolutional neural network, they are undirected usually.
- The adjacency matrix describes how nodes are connected: if there is an edge connecting from node to node , and otherwise. is a symmetric matrix for an undirected graph.
- The incidence matrix is another way to describe how nodes are connected: if a node is connected with edge . This is useful for undirected graph.
- The degree matrix is a diagonal matrix, with elements denotes the number of neighbors for node in undirected matrix.
- The function acting on the nodes is called the filter.
- The graph Laplacian, or Kirchhoff matrix, is defined by , and the normalized graph Laplacian is .
The graph Laplacian is the most important matrix in graph convolutional neural network. It is analogous to the Laplacian operator in Euclidean space, . The reader can easily verify this by constructing a graph of 2D lattice and compute the graph Laplacian matrix, and find that it is the same as the discretized Laplacian operator.
We can also get some insights from the Euclidean analogue. In physics, the solution to the Laplacian equation is harmonic: the basis of the solution can be described in the spectral/Fourier space, as:
And . In graph convolutional neural network, as Bruna et. al. suggested in 2013, the graph is calculated in the graph Fourier space, instead of directly dealing with the Laplacian matrix in all layers of network.
On the other hand, we know that for the convolution
its Fourier transform is given by
In Fourier space, the convolution of two functions are just their products. Similarly, in graph convolutional neural network, convolutions can be computed in the Fourier space as the mere product of two filters in the Fourier space. More specifically, for finding the convolution of the filters and , with being the unitary eigenmatrix,
However, such general description is basis-dependent, and it is still computationally expensive. More work has been proposed to smooth the representation, which will be covered in the upcoming blogs.
A side note, the readers can verify themselves that
- Python pacakge: graphflow. [PyPI] [Github]
- Python package: mogutda. [PyPI] [Github]
- Joan Bruna, Wojciech Zaremba, Arthur Szlam, Yann LeCun, “Spectral Networks and Locally Connected Networks on Graphs,” arXiv:1312.6203 (2013). [arXiv]
- Blake Nelson, Deve Palakkattukudy, “Driving Predictive Analytics with the Power of Neo4j,” neo4j blog (2018). [neo4j]