GAT里面的sofamax函数的实现:

1.sofamx 公式:

GAT里面的sofamax函数的实现:_第1张图片

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

 1.

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

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

GAT里面的sofamax函数的实现:_第2张图片

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

GAT里面的sofamax函数的实现:_第3张图片

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)

你可能感兴趣的:(数据库,GAT)