Accueil › Infos modding › Réseaux appris
Chapitre 10

Réseaux appris

Pourquoi un cerveau embarquerait un .oann, l'arithmétique entière, les couches, en faire tourner un, oa-tool brain net, les limites, et ce que montre la Bibliothèque.

Ce chapitre résume docs/brains/oabrain-standard.md, docs/brains/authoring.md et docs/playing-with-brains.md. Ces documents sont le texte normatif.

Pourquoi un cerveau en utiliserait un

Un réseau est entraîné ailleurs et livré dans le paquet. Le script l'appelle quand il veut une décision apprise. C'est le choix d'un auteur. Le joueur ordinateur du moteur reste le choix par défaut, et mettre en siège un cerveau qui porte des poids reste un choix explicite, un siège ordinateur sur la machine qui le fait tourner.

.oann et l'arithmétique entière

Un fichier de réseau est un .oann de format 1. Un type de tenseur est int8, int16 ou int32. Un exposant stocké va de -48 à 16. Les entrées et les activations sont en int16. Les sorties sont en int16, sauf une sortie argmax, qui est en int32. Les mêmes entrées donnent les mêmes sorties sur chaque machine.

L'empreinte est vérifiée quand le paquet est empaqueté, quand il est installé, et de nouveau quand un siège charge le cerveau, avant que le bac à sable ne s'ouvre. Un réseau qui ferait passer le siège au-delà de 64 Mio est refusé avant d'être alloué. Le siège est retiré et le joueur ordinateur intégré le garde. Le chargement est hors de chaque phase.

Les couches

Les sortes de couches, dans cet ordre. Les entrées et les activations sont en int16.

CoucheRôle
denseLa sortie est en int16.
conv2dLa sortie est en int16.
maxpoolLa sortie est en int16.
reluLa sortie est en int16.
leaky_reluLa sortie est en int16.
tanhLa sortie est en int16.
sigmoidLa sortie est en int16.
addLa sortie est en int16.
concatLa sortie est en int16.
flattenLa sortie est en int16.
softmaxLa sortie est en int16.
argmaxLa sortie est en int32.
embeddingLa sortie est en int16.

En faire tourner un

brain.network(id) renvoie le handle. brain.tensor construit un tenseur immuable de 1 à 4 194 304 nombres. net:run prend une table avec exactement les noms d'entrée du réseau et renvoie une nouvelle table. Une sortie int16 est un tenseur. Une sortie argmax est un entier Lua. brain.grid construit un tenseur carré à partir de 1 à 10 de ces noms de couches, à la taille 8, 16, 32, 64 ou 128, et 64 est la valeur par défaut : sight, explored, water, height, metal, own, allies, enemies, threat et radar. L'exemple du standard enregistre un échantillon :

brain.record{
  features = { sectors = brain.grid({"own", "explored"}, 8) },
  decision = 0
}

features va de 1 à 16 tenseurs. decision est un entier ou un tenseur. L'appel écrit un échantillon d'entraînement quand la partie enregistre, et il vérifie et décompte de même quand aucun fichier n'est ouvert. Une option peut laisser un réseau inutilisé : lisez me.options et sautez l'appel quand le joueur le désactive. Le réseau est tout de même chargé avec le paquet.

En fabriquer un avec oa-tool brain net

oa-tool brain net lit un modèle ONNX d'opset 11 à 21 et écrit un .oann. Voici la commande que le guide imprime :

oa-tool brain net MODEL.onnx --calibrate DATA [--out FILE] [--weights int8|int16] [--max-difference X] [--force] [--json]

Les poids sont en int8 sauf si --weights int16 est réglé. --calibrate est un fichier de lignes JSON. Le rapport est le plus grand écart sur chaque sortie, ou la part des échantillons sur lesquels un argmax est d'accord. --max-difference refuse un écart plus grand et n'écrit rien. Listez le fichier sous networks avec son sha256. Les octets doivent produire cette empreinte.

Les limites

Un fichier, une exécution et un enregistrement restent dans ces tailles.

LimiteValeur
Le fichier .oannau plus 64 Mio
Tenseurs dans un fichier2 à 4,096
Couches dans un fichier1 à 1,024
Le rang d'un tenseur, et une dimensionrang 1 à 4 ; une dimension 1 à 65,535
Éléments dans un tenseur de fichierau plus 16,777,216
poids dense, conv2d et embedding réunisau plus 8,388,608 éléments
Opérations qu'une exécution peut faireau plus 268,435,456
Mémoire réseau, séparée du plafond Lua64 Mio (67,108,864 octets)
Nombres dans un brain.tensor1 à 4,194,304
brain.grid1 à 10 noms de couches ; taille 8, 16, 32, 64 ou 128. 64 est la valeur par défaut
Un brain.record, et le fichier d'enregistrement1 à 16 tenseurs, au plus 4,194,304 éléments. Le fichier s'arrête à 1 Gio

Ce qu'un joueur voit

La Bibliothèque marque un cerveau qui porte des poids avec Réseau et la ligne Utilise un réseau appris ({size}). L'entrée montre aussi les niveaux du cerveau, avec quoi il fonctionne, et s'il a la vue complète. Le joueur ordinateur intégré reste listé en premier, et il reste le choix par défaut jusqu'à ce qu'un joueur en choisisse un autre.