MENU

Logistic Regression Gradient Descent

March 29, 2019 • Read: 139 • Deep Learning

假设样本只有两个特征$x_1$和$x_2$,为了计算$z$,我们需要输入参数$\omega_1$、$\omega_2$和$b$。计算$z$的公式为$z=\omega_1x_1+\omega_2x_2+b$,回想一下逻辑回归的公式定义:$\hat{y}=a=\sigma(z)$,其中$z=\omega^Tx+b\sigma(z)=\frac{1}{1+e^{-z}}$

损失函数:$L(\hat{y}^{(i)},y^{(i)})=-y^{(i)}log\hat{y}^{(i)}-(1-y^{(i)})log(1-\hat{y}^{(i)})$

代价函数:$J(\omega,b)=\frac{1}{m}\sum_i^mL(\hat{y}^{(i)},y^{(i)})$

$\omega$的修正量为$\omega:=\omega-\alpha\frac{\partial J(\omega,b)}{\partial \omega}$

$b$的修正量为$b:=b-\alpha\frac{\partial J(\omega,b)}{\partial b}$

假设现在只考虑单个样本的情况,单个样本的代价函数定义如下:$L(a,y)=-(ylog(a)+(1-y)log(1-a))$,其中$a$是逻辑回归的输出,$y$是样本的标签值

上图所示,为了使逻辑回归中代价函数$L(a,y)$的值最小,我们需要改变参数$\omega$和$b$。现在我们来讨论通过反向计算导数,首先我们反向计算出代价函数$L(a,y)$关于$a$的导数,在编写代码时,只需要用$da$来表示$\frac{d L(a,y)}{d a}$,通过计算得到$da=\frac{d L(a,y)}{d a}=-\frac{y}{a}+\frac{1-y}{1-a}$。接着再反向一步,在编写Python代码时,你只需要用$dz$来表示代价函数$L$关于$z$的导数$\frac{dL}{dz}$,也可以写成$\frac{dL(a,y)}{dz}$。因为$\frac{dL(a,y)}{dz} = \frac{dL}{dz}=(\frac{dL}{da})·(\frac{da}{dz})$,并且$\frac{da}{dz}=\frac{e^{-z}}{(1+e^{-z})^2}=a·(1-a)$,所以最终得到$dz=\frac{dL}{dz}=(-\frac{y}{a}+\frac{1-y}{1-a})·a(1-a)=a-y$

现在进行最后一步反向推导,也就是计算$\omega$和$b$的变化对代价函数$L$的影响

$$ d\omega_1=x_1·dz=x_1·(a-y)\\ d\omega_2=x_2·dz=x_2·(a-y)\\ db=dz=(a-y) $$

然后,更新

$$ \omega_1=\omega_1-\alpha·d\omega_1\\ \omega_2=\omega_2-\alpha·d\omega_2\\ b=b-\alpha · db $$

这就是关于单个样本实例的梯度下降算法中参数更新一次的步骤

Archives Tip
QR Code for this page
Tipping QR Code
Leave a Comment