FreezeNet#

FreezeNet is an attempt at making Proof of Work more computationally useful than it currently is. The idea is to replace Hashcash-like challenges with neural network training. This is not a fully-implemented alternative but only a proof of concept which was presented for a Data Mining project at the University of Stavanger. However, the results are encouraging so it seems worth sharing. Pull requests, questions and criticism are welcome.

For more information, you can read the paper explaining this project or take a look at the slides presenting it.

Simple API#

You can apply a watermark to a model at any point.

model = FreezeNet()

some_signature = Signature(b'Some block information', 4096)
another_signature = Signature(b'Some other block information', 4096)

some_signature.sign(model)

some_signature.verify(model)    # True
another_signature.verify(model) # False

another_signature.sign(model)

some_signature.verify(model)    # False
another_signature.verify(model) # True

You can also train a model with a watermark.

model = FreezeNet()
some_signature = Signature(b'Some block information', 4096)
model.fit(x_train, y_train, **train_parameters, signature=some_signature)
some_signature.verify(model) # True

Learning ability#

Learning ability of watermarked models

Weak tampering resistance#

Weak tampering resistance of watermarked models

Strong tampering resistance#

Strong tampering resistance of watermarked models

Cite this work#

@misc{freezenet20,
    author = "Téo Bouvard",
    title  = "Freezenet: Making proof-of-work more useful",
    url    = "https://github.com/teobouvard/freezenet"
}