
[NeurIPS 2025] Un code source officiel pour l'article « GuardReasoner-VL: Safeguarding VLMs via Reinforced Reasoning ».
Yue Liu, Shengfang Zhai, Mingzhe Du
Yulin Chen, Tri Cao, Hongcheng Gao, Cheng Wang
Xinfeng Li, Kun Wang, Junfeng Fang, Jiaheng Zhang, Bryan Hooi
1National University of Singapore, 2Nanyang Technological University
Pour renforcer la sécurité des VLM, cet article présente un nouveau modèle de garde-fou pour VLM basé sur le raisonnement, baptisé GuardReasoner-VL. L'idée centrale est d'inciter le modèle de garde-fou à raisonner délibérément avant de prendre des décisions de modération via le RL en ligne. Premièrement, nous construisons GuardReasoner-VLTrain, un corpus de raisonnement comprenant 123K échantillons et 631K étapes de raisonnement, couvrant des entrées texte, image et texte-image. Ensuite, sur cette base, nous amorçons la capacité de raisonnement de notre modèle via SFT. De plus, nous améliorons encore le raisonnement lié à la modération grâce au RL en ligne. Concrètement, pour accroître la diversité et la difficulté des échantillons, nous effectuons un échantillonnage par rejet suivi d'une augmentation de données via la concaténation de données sensible à la sécurité que nous proposons. Par ailleurs, nous utilisons un paramètre de clipping dynamique pour encourager l'exploration aux premières étapes et l'exploitation aux étapes suivantes. Pour équilibrer performance et efficacité des tokens, nous concevons une récompense de sécurité sensible à la longueur qui intègre la précision, le format et le coût en tokens. Des expériences approfondies démontrent la supériorité de notre modèle. Remarquablement, il dépasse le deuxième de 19,27 % de score F1 en moyenne.
Figure 1: Aperçu de GuardReasoner-VL.
Pour évaluer GuardReasoner-VL, exécutez le code suivant.
python ./evaluate.py
Les résultats sont stockés dans le fichier result.csv.
Performance of GuardReasoner-VL (GuardReasoner-VL-7B):
ToxicChat ,HarmBenchPrompt ,OpenAIModeration ,AegisSafetyTest ,SimpleSafetyTests ,WildGuardTest ,Average (Text) ,HarmImageTest ,SPA-VL-Eval ,Average (All)
76.51 ,98.30 ,70.98 ,90.13 ,98.99 ,88.35 ,79.88 ,70.84 ,85.60 ,79.07
HarmBenchResponse ,SafeRLHF ,BeaverTails ,XSTestReponseHarmful,WildGuardTest ,Average (Text) ,SPA-VL-Eval ,Average (All)
87.22 ,66.37 ,84.76 ,92.72 ,79.04 ,79.42 ,73.22 ,77.58
Performance of GuardReasoner-VL (GuardReasoner-VL-Eco-7B):
ToxicChat ,HarmBenchPrompt ,OpenAIModeration ,AegisSafetyTest ,SimpleSafetyTests ,WildGuardTest ,Average (Text) ,HarmImageTest ,SPA-VL-Eval ,Average (All)
76.26 ,98.73 ,70.82 ,90.34 ,99.50 ,88.54 ,79.82 ,64.84 ,85.26 ,77.49
HarmBenchResponse ,SafeRLHF ,BeaverTails ,XSTestReponseHarmful,WildGuardTest ,Average (Text) ,SPA-VL-Eval ,Average (All)
86.22 ,66.15 ,85.51 ,93.33 ,78.60 ,79.51 ,70.81 ,76.94
Performance of GuardReasoner-VL (GuardReasoner-VL-3B):
ToxicChat ,HarmBenchPrompt ,OpenAIModeration ,AegisSafetyTest ,SimpleSafetyTests ,WildGuardTest ,Average (Text) ,HarmImageTest ,SPA-VL-Eval ,Average (All)
74.45 ,89.10 ,70.83 ,88.79 ,99.50 ,88.92 ,78.77 ,70.93 ,86.47 ,78.73
HarmBenchResponse ,SafeRLHF ,BeaverTails ,XSTestReponseHarmful,WildGuardTest ,Average (Text) ,SPA-VL-Eval ,Average (All)
85.76 ,66.37 ,85.16 ,93.08 ,76.07 ,78.83 ,71.19 ,76.56
Performance of GuardReasoner-VL (GuardReasoner-VL-Eco-3B):
ToxicChat ,HarmBenchPrompt ,OpenAIModeration ,AegisSafetyTest ,SimpleSafetyTests ,WildGuardTest ,Average (Text) ,HarmImageTest ,SPA-VL-Eval ,Average (All)
73.47 ,88.58 ,70.87 ,89.04 ,99.50 ,89.16 ,78.43 ,66.79 ,85.82 ,77.39
HarmBenchResponse ,SafeRLHF ,BeaverTails ,XSTestReponseHarmful,WildGuardTest ,Average (Text) ,SPA-VL-Eval ,Average (All)
84.72 ,66.96 ,85.39 ,93.59 ,77.39 ,79.31 ,72.01 ,77.14
Figure 2: Performance moyenne de GuardReasoner-VL sur les benchmarks de garde-fous multi-modaux.
Tableau 1: Performance de la tâche de détection de nocivité des prompts.
Tableau 2: Performance de la tâche de détection de nocivité des réponses.
Pour reproduire le processus de génération de GuardReasoner-VL, exécutez le code suivant.
bash test.sh
Pour utiliser GuardReasoner-VL, exécutez le code suivant.
CUDA_VISIBLE_DEVICES=0 python deploy.py
Pour reproduire le processus d'entraînement de GuardReasoner, voir pipeline d'entraînement.
Notre méthode s'appuie en partie sur les ressources suivantes. Merci pour leurs excellents travaux.
Si vous trouvez ce dépôt utile, veuillez citer notre article.
@article{GuardReasoner,
title={GuardReasoner: Towards Reasoning-based LLM Safeguards},
author={Liu, Yue and Gao, Hongcheng and Zhai, Shengfang and Jun, Xia and Wu, Tianyi and Xue, Zhiwei and Chen, Yulin and Kawaguchi, Kenji and Zhang, Jiaheng and Hooi, Bryan},
journal={arXiv preprint arXiv:2501.18492},
year={2025}
}
@article{GuardReasoner-VL,
title={GuardReasoner-VL: Safeguarding VLMs via Reinforced Reasoning},
author={Liu, Yue and Zhai, Shengfang and Du, Mingzhe and Chen, Yulin and Cao, Tri and Gao, Hongcheng and Wang, Cheng and Li, Xinfeng and Wang, Kun and Fang, Junfeng and Zhang, Jiaheng and Hooi, Bryan},
journal={arXiv preprint arXiv:2505.11049},
year={2025}
}