前言
我们知道,线性回归的公式是
h
θ
(
x
)
=
θ
T
x
h_{\theta}(x)={\theta}^Tx
hθ(x)=θTx
如果想实现分类功能,就需要把输出变成一个阶跃函数,比如
y
=
{
0
;
z
⩽
0
1
;
z
⩾
0
,
z
=
h
θ
(
x
)
y=\left\{\begin{matrix} 0; & z\leqslant 0 \\ 1; & z \geqslant 0 \end{matrix}\right. ,z=h_{\theta}(x)
y={0;1;z⩽0z⩾0,z=hθ(x)
但是这样就太粗糙了,而且不连续不可微。我们希望有一个理想的阶跃函数,而且是单调可微的函数。于是找到了对数几率函数(Logistic Function)。因为曲线像S,又称Sigmoid。
定义
Sigmoid函数的定义是:
y
=
1
1
+
e
−
(
θ
T
x
+
b
)
y=\frac {1} {1+e^{-(\theta^Tx+b)}}
y=1+e−(θTx+b)1
接下来就是根据给定的训练集,求出参数w。首先要找到目标函数(代价函数/损失函数)。
目标函数、代价函数、损失函数,一般而言,这三个概念是一回事。
如果深究的话,有细微的差别。参考深入理解机器学习中的:目标函数,损失函数和代价函数
损失函数:计算的是一个样本的误差
代价函数:是整个训练集上所有样本误差的平均
目标函数:代价函数 + 正则化项
首先想到的就是模仿线性回归的思路,用最小二乘当损失函数。
J
(
θ
)
=
∑
i
1
2
(
h
θ
(
x
i
)
−
y
i
)
2
J(\theta)=\sum_{i} \frac 1 2 (h_{\theta}(x^i) - \ y^i)^2
J(θ)=i∑21(hθ(xi)− yi)2
但是,把Sigmoid带入后,会发现这是一个非凸函数,这就意味着代价函数有着许多的局部最小值,不利于求解。
后来人们想到,用极大似然函数作为损失函数,这样就是一个凸函数。
损失函数
如果将
h
θ
(
x
)
h_{\theta}(x)
hθ(x)看做是正类的后验概率,则有
h
θ
(
x
;
θ
)
=
p
(
y
=
1
∣
x
;
θ
)
=
ϕ
(
x
)
=
1
1
+
e
−
(
θ
T
x
+
b
)
h_{\theta}(x;\theta)=p(y=1|x;\theta)=\phi(x)=\frac {1} {1+e^{-(\theta^Tx+b)}}
hθ(x;θ)=p(y=1∣x;θ)=ϕ(x)=1+e−(θTx+b)1
那么,有
p
(
y
=
0
∣
x
;
θ
)
=
1
−
ϕ
(
x
)
p(y=0|x;\theta) = 1-\phi(x)
p(y=0∣x;θ)=1−ϕ(x)
将上面两式写成一般形式(概率分布函数)
p
(
y
∣
x
;
θ
)
=
h
θ
(
x
;
θ
)
y
(
1
−
h
θ
(
x
;
θ
)
)
1
−
y
p(y|x;\theta)=h_{\theta}(x;\theta)^y(1-h_{\theta}(x;\theta))^{1-y}
p(y∣x;θ)=hθ(x;θ)y(1−hθ(x;θ))1−y
接下来用对数极大似然估计(加上对数是为了方便求导)根据训练集估计出参数
θ
\theta
θ。
l
(
θ
)
=
L
o
g
L
(
θ
)
=
∑
j
=
1
M
(
y
j
l
n
h
(
x
j
)
+
(
1
−
y
j
)
l
n
(
1
−
h
(
x
j
)
)
)
\begin{aligned} l(\theta) &= Log\ L(\theta)\\ &=\sum_{j=1}^M(y_jln\ h(x_j)+(1-y_j)ln\ (1-h(x_j))) \end{aligned}
l(θ)=Log L(θ)=j=1∑M(yjln h(xj)+(1−yj)ln (1−h(xj)))
其中M是样本个数。对其求关于
θ
\theta
θ的偏导。
1)首先求
h
θ
(
x
)
h_{\theta}(x)
hθ(x),即Sigmoid的偏导。
h
θ
′
(
X
)
=
h
θ
(
X
)
(
1
−
h
θ
(
X
)
)
h_{\theta}^{'}(\mathbf X) = h_{\theta}(\mathbf X)(1-h_{\theta}(\mathbf X))
hθ′(X)=hθ(X)(1−hθ(X))
推导过程如下:
2)有了第一步得出的公式后,得到
3)利用梯度下降法求解参数。由于损失函数是凸函数,沿着梯度下降方向找到最小点。
之所以是梯度下降,因为偏导取了负值
① 批量梯度下降是:
R
e
p
e
a
t
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
{
θ
(
t
+
1
)
:
=
θ
t
−
η
t
▽
θ
l
(
θ
t
,
Z
)
}
(1-2)
Repeat\ until\ convergence \{ \\ \theta^{(t+1)} := \theta^t - \eta^t\triangledown _{\theta}l(\theta^{t},Z) \\ \}\\ \tag{1-2}
Repeat until convergence{θ(t+1):=θt−ηt▽θl(θt,Z)}(1-2)
② 随机梯度下降(SGD):
R
e
p
e
a
t
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
{
f
o
r
j
=
1
t
o
M
,
{
θ
(
t
+
1
)
:
=
θ
t
−
η
t
▽
θ
l
(
θ
t
,
Z
j
)
}
Repeat\ until\ convergence \{ \\ for\ j=1\ to\ M, \{ \\ \theta^{(t+1)} := \theta^t - \eta^t\triangledown _{\theta}l(\theta^{t},Z_j) \\ \}
Repeat until convergence{for j=1 to M,{θ(t+1):=θt−ηt▽θl(θt,Zj)}
两者的区别是:
前者每次更新 θ \theta θ都需要遍历一次整个样本集合;而后者在遍历样本集合的时候,每个样本都能改变 θ \theta θ ,有更快的收敛速度 。由于SGD针对观测到的随机一条数据进行权重的更新,很适合进行增量计算,实现梯度下降的online模式。
③ small batch梯度下降
结合了上述两点的优点,每次更新参数时仅使用一部分样本,减少了参数更新的次数,可以达到更加稳定的结果,一般在深度学习中采用这种方法。
参考: