ax函數的溢出問題
故事背景:龍族宴會上的金碗
在一座神秘的龍族王國,龍族每年都會舉行一次盛大的宴會,宴會上有一個傳統:每條龍要把自己的財富金幣數量)放進一個金碗,然後讓智慧長老計算每條龍的“財富占比”,來決定誰是這一年的財富之王。
宴會當天,四條龍分彆報出了自己的金幣數量:
?火龍:100萬金幣
?冰龍:200萬金幣
?雷龍:300萬金幣
?風龍:10億金幣ax規則,將這些財富轉換成概率來比較。但他很快發現了一個嚴重的問題:
ax的計算方法,他需要計算每個金幣數量的指數值:
但這些數值實在是太大了,遠遠超出了王國的計算能力,直接導致金碗崩潰計算溢出)。
智慧長老陷入了困境,他需要找到一個方法來避免計算崩潰。於是他想到一個聰明的技巧:
“我們不直接放金幣,我們可以先讓大家的金幣數減去最大的金幣數!”
於是,他重新計算:
?火龍的金幣數變為100萬10億=9.99億
?冰龍的金幣數變為200萬10億=9.98億
?雷龍的金幣數變為300萬10億=9.97億
?風龍的金幣數變為10億10億=0
然後,他計算:
現在,所有的指數值都變得很小,不會再溢出,金碗終於能正常計算了!
最終,風龍的財富占比幾乎是100,其他三條龍的財富占比接近0,宴會得出了正確的結論。ax的數值穩定性技巧,即在計算前減去最大值,防止指數運算導致溢出。ax的溢出問題
比喻1:水池溢出
想象你有一個大水池,你往裡麵倒水:
?第一桶水是100升
?第二桶水是200升
?第三桶水是300升
?第四桶水是10億升
顯然,水池無法承受10億升的水,直接溢出了!
解決方案?
?你先抽掉10億升的水相當於減去最大值),這樣所有的水量都變成一個較小的數字,水池就不會溢出了。
比喻2:計算機的“溢出”鍋
假設你在做飯,想同時煮四個鍋的水,每個鍋的溫度分彆是:
?100°c
?200°c
?300°c
?10億°c
你的爐子最高隻能加熱到500°c,但第四個鍋的溫度遠超這個上限,直接導致爐子爆炸計算機溢出)!
怎麼辦?
你可以先把所有鍋的溫度減去一個基準值比如減去10億°c),讓溫度變成:
?9.99億°c
?9.98億°c
?9.97億°c
?0°c
現在,最高的溫度也隻是0°c,不會再超出爐子的承受範圍。ax的溢出問題是因為指數運算會導致數值過大,超過計算機的上限。ax之前,先減去最大值,這樣所有的數值都會變小,防止指數爆炸。
?就像往水池倒水、往鍋裡加熱,數值太大就會溢出,我們需要先做調整,確保計算不超出範圍!
喜歡職場小聰明請大家收藏:()職場小聰明書更新速度全網最快。