- Présentation du concept du type
Uncertain<T>, une nouvelle abstraction pour gérer l’incertitude au niveau du code
- Ce type applique une approche de programmation probabiliste afin de modéliser la confiance ou la possibilité d’une valeur, au lieu de la logique booléenne traditionnelle
- Il permet de traiter des données réelles bruitées comme le GPS ou les données de capteurs sous forme de distributions de probabilité mathématiques
- Il prend en charge un équilibre entre efficacité de calcul et fiabilité des résultats grâce à des techniques d’échantillonnage comme le SPRT et les méthodes de Monte Carlo
- Son intégration progressive avec le code existant en fait une solution très applicable en pratique
Encoder l’incertitude : l’écart entre la confiance et les données du monde réel
- Le texte évoque la tendance de nombreuses personnes à trop s’appuyer sur la certitude
- Il souligne qu’avec l’expérience en développement logiciel, on dit de plus en plus souvent « cela dépend du contexte »
- Pourtant, dans le code, on continue de répéter des schémas fondés uniquement sur des jugements vrai/faux
- Il critique en particulier le fait de n’utiliser que des valeurs booléennes pour traiter des données incertaines comme celles du GPS
- Le modèle de programmation binarise trop vite l’« incertitude » du réel et en masque ainsi la complexité
Choisir la bonne abstraction
- En 2014, l’University of Washington et Microsoft Research ont proposé un concept qui reflète directement l’incertitude dans le système de types
- L’article « Uncertain<T>: A First-Order Type for Uncertain Data » a démontré le caractère pratique d’une approche de programmation probabiliste
- Un portage du concept en Swift a été publié dans un dépôt GitHub
- Avec
Uncertain<T>, le résultat des comparaisons s’exprime lui aussi comme une probabilité relative et renvoie un Uncertain<Bool> plutôt qu’une simple valeur vrai/faux
- Les erreurs de position GPS sont modélisées selon les caractéristiques des données réelles, par exemple avec une distribution de Rayleigh
La réalité des différentes opérations sur l’incertitude
- Le système prend en charge plusieurs opérateurs et modèles de distributions de probabilité, construit un graphe d’opérations et n’exécute l’échantillonnage que lorsque c’est nécessaire
- Il utilise le SPRT (Sequential Probability Ratio Testing) pour ajuster efficacement le nombre d’échantillons
- Les exemples de code expliquent la différence de nombre d’échantillons nécessaires entre une comparaison simple et une comparaison composée
- Cette abstraction permet de ne pas ignorer l’incertitude et de l’exploiter naturellement dans le calcul, afin d’écrire un code plus « intelligent »
Application de la méthode de Monte Carlo
- Un échantillonnage Monte Carlo est introduit pour l’analyse des distributions de probabilité et l’estimation des valeurs attendues
- En pratique, on peut obtenir facilement une espérance en simulant de manière répétée le résultat d’une machine à sous
- Même sans calcul analytique complexe, de simples échantillonnages répétés par ordinateur permettent d’obtenir des résultats réalistes
Une modélisation riche des distributions de probabilité
Uncertain<T> intègre divers constructeurs de distributions de probabilité, ce qui permet de modéliser finement des données du monde réel comme le bruit des capteurs, le comportement utilisateur ou la latence réseau
- Il prend en charge la paramétrisation selon les cas pour plusieurs distributions, notamment mixture, Bernoulli, exponential et normal
- Un projet de visualisation interactif est également proposé pour aider à comprendre intuitivement chaque distribution
Fonctions statistiques et analytiques fournies
- Le système fournit de nombreuses fonctions statistiques : espérance, écart-type, intervalle de confiance, asymétrie (skewness), kurtosis, entropie, etc.
- Les résultats peuvent être calculés avec un nombre d’échantillons ajustable, ce qui permet un compromis entre précision et efficacité
- Il est également facile de calculer la probabilité qu’une valeur soit inférieure ou égale à un certain seuil à l’aide de la fonction de répartition cumulative (CDF)
Guide d’application au monde réel
- Le texte explique les problèmes concrets qui peuvent survenir dans une app quand l’incertitude est ignorée (par exemple une vitesse GPS manifestement absurde)
- Il insiste sur une transition progressive : il est recommandé d’intégrer
Uncertain<T> d’abord de manière partielle, à partir de parcours critiques comme la mesure de distance
- Il est possible d’ajuster l’équilibre entre précision et performance via des paramètres de coût de calcul, comme le nombre d’échantillons
- En pratique, il recommande d’utiliser activement des outils de profiling comme Instruments.app
- L’objectif n’est pas d’éliminer l’incertitude, mais de reconnaître son existence et d’adopter des schémas de développement adaptés
Conclusion et perspectives
- Les développeurs peuvent introduire la gestion de l’incertitude à petite échelle pour commencer, avec l’espoir d’améliorer l’utilisabilité et d’atténuer les erreurs
- Accepter qu’une certitude totale n’existe pas permet d’élever d’un cran la qualité logicielle grâce à des outils et des abstractions adaptés
- En pratique, bien traiter l’incertitude qui existe réellement constitue la véritable amélioration utile sur le terrain
1 commentaires
Avis Hacker News
y = m * x + b: lorsque tout n’est que littéraux, ce n’est qu’une simple fonction de rendu. Mais si les variables contiennent toute la structure du chemin de calcul dont elles sont issues, alors selon le sens du calcul on peut soit prédire la valeur pour produire un rendu (forward pass), soit calculer automatiquement gradients et dérivées pour aller jusqu’à l’entraînement d’un réseau neuronal. En échantillonnant mathématiquement ces résultats, on peut obtenir les poids qui forment le modèle. Chaque couche du deep learning est conçue de cette manière, et des systèmes comme PyTorch peuvent compiler de manière optimale le simple fait de décrire la composition des opérations. Autrement dit, Uncertain<T> n’est qu’un point de départ ; si l’on imagine que toute variable numérique peut à tout moment être définie par des métadonnées représentant des valeurs candidates, et que ces métadonnées peuvent être manipulées aussi facilement qu’on additionne des valeurs, cela devient une expérimentation extrêmement intéressante.10cm +8mm/-3mm, en indiquant clairement la plage admissible vers le haut et vers le bas. Pour une question fondée sur le GPS comme « est-ce qu’on est presque arrivés ? », il semble aussi important de comprendre la direction de l’erreur et de distinguer les cas meilleurs ou pires selon la « direction » de l’incertitude.(-2,2)*(-2,2)avec la bibliothèque Boost, on obtient(-4,4), alors qu’en pratique les valeurs extrêmes ont bien moins de chances de se produire simultanément ; quelque chose comme(-2.35,2.35)serait donc plus réaliste.certain Tséparément que dans les cas vraiment certains.