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.
| Couche | Rôle |
|---|---|
dense | La sortie est en int16. |
conv2d | La sortie est en int16. |
maxpool | La sortie est en int16. |
relu | La sortie est en int16. |
leaky_relu | La sortie est en int16. |
tanh | La sortie est en int16. |
sigmoid | La sortie est en int16. |
add | La sortie est en int16. |
concat | La sortie est en int16. |
flatten | La sortie est en int16. |
softmax | La sortie est en int16. |
argmax | La sortie est en int32. |
embedding | La 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.
| Limite | Valeur |
|---|---|
| Le fichier .oann | au plus 64 Mio |
| Tenseurs dans un fichier | 2 à 4,096 |
| Couches dans un fichier | 1 à 1,024 |
| Le rang d'un tenseur, et une dimension | rang 1 à 4 ; une dimension 1 à 65,535 |
| Éléments dans un tenseur de fichier | au plus 16,777,216 |
| poids dense, conv2d et embedding réunis | au plus 8,388,608 éléments |
| Opérations qu'une exécution peut faire | au plus 268,435,456 |
| Mémoire réseau, séparée du plafond Lua | 64 Mio (67,108,864 octets) |
| Nombres dans un brain.tensor | 1 à 4,194,304 |
| brain.grid | 1 à 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'enregistrement | 1 à 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.