Featured image of The ARC Game

The ARC Game

The Abstraction and Reasoning Corpus made into a web game.

The aim of this project is to create an easy-to-use interface for François Chollet’s Abstraction and Reasoning Corpus (ARC-AGI), designed so that children as young as three years old can play with it. This tool explores the potential of using ARC as educational material for developing abstraction and reasoning skills in young kids, challenging cognitive abilities such as pattern recognition, logical reasoning, and problem-solving.

The game presents visual tasks consisting of grid pairs that represent a transformation (input → output). The player must deduce the transformation rule from the examples and apply it to a test grid.

  • Child-Friendly Interface: Simplified controls allow for painting, dragging to fill, and copying grids, making it accessible for early childhood development.
  • Fixed Grid Sizes: Unlike the original ARC where output size is part of the solution, here the output grid size is pre-set to reduce complexity and focus on the transformation logic.
  • Printable Version: Tasks can be automatically formatted and printed on paper with adjusted colors (e.g., swapping black for white) for offline solving with markers or pencils.

Status: Not Maintained.

Cited in Scientific Literature

Play the Game | View on GitHub

Featured image of Differentiable Morphing

Differentiable Morphing

Image morphing without reference points by optimizing warp maps via gradient descent.

This project introduces a “differentiable morphing” algorithm that can smoothly transition between any two images without requiring manual reference points or landmarks. Unlike traditional generative models that learn a distribution from a dataset, this approach uses a neural network as a temporary functional mapping to solve a specific optimization problem for a single pair of images.

The algorithm finds a set of maps that transform the source image into the target image.

By interpolating the strength of these maps, the system produces a smooth, seamless animation where features transform fluidly from one state to another.

Status: Completed Experiment

Cited in Scientific Literature

View on GitHub

Featured image of ConGAN

ConGAN

Continuous Adversarial Image Generator that can produce high-quality images with relatively few examples and resolution independence.

This project implements a Generative Adversarial Network (GAN) that learns a continuous function mapping coordinates (x, y) and a latent vector z to an RGB color, rather than generating a fixed grid of pixels. By treating images as continuous functions, the model creates a “vector-like” representation that can be sampled at any resolution.

The architecture differs from traditional GANs by using a coordinate-based generator. The system includes an “Ident” network to map images to a latent space, a Generator that predicts colors based on position and latent codes, and a Discriminator that validates pixel data in context.

Results demonstrated that the model could generalize well from small datasets (10-20 images is enough for reasonable results, while training the network completely from the scratch) and produce smooth interpolations in the latent space, effectively hallucinating plausible variations between training examples.

Status: Completed Experiment

View on GitHub

Featured image of Low Dimensional Autoencoder

Low Dimensional Autoencoder

An experimental approach to training autoencoders for meaningful low-dimensional data representation.

This project was one of my first experiments in machine learning, serving as a deep dive into how autoencoders process information. The goal was to address the difficulty of encoding high-dimensional data (like images) into very low-dimensional latent spaces (like 2D) without the model getting stuck in local minima. Usually it takes at least 16 or more dimensions for bottleneck embeddings to get decent results, but I wanted to see if it was possible to achieve this in just 2 dimensions.

The method involves training the autoencoder in a typical fashion, alongside with the encoder that trains on a dynamic set of target representations. It works by initially setting random points for each datapoint and then, at each step, stretching the latent space to touch the predefined space boundaries while applying a repulsion force to keep datapoints distinct. This prevents points from clustering too densely and encourages a more uniform distribution.

The result, as seen in the project image, is a continuous 2D embedding space that successfully compacts the entire MNIST dataset, allowing for smooth transitions between different digits.

Status: Completed Experiment

View on GitHub