Spaces:
Running
Running
import streamlit as st | |
st.set_page_config(layout="wide") | |
from streamlit_extras.switch_page_button import switch_page | |
st.markdown(""" | |
## Modèles de récompense | |
### Qu'est-ce qu'un modèle de récompense ? | |
Les modèles de récompense apprennent à prédire un score à partir d'annotations humaines pour des paires instructions-générations données. L'objectif final est qu'ils fassent des prédictions alignées sur les préférences humaines. | |
Une fois entraînés, ces modèles peuvent être utilisés pour améliorer d'autres modèles, en agissant comme une fonction de récompense qui est une approximation du jugement humain.""", unsafe_allow_html=True) | |
st.markdown(""" """) | |
st.markdown(r""" | |
##### Score par paire | |
Le type de modèle de récompense le plus courant est le modèle de Bradley-Terry, qui produit un score unique, comme suit : $p(\text{la génération b est meilleure que la génération a}) = \text{sigmoïde}(\text{score}_b - \text{score}_a)$ | |
Ce modèle est entraîné en utilisant uniquement des générations car elles sont plus faciles à collecter que les scores. Cependant il ne peut comparer que plusieurs générations issues d'une même instruction et non des générations issues d'instructions différentes. | |
D'autres modèles ont étendu cette approche afin de prédire une probabilité plus nuancée qu'une génération soit meilleure qu'une autre ([exemple](https://huggingface.co/RLHFlow/pair-preference-model-LLaMA3-8B)). | |
Cela permet (théoriquement) de juger des différences subtiles entre les générations, au prix de l'impossibilité de sauvegarder et de comparer facilement de nombreux scores issus de différentes instructions pour un même jeu de test. En outre, la longueur du contexte et les limites de la mémoire peuvent devenir un problème lorsqu'il s'agit de comparer des générations trop longues. | |
""", unsafe_allow_html=True) | |
st.markdown(""" """) | |
st.markdown(""" | |
##### Score absolu | |
Certains modèles de récompense tels que [SteerLM](https://arxiv.org/abs/2311.09528) produisent des scores absolus, pouvant être utilisés pour évaluer directement les générations sans que ce soit nécessaire de procéder à des comparaisons par paires. | |
Plus récemment, des modèles ont été proposés ayant comme sortie à la fois des scores absolus et relatifs, tels que [HelpSteer2-Preference](https://arxiv.org/abs/2410.01257) et [ArmoRM](https://arxiv.org/abs/2406.12845). | |
""", unsafe_allow_html=True) | |
st.markdown(""" """) | |
st.markdown(""" """) | |
st.markdown(""" """) | |
st.markdown(""" | |
### Comment utiliser un modèle de récompense pour l'évaluation ? | |
Étant donné un jeu de données d'instructions, nous pouvons effectuer des générations à partir d'un modèle de langage et demander à un modèle de récompense de les noter. | |
Pour les modèles qui donnent des scores absolus, la moyenne des scores obtenus peut être calculée pour obtenir un score récapitulatif raisonnable. | |
Toutefois, dans le cas plus courant de scores relatifs, la récompense moyenne peut être faussée par des valeurs aberrantes (quelques très bonnes ou très mauvaises réponses), étant donné que les différentes instructions peuvent avoir des échelles de récompense intrinsèquement différentes (certaines instructions sont beaucoup plus difficiles ou faciles que d'autres). | |
Au lieu de cela, nous pouvons utiliser : | |
- les **taux de victoire**<br>Prenez un ensemble de données de référence et calculez le pourcentage de générations du modèle qui sont mieux classées que les données de référence. Cette méthode est légèrement plus granulaire. | |
- les **probabilités de victoire**<br>La probabilité moyenne que les générations soient meilleures que les données de référence, ce qui peut donner un signal plus fin et plus régulier. | |
""", unsafe_allow_html=True) | |
st.markdown(""" """) | |
st.markdown(""" """) | |
st.markdown(""" """) | |
st.markdown(""" | |
### Avantages et inconvénients des modèles de récompense | |
Les modèles de récompense ont l'avantage d'être généralement ➕ : | |
- **Très rapides**<br>L'obtention d'un score est aussi simple que l'exécution d'une passe avant d'un modèle relativement petit (puisque nous n'obtenons qu'un score, et non un texte long, contrairement aux *LLM-as-a-judge*). | |
- **Déterministes**<br>Les mêmes scores seront reproduits par la même passe avant. | |
- **Peu susceptibles de souffrir d'un biais de position**<br>Comme la plupart des modèles ne prennent qu'une seule génération, ils ne peuvent pas être influencés par l'ordre. | |
Pour les modèles par paire, le biais de position est souvent minime, tant que les données d'entraînement sont équilibrées en ce qui concerne la présence de la première et de la deuxième réponse comme étant la meilleure. | |
- **Ne nécessitent pas d'ingénierie<br>Puisque le modèle produira simplement un score à partir d'une ou deux générations en fonction des données de préférence sur lesquelles il a été entraîné. | |
En revanche, ils ont comme contrainte de ➖ : | |
- **Nécessiter un *finetuning* spécifique**<br>Cette étape peut être relativement coûteuse, et bien qu'ils héritent de nombreuses capacités du modèle de base choisi, ils peuvent donner de mauvais résultats sur des tâches ne faisant pas partie de la distribution du pré-entraînement. | |
- **Perdre en efficacité lorsqu'ils sont utilisés à la fois en apprentissage par renforcement et en évaluation**<br>De même lorsqu'ils utilisent des algorithmes d'alignement direct sur des jeux de données similaires aux données d'entraînement du modèle de récompense. En effet, le modèle de langage peut s'ajuster de manière excessive aux préférences du modèle de récompense. | |
""", unsafe_allow_html=True) | |
st.markdown(""" """) | |
st.markdown(""" """) | |
st.markdown(""" """) | |
st.markdown(""" | |
### Conseils et astuces pour l'utilisation des modèles de récompense pour de l'évaluation | |
- Le [*RewardBench Leaderboard*](https://huggingface.co/spaces/allenai/reward-bench) est un bon endroit pour trouver les modèles les plus performants. | |
- Vous pouvez examiner la manière dont les modèles de récompense ont été utilisés dans le papier du [Nemotron](https://arxiv.org/abs/2406.11704). | |
- Pour les modèles de récompense qui évaluent des instructions et des générations uniques, vous pouvez mettre en cache les scores de nombreux modèles de référence et voir facilement les performances d'un nouveau modèle. | |
- Traquez les taux/probabilités au cours de l'entraînement, peut vous permettre de détecter la dégradation du modèle et de sélectionner des *checkpoints* optimaux (cf. ce [papier](https://arxiv.org/abs/2410.11677v1)). | |
""", unsafe_allow_html=True) | |
st.markdown(""" """) | |
st.markdown(""" """) | |
st.markdown(""" """) | |
col1, col2, col3= st.columns(3) | |
with col1: | |
if st.button('Section précédente', use_container_width=True): | |
switch_page("IV.4._Évaluer votre évaluateur") | |
with col2: | |
if st.button("Accueil", use_container_width=True): | |
switch_page("Home") | |
with col3: | |
if st.button("Section suivante", use_container_width=True): | |
switch_page("IV.6._Conseils et astuces") |