#### TALB520D
## Méthodes en apprentissage automatique
### Séance 2
#### 2 février 2023
----
Plan de la séance
- Corrections
- Un peu de théorie
- Quelques mots sur la loss
- Goldberg (ch2)
- Beaucoup de pratique
- passage à 6 langues
- passage à tous (?) les n-grammes
- TextVectorizer
- Comparer à une approche par token (avec ou sans normalisation)
---
## Corrections
- rendre à l'heure !
- et sur moodle
- sklearn autorisé
---
## Au delà du perceptron
(Comment construire ces modèles ?)
### Modèle 1

----
### Modèle 2
plus large

----
### Modèle 3
plus «profond»: le Perceptron multicouche

Comment entraîner ça ?
---
## Choix d'une fonction de loss
#### Est-ce nécessaire pour classifier en plus de deux langues ?
---
### Understanding how deep learning works, in three figures
(cf. Chollet 1.1.5)

---

ex: MSE, ( puis binary cross-entropy, categorical cross-entropy)
---

---
### Quelques exemples
**MSE**
$$ MSE = \frac{1}{n} \sum_{i=1}^{n}(Y_i - \hat{Y}_i)^2 $$
«erreur quadratique moyenne» (Mean Squared Error), ici une formule globale qui retourne un score sur tout le jeu de données.
---
### Quelques exemples
On a utilisé sans commenter la *binary crossentropy* (ou *logistic loss*).
L'idée est de voir la sortie $\hat{Y}$ du classifieur comme une probabilité
$$ \hat{Y} \approx P(Y = 1 | x) $$
---
Dans l'exemple du TP, on considère juste la probabilité qu'un document soit en anglais $P(Y=eng)$.
et on peut retrouver l'allemand simplement
$$P(Y=deu) = 1 - P(Y= eng) $$
---
### Logistic loss (binary cross entropy)
la *logistic loss* est définie pour maximiser $P(Y=1|x)$ sur l'ensemble du jeu de données
$$ L_{BCE}(\hat{Y},Y) = -Y log(\hat{Y}) - (1 - Y) log(1 - \hat{Y})$$
- Pour utiliser cette fonction, il faut donc que la sortie du réseau finisse par une activation par la fonction **sigmoïde**.
- il faut aussi que les labels soient 0 ou 1
---
### Hinge binary loss
on peut la comparer à la *logistic loss* (les deux permettent une classification binaire)
$$L_{hinge}(Y,\hat{Y}) = max(0, 1 - Y \times \hat{Y}) $$
- vaut 0 si $y$ et $\hat{y}$ ont le même signe
- $\rightarrow$ suppose que $y \in \{+1,-1\}$
---
#### Categorical cross entropy
- classification non binaire
- il faut que $y$ soit un vecteur qui représente une distribution de probabilités sur les labels possibles
$$ L_{CCE}(Y,\hat{Y}) = -\sum_{i} Y_{[i]}log(\hat{Y}_{[i]}) $$
- on utilise pour cela une activation **softmax**
----
### Points importants
Il faut toujours s'assurer que
- la représentation du résultat attendu,
- et le format de sortie du réseau
sont compatibles avec la fonction de loss choisie
---
#### Pour plus de détails
- Vidéo en lien sur le Moodle illustrant la BCE,
- Goldberg, Chapitre 2 (sur Moodle) décrit quelques fonctions de loss,
- [Documentation des loss en Keras](https://keras.io/api/losses/)
---
## Exercice (I)
- changer le code de la semaine dernière pour:
- utiliser une loss de type **Hinge**
- utiliser une loss de type **categorical cross entropy**
- utiliser une loss de type **Sparse Categorical Cross Entropy** (voir la doc de Keras)
---
## Exercice (II)
- passage à 6 langues
- changer l'input pour extraire tous les n-grammes possibles du corpus
- évaluation plus propre avec distinction train/dev/test !
- faire sans, puis avec [TextVectorization](https://keras.io/api/layers/preprocessing_layers/core_preprocessing_layers/text_vectorization/)
{"metaMigratedAt":"2023-06-17T19:47:14.277Z","metaMigratedFrom":"YAML","title":"Talk slides template","breaks":true,"description":"View the slide with \"Slide Mode\".","contributors":"[{\"id\":\"67044989-3f98-4f73-b3b7-e5286adbb616\",\"add\":4068,\"del\":282}]"}