argmax是不可导的,因为argmax(x1,x2)的取值是0 if x1>x2, 1 if x2>x1,并且只要x1和x2不相等,那么对x1和x2进行一个很微小的变化,argmax的值是不发生变化的,因此这个时候argmax的梯度对于x1和x2都是0,当x1等于x2的时候,梯度值有一个会突然的由0变成1。
其实任何指定类的函数都是不可导的,因为argmax强行指定一个onehot下标.。如果能把这个onehot下标变成一个分布就是可导的,因为这样的话x1和x2的变化会传递到函数值的变化上去。
max(x1,x2)虽然在x1==x2的时候是不可导的(因为计算机的实现是随机的),但是其他点处,函数的值是x1,或者x2,并且x1,或者x2的微小移动是可以改变max的函数值的,因此对于x1,x2的梯度要么是(0,1)要么是(1,0),可以看到梯度总是存在的,即训练最大的那个数对应的梯度。
argmax和max的可导性
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
