1.logistic回归问题
logistic回归可以说是神经网络模型重要的基元,sigmoid函数在神经网络模型中是常用的一种激活函数。logistic回归起源于概率,我们在日常生活中下判断的时候,说这事儿有八成机会,就是80%的可能性。学过概率论都知道,概率被划到了0-1这个区间,0表示不可能发生,1表示必然发生。在上一篇的线性回归中,就很难表示这样的概率。在面对二分类的问题时,线性回归固然可以设定一个阈值来输出结果,但是我们并不能得出到底有多大的把握是这个结果。logistic回归就不一样了,它采用的sigmoid函数具有很好的性质,将一个实数映射到0-1的区间,并且为单调增函数,在0点的函数值为0.5,这就给出了一个概率模型,自然而然,当没有信息的时候概率就是0.5。sigmoid函数的具体形式是这样的:
θ
(
x
)
=
1
1
+
e
−
x
\theta(x) = \frac{1}{1+e^{-x}}
θ(x)=1+e−x1
用图形直观表示就是这样的它的导数是:
∂
θ
∂
x
=
θ
(
x
)
⋅
(
1
−
θ
(
x
)
)
\frac{\partial\theta}{\partial {x}} = \theta (x) \cdot(1 - \theta(x))
∂x∂θ=θ(x)⋅(1−θ(x))
结合之前PLA中的判别函数,那么logistic回归的判别函数就可以写成:
h
(
x
)
=
θ
(
w
T
x
)
h(x) = \theta(w^Tx)
h(x)=θ(wTx)
2.logistic回归损失函数
上一节我们定义了logistic回归的函数,这一节,我们将来研究损失函数,因为损失函数决定了优化方向,一个好的损失函数才能获得一个好的结果。
2.1信息熵,KL散度简介
信息熵是信息量的度量,要明白什么是信息熵,就得明白什么是信息量。信息量可以说是消除不确定性的多少,举个例子,如果天气预报说95%下雨,3%阴天,2%晴天,但是最后的结果是没有下雨, 这个信息它所带来的的信息量就非常大,因为消除了很大一部分的不确定性,又比如说太阳从东边出来,这是一个必然事件,因此这句话本身不携带任何信息,就没有信息量。香农在定义信息量的时候给出了几条性质:
- 单调性。一个事件发生的概率越高,那么它发生的这条信息所携带的信息量就越小
- 非负性。 也很直观,从系统里获得的信息不可能让系统更加不确定。
- 可加性。独立随机事件之间的不确定度是可以叠加的
因此, 香农给出了一个合理的公式来计算这种信息量:
−
l
o
g
(
p
(
x
)
)
-log(p(x))
−log(p(x))
满足以上所有性质。而信息熵针对的不是某一个事件,而是一个系统,衡量的是一个系统的不确定度。这句话是什么意思呢?就是一个系统有
n
n
n个事件,各自的概率为
p
i
p_i
pi,那么这个系统就可以表示为
H
(
p
(
x
1
)
,
p
(
x
2
)
,
.
.
.
,
p
(
x
n
)
)
H(p(x_1),p(x_2),...,p(x_n))
H(p(x1),p(x2),...,p(xn)),那么系统的信息量的期望,也就是所谓的信息熵,就可以写成:
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
p
(
x
i
)
)
-\sum_{i=1}^np(x_i)log(p(x_i))
−i=1∑np(xi)log(p(xi))
它的含义是系统的不确定性的大小,也是消除系统不确定性所需的信息量的大小。之所以谈信息熵,是因为在logistic回归中所使用的损失函数,也就是交叉熵损失函数,与信息熵有着非常相近的形式。
2.2交叉熵损失函数
那么什么是交叉熵呢?交叉熵的形式与信息熵类似,但是交叉熵可以说是从
H
(
p
)
H(p)
H(p),变成了
H
(
p
,
q
)
H(p,q)
H(p,q),它实际上是两个分布的联合信息熵。参考上节信息熵的定义,交叉熵即为已知真实分布的情况下,使用模拟分布时不确定度的大小,也就是消除不确定度所需的信息量的大小。交叉熵的形式是这样的:
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
q
(
x
i
)
)
-\sum_{i=1}^np(x_i)log(q(x_i))
−i=1∑np(xi)log(q(xi))
由于问题是一个二分类问题,因此,令
p
(
x
)
p(x)
p(x)为真实的
y
y
y,而
q
(
x
)
q(x)
q(x)为给出的预测
y
^
\hat{y}
y^,那么损失函数就变成了:
−
∑
i
=
1
n
y
n
l
o
g
(
h
(
x
n
)
)
+
(
1
−
y
n
)
l
o
g
(
1
−
h
(
x
n
)
)
-\sum_{i=1}^ny_nlog(h(x_n)) + (1-y_n)log(1-h(x_n))
−i=1∑nynlog(h(xn))+(1−yn)log(1−h(xn))
y
n
y_n
yn只有0和1两种取值,因此,上式衡量了预测与标签之间的相似程度。在实际应用中,为了方便求导,往往采用
l
n
ln
ln而非2为底的对数。另外,如果只统计正样本的损失,那么后面一项可以舍去,即变成:
−
∑
i
=
1
n
l
n
(
h
(
x
n
)
)
=
∑
i
=
1
n
l
n
(
1
+
e
−
w
T
x
)
-\sum_{i=1}^nln(h(x_n)) = \sum_{i=1}^nln(1+e^{-w^Tx})
−i=1∑nln(h(xn))=i=1∑nln(1+e−wTx)
2.3损失函数对比
前面引入了交叉熵的定义,却没有解决根本的问题:到底为什么要用它呢?平方误差为什么不合适呢?接下来,我们可以对比以下二者:
C
E
:
−
∑
i
=
1
n
y
n
l
n
(
h
(
x
n
)
)
+
(
1
−
y
n
)
l
n
(
1
−
h
(
x
n
)
)
S
E
:
−
∑
i
=
1
n
(
h
(
x
n
)
−
y
n
)
2
\begin{aligned} &CE:-\sum_{i=1}^ny_nln(h(x_n)) + (1-y_n)ln(1-h(x_n)) \\ &SE:-\sum_{i=1}^n(h(x_n) - y_n)^2 \end{aligned}
CE:−i=1∑nynln(h(xn))+(1−yn)ln(1−h(xn))SE:−i=1∑n(h(xn)−yn)2
CE表示交叉熵损失,而SE表示均方误差损失,
h
(
x
n
)
=
θ
(
w
T
x
)
h(x_n) = \theta(w^Tx)
h(xn)=θ(wTx),我们对两个损失函数分别求导,首先是CE:
∂
C
E
∂
w
=
−
(
y
⋅
1
θ
(
w
T
x
)
−
(
1
−
y
n
)
1
1
−
θ
(
w
T
x
)
)
∂
θ
∂
w
=
−
(
y
⋅
1
θ
(
w
T
x
)
−
(
1
−
y
n
)
1
1
−
θ
(
w
T
x
)
)
θ
(
w
T
x
)
(
1
−
θ
(
w
T
x
)
)
∂
w
T
x
∂
w
=
−
(
y
⋅
1
θ
(
w
T
x
)
−
(
1
−
y
n
)
1
1
−
θ
(
w
T
x
)
)
θ
(
w
T
x
)
(
1
−
θ
(
w
T
x
)
)
x
=
−
(
y
(
1
−
θ
(
w
T
x
)
)
−
(
1
−
y
)
θ
(
w
T
x
)
)
x
=
(
h
(
x
)
−
y
)
x
\begin{aligned} \frac{\partial{CE}}{\partial {w}}& =-(y\cdot\frac{1}{\theta(w^Tx)}-(1-y_n)\frac{1}{1-\theta(w^Tx)} )\frac{\partial\theta}{\partial {w}}\\ &=-(y\cdot\frac{1}{\theta(w^Tx)}-(1-y_n)\frac{1}{1-\theta(w^Tx)} )\theta(w^Tx)(1-\theta(w^Tx))\frac{\partial {w^Tx}}{\partial {w}}\\ &=-(y\cdot\frac{1}{\theta(w^Tx)}-(1-y_n)\frac{1}{1-\theta(w^Tx)} )\theta(w^Tx)(1-\theta(w^Tx))x\\ &=-(y(1-\theta(w^{T} x))-(1-y) \theta(w^{T} x)) x\\ &=(h(x) - y)x \end{aligned}
∂w∂CE=−(y⋅θ(wTx)1−(1−yn)1−θ(wTx)1)∂w∂θ=−(y⋅θ(wTx)1−(1−yn)1−θ(wTx)1)θ(wTx)(1−θ(wTx))∂w∂wTx=−(y⋅θ(wTx)1−(1−yn)1−θ(wTx)1)θ(wTx)(1−θ(wTx))x=−(y(1−θ(wTx))−(1−y)θ(wTx))x=(h(x)−y)x
接着是SE:
∂
S
E
∂
w
=
−
2
(
h
(
x
)
−
y
)
∂
θ
∂
w
=
−
2
(
h
(
x
)
−
y
)
θ
(
w
T
x
)
(
1
−
θ
(
w
T
x
)
)
x
=
−
2
(
h
(
x
)
−
y
)
h
(
x
)
(
1
−
h
(
x
)
)
x
\begin{aligned} \frac{\partial{SE}}{\partial {w}}& =-2(h(x) - y )\frac{\partial\theta}{\partial {w}}\\ &=-2(h(x) - y )\theta(w^Tx)(1-\theta(w^Tx))x\\ &=-2(h(x)-y)h(x)(1-h(x)) x\\ \end{aligned}
∂w∂SE=−2(h(x)−y)∂w∂θ=−2(h(x)−y)θ(wTx)(1−θ(wTx))x=−2(h(x)−y)h(x)(1−h(x))x
区别就在于均方误差的求导结果会出现一个
h
(
x
)
(
1
−
h
(
x
)
)
h(x)(1-h(x))
h(x)(1−h(x))乘机项,我们可以想象,当
w
T
x
w^Tx
wTx很大的时候,由
θ
\theta
θ函数的性质知道h(x)趋向于1,此时
1
−
h
(
x
)
=
0
1-h(x)=0
1−h(x)=0梯度会消失。相反的,当
w
T
x
w^Tx
wTx很小的时候,
h
(
x
)
=
0
h(x)=0
h(x)=0梯度同样会消失。但是CE不一样,当h(x)接近y的时候梯度小,反之,当h(x)与y差异大的时候梯度就大,从而保证了梯度的稳定性,避免了梯度消失的问题。用图形表示就是如下:
交叉熵误差避免了梯度消失的情况出现。所以我们在分类问题中进行了sigmoid变换后,选择交叉熵损失作为损失函数而非平方误差。
3.logistic回归算法
logistic由于是非线性的,因此没有办法得出解析解,因此可以采用梯度下降法、SGD、或者mini-batch(见上一篇)的方法进行优化。这里采用梯度下降法,计算流程如下:
1.令X为ND维的矩阵,N表示样本个数,D为特征维度,Y为N1标签向量
2.计算X^T*(h(X)-Y),记为E
3. Wt+1=Wt - a * E
4.如此反复循环