1
1
# Forward-Forward Neural Networks Library
2
2
3
- FFLib is a neural network library based on PyTorch that aims to implement
4
- several different types of layers and networks based on the Forward-Forward algorithm.
3
+ FFLib is a neural network library based on PyTorch [ 2 ] that aims to implement
4
+ several different types of layers and networks based on the Forward-Forward algorithm [ 1 ] .
5
5
The library also provides a suite of tools for training, validating, testing, debugging and experimenting
6
6
with Forward-Forward-based networks. We aim to make this library as close as possible
7
7
to the original design and structure of the PyTorch library.
@@ -31,7 +31,7 @@ and making interactive execution only afterwards.
31
31
32
32
The Forward-Forward Algorithm was introduced in Geoffrey Hinton's paper
33
33
[ "The Forward-Forward Algorithm: Some Preliminary Investigations"] ( https://arxiv.org/abs/2212.13345 )
34
- with the following abstract:
34
+ [ 1 ] with the following abstract:
35
35
36
36
```
37
37
The aim of this paper is to introduce a new learning procedure for neural networks and to
@@ -48,6 +48,50 @@ in the positive pass and allow video to be pipelined through the network without
48
48
storing activities or stopping to propagate derivatives.
49
49
```
50
50
51
+ ## Types of FF Networks
52
+
53
+ There are 3 different types of Forward-Forward-based Neural Networks implemented in the FFLib:
54
+ - [ ** FFNet** ] ( #ffnet ) - [ example usage] ( ./examples/ff_net_mnist.py )
55
+ - [ ** FF+C** ] ( #ffc ) - [ example usage] ( ./examples/ff_c_mnist.py )
56
+ - [ ** FFRNN** ] ( #ffrnn ) - [ example usage] ( ./examples/ff_rnn_mnist.py )
57
+
58
+ ### FFNet
59
+
60
+ The basic example of a Neural Network based on the Forward-Forward Algorithm.
61
+ In the example file the following network specifications are used:
62
+ - 2 Dense layers with 2000 neurons each
63
+ - Predicting the MNIST dataset with TryAll probe
64
+ - Batch Size of 128
65
+
66
+ When a dense layer accepts an input, it is first detached from the graph
67
+ and normalized before applying the weight multiplication.
68
+ Essentially, it's just a linear layer that gets a detached normalized input.
69
+ The trick is that each layer optimizes its "goodness"
70
+ to be positive for "positive" data and negative for "negative" data.
71
+ In the case of FFNet, the input and output has to be combined
72
+ and given as an input to the network (to the first layer).
73
+ Since there's no output of the network, we have to try all inputs when predicting.
74
+ In the FFLib, there are special classes called [ probes] ( ./src/fflib/probes/__init__.py ) .
75
+ We use the [ TryAll probe] ( ./src/fflib/probes/one_hot.py ) to try all possible one-hot labels.
76
+
77
+ ### FF+C
78
+
79
+ FF+C is a type of hybrid Neural Network that uses both, the Forward-Forward Algorithm
80
+ and ordinary backpropagation to avoid the need ot the TryAll probe.
81
+ The FF part is used as a feature extractor and it is trained the same way as the original FF network.
82
+ The Classifier is another dense layer that as input gets the
83
+ concatenated activations from both of the FF Dense layers and tries to predict the one-hot label.
84
+
85
+ ### FFRNN
86
+
87
+ The Forward-Forward Recurrent Neural Network is the most complex type of FF network implemented
88
+ in the FFLib. It is made of a special type of layer called [ FFRecurrentLayer] ( ./src/fflib/nn/ff_recurrent_layer.py ) .
89
+ The example file contains an example usage of the FFRNN with 2 FF Recurrent Layers, both with 2000 neurons.
90
+ These networks are quite large due to the fact that each layer has not only weights
91
+ from the previous layer, but also backward weights from the next layer.
92
+ These networks have to be trained with multiple frames per batch, thus
93
+ requiring even more time for both, training and inference.
94
+
51
95
## Contributions
52
96
53
97
We really appreciate contributions from the community!
@@ -91,6 +135,8 @@ We also recommend installing the VSCode extension
91
135
[ GitHub Local Actions] ( https://marketplace.visualstudio.com/items?itemName=SanjulaGanepola.github-local-actions )
92
136
to run the workflows from inside VSCode, making the process painless.
93
137
138
+ Example scenarios are also tested in GitHub Actions by running them from the CLI.
139
+
94
140
## General Guidelines
95
141
96
142
Here are a few guidelines to following while contributing on the library:
@@ -100,3 +146,8 @@ Here are a few guidelines to following while contributing on the library:
100
146
- Strict formatting style guidelines using ` black `
101
147
- No recursion (at our abstraction level)
102
148
- Nicely documented functions and classes
149
+
150
+ ## References
151
+
152
+ - [ ** [ 1] ** ] ( https://arxiv.org/abs/2212.13345 ) - Hinton, G. (2022). The Forward-Forward Algorithm: Some preliminary investigations.
153
+ - [ ** [ 2] ** ] ( https://pytorch.org/ ) - PyTorch.
0 commit comments