GAT里面的sofamax函数的实现:

文章探讨了GAT中的Sofamx函数实现,强调了处理指数增长可能导致的数值溢出问题,通过先找出输入向量的最大值并减去,以避免上溢出。作者还比较了直接对一组数求softmax和先减去最大值后再求softmax的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.sofamx 公式:

2. GAT里的sofamax函数的实现:

 1.

因为指数在x轴正轴爆炸式地快速增长,如果zi比较大,exp⁡(zi)也会非常大,得到的数值可能会溢出。溢出又分为下溢出(Underflow)和上溢出(Overflow)。计算机用一定长度的二进制表示数值,数值又被称为浮点数。当数值过小的时候,被四舍五入为0,这就是下溢出;当数值过大,超出了最大界限,就是上溢出。

一个简单的办法是,先求得输入向量的最大值,然后所有向量都减去这个最大值:

2.问题是:一组数直接求softmax,和这组数取出最大值后,每个数逐个减去最大值然后求softmax的结果是一样吗? 

3. 

#下面就是GATConv中softmax的实现,就是这种防止计算上溢的实现方式

N = maybe_num_nodes(index, num_nodes)
src_max = scatter(src, index, dim, dim_size=N, reduce='max')
src_max = src_max.index_select(dim, index)
out = (src - src_max).exp()
out_sum = scatter(out, index, dim, dim_size=N, reduce='sum')
out_sum = out_sum.index_select(dim, index)

 参考:

三分钟读懂Softmax函数 - 知乎 (zhihu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值