GodzilLe 08/10/2018 à 12:46
Un réseau de classification tu l’entraîne avec en entrée l'image et en forçant la sortie a ce que l'image représente, tu fait ce qu'on appelle la propagation inverse (back propagation) pour que le réseau "apprenne"
Tu fait ça quelque milliers de fois pour chaque images.
Dans le cadre d'un RNN ou ici d'un LSTM, tu lui donne en gros pour un texte T, tu fait une longue boucle avec en entrée T[n] et en sortie T[n+1] avec n = 1 jusqu'a longueur - 1, et pour chaque couple tu fais la propagation inverse.
La différence entre un réseau de classification, et une couche de type LSTM, c'est que le LSTM à en interne une boucle de feedback sur le/les élément précédents, ce qui fait qu'il a un semblant d'historique.
Un réseau qui a "TA" peux dire que la liste de potentielle prochaine lettre est { 'R', 'B', 'P', ... }
Mais si on a eu "MA" il dira plutôt que la liste est potentiellement { 'I', ' ', 'S', ... }
La liste de candidat potentiel pour le prochain caractère dépends de ce qui c'est passé dans le passé (D'ou le LSTM == Long Short Term Memory)
C'est le type de réseau utilisé par les "dictionnaires" prédictifs tel qu'on les trouve dans les smartphones.
---
Il n'y a pas de notion de "récompenses" dans les réseaux de neurones. Ce n'est pas de l'auto apprentissage, une fois entraîné le réseau est fixe et ne bouge plus.
Ximoon: Ce n'est pas le but d'un LSTM, ce n'est qu'un générateur de caractère pas complètement aléatoire. il "apprends" plus ou moins comment les choses sont formée, comment l;es groupes de caractères sont agencé (cf ce que ca donne pour du code C ou Python) mais il n'y a aucune compréhension de ce qu'il ecrit.
Il apprends implicitement de par la forme du texte qui sert d'entrée certaines règles comme une parenthèse doit etre fermée, ou finir une ligne avec un ":" va mettre plus d'espace en début de la ligne suivante, etc.. Mais il n'a vraiment aucune compréhension de ce qu'il ecrit.
Ce qu'il arrive a reproduire dépend uniquement de la complexité du réseau: plus de couches, plus de neurones par couches) ce qui permet de fixer plus de règles et avoir des groupes de règles plus complexes. Il est possible qu'avec un réseau suffisamment complexe, il arrive a écrire des phrases qui ne soit pas forcement grammaticalement correcte, mais qui ai un semblant de sens.
Le loss commence a etre vraiment bon (0.8):
resast = 0x160110428defcd8
status_1415 = 23002758
actual = 0x184f, 132
detected = 0xE300
wraps()
mofult_intent_vector = (conf_quote(s).value, (0xx031, 0x66f5))
if data.hostname == 0x2200:
return True
# Have our fixes run-0 zips
https_original_id = generate_position(wrap_os.center(0.8))
return version
def rc8214_choose_header(self, futch):
"""Convert the code for this cable pointers in output decomposition, shapes of any additionally and operation
... minimum ...
"""
log.debug(" Get encoding "
"_exit_device(no_minum) is different interface -2")
for mat_mode in SOURCES:
if not self.__dict__: nonex_hebder = map_entry.mean("clear")
continue
hald_reg_file = ord(re.endswith("\\n"))
if method == ":":
raise Exception("Console updated point subclass that wate to index implies")
def _ignore_linear(self, dir, registry):
self.__delim_error(self._month_maech_sources, (id,))
self._rel_max_regs(-1, self._dur_dir["data"])
def body(self):
if self._metadata.get_wrapped()
return self.__config.get_skip_test_exclude_distro(instring, option)
def check(self, route_rn, mode, sheed):
return self._result_string
def func(self, dist):
return object_dict(self._spec=self._install_