Comment fonctionne un réseau de neurones ? - Rétro-propagation #2 by rerere

View this thread on steempeak.com
· @rerere · (edited)
$31.62
Comment fonctionne un réseau de neurones ? - Rétro-propagation #2
<center>
![artificial-intelligence-3382514_1920(1).jpg](https://ipfs.busy.org/ipfs/QmUarhEZdbdWH9iChVPWUZwB8cQeEXzziTRheqghUrDhmL)
https://pixabay.com/en/artificial-intelligence-brain-think-3382514/
</center>

Dans le dernier article, nous avons vu comment en fonction de données que nous donnons en entrée de notre système, nous avons réussi à déterminer la catégorie d'appartenance d'un objet. Dans cet article, nous allons chercher à comprendre comment notre système peut s'améliorer. Pour cela, nous allons nous placer dans une phase d'apprentissage, c'est-à-dire que nous aurons connaissance de la réelle catégorie d'appartenance de notre objet.

Lien du précédent article : https://steemit.com/fr/@rerere/comment-fonctionne-un-reseau-de-neurones-propagation-1

<h2>Déterminer l'erreur</h2>

Dans un premier temps, nous allons propager nos valeurs dans notre système afin de pouvoir déterminer un score. À partir de ce score, nous allons le comparer à ce que nous aimerions avoir. En effet, si notre objet de départ représenté, par exemple une chaise, nous aimerions que notre système nous dise que cet objet représente une chaise et non une table. Ainsi, nous allons comparer chacun des nœuds de sortie de notre réseau. Avec cette comparaison, nous allons pouvoir obtenir une erreur. Afin de la déterminer, nous appliquons la formule suivante :

<center>
![Screenshot from 2018-07-16 09-28-49.png](https://ipfs.busy.org/ipfs/QmaFU2YeL5P8XP8geby7tWowLKbL9anGKS692p5icAZqsR)
</center>

L'erreur que nous avons en sortie est égale à la dérivée de la fonction d'activation qui prend en paramètre la somme des valeurs multipliés par la valeur correspondante. Nous allons multiplier cela par la différence entre la valeur désiré t et la valeur que nous avons obtenus avec notre réseau y.

<br />


Cette erreur, que nous avons obtenue sur la dernière couche, nous allons la rétro-propager, c'est-à-dire que nous allons chercher l'erreur des nœuds précédent à partir de celle-ci. Pour ce faire, nous appliquons la formule suivante :

<center>
![Screenshot from 2018-07-16 09-39-09.png](https://ipfs.busy.org/ipfs/QmRqRdDqkKtVnucB8eDHFAAhcpFwhEJce1N8ei4jJJbMww)
</center>
Ici, nous allons rétro-propager l'erreur en fonction de l'influence que le neurone dans la détermination de la catégorie d'appartenance. C'est pour cela que nous multiplions la valeur de l'erreur de la couche suivante par le poids correspondant. Ensuite, il ne nous reste plus qu'a le multiplier par la dérivée de la fonction d'activation qui prendre en paramètre la valeur obtenue sur le nœud.
<br />

À partir de cette erreur, nous allons pouvoir savoir la *direction* où nous devons aller afin de corriger au mieux les poids qui composent notre système. 

<h2>Correction des poids</h2>

Une fois l'erreur déterminée, nous allons pouvoir, à partir de celle-ci, déterminer la nouvelle valeur du poids. Pour ce faire, nous allons appliquer la formule suivante :

<center>
![Screenshot from 2018-07-16 09-48-11.png](https://ipfs.busy.org/ipfs/QmXja9sfKPGsJ1QD8irtjtwU9xbGcnnZRV9BMh8EJX6Uoq)
</center>

Ici, nous faisons intervenir λ, qui correspond au taux d'apprentissage. Ce taux d'apprentissage est généralement très petit 0.01 voir moins. Cela va permettre de converger vers une valeur d'un poids optimal. Si nous ne faisons pas intervenir de taux d'apprentissage, la valeur va directement s'adapter à notre donnée. Cependant, nous voulons que notre système soit général. Pour imager, nous pouvons prendre le cas d'un classificateur d'animaux. Si je prends l'image d'un chien, j'aimerais que mon système détermine des caractéristiques propres au chien (museau, 4 pattes ...). En revanche, si j'ai un cas particulier d'un chien qui à, par exemple, des tâches sur son pelage, je ne veux pas que mon système prenne en compte ces tâches comme étant une caractéristique majeure. Ainsi, le taux d'apprentissage me permet de résoudre ce problème. 

Une fois la nouvelle valeur du poids trouvée, il ne me reste plus qu'à l'appliquer sur mon système. L'une des possibilités que nous pouvons faire est de prendre un lot de données et d'enregistrer pour chacune de ces données le nouveau poids sans l'appliquer sur notre système. Ainsi, nous pouvons faire la moyenne de cet ensemble de poids ce qui permettra à notre système d'être général lors de l'apprentissage. De plus, afin d'avoir un système optimal, il nous faut l'entraîner sur énormément de données. 

<h2>Problème de recherche</h2> 

Lorsque nous cherchons la valeur du nouveau poids, nous avons parlé du taux d'apprentissage qui détermine le pas du déplacement. Ce que nous cherchons, c'est une valeur du poids dont l'erreur est la plus basse. L'un des problèmes que nous pouvons rencontrer et si on se situe dans un minimum local. Le problème est que nous voulons le minimum global et non un minimum local.

<center>
![Extrema_example_original.svg.png](https://ipfs.busy.org/ipfs/QmUzrtXxb6mpFtW5iQytzPjH8VT7FXbJ6NzPUiBKzzRwsR)

Source de l'image : commons.wikimedia.org/wiki/File:Extrema_example.svg
Illustration du problème de recherche. 
</center>

Nous avons aussi des problèmes liées à une valeur du taux d'apprentissage trop petit ou trop grand. En effet, si le taux d'apprentissage et trop grand, la valeur du poids, va toujours fluctuer. En revanche, si la valeur du taux d'apprentissage est trop petite, la valeur du poids va mettre énormément de temps afin de converger. 

<center>
![Screen-Shot-2018-02-24-at-11.47.09-AM.png](https://ipfs.busy.org/ipfs/QmTMFhN9FXMB8MEy4DH3wwckifqX21sufHQksepuTdFUrQ)
Source de l'image : https://www.jeremyjordan.me/nn-learning-rate/
Illustration du problème du taux d'apprentissage.
</center>


</center>

<h2>Résumé</h2>

Durant la phase d'entraînement, nous allons chercher à améliorer notre système. Pour ce faire, nous allons, dans un premier temps, propager notre donnée dans notre système. Par la suite, nous allons obtenir un score que nous allons comparer à ce que l'on aurait aimé obtenir. Une fois l'erreur obtenue, nous allons rétro-propager cette erreur sur l'ensemble de notre système. Enfin, nous allons modifier la valeur de notre poids afin de minimiser cette erreur.

<br />

Dans cet article, nous avons vu une méthode de rétro-propagation. Il en existe d'autres qui vont s'adapter en fonction du cas d'application que nous allons avoir. 

<br />

Dans un prochain article, nous aborderons les réseaux de neurones à convolution. On utilise ce type de réseau dans le traitement des images. N'hésitez pas à me donner vos retours sur cet article, que ce soit des corrections à apporter, des questionnements... Merci pour votre temps de lecture. 


<h2>Aller plus loin :</h2>
- https://fr.wikipedia.org/wiki/R%C3%A9tropropagation_du_gradient
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 152 others
properties (23)
post_id56,693,876
authorrerere
permlinkcomment-fonctionne-un-reseau-de-neurones-retro-propagation
categoryfr
json_metadata{"users":["rerere"],"image":["https:\/\/ipfs.busy.org\/ipfs\/QmUarhEZdbdWH9iChVPWUZwB8cQeEXzziTRheqghUrDhmL"],"tags":["fr","science","technology","francostem","steemstem"],"app":"busy\/2.5.2","community":"busy","links":["https:\/\/pixabay.com\/en\/artificial-intelligence-brain-think-3382514\/","https:\/\/steemit.com\/fr\/@rerere\/comment-fonctionne-un-reseau-de-neurones-propagation-1","https:\/\/www.jeremyjordan.me\/nn-learning-rate\/","https:\/\/fr.wikipedia.org\/wiki\/R%C3%A9tropropagation_du_gradient"],"format":"markdown"}
created2018-07-16 08:21:30
last_update2018-07-16 08:22:33
depth0
children2
net_rshares14,677,176,537,595
last_payout2018-07-23 08:21:30
cashout_time1969-12-31 23:59:59
total_payout_value23.849 SBD
curator_payout_value7.774 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length6,725
author_reputation5,933,805,862,753
root_title"Comment fonctionne un réseau de neurones ? - Rétro-propagation #2"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
author_curate_reward""
vote details (216)
@steemstem ·
post_voted_by
<center> https://cdn.discordapp.com/attachments/354723995037466624/463380522928963599/steemSTEM.png</center> <br><br> This post has been voted on by the steemstem curation team and voting trail.  <br> <br>There is more to SteemSTEM than just writing posts, check <a href="https://steemit.com/steemstem/@steemstem/being-a-member-of-the-steemstem-community">here</a> for some more tips on being a community member. You can also join our discord <a href="https://discord.gg/BPARaqn">here</a> to get to know the rest of the community!
properties (22)
post_id56,874,057
authorsteemstem
permlinkre-comment-fonctionne-un-reseau-de-neurones-retro-propagation-20180717t224445
categoryfr
json_metadata{}
created2018-07-17 22:44:45
last_update2018-07-17 22:44:45
depth1
children0
net_rshares0
last_payout2018-07-24 22:44:45
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length530
author_reputation229,673,617,633,863
root_title"Comment fonctionne un réseau de neurones ? - Rétro-propagation #2"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@utopian-io ·
#### Hi @rerere!

Your post was upvoted by utopian.io in cooperation with steemstem - supporting knowledge, innovation and technological advancement on the Steem Blockchain.

#### Contribute to Open Source with utopian.io
Learn how to contribute on <a href="https://join.utopian.io">our website</a> and join the new open source economy.

**Want to chat? Join the Utopian Community on Discord https://discord.gg/h52nFrV**
properties (22)
post_id56,874,119
authorutopian-io
permlink20180717t224537464z
categoryfr
json_metadata{"app":"utopian-io","tags":["utopian.tip"]}
created2018-07-17 22:45:39
last_update2018-07-17 22:45:39
depth1
children0
net_rshares0
last_payout2018-07-24 22:45:39
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length420
author_reputation152,913,012,544,965
root_title"Comment fonctionne un réseau de neurones ? - Rétro-propagation #2"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000