用故事解釋softmax函數的溢出問題


    故事背景:龍族宴會上的金碗


    在一座神秘的龍族王國,龍族每年都會舉行一次盛大的宴會,宴會上有一個傳統:每條龍要把自己的財富(金幣數量)放進一個金碗,然後讓智慧長老計算每條龍的“財富占比”,來決定誰是這一年的財富之王。


    宴會當天,四條龍分別報出了自己的金幣數量:


    ? 火龍:100萬金幣


    ? 冰龍:200萬金幣


    ? 雷龍:300萬金幣


    ? 風龍:10億金幣


    智慧長老準備使用一個古老的計算方法——softmax規則,將這些財富轉換成概率來比較。但他很快發現了一個嚴重的問題:


    金碗炸了!


    為什麽?因為按照softmax的計算方法,他需要計算每個金幣數量的指數值:


    但這些數值實在是太大了,遠遠超出了王國的計算能力,直接導致金碗崩潰(計算溢出)。


    智慧長老陷入了困境,他需要找到一個方法來避免計算崩潰。於是他想到一個聰明的技巧:


    “我們不直接放金幣,我們可以先讓大家的金幣數減去最大的金幣數!”


    於是,他重新計算:


    ? 火龍的金幣數變為 100萬 - 10億 = -9.99億


    ? 冰龍的金幣數變為 200萬 - 10億 = -9.98億


    ? 雷龍的金幣數變為 300萬 - 10億 = -9.97億


    ? 風龍的金幣數變為 10億 - 10億 = 0


    然後,他計算:


    現在,所有的指數值都變得很小,不會再溢出,金碗終於能正常計算了!


    最終,風龍的財富占比幾乎是 100%,其他三條龍的財富占比接近 0,宴會得出了正確的結論。


    這個方法被稱為 softmax的數值穩定性技巧,即 在計算前減去最大值,防止指數運算導致溢出。


    用比喻解釋softmax的溢出問題


    比喻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,不會再超出爐子的承受範圍。


    總結


    ? softmax的溢出問題 是因為指數運算會導致數值過大,超過計算機的上限。


    ? 解決方案 是在計算softmax之前,先減去最大值,這樣所有的數值都會變小,防止指數爆炸。


    ? 就像往水池倒水、往鍋裏加熱,數值太大就會溢出,我們需要先做調整,確保計算不超出範圍!

章節目錄

閱讀記錄

職場小聰明所有內容均來自互聯網,繁體小說網隻為原作者翟曉鷹的小說進行宣傳。歡迎各位書友支持翟曉鷹並收藏職場小聰明最新章節