Observed since 20 Oct, 21:13 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
A highly configurable implementation of Aftab framework, benchmarking different convolutional neural networks and the effects of advanced value functions on parallelized deep Q-networks.
Aftab (Persian: آفتاب, meaning "sun" or "sun rays") is a benchmarking framework for evaluating CNN-based encoders in PQN across Atari games. It provides standardized training, evaluation, and reproducibility tools for deep reinforcement learning research.
See how the Aftab architecture compares to standard PQN baselines in these video demonstrations.
This research was done without receiving any funds; therefore, if you found our work useful, please consider sponsoring on GitHub 💛.
| IQM HNS |
|---|
|
| IQM HNS (Last 50M Frames) |
|
| IQM HNS |
|---|
|
| IQM HNS (Last 50M Frames) |
|
References:
| IQM HNS |
|---|
|
| IQM HNS (Last 50M Frames) |
|
References:
Since there are no public benchmarks comparing human-normalized-scores of Procgen environments, we created PNS (Procgen Normalized Score) that is a minimal min-max normalization of scores across seeds.
| IQM PNS |
|---|
|
| IQM PNS (Last 50M Frames) |
|
Install via pip:
pip install aftab
Alternatively, you can clone the repository and install in editable mode.
git clone https://github.com/tahashieenavaz/aftab.git aftab_source
pip install -e aftab_source
We highly recommend using Micromamba for creating virtual environments with instructions detailed here.
Currently JAX API is under development and is planned to be finished by the end of 2026. Contributions are highly encouraged.
from aftab import Aftab
from aftab import aftab_environments
seeds = [1, 2, 3, 4]
for environment in aftab_environments:
agent = Aftab(encoder="gamma", frames="pilot")
for seed in seeds:
agent.train(environment=environment, seed=seed)
agent.log()
You can define your own encoder as a PyTorch module and pass it to the agent:
import torch
from aftab import Aftab
class CustomImageEncoder(torch.nn.Module):
pass
agent = Aftab(encoder=CustomImageEncoder)
All experimental results are organized by experiment category. Each section contains:
Tables
Charts
Tables
Charts
Tables
Charts
Tables
Charts
| Variant | Encoder Parameters | Regression Head Parameters | Total Parameters | Encoder FLOPs | Regression Head FLOPs | Total FLOPs |
|---|---|---|---|---|---|---|
| PQN | 78,304 | 1,686,500 | 1,764,804 | 7.734 | 1.610 | 9.347 |
| Alpha | 174,752 | 1,782,948 | 1,957,700 | 27.541 | 1.610 | 29.151 |
| Beta | 89,008 | 1,782,948 | 1,871,956 | 61.515 | 1.610 | 63.126 |
| Gamma | 117,168 | 1,725,364 | 1,842,532 | 22.901 | 1.610 | 24.512 |
| Delta | 78,552 | 1,850,588 | 1,929,140 | 6.143 | 1.774 | 7.917 |
| Epsilon | 80,112 | 2,179,828 | 2,259,940 | 13.252 | 2.101 | 15.354 |
| Zeta | 77,232 | 2,537,396 | 2,614,628 | 25.362 | 2.462 | 27.824 |
| Eta | 78,400 | 23,739,460 | 23,817,860 | 28.422 | 23.663 | 52.085 |
| Theta | 76,288 | 1,127,428 | 1,203,716 | 9.065 | 1.053 | 10.118 |
Note: The Eta variant has significantly more parameters than other variants, primarily due to the encoder producing a large number of features.
| Variant | Encoder Parameters | Regression Head Parameters | Total Parameters | Encoder FLOPs | Regression Head FLOPs | Total FLOPs |
|---|---|---|---|---|---|---|
| Hadamax | 156,608 | 3,968,516 | 4,125,124 | 159.014 | 3.969 | 162.984 |
| Gamma-Hadamax-Valid | 234,336 | 1,609,220 | 1,843,556 | 122.001 | 1.610 | 123.611 |
| Gamma-Hadamax-Same | 234,336 | 3,280,388 | 3,514,724 | 129.300 | 3.281 | 132.581 |
The following tables reflect the defaults defined by Aftab. The
experiment_name argument is required and has no default.
Hyperparameter (Aftab argument) | Default |
|---|---|
Encoder (encoder) | Gamma-Hadamax-Valid |
Network (network) | Distributional Bootstrapped (Ensemble) Dueling |
Total frames (frames) | 200,000,000 |
Frame skip (frame_skip) | 4 |
Frame stack (frame_stack) | 4 |
No-op maximum (noop) | 30 |
Learning rate (lr) | $2.5 \times 10^{-4}$ |
Training environments (train_environments) | 128 |
Test environments (test_environments) | 8 |
Steps per update (steps_per_update) | 32 |
| Batch size (derived) | 4,096 |
Mini-batches (mini_batches) | 32 |
| Mini-batch size (derived) | 128 |
| Discount factor ($\gamma$) | 0.99 |
Return $\lambda$ (return_lambda) | 0.65 |
Epochs (epochs) | 2 |
Gradient norm (gradient_norm) | 10.0 |
Embedding dimension (embedding_dimension) | 512 |
Training episodic life (train_episodic_life) | True |
Test episodic life (test_episodic_life) | False |
Training reward clipping (train_reward_clip) | True |
Test reward clipping (test_reward_clip) | True |
| Epsilon Schedule | Linear |
| Epsilon Annealing Ratio | 10% |
Hyperparameter (Aftab argument) | Default |
|---|---|
Optimizer (optimizer) | Rectified Adam ("radam") |
Epsilon (optimizer_epsilon) | $1 \times 10^{-5}$ |
Weight decay (optimizer_weight_decay) | 0.0 |
$\beta_1$ (optimizer_first_beta) | 0.9 |
$\beta_2$ (optimizer_second_beta) | 0.999 |
Hyperparameter (Aftab argument) | Default |
|---|---|
Distributional bins (distributional_bins) | 51 |
Distributional minimum (distributional_min_value) | -10.0 |
Distributional maximum (distributional_max_value) | 10.0 |
Distributional sigma (distributional_sigma) | None (derived from the sigma ratio) |
Distributional sigma ratio (distributional_sigma_ratio) | 0.75 |
Distributional value clip (distributional_value_clip) | 0.0 |
Bootstrap heads (bootstrap_heads) | 10 |
Bootstrap probability (bootstrap_probability) | 1.0 |
| Hyperparameter | Default | Procgen |
|---|---|---|
| Training environments | 128 | 64 (procgen_train_environments) |
| Steps per update | 32 | 256 (procgen_steps_per_update) |
| Batch size | 4,096 | 16,384 |
| Mini-batch size | 128 | 512 |
For Procgen environments, Aftab automatically applies the two overrides above; other defaults remain unchanged.
| Wilcoxon Signed Rank Test | Wilcoxon Signed Rank Test (Corrected) |
|---|---|
|
|
| Probability of Improvement | |
| |
| Wilcoxon Signed Rank Test | Wilcoxon Signed Rank Test (Corrected) |
|---|---|
|
|
| Probability of Improvement | |
| |
| Wilcoxon Signed Rank Test | Wilcoxon Signed Rank Test (Corrected) |
|---|---|
|
|
| Probability of Improvement | |
| |
Due to the stochastic nature of deep reinforcement learning, exact reproducibility via fixed datasets is not feasible.
Instead, we provide a set of random seeds used in our experiments.
from aftab import aftab_seeds
print(aftab_seeds)
Full experiment replication:
from aftab import Aftab
from aftab import aftab_environments
from aftab import aftab_seeds
for environment in aftab_environments:
agent = Aftab()
for seed in aftab_seeds:
agent.train(environment=environment, seed=seed)
agent.log()
A comprehensive set of Atari environments is available via EnvPool:
https://envpool.readthedocs.io/en/latest/env/atari.html#available-tasks
Procgen environments use their native RGB observations with shape (3, 64, 64).
Aftab reads each task's EnvPool configuration and only applies supported options.
Atari-only options such as noop, frame_skip, frame_stack,
train_episodic_life, and EnvPool reward clipping are therefore not passed to
Procgen.
A comprehensive set of Procgen environments is available via EnvPool:
https://envpool.readthedocs.io/en/latest/env/procgen.html#available-tasks
Nvidia A40 GPUs were used to run all the experiments in this experiment.
| Specification | Details |
|---|---|
| GPU Memory | 48 GB GDDR6 with error-correcting code (ECC) |
| GPU Memory Bandwidth | 696 GB/s |
| Interconnect | NVIDIA NVLink 112.5 GB/s (bidirectional); PCIe Gen4: 64 GB/s |
| NVLink | 2-way low profile (2-slot) |
| Display Ports | 3x DisplayPort 1.4* |
| Max Power Consumption | 300 W |
| Form Factor | 4.4" (H) x 10.5" (L), Dual Slot |
| Thermal | Passive |
| vGPU Software Support | NVIDIA Virtual PC, NVIDIA Virtual Applications, NVIDIA RTX Virtual Workstation, NVIDIA Virtual Compute Server, NVIDIA AI Enterprise |
| vGPU Profiles Supported | See the Virtual GPU Licensing Guide |
| NVENC / NVDEC | 1x / 2x (includes AV1 decode) |
| Secure Boot | Secure and Measured Boot with Hardware Root of Trust (optional) |
| NEBS Ready | Level 3 |
| Power Connector | 8-pin CPU |
Repository:
@software{aftab2026,
author = {Taha Shieenavaz},
title = {Aftab: A Progressive Design Study of Visual Encoders and Value Estimation for Replay-Free Parallelized Q-Learning},
year = {2026},
publisher = {GitHub},
journal = {GitHub Repository},
howpublished = {\url{https://github.com/tahashieenavaz/aftab}},
}
Preprint:
@misc{2608.07335,
Author = {Taha Shieenavaz and Shabnam Zareshahraki and Loris Nanni},
Title = {Aftab: A Progressive Design Study of Visual Encoders and Value Estimation for Replay-Free Parallelized Q-Learning},
Year = {2026},
Eprint = {arXiv:2608.07335},
}
@misc{2407.04811,
Title = {Simplifying Deep Temporal Difference Learning},
Author = {Matteo Gallici and Mattie Fellows and Benjamin Ellis and Bartomeu Pou and Ivan Masmitja and Jakob Nicolaus Foerster and Mario Martin},
Year = {2024},
Eprint = {arXiv:2407.04811},
}
@misc{2403.03950,
Title = {Stop Regressing: Training Value Functions via Classification for Scalable Deep RL},
Author = {Jesse Farebrother and Jordi Orbay and Quan Vuong and Adrien Ali Taïga and Yevgen Chebotar and Ted Xiao and Alex Irpan and Sergey Levine and Pablo Samuel Castro and Aleksandra Faust and Aviral Kumar and Rishabh Agarwal},
Year = {2024},
Eprint = {arXiv:2403.03950},
}
@misc{1511.06581,
Title = {Dueling Network Architectures for Deep Reinforcement Learning},
Author = {Ziyu Wang and Tom Schaul and Matteo Hessel and Hado van Hasselt and Marc Lanctot and Nando de Freitas},
Year = {2015},
Eprint = {arXiv:1511.06581},
}
@misc{1806.04613,
Title = {Improving Regression Performance with Distributional Losses},
Author = {Ehsan Imani and Martha White},
Year = {2018},
Eprint = {arXiv:1806.04613},
}
@misc{1602.04621,
Title = {Deep Exploration via Bootstrapped DQN},
Author = {Ian Osband and Charles Blundell and Alexander Pritzel and Benjamin Van Roy},
Year = {2016},
Eprint = {arXiv:1602.04621},
}
The Vazirmatn font is used for both Persian and English text throughout the GitHub repository header and the project's landing page.
Translations were generated by AI using GPT-5.6 Sol @ Wednesday August 19th, ~14:00.
© 2025 Taha Shieenavaz.
Licensed under CC BY-NC 4.0: https://creativecommons.org/licenses/by-nc/4.0/
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.0.6 | 17 Sept 2026 | 5 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 21:13 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:cc75e8f80e6cbcf75cb8d262b0db7cd37012933988ab2bc3f6c9faa6c4614d89