我想要一个与此等价的函数:
def softmax(x, tau):
""" Returns softmax probabilities with temperature tau
Input: x -- 1-dimensional array
Output: s -- 1-dimensional array
"""
e_x = np.exp(x / tau)
return e_x / e_x.sum()
它是稳定和健壮的,即对于tau
的小值不会溢出,对于大的x
也不会溢出。由于这将用于计算概率,因此输出的总和应为1。在
换句话说,我传入一些值(和温度),我想要一个概率数组作为输出,用输入和tau“缩放”。在
示例:
^{pr2}$所以当tau接近0时,输出中的最高概率出现在最高元素的位置上。当tau变大时,概率越接近。在
(可选)有关链接答案的问题。在这里,尼尔给出了以下备选方案:
def nat_to_exp(q):
max_q = max(0.0, np.max(q))
rebased_q = q - max_q
return np.exp(rebased_q - np.logaddexp(-max_q, np.logaddexp.reduce(rebased_q)))
但是,这个输出的和不等于1,解释是函数返回的分类分布只有N-1
个自由参数,最后一个是1 - sum(others)
。但是在运行时,我注意到对于长度为3的向量,它返回的是长度为3的向量。那么失踪的那个在哪里?我能让它和上面的例子等价吗?在
为什么这个答案是稳定的?如何从简单的公式softmax
得到这个结果?在
可能相关问题: General softmax但没有温度
目前没有回答
相关问题 更多 >
编程相关推荐