文章目录
(1). Sigmoid函数的由来——伯努利分布的衍生物
1.1 为什么会有 sigmoid 函数的出现?
考虑一个事件X,其发生的概率为p,不发生的概率为1-p,如下表所示:
X | 0 | 1 |
---|---|---|
发生概率 | 1 - p | p |
通过上述事件我们能够得到当事件一定发生(x=1) 和 一定不发生(x=0) 的概率,但很多时候事件不一定是一个非0即1的事件,而是一个连续取值的事件。当x的取值在(0,1)之间时,如x=0.5时,我们就无法判断该事件是判定为发生还是不发生了。为此,我们期望找到连续变量 x 和发生概率 p 之间的对应关系
,使得每一个
x
x
x 取值都有一个对应的事件发生概率
p
p
p,根据发生概率
p
p
p 来推测事件发生还是不发生。例如,当
p
=
0.8
p=0.8
p=0.8 时判断该事件发生,
p
=
0.2
p=0.2
p=0.2 时判断该事件不发生。如何寻找这个对应关系呢,sigmoid 函数的求解过程就是在寻找这个对应关系,sigmoid 最终的求解形式就描述连续变量
x
x
x 和发生概率
p
p
p 关系:
p
=
1
1
+
e
−
x
p = \frac{1}{1 + e^{-x}}
p=1+e−x1
![](https://i-blog.csdnimg.cn/blog_migrate/a1c6dd0e81face4f4ea8ca64223b4666.png)
1.2 sigmoid 函数推导过程
由上一节中的表可以得到, f ( x ) f(x) f(x) 分布函数可以写成:
f ( x ) = { 1 − p ; x = 0 p ; x = 1 f(x) = \left\{ \begin{array}{rcl} 1-p; \qquad x=0 \\ p; \qquad x=1 \end{array} \right. f(x)={1−p;x=0p;x=1
进一步的我们可这个分段函数写成一个函数:
f ( x ) = p x ∗ ( 1 − p ) 1 − x f(x) = p^x*(1-p)^{1-x} f(x)=px∗(1−p)1−x
接着我们在这个式子上进行推导:
f ( x ) = e l n p x ( 1 − p ) 1 − x = e l n p x + l n ( 1 − p ) 1 − x = e x ⋅ l n p + ( 1 − x ) ⋅ l n ( 1 − p ) = e x [ l n p − l n ( 1 − p ) ] + l n ( 1 − p ) = e x ⋅ l n p 1 − p + l n ( 1 − p ) \begin{aligned} f(x) &= e^{lnp^x (1-p)^{1-x}} \\ &= e^{lnp^x + ln(1-p)^{1-x}} \\ &= e^{x·lnp + (1-x)·ln(1-p)} \\ &= e^{x [ lnp - ln(1-p)] + ln(1-p)} \\ &= e^{x·ln\frac{p}{1-p} + ln(1-p)} \end{aligned} f(x)=elnpx(1−p)1−x=elnpx+ln(1−p)1−x=ex⋅lnp+(1−x)⋅ln(1−p)=ex[lnp−ln(1−p)]+ln(1−p)=ex⋅ln1−pp+ln(1−p)
我们找出跟
x
x
x 变量相关的系数
l
n
p
1
−
p
ln\frac{p}{1-p}
ln1−pp,令其等于
η
\eta
η,反解
η
\eta
η:
η
=
l
n
p
1
−
p
e
η
=
p
1
−
p
p
=
1
1
+
e
−
η
\begin{aligned} \eta &= ln\frac{p}{1-p} \\ e^\eta &=\frac{p}{1-p} \\ p &= \frac{1}{1+e^{-\eta}} \end{aligned}
ηeηp=ln1−pp=1−pp=1+e−η1
最后计算出的形式就是sigmoid函数的函数形式,将 η \eta η 换成 x x x 后就得到了连续变量 x x x 和事件发生概率 p p p 之间的函数关系(至于为什么可以把 η \eta η 换成 x x x 这里我想了很久也没想通,如果有大佬希望可以指点下)。
1.3 sigmoid 函数求导
在逻辑回归中,构造函数选用的就是sigmoid函数。我们都知道在机器学习中会不断通过求解梯度来进行函数的参数更新,那么sigmoid作为目标函数,不可避免的就会涉及到sigmoid的求导,sigmoid函数求导结果如下:
f ′ ( x ) = ( 1 1 + e − x ) ′ = e − x ( 1 + e − x ) 2 = 1 1 + e − x ⋅ ( 1 − 1 1 + e − x ) = f ( x ) ⋅ ( 1 − f ( x ) ) \begin{aligned} f'(x) &= (\frac{1}{1+e^{-x}})' \\ &= \frac{e^{-x}}{(1+e^{-x})^2} \\ &= \frac{1}{1+e^{-x}}·(1 - \frac{1}{1+e^{-x}}) \\ &= f(x)·(1-f(x)) \end{aligned} f′(x)=(1+e−x1)′=(1+e−x)2e−x=1+e−x1⋅(1−1+e−x1)=f(x)⋅(1−f(x))
(2). 逻辑回归(Logistic Regression)
2.1 逻辑回归算法的最终本质——求决策边界
逻辑回归中使用 sigmoid 函数 1 1 + e − w ⋅ x \frac{1}{1 + e^{-w·x}} 1+e−w⋅x1 来预测事件发生的概率,如下图所示,当纵坐标取值大于0.5时则判断事件发生(y=1),当纵坐标小于0.5时则判断事件不发生(y=0)。
![](https://i-blog.csdnimg.cn/blog_migrate/a1c6dd0e81face4f4ea8ca64223b4666.png)
我们仔细观察,整个式子 y y y 的取0还是取1完全取决于 w ⋅ x w·x w⋅x 的取值是>0还是<0,于是我们就可以通过判断一个样本点是在直线 z = w ⋅ x z=w·x z=w⋅x 的上半边还是下半边来判断 y y y 的取值了。这样一来,我们求解的最根本的问题就是求解一条直线 z = w ⋅ x z = w·x z=w⋅x,使得在直线一边的数据点全为正样本,另一边的数据点全为负样本。因此,逻辑回归算法算法的本质其实是去求解一个“边界”,这个边界不仅能够保证数据分类的正确性,还能保证所有分类后的数据的 cost 值最小,如下图所示(这和SVM的最小间隔距离非常相似):
![](https://i-blog.csdnimg.cn/blog_migrate/a8c632eacaa9668b9c9d8308a031c430.png)
决策边界由函数:
w
⋅
X
=
0
w·X = 0
w⋅X=0 来确定,其中参数
w
w
w是我们需要学习的参数,因此核心问题就成了求解边界:
z
=
w
⋅
X
=
w
0
+
w
1
⋅
X
1
+
w
2
⋅
X
2
+
.
.
.
z = w·X = w_0 + w_1·X_1 + w_2·X_2 + ...
z=w⋅X=w0+w1⋅X1+w2⋅X2+...
2.2 逻辑回归算法中的重要组成部分
对于任何一个算法来说,通常都需要考虑的3个部分:
- 构建基本函数(就是用来预测最终 y y y值的函数)
- 构建目标函数(目标函数=损失函数 + 正则项)
- 构建优化方法(也叫优化器optimizer)
逻辑回归中的基本构造函数
在逻辑回归算法中,选用的基本函数就是sigmoid函数
h
θ
(
x
)
=
1
1
+
e
−
x
h_{\theta}(x) = \frac{1}{1 + e^{-x}}
hθ(x)=1+e−x1,该函数用于预测输入
x
x
x 后标签
y
y
y 的概率,注意,这里的
x
x
x 并非是数据集的原始数据输入,而是乘以了参数
θ
\theta
θ 之后的值,即
x
=
X
⋅
θ
x = X · \theta
x=X⋅θ,因此逻辑回归的基本函数为:
h
θ
(
X
)
=
1
1
+
e
−
θ
X
h_{\theta}(X) = \frac{1}{1+e^{-\theta X}}
hθ(X)=1+e−θX1
逻辑回归中的损失函数
逻辑回归的损失函数为:
l
o
s
s
(
y
i
,
y
i
′
)
=
−
∑
i
=
1
m
y
(
i
)
l
o
g
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
loss(y_i, y_i') = -\sum_{i=1}^my^{(i)}logh_{\theta}(x^{(i)}) + (1 - y^{(i)})log(1-h_{\theta}(x^{(i)})
loss(yi,yi′)=−i=1∑my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i))
其中,
h
θ
(
X
)
=
1
1
+
e
−
θ
X
h_{\theta}(X) = \frac{1}{1+e^{-\theta X}}
hθ(X)=1+e−θX1,这个式子可以从两个思路推导出来:最大似然估计、交叉熵损失函数,下面分别从这两个方面进行推导。
- 通过极大似然估计来解释损失函数
首先我们需要知道极大似然估计是什么,举个例子:假设取球事件为y,取到白球时y=1,概率为p,取到黑球时y=0,概率为1-p。由于是独立事件,三次拿球两黑一白的概率可以表示为: P ( y = 0 ∣ p ) P ( y = 0 ∣ p ) P ( y = 1 ∣ p ) = ( 1 − p ) ( 1 − p ) p = p 3 − 2 p 2 + p P(y = 0 | p)P(y = 0 | p)P(y = 1 | p) = (1 - p)(1 - p)p = p^3 - 2p^2 + p P(y=0∣p)P(y=0∣p)P(y=1∣p)=(1−p)(1−p)p=p3−2p2+p。白球的极大似然估计就是求使得这个概率表达式最大的p值,对上式求导,求此一元二次方程的根得p=1/3或p=1,可知原式在[0, 1/3]区间单调递增,在[1/3, 1]区间单调递减。因此,在白球概率范围[0.2,0.8]内,当p=1/3时表达式取得最大值,取得白球的概率的极大似然估计为1/3(例子引自这里)。通过这个例子可以看到,最大似然估计其实是在给定了若干个事实后(去了三次球两黑一白),对事件发生的最大可能概率(取到白球的概率)进行估计。
那么在逻辑回归中,假定每一个数据样本相互独立,则取了
m
m
m 个样本后,得到的似然函数为根据每一个数据样本标签计算出的概率值相乘:
L
(
θ
)
=
∏
i
=
1
m
p
i
y
i
(
1
−
p
i
)
1
−
y
i
l
(
θ
)
=
∑
i
=
1
m
l
n
[
p
i
y
i
(
1
−
p
i
)
1
−
y
i
]
L(\theta) = \prod_{i=1}^m p_i^{y_i} (1-p_i)^{1-y_i}\\ l(\theta) = \sum_{i=1}^mln[p_i^{y_i}(1-p_i)^{1-y_i}]
L(θ)=i=1∏mpiyi(1−pi)1−yil(θ)=i=1∑mln[piyi(1−pi)1−yi]
式子
L
(
θ
)
L(\theta)
L(θ) 就等于上面白球例子中的:
(
1
−
p
)
(
1
−
p
)
p
(1 - p)(1 - p)p
(1−p)(1−p)p,
l
(
θ
)
l(\theta)
l(θ)是对原式求对数,把累成变为累加,这个式子也叫对数似然估计。我们现在假设
p
p
p 服从
1
1
+
e
−
θ
X
\frac{1}{1+e^{-\theta X}}
1+e−θX1分布(其实真正的
p
p
p 并不是等于这个式子的,因为
θ
\theta
θ 参数是不准确的,是需要学习的),这样一来,我们就有了损失函数:
l
o
s
s
(
y
i
,
y
i
′
)
=
−
l
(
θ
)
=
−
∑
i
=
1
m
l
n
[
(
1
1
+
e
−
θ
x
)
y
i
(
1
1
+
e
θ
x
)
1
−
y
i
]
=
−
∑
i
=
1
m
y
(
i
)
l
o
g
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
\begin{aligned} loss(y_i, y_i') &= -l(\theta) \\ &= -\sum_{i=1}^mln[(\frac{1}{1+e^{-\theta x}})^{y_i} (\frac{1}{1+e^{\theta x}})^{1-y_i} ]\\ &=-\sum_{i=1}^my^{(i)}logh_{\theta}(x^{(i)}) + (1 - y^{(i)})log(1-h_{\theta}(x^{(i)}) \end{aligned}
loss(yi,yi′)=−l(θ)=−i=1∑mln[(1+e−θx1)yi(1+eθx1)1−yi]=−i=1∑my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i))
怎么理解这个式子呢?这样想,我们按照服从 1 1 + e − θ X \frac{1}{1+e^{-\theta X}} 1+e−θX1的分布概率 p ′ p' p′ 来进行估测的结果并不是真实标签 y i y_i yi,而是有偏估计 y i ′ y_i' yi′,因为我们的参数 θ \theta θ 是有偏的。而原本的极大似然估计的本质是,在使用真实的分布概率 p p p 去做预测时,是可以得到正确的预测标签 y i y_i yi 的。因此,使用有偏概率 p ′ p' p′ 去做估计得到结果,就是有偏预测结果 y ′ y' y′ 和真实标签数据 y y y 之间的偏差值,也就是损失函数的结果。
- 通过交叉熵来解释损失函数
损失函数的定义是:如果我们预测类型接近真实类型,则损失函数值非常小;如果预测类型偏离真是类型很多,则损失函数非常大。我们再列出最终的loss函数来看看:
l
o
s
s
(
y
i
,
y
i
′
)
=
−
∑
i
=
1
m
y
(
i
)
l
o
g
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
loss(y_i, y_i') = -\sum_{i=1}^my^{(i)}logh_{\theta}(x^{(i)}) + (1 - y^{(i)})log(1-h_{\theta}(x^{(i)})
loss(yi,yi′)=−i=1∑my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i))
可以发现其实这个函数可以拆成两个部分(图片引自这里):
![](https://i-blog.csdnimg.cn/blog_migrate/455bfbe189c0cea3ac6a79375cb32b9e.png)
分别代表当样本的真实标签 y = 1 y=1 y=1 时,对应的损失函数为: − l o g ( h θ ( x ) ) -log(h_{\theta}(x)) −log(hθ(x)),当样本的真实标签 y = 0 y=0 y=0 时对应的损失函数为: − l o g ( 1 − h θ ( x ) ) -log(1-h_{\theta}(x)) −log(1−hθ(x))。如下图所示(图片引自这里):
![](https://i-blog.csdnimg.cn/blog_migrate/bf35518b275a8a9e17e6dcf67b308305.png)
这个图非常直观的表示了损失函数与预测准确度的关系,例如当y = 1时,如果 h θ ( x ) h_{\theta}(x) hθ(x) 的预测值越接近 1,则得到的损失函数值越小,若预测结果越接近 0,则得到的损失函数值越大。而从上面可以看出,不管是 y = 1 y=1 y=1 还是 y = 0 y=0 y=0 的情况,均使用 − l o g -log −log 来进行损失函数的定义,为什么呢?这就涉及到香农熵的问题了,香农信息量用来度量不确定性的大小:一个事件的香农信息量等于0,表示该事件的发生不会给我们提供任何新的信息,例如确定性的事件,发生的概率是1,发生了也不会引起任何惊讶;当不可能事件发生时,香农信息量为无穷大,这表示给我们提供了无穷多的新信息,并且使我们无限的惊讶,而 − l o g -log −log 函数恰恰能很好的表达在 x x x 取值接近 1 时函数值接近于 0,反之 x x x 取值接近 0 时函数值接近于无穷大。
逻辑回归中的优化方法
使用 SGD 随机梯度下降的方法来优化参数 θ \theta θ:
θ j : = θ j + α ⋅ l o s s ( y i , y i ′ ) \theta_j: = \theta_j + \alpha·loss(y_i, y_i') θj:=θj+α⋅loss(yi,yi′)