-
在用
tensorflow
实现逻辑回归时,看损失函数的推导公式让人疑惑,下面我就来解读一下。-
1、必须先知道的是:
tensorflow
中的tf.log()
函数,不是以2为底的,是以e为底的。看。。。
-
2、接下来再看推导就清楚了。。。下面推导也就是
tf.nn.sigmoid_cross_entropy_with_logits
的封装。 -
3、推导如下:假设
x
是预测输出的值,还未经过Sigmoid
函数映射,z
为真实的标签值。x = logits,z=labelsz * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x)) = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x))) = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x))) = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x)) = (1 - z) * x + log(1 + exp(-x)) = x - x * z + log(1 + exp(-x))
- 公式中有很多人疑惑为什么
-log(exp(-x))=x
,知道了tensorflow
中的log
其实是ln
是不是很清楚了呢。。。 - 上述公式中,为了避免
x<0
时,exp(-x)
溢出的问题,采用下面的变形。变形中的x=log(exp(x))
是不是也就很清楚了呢。。。
x - x * z + log(1 + exp(-x)) = log(exp(x)) - x * z + log(1 + exp(-x)) = - x * z + log(1 + exp(x))
- 这样就解决了
x<0
时的溢出问题,将上面两个公式用一个统一的公式来表达,就是下面的公式,也就是最终的公式如下:max(x, 0) - x * z + log(1 + exp(-abs(x)))
- 公式中有很多人疑惑为什么
-
详解逻辑回归中令人疑惑的损失函数的推导
最新推荐文章于 2023-12-03 19:30:28 发布