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的可导性
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...