argmax和max的可导性

argmax是不可导的,因为argmax(x1,x2)的取值是0 if x1>x2, 1 if x2>x1,并且只要x1x2不相等,那么对x1x2进行一个很微小的变化,argmax的值是不发生变化的,因此这个时候argmax的梯度对于x1x2都是0,当x1等于x2的时候,梯度值有一个会突然的由0变成1。
其实任何指定类的函数都是不可导的,因为argmax强行指定一个onehot下标.。如果能把这个onehot下标变成一个分布就是可导的,因为这样的话x1x2的变化会传递到函数值的变化上去。
max(x1,x2)虽然在x1==x2的时候是不可导的(因为计算机的实现是随机的),但是其他点处,函数的值是x1,或者x2,并且x1,或者x2的微小移动是可以改变max的函数值的,因此对于x1,x2的梯度要么是(0,1)要么是(1,0),可以看到梯度总是存在的,即训练最大的那个数对应的梯度。

你可能感兴趣的:(argmax和max的可导性)