一、推导过程
假设要解决的问题是一个二分类问题,目标值为
{
0
,
1
}
\{0, 1\}
{0,1},以线性回归为基础,将模型输出映射到
[
0
,
1
]
[0, 1]
[0,1] 之间。我们选择这样一个函数:
g
(
z
)
=
1
1
+
e
−
z
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
g(z) = \frac{1}{1 + e^{-z}} \\ h_\theta(x) = g(\theta^T x) = \frac{1}{1+e^{-\theta^Tx}}
g(z)=1+e−z1hθ(x)=g(θTx)=1+e−θTx1
其中
g
(
z
)
g(z)
g(z)被称为 sigmoid 函数。为什么要选择 sigmoid 函数其实是可以通过指数分布族加上广义线性模型进行推导分析的。通过 sigmoid 函数我们可以计算单个样本属于正类还是负类的概率:
p
(
y
=
1
∣
x
;
θ
)
=
h
θ
(
x
)
p
(
y
=
0
∣
x
;
θ
)
=
1
−
h
θ
(
x
)
p(y=1|x;\theta) = h_\theta(x) \\ p(y=0|x;\theta) = 1 - h_\theta(x)
p(y=1∣x;θ)=hθ(x)p(y=0∣x;θ)=1−hθ(x)
我们将上面两个式子合并成一个:
p
(
y
=
x
∣
;
θ
)
=
(
h
θ
(
x
)
)
y
(
1
−
h
θ
(
x
)
)
(
1
−
y
)
p(y=x|;\theta) = (h_\theta(x))^y(1-h_\theta(x))^{(1-y)}
p(y=x∣;θ)=(hθ(x))y(1−hθ(x))(1−y)
有了上面这个式子,我们就能很容易的得到函数
h
h
h 在整个数据集上的似然函数:
l
(
θ
)
=
P
(
Y
∣
X
;
θ
)
=
∏
i
p
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
∏
i
(
h
θ
(
x
(
i
)
)
)
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
(
1
−
y
(
i
)
)
\begin{aligned} l(\theta) =& P(Y|X;\theta) \\ =& \prod_i p(y^{(i)} | x^{(i)} ; \theta) \\ =& \prod_i (h_\theta(x^{(i)}))^{y^{(i)}} (1 - h_\theta(x^{(i)})) ^ {(1-y^{(i)})} \end{aligned}
l(θ)===P(Y∣X;θ)i∏p(y(i)∣x(i);θ)i∏(hθ(x(i)))y(i)(1−hθ(x(i)))(1−y(i))
转为对数似然函数:
L
(
θ
)
=
l
o
g
l
(
θ
)
=
∑
i
=
1
m
[
y
(
i
)
l
o
g
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
l
−
h
θ
(
x
(
i
)
)
)
]
\begin{aligned} L(\theta) =& logl(\theta) \\ =& \sum_{i=1}^m[y^{(i)}logh_\theta(x^{(i)})+(1-y^{(i)})log(l-h_\theta(x^{(i)}))] \end{aligned}
L(θ)==logl(θ)i=1∑m[y(i)loghθ(x(i))+(1−y(i))log(l−hθ(x(i)))]
假设我们用随机梯度下降法更新参数,每次只用一个样例,则上面的对数似然函数退化成:
L
(
θ
)
=
y
(
i
)
l
o
g
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
l
−
h
θ
(
x
(
i
)
)
)
L(\theta) = y^{(i)}logh_\theta(x^{(i)})+(1-y^{(i)})log(l-h_\theta(x^{(i)}))
L(θ)=y(i)loghθ(x(i))+(1−y(i))log(l−hθ(x(i)))
更新参数的公式为:
θ
j
:
=
θ
j
+
α
⋅
∂
∂
θ
j
L
(
θ
)
\theta_j := \theta_j + \alpha \cdot \frac{\partial}{\partial \theta_j} L(\theta)
θj:=θj+α⋅∂θj∂L(θ)
这里的
α
\alpha
α 就是学习率。其次注意式子里的 “+”,因为我们要极大化对数似然函数,所以我们需要沿着梯度方向更新参数。接下来我们要做的就是求出
L
(
θ
)
L(\theta)
L(θ) 对各个参数的偏导。
(1)首先我们知道 sigmoid 函数的求导结果为:
g
′
(
z
)
=
g
(
z
)
(
1
−
g
(
z
)
)
{g}'(z)=g(z)(1 - g(z))
g′(z)=g(z)(1−g(z))
(2)我们可以推导出
L
(
θ
)
L(\theta)
L(θ) 对各个参数的偏导为:
∂
∂
θ
j
L
(
θ
)
=
x
j
(
y
−
h
θ
(
x
)
)
\frac{\partial}{\partial \theta_j} L(\theta) = x_j(y - h_\theta(x))
∂θj∂L(θ)=xj(y−hθ(x))
(3)所以,参数更新公式为:
θ
j
:
=
θ
j
+
α
(
y
(
i
)
−
h
θ
j
(
x
(
i
)
)
)
x
j
(
i
)
\theta_j := \theta_j + \alpha (y^{(i)} - h_{\theta_j}(x^{(i)})) x^{(i)}_j
θj:=θj+α(y(i)−hθj(x(i)))xj(i)
如果我们用梯度下降法,每次更新参数用所有样例,则参数更新公式为:
θ
j
:
=
θ
j
+
∑
i
=
1
m
α
(
y
(
i
)
−
h
θ
j
(
x
(
i
)
)
)
x
j
(
i
)
\theta_j := \theta_j + \sum_{i=1}^m \alpha (y^{(i)} - h_{\theta_j}(x^{(i)})) x^{(i)}_j
θj:=θj+i=1∑mα(y(i)−hθj(x(i)))xj(i)
二、参考
- 斯坦福机器学习课程 —— 吴恩达
- 斯坦福ML公开课笔记 —— 张雨石