为什么LR模型损失函数使用交叉熵不用均方差?

LR的基本形式如下
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_{\theta}(x)=g\left(\theta^{T} x\right)=\frac{1}{1+e^{-\theta^{T} x}} hθ(x)=g(θTx)=1+eθTx1

假如一元逻辑回归, 那么预测值 y ^ \hat{y} y^
y ^ = σ ( w ⋅ x + b ) \hat{y}=\sigma(w \cdot x+b) y^=σ(wx+b)
其中 σ \sigma σ 是sigmoid 函数

如果使用均方差作为损失函数

C = ( y − y ^ ) 2 2 C=\frac{(y-\hat{y})^{2}}{2} C=2(yy^)2
其中 y ^ \hat{y} y^是模型的预测值, y ^ = σ ( z ) , z = w ⋅ x + b \hat{y}=\sigma(z), z=w \cdot x+b y^=σ(z),z=wx+b, 采用梯度下降的方法对 w w w b b b进行更新,那么就需要将损失函数对这两个参数进行求导:
∂ C ∂ w = ( y ^ − y ) σ ′ ( z ) x = ( y ^ − y ) σ ′ ( z ) x \frac{\partial C}{\partial w}=(\hat{y}-y) \sigma^{\prime}(z) x=(\hat{y}-y) \sigma^{\prime}(z) x wC=(y^y)σ(z)x=(y^y)σ(z)x
∂ C ∂ b = ( y ^ − y ) σ ′ ( z ) x = ( y ^ − y ) σ ′ ( z ) \frac{\partial C}{\partial b}=(\hat{y}-y) \sigma^{\prime}(z) x=(\hat{y}-y) \sigma^{\prime}(z) bC=(y^y)σ(z)x=(y^y)σ(z)
可以看到 w , b w,b w,b的更新速率与当前的预测值sigmoid函数的导数有关,sigmoid的图像如下
为什么LR模型损失函数使用交叉熵不用均方差?_第1张图片
所以,如果当前模型的输出接近0或者1时, σ ′ ( z ) \sigma^{\prime}(z) σ(z)就会非常小,接近0,使得求得的梯度很小,损失函数收敛的很慢。

如果使用交叉熵作为损失函数

对于二分类问题,交叉熵的形式是由极大似然估计下概率的连乘然后求对数得到的:
C = − 1 n ∑ [ y In ⁡ y ^ + ( 1 − y ) In ⁡ ( 1 − y ^ ) ] C=-\frac{1}{n} \sum_{}[y \operatorname{In} \hat{y}+(1-y) \operatorname{In}(1- \hat{y})] C=n1[yIny^+(1y)In(1y^)]
对w求导得
∂ C ∂ w = 1 n ∑ x ( σ ( z ) − y ) \frac{\partial C}{\partial w}=\frac{1}{n} \sum_{} x(\sigma(z)-y) wC=n1x(σ(z)y)
可以看到, w w w的梯度是和当前的预测值与实际值的差有关的,没有受到sigmoid函数导数的影响,且真实值与预测值差别越大,梯度越大,更新的速度也就越快,这正是我们想要的。
如果用的是均方差作为损失函数,求得的梯度受到simoid函数导数的影响

你可能感兴趣的:(机器学习)