关于交叉熵
人工智能吧
全部回复
仅看楼主
level 4
对于交叉熵函数的学习规则,如果输出节点的激活函数是sigmoid,那么增量等于输出误差.
e = d - y;
delta = e;
与前面的示例代码不同,这里不再使用sigmoid函数的导数。
Unlike the previous example code, the derivative of the sigmoid function no longer exists.
这是因为,对于交叉熵函数的学习规则,如果输出节点的激活函数是sigmoid,那么增量等于输出误差。
请问下,这个delta=e是怎么通过sigmoid函数以及交叉熵计算出来的
2021年01月23日 08点01分 1
level 12
交叉熵前的值为y的话,交叉熵为真的那个项的结果的梯度传到前面是-1/y,sigmoid输出也是y,正好在交叉熵前,往前传梯度,sigmoid输入端梯度是y(1-y),对二分类来说,链式传播应相乘,-1/y*y*(1-y)=-(1-y)=y-1,对多分类来说,分析复杂些,但最后结果是仍是y-1,这里y是预测值,楼主那个y是one-hot标签,在对应项上仍应为1,d是预测值,意思是一样的。
2021年01月23日 14点01分 4
交叉熵式为E(-tln(y)),t是所有可能的标签值,y是标签对应的预测值,去掉t为0的,交叉熵可简化为-ln(y),求导结果为-1/y,注意y是交叉熵前sigmoid的输出。
2021年01月23日 14点01分
如果用汉字表示,e=d-y可表达为:反传到激活函数前的梯度或误差,等于激活后标签为真对应的单元的预测值(实际为0~1间的概率表示)减去标签为真对应的单元的真实值(即标签值1)。
2021年01月23日 14点01分
多分类一般可用softmax代替sigmoid层,单算本激活层的从激活输出反传到激活输入的求导结果是一样的,都是y(1-y),y是激活后的输出值。
2021年01月23日 14点01分
e的结果是0~1间的数减1,即-1~0,用此梯度或误差进行修正,如果输出是0,则误差对应为-1,0-(-1)后使得权重最终总驱使输出值趋同于标签的“1”值,如果输出是1,则误差为0,权重基本不变,至于输出在0和1中间则偏0偏1的输出会让误差始终修正权重,最终梯度总会不断减小,1标签对应的预测不断趋于1。
2021年01月23日 15点01分
1