用故事解释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之前,先减去最大值,这样所有的数值都会变小,防止指数爆炸。
?就像往水池倒水、往锅里加热,数值太大就会溢出,我们需要先做调整,确保计算不超出范围!
请勿开启浏览器阅读模式,否则将导致章节内容缺失及无法阅读下一章。
相邻推荐:边城崛起 黑白妖娆 穿越之他是我爸! 为你夺下江山你却拱手相让 都高武了,能动手绝不动嘴! 记忆审判:她不要你们了 暗巷1:黑白 无尽冒险 千秋客 说我修魔,污蔑竟然成真了 申公豹转世 重生穿越机甲 慕总别作了,少奶奶都被您作没了 师弟,你太强了,饶了我们吧 我一直都在!!! 快穿我们的宗旨是甜甜甜 在异能调查处上班摸鱼 足球系统之进球就变强 穿越后,反派亲妈爆红了 带全家逃难!她让荒山变万亩良田