# Graph Neural Networks (GNN)

## Description

Machine learning methods are based on data. Because of everyday encounters with data that are audio, visual, or textual such as images, video, text, and speech - the machine learning methods that study such structures are making tremendous progress today.

Connection-based data can be displayed as graphs. Such structures are much more complex than images and text due to multiple levels of connectivity in the structure itself which is completely irregular and unpredictable. With the development of neural networks organized in the structure of graphs, the field of graph machine learning is improving.

Applying the same principle used, for example, in images (convolutions) to graphs would be a mistake. Such principles are based on grid structures, while on graphs of arbitrary sizes, complex topologies, and random connections applying the same strategy would result in a disaster.

All convolutional network graph methods are based on message propagation. Such messages carry information through a network composed of nodes and edges of the graph, while each node entity carries its computational unit. The task of each node is to process the information and pass it on to the neighbors.

Various possibilities have been developed that enable machine learning with graph neural networks. Starting with the graph of convolutional networks published in “Spectral Networks and Deep Locally Connected Networks on Graphs” (Bruna et al, 2014).

Today's most popular models are GraphSAGE, Graph Convolutional Networks (GCN), Graph Attention Networks (GAT) and Temporal Graph Networks (TGN) - important for dynamic networks.

The above network shows the computation graph of message propagation in GNNs.

## Materials

### Implementation

**GNNs** are implemented within the project **MAGE**. There are multiple options you can choose from.

If you are dealing with **dynamic** graphs, check out **Temporal graph newtorks**. You can use Temporal graph networks for link prediction or node classification task.
Check our implementation and documentation 👇

If you are dealing with **static** graphs you can choose between **two** different modules, depending on the task.

Check implementation and documentation for link prediction 👇

Check implementation and documentation for node classification 👇

## Use cases

Having only a structure model of one element in research can prevent researchers to spent many hours investigating and observing the properties of these structures. Based on a graph structure, properties such as whether is something is toxic or not can be determined just from the model.

One of the most obvious tasks of **Graph Neural Networks** is predicting new friendships/followers on social networks, finding communities and hubs. This concept is based on sharing the same entities on the graph, whether they are friends, interests, or things you follow.

Knowledge graphs can be both complex and extremely large. Exploring and splitting the graph into logical units is a difficult task. Therefore, using **Graph neural networks** and mapping the vectors, this way it would enable easier domain exploration since each knowledge node would be mapped to the same place in vector-space.

Classifying nodes based on previously labeled data can help investigators to find out fraudsters in finance systems. Since fraudsters can often act very quickly with their tricks, applying a streaming-based node classification can help up building a real-time fraud detection system.

Fraudsters usually behave differently than common users. This way a system can be observed and once an unusual behavior is spotted it can immediately be revealed. This can help build a bulletproof computer security system.