logistic逻辑回归是比较常用的二分分类,其激活函数适用于各种二分类场景,但是其函数在t极大或者极小的时候趋于饱和会引发梯度消失,影响网络调参使得函数不能很好的收敛
有兴趣的同学可以参阅我的上一篇博客,来参看梯度消失&爆炸的原理:
https://blog.csdn.net/soullines/article/details/94399187
下面来看基于sigmod激活函数的ogistic逻辑回归;
1.logistic激活函数 sigmod & 及其损失函数/成本函数推导
1.logistic激活函数 sigmod & 及其损失函数/成本函数推导
首先我们sigmod函数表达式
y
(
i
)
=
σ
(
ω
T
x
(
i
)
+
b
)
,
w
h
e
r
e
:
σ
(
t
(
i
)
=
ω
T
x
(
i
)
+
b
)
=
1
/
(
1
+
e
−
t
(
i
)
)
y^{(i)} = \sigma(\omega^Tx^{(i)} + b) ,where :\sigma(t^{(i)} = \omega^Tx^{(i) + b}) = 1/(1+e^{-t^{(i)}})
y(i)=σ(ωTx(i)+b),where:σ(t(i)=ωTx(i)+b)=1/(1+e−t(i))
函数图像:
显然这是一个两边饱和的函数:
t = 0 为决策边界,则有
y < 0.5 — y = 0 y < 0.5 — y = 0 y<0.5—y=0
y > 0.5 — y = 1 y > 0.5 — y = 1 y>0.5—y=1
那么我们来设计其 l o s s loss loss函数:
我们应该有这样一个预期 对于y=0时,t应该是趋于最小,这样识别为0的概率最大,识别1的概率最小,反之亦然,也就是 l o s s loss loss越小模型的准确率越高
因为分类涉及到概率,所以
M
S
E
MSE
MSE不再适用
单个实例的损失函数:
l o s s ( y p r e , y ) = − ( y l o g y p r e + ( 1 − y ) l o g ( 1 − y p r e ) ) loss (y^{pre},y) = - (ylogy^{pre} + (1-y)log(1-y^{pre})) loss(ypre,y)=−(ylogypre+(1−y)log(1−ypre))
i f : y = 1 l o s s = − l o g y p r e i f : l o s s = m i n 则 有 l o g y p r e 趋 于 最 大 , 则 t 最 大 if :y = 1 \;loss = -logy^{pre} \; \;if :loss = min 则有logy^{pre}趋于最大,则t最大 if:y=1loss=−logypreif:loss=min则有logypre趋于最大,则t最大
i f : y = 0 l o s s = − l o g ( 1 − y p r e ) i f : l o s s = m i n 则 有 l o g ( 1 − y p r e ) 趋 于 最 大 , 则 t 最 小 if :y = 0\; loss = -log(1-y^{pre}) \;\;if :loss = min 则有log(1-y^{pre})趋于最大,则t最小 if:y=0loss=−log(1−ypre)if:loss=min则有log(1−ypre)趋于最大,则t最小
这样 完全符合预期的要求;
但是成本函数不同于损失函数(是多个损失函数的平均值),不仅仅是针对于一个实例,应该是对一个batch的计算,所以就有
J ( ω , b ) = 1 / m ∑ i = 1 m l o s s ( y p r e ( i ) , y i ) = − 1 / m ∑ i = 1 m ( y i l o g y p r e ( i ) + ( 1 − y i ) l o g ( 1 − y p r e ( i ) ) ) J (\omega,b) =1/m\sum_{i=1}^{m}loss(y^{pre(i)},y^{i})= -1/m\sum_{i=1}^{m} (y^{i}logy^{pre(i)} + (1-y^{i})log(1-y^{pre(i)})) J(ω,b)=1/mi=1∑mloss(ypre(i),yi)=−1/mi=1∑m(yilogypre(i)+(1−yi)log(1−ypre(i)))
2.逻辑回归梯度下降
2.1.导数 & 微积分(熟悉的同学可以直接跳过,接下来的梯度下降要用到)
导数这个概念对于我们是不陌生的,这里简单赘述即可
求导过程就是对函数微分的过程(函数是 y = 2 x y = 2x y=2x)
- a点: y = 2 * 0.4,b点: y = 2 * 1,那么 △ x = 0.6 x = 0.6 x=0.6 △ y = 1.2 △y = 1.2 △y=1.2 所以斜率就是 d = △ y / △ x = 2 d = △y/△x = 2 d=△y/△x=2
- 同理如果是一个凸函数,当 △ x △x △x无限趋近0的时候,对于函数图像上任意一点a,和其偏移的点b,都存在 △ y / △ x ≈ a △y/△x ≈ a △y/△x≈a 则我们认为a就是改函数图像的斜率,也是改函数图像的导数
2.2.逻辑回归梯度下降
沿用Andrew NG文档中的一个图来看:
J ( w , b ) = 1 / m ∑ i = 1 m l ( y p r e ( i ) , y ( i ) ) = − 1 / m ∑ i = 1 m y ( i ) l o g y ( i ) + ( 1 − y ( i ) ) l o g ( 1 − y p r e ( i ) ) J(w,b) = 1/m\sum_{i=1}^ml(y^{pre(i)},y^{(i)}) = -1/m\sum_{i=1}^my^(i)logy^{(i)} + (1-y^{(i)})log(1-y^{pre(i)}) J(w,b)=1/m∑i=1ml(ypre(i),y(i))=−1/m∑i=1my(i)logy(i)+(1−y(i))log(1−ypre(i))
这里 为了方便我们将 w w w(看做一维)和 b b b
所谓的梯度下降就是:
-
反向传播过程中,loss函数分别对 w w w和 b b b求偏导,同步更新 w w w和 b b b
w = w − α d w w = w - \alpha \;d\,w w=w−αdw
b = b − α d b b = b -\alpha \;d\,b b=b−αdb
这里 l o s s loss loss对某一个值求导 我们使用 d v a r d\,var dvar来表示
这里我们为了更加直观的来看梯度下降 忽略 b b b直接来看成本函数对 w w w的梯度下降过程
w = w − α d w w = w - \alpha \;d\,w w=w−αdw
上面图中x轴代表 w w w
- 蓝色点代表 d w d\,w dw为负的场景,这时候成本函数变小的方向就是 w w w会增加的方向
- 红色点代表 d w d\,w dw为正的场景,这时候成本函数变小的方向就是 w w w会减小的方向
所以对于梯度下降会有一个在 l o s s loss loss附近左右抖动的情况出现,所以建议使用小批量随机梯度下降,并使用学习率衰减来进行反向传播调参
上面展示了 w w w梯度下降的场景, b b b也是这样