回顾
书接上回,讲到了逻辑回归的Loss函数的一般形式,大体如下:
L
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
l
o
g
(
h
θ
(
x
(
i
)
)
)
−
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
]
h
θ
(
x
)
=
g
(
θ
T
X
)
g
(
z
)
=
1
1
+
e
−
z
L(\theta) = \frac{1}{m}\sum_{i=1}^mCost(h_\theta(x^{(i)}),y^{(i)}) \\=\frac{1}{m}\sum_{i=1}^m[-y^{(i)}log(h_\theta(x^{(i)}))-(1-y^{(i)})log(1-h_\theta(x^{(i)}))] \\h_{\theta}(x) = g(\theta^TX)\\ g(z) = \frac{1}{1+e^{-z}}
L(θ)=m1i=1∑mCost(hθ(x(i)),y(i))=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]hθ(x)=g(θTX)g(z)=1+e−z1
梯度下降
已经有了Loss函数,那么我们要做的事情就是通过梯度下降的方法来确定最佳参数
θ
\theta
θ,使得对于训练集的所有数据,Loss函数值最小。那么我们就来对这看似复杂的函数进行一下求导吧。
对Loss函数求偏导
我们知道函数有以下形式:
L
(
θ
)
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
l
o
g
(
h
θ
(
x
(
i
)
)
)
−
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
]
L(\theta) = \frac{1}{m}\sum_{i=1}^m[-y^{(i)}log(h_\theta(x^{(i)}))-(1-y^{(i)})log(1-h_\theta(x^{(i)}))]
L(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]
1
m
\frac{1}{m}
m1是常数,我们可以先放至一边。括号里面的
y
(
i
)
y^{(i)}
y(i)和
(
1
−
y
(
i
)
)
(1-y^{(i)})
(1−y(i))都是常数,对导数的形式并无影响。Loss函数对
θ
\theta
θ求偏导有以下形式:
∂
L
(
θ
)
∂
θ
j
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
∂
l
o
g
(
h
θ
(
x
(
i
)
)
)
∂
θ
j
−
(
1
−
y
(
i
)
)
∂
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
∂
θ
j
]
\frac{\partial L(\theta)}{\partial \theta_j}=\frac{1}{m}\sum_{i=1}^m[-y^{(i)}\frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}-(1-y^{(i)})\frac{\partial log(1-h_\theta(x^{(i)}))}{\partial \theta_j}]
∂θj∂L(θ)=m1i=1∑m[−y(i)∂θj∂log(hθ(x(i)))−(1−y(i))∂θj∂log(1−hθ(x(i)))]
显然,要计算
∂
L
(
θ
)
∂
θ
j
\frac{\partial L(\theta)}{\partial \theta_j}
∂θj∂L(θ),我们就只需要计算
∂
l
o
g
(
h
θ
(
x
(
i
)
)
)
∂
θ
j
\frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}
∂θj∂log(hθ(x(i)))以及
∂
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
∂
θ
j
\frac{\partial log(1-h_\theta(x^{(i)}))}{\partial \theta_j}
∂θj∂log(1−hθ(x(i)))。
这看起来还是非常吓人呢,不过没关系,笔者高中数学老师曾告诉过我们,一切反动派都是纸老虎。先让我们回到
h
θ
(
x
(
i
)
)
h_\theta(x^{(i)})
hθ(x(i))的表达式,令
z
=
θ
T
X
z=\theta^TX
z=θTX
h
θ
(
x
)
=
g
(
z
)
=
1
1
+
e
−
z
h_{\theta}(x) = g(z) =\frac{1}{1+e^{-z}}
hθ(x)=g(z)=1+e−z1
根据复合函数的求导,我们可以知道:
∂
l
o
g
(
h
θ
(
x
(
i
)
)
)
∂
θ
j
=
∂
l
o
g
(
g
(
z
)
)
∂
θ
j
=
1
g
(
z
)
∂
g
(
z
)
∂
θ
j
=
1
g
(
z
)
∂
g
(
z
)
∂
z
∂
z
∂
θ
j
\begin{aligned} \frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}&= \frac{\partial log(g(z))}{\partial \theta_j}\\ &= \frac{1}{g(z)} \frac{\partial g(z)}{\partial \theta_j}\\ &= \frac{1}{g(z)} \frac{\partial g(z)}{\partial z} \frac{\partial z}{\partial \theta_j} \end{aligned}
∂θj∂log(hθ(x(i)))=∂θj∂log(g(z))=g(z)1∂θj∂g(z)=g(z)1∂z∂g(z)∂θj∂z
一项一项拆解:
1
g
(
z
)
=
1
+
e
−
z
\frac{1}{g(z)} = 1+e^{-z}
g(z)1=1+e−z
∂
g
(
z
)
∂
z
=
−
−
e
−
z
(
1
+
e
−
z
)
2
=
e
−
z
(
1
+
e
−
z
)
2
\frac{\partial g(z)}{\partial z} = -\frac{-e^{-z}}{(1+e^{-z})^2}=\frac{e^{-z}}{(1+e^{-z})^2}
∂z∂g(z)=−(1+e−z)2−e−z=(1+e−z)2e−z
∂
z
∂
θ
j
=
x
j
\frac{\partial z}{\partial \theta_j}=x_j
∂θj∂z=xj
那么我们就可以得到
l
o
g
(
h
θ
(
x
(
i
)
)
)
log(h_\theta(x^{(i)}))
log(hθ(x(i)))对
θ
j
\theta_j
θj的偏导:
∂
l
o
g
(
h
θ
(
x
(
i
)
)
)
∂
θ
j
=
e
−
z
1
+
e
−
z
⋅
x
j
=
(
1
−
g
(
z
)
)
x
j
\frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}=\frac{e^{-z}}{1+e^{-z}}\cdot x_j = (1-g(z))x_j
∂θj∂log(hθ(x(i)))=1+e−ze−z⋅xj=(1−g(z))xj
接着我们继续看
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
log(1-h_\theta(x^{(i)}))
log(1−hθ(x(i)))对
θ
j
\theta_j
θj的偏导,事实上,依旧是根据复合函数的求导:
∂
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
∂
θ
j
=
−
1
1
−
h
θ
(
x
(
i
)
)
∂
h
θ
(
x
(
i
)
)
∂
θ
j
=
−
1
1
−
g
(
z
)
∂
g
(
z
)
∂
θ
j
=
−
1
+
e
−
z
e
−
z
⋅
e
−
z
(
1
+
e
−
z
)
2
⋅
x
j
=
−
g
(
z
)
⋅
x
j
\begin{aligned} \frac{\partial log(1-h_\theta(x^{(i)}))}{\partial \theta_j} &= \frac{-1}{1-h_\theta(x^{(i)})} \frac{\partial h_\theta(x^{(i)})}{\partial \theta_j}\\ &= -\frac{1}{1-g(z)}\frac{\partial g(z)}{\partial \theta_j}\\ &= -\frac{1+e^{-z}}{e^{-z}}\cdot \frac{e^{-z}}{(1+e^{-z})^2} \cdot x_j\\ &= -g(z)\cdot x_j \end{aligned}
∂θj∂log(1−hθ(x(i)))=1−hθ(x(i))−1∂θj∂hθ(x(i))=−1−g(z)1∂θj∂g(z)=−e−z1+e−z⋅(1+e−z)2e−z⋅xj=−g(z)⋅xj
OK,那么我们把得到的这两个式子代回Loss函数的偏导形式中,得到:
∂
L
(
θ
)
∂
θ
j
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
∂
l
o
g
(
h
θ
(
x
(
i
)
)
)
∂
θ
j
−
(
1
−
y
(
i
)
)
∂
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
∂
θ
j
]
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
(
1
−
g
(
z
)
)
x
j
+
(
1
−
y
(
i
)
)
g
(
z
)
x
j
]
=
1
m
∑
i
=
1
m
[
g
(
z
)
−
y
(
i
)
]
x
j
=
1
m
∑
i
=
1
m
[
h
θ
(
x
(
i
)
)
−
y
(
i
)
]
x
j
(
i
)
\begin{aligned} \frac{\partial L(\theta)}{\partial \theta_j}&=\frac{1}{m}\sum_{i=1}^m[-y^{(i)}\frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}-(1-y^{(i)})\frac{\partial log(1-h_\theta(x^{(i)}))}{\partial \theta_j}]\\ &= \frac{1}{m}\sum_{i=1}^m[-y^{(i)}(1-g(z))x_j+(1-y^{(i)})g(z)x_j]\\ &= \frac{1}{m}\sum_{i=1}^m[g(z)-y^{(i)}]x_j\\ &= \frac{1}{m}\sum_{i=1}^m[h_{\theta}(x^{(i)})-y^{(i)}]x^{(i)}_j \end{aligned}
∂θj∂L(θ)=m1i=1∑m[−y(i)∂θj∂log(hθ(x(i)))−(1−y(i))∂θj∂log(1−hθ(x(i)))]=m1i=1∑m[−y(i)(1−g(z))xj+(1−y(i))g(z)xj]=m1i=1∑m[g(z)−y(i)]xj=m1i=1∑m[hθ(x(i))−y(i)]xj(i)
还是那句话,常数只是起到一个缩放的作用,重要的是求和号后面的形式。那么看到这个式子,你有想到什么吗?事实上,逻辑回归和线性回归的的Loss函数的偏导形式是相同的,多么美丽的巧合!值得一提的是,这也仅仅是巧合而已,线性回归和逻辑回归是两个不同的算法,因为我们使用的model,也就是假设函数
h
θ
(
x
)
h_\theta(x)
hθ(x)是不同的。
更新公式
与线性回归同理,我们依旧是按照如下式子进行参数的更新:
θ
j
:
=
θ
j
−
η
∂
∂
θ
j
L
(
θ
)
\theta_j := \theta_j - \eta \frac{\partial}{\partial \theta_j}L(\theta)
θj:=θj−η∂θj∂L(θ)
将前面求得的表达式代入得:
θ
j
:
=
θ
j
−
η
1
m
∑
i
=
1
m
[
h
θ
(
x
(
i
)
)
−
y
(
i
)
]
x
j
(
i
)
\theta_j := \theta_j - \eta \frac{1}{m}\sum_{i=1}^m[h_{\theta}(x^{(i)})-y^{(i)}]x^{(i)}_j
θj:=θj−ηm1i=1∑m[hθ(x(i))−y(i)]xj(i)
多分类问题
目前为止我们也只是提出了一种解决二分类问题的方法,但是日常生活中,我们常常需要进行更多种的分类,比如除了猫和狗,我们还希望计算机能识别出老鼠等更多动物;除了分辨诈骗和非诈骗邮件,我们还希望计算机能自动分出哪些邮件是家人发的,哪些是朋友发的等等。那么,我们讨论过的逻辑回归算法,能不能应用在多分类上呢?答案是肯定的。以三分类为例子,我们用圆形、正方形和三角形来表示。如下图:
我们可以把这个问题转换成三个二分类问题。先把所有圆形的看作第一类,其余的都看作第二类,如下图:
利用这些数据,我们可以训练得到一个函数
h
θ
(
1
)
(
x
)
h_\theta^{(1)}(x)
hθ(1)(x),这个函数的输出的意义是
x
x
x为圆形的概率。
然后把三角形看作一类,其他的看作另一类:
可以训练得到一个函数
h
θ
(
2
)
(
x
)
h_\theta^{(2)}(x)
hθ(2)(x),这个函数的输出的意义是
x
x
x为三角形的概率。
同理,把正方形当作一类,其他当作另一类:
可以训练得到一个函数
h
θ
(
3
)
(
x
)
h_\theta^{(3)}(x)
hθ(3)(x),这个函数的输出的意义是
x
x
x为三角形的概率。
那么,对于一个输入
X
X
X,我们可以把
X
X
X输入到三个函数中,则得到这个
X
X
X为三种类型的概率,概率最大的那个函数对应的类别即为结果。
总结
逻辑回归讲到这里就差不多了,当然还有正则项之类的知识,我自己也没太想好应该怎么理解,等到以后有机会再写。有意思的是,清楚了逻辑回归的基础知识,我们就快要揭开神经网络的神秘面纱了。