本系列是台湾大学资讯工程系林軒田(Hsuan-Tien Lin)教授开设的《机器学习基石》课程的梳理。重在梳理,而非详细的笔记,因此可能会略去一些细节。
该课程共16讲,分为4个部分:
- 机器什么时候能够学习?(When Can Machines Learn?)
- 机器为什么能够学习?(Why Can Machines Learn?)
- 机器怎样学习?(How Can Machines Learn?)
- 机器怎样可以学得更好?(How Can Machines Learn Better?)
本文是第3部分,对应原课程中的9-12讲。
本部分的主要内容:
- 线性回归算法详解,以及泛化能力的保证、能否用于二分类问题等;
- 逻辑回归算法详解,并引入梯度下降方法;
- 阐述PLA、线性回归、逻辑回归3种方法在分类问题上的联系与区别,并引入随机梯度下降方法;
- 多分类问题中的OVA、OVO方法;
- 特征的非线性变换,以及该如何控制变换后的复杂度。
1 线性回归
在第一部分中讲过机器学习的分类,当 Y = R \mathcal{Y}=\mathbb{R} Y=R时,就是回归。
1.1 线性回归算法
线性回归的假设集十分简单, h ( x ) = w T x h(\mathbf{x})=\mathbf{w}^T\mathbf{x} h(x)=wTx,其实就是感知机模型去除了符号函数。
它的逐点误差度量可设为
err
(
y
^
,
y
)
=
(
y
^
−
y
)
2
\text{err}(\hat{y}, y)=(\hat{y}-y)^2
err(y^,y)=(y^−y)2,那么样本内外的误差分别为
E
in
(
w
)
=
1
N
∑
n
=
1
N
(
w
T
x
n
−
y
n
)
2
E_{\text{in}}(\mathbf{w})=\dfrac{1}{N}\sum\limits_{n=1}^{N}(\mathbf{w}^T \mathbf{x}_n-y_n)^2
Ein(w)=N1n=1∑N(wTxn−yn)2
和
E
out
(
w
)
=
E
(
x
,
y
)
∼
P
(
w
T
x
−
y
)
2
E_{\text{out}}(\mathbf{w})=\mathop{\mathcal{E}}\limits_{(\mathbf{x},y)\sim P}(\mathbf{w}^T \mathbf{x}-y)^2
Eout(w)=(x,y)∼PE(wTx−y)2
要最小化
E
in
E_{\text{in}}
Ein很简单,当它取到最小时必有梯度为
0
0
0,因此可先计算出它的梯度:
∇
E
in
(
w
)
=
2
N
(
X
T
X
w
−
X
T
y
)
\nabla E_{\text{in}}(\mathbf{w})=\dfrac{2}{N}(X^T X\mathbf{w}-X^T \mathbf{y})
∇Ein(w)=N2(XTXw−XTy)
令它为
0
0
0即可。如图所示:
若
X
T
X
X^T X
XTX可逆(当
N
≫
d
+
1
N\gg d+1
N≫d+1时基本上会满足),则可直接得出
w
LIN
=
(
X
T
X
)
−
1
X
T
y
\mathbf{w}_{\text{LIN}}=(X^T X)^{-1} X^T \mathbf{y}
wLIN=(XTX)−1XTy
如果
X
T
X
X^T X
XTX是奇异的呢?可先定义“伪逆”(pseudo-inverse)
X
†
X^\dagger
X†,在定义完后有
w
LIN
=
X
†
y
\mathbf{w}_{\text{LIN}}=X^\dagger \mathbf{y}
wLIN=X†y
在实践中,建议直接使用 X † X^\dagger X†,一方面可避免判断 X T X X^T X XTX是否可逆,另一方面就算在几乎不可逆的情况下,它也是在数值上稳定的。
1.2 线性回归的泛化
线性回归看起来没有“学习”过程,是一步到位的,那么它算机器学习吗?
事实上,只要可以保证 E out ( w LIN ) E_{\text{out}}(\mathbf{w}_\text{LIN}) Eout(wLIN)足够小,那么就可以说“发生了”学习。
在这里,我们不从VC维理论出发,而从另一个角度说明为什么 E out ( w LIN ) E_{\text{out}}(\mathbf{w}_\text{LIN}) Eout(wLIN)会足够小。
我们先来看平均的 E in E_{\text{in}} Ein有多大:
E in ‾ = E D ∼ P N { E in ( w LIN w.r.t D ) } \overline{E_{\text{in}}}=\mathop{\mathcal{E}}\limits_{\mathcal{D}\sim P^N}\{E_{\text{in}}(\mathbf{w}_\text{LIN} \text{ w.r.t } \mathcal{D})\} Ein=D∼PNE{Ein(wLIN w.r.t D)}
其中
KaTeX parse error: No such environment: split at position 7: \begin{̲s̲p̲l̲i̲t̲}̲ E_{\text{in}}(…
可将 H = X X † H=XX^\dagger H=XX†称为hat matrix,因为它可将 y \mathbf{y} y映射到 y ^ \hat{\mathbf{y}} y^。由下图可知,若 y \mathbf{y} y由理想的 f ( X ) ∈ span f(X)\in \text{span} f(X)∈span加上噪声 n o i s e \mathbf{noise} noise生成,那么 I − H I-H I−H也可将 n o i s e \mathbf{noise} noise映射为 y − y ^ \mathbf{y}-\hat{\mathbf{y}} y−y^:
而 trace ( I − H ) = N − ( d + 1 ) \text{trace}(I-H)=N-(d+1) trace(I−H)=N−(d+1),迹可以理解为“能量”,因此有
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ E_{\text{in}}(…
如果对
E
in
E_{\text{in}}
Ein取平均,大概可以理解为
E
in
‾
=
n
o
i
s
e
level
⋅
(
1
−
d
+
1
N
)
\overline{E_{\text{in}}}=\mathbf{noise}\text{ level} \cdot (1-\dfrac{d+1}{N})
Ein=noise level⋅(1−Nd+1)
类似地有
E
out
‾
=
n
o
i
s
e
level
⋅
(
1
+
d
+
1
N
)
\overline{E_{\text{out}}}=\mathbf{noise}\text{ level} \cdot (1+\dfrac{d+1}{N})
Eout=noise level⋅(1+Nd+1)
(证明过程略)。
因此 E in ‾ \overline{E_{\text{in}}} Ein和 E out ‾ \overline{E_{\text{out}}} Eout的关系如图:
若 N → ∞ N\to\infty N→∞,则二者都收敛于 σ 2 \sigma^2 σ2( n o i s e level \mathbf{noise}\text{ level} noise level),泛化误差的期望为 2 ( d + 1 ) N \dfrac{2(d+1)}{N} N2(d+1)。因此,学习是会“发生”的!
VC维理论说明的是 E in E_{\text{in}} Ein和 E out E_{\text{out}} Eout相差较远的概率有上限,而这里说明的是它们的平均差距会收敛。角度不同,但两种方式都说明了泛化的能力。
1.3 用线性回归进行二分类
在线性分类中, Y = { + 1 , − 1 } \mathcal{Y}=\{+1,-1\} Y={+1,−1}, h ( x ) = sign ( w T x ) h(\mathbf{x})=\text{sign}({\mathbf{w}^T\mathbf{x}}) h(x)=sign(wTx), err ( y ^ , y ) = 1 [ y ^ ≠ y ] \text{err}(\hat{y},y)=\mathbf{1}_{[\hat{y}\ne y]} err(y^,y)=1[y^=y],找它的最优解是个NP-hard问题。
由于 { + 1 , − 1 } ⊂ R \{+1,-1\}\subset \mathbb{R} {+1,−1}⊂R,即样本的正负类别也能用实数表示,而在线性回归中 Y = R \mathcal{Y}=\mathbb{R} Y=R,那么,直接来一发线性回归,得到 w LIN \mathbf{w}_\text{LIN} wLIN,然后让 g ( x ) = sign ( w LIN T x ) g(\mathbf{x})=\text{sign}(\mathbf{w}_\text{LIN}^T\mathbf{x}) g(x)=sign(wLINTx),这是否可行呢?
把线性分类和线性回归的误差度量分别记为 err 0 / 1 = 1 [ sign ( w T x ) ≠ y ] \text{err}_{0/1}=\mathbf{1}_{[\text{sign}(\mathbf{w}^T\mathbf{x})\ne y]} err0/1=1[sign(wTx)=y]和 err sqr = ( w T x − y ) 2 \text{err}_\text{sqr}=({\mathbf{w}^T\mathbf{x}- y})^2 errsqr=(wTx−y)2,它们的关系如下图:
从中可直观地看出, err 0 / 1 ≤ err sqr \text{err}_{0/1} \le \text{err}_\text{sqr} err0/1≤errsqr一定成立。由此,有
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ &\text{classif…
也就是说,让回归的 E in E_{\text{in}} Ein做得足够好,也可以使得分类的 E out E_{\text{out}} Eout足够小,只不过上限更宽松一些而已。这样做就是用边界的紧度(bound tightness)换取计算效率(efficiency)。
一般 w LIN \mathbf{w}_\text{LIN} wLIN可用来作为PLA或pocket算法的初始向量。
2 逻辑回归
2.1 逻辑回归算法
二分类中,我们感兴趣的是
f
(
x
)
=
sign
(
P
(
+
1
∣
x
)
−
1
2
)
∈
+
1
,
−
1
f(\mathbf{x})=\text{sign}(P(+1|\mathbf{x})-\dfrac{1}{2}) \in {+1,-1}
f(x)=sign(P(+1∣x)−21)∈+1,−1
但在很多场景下,我们想要做的是“软”(soft)分类,即得到某个分类的概率,此时感兴趣的是
f
(
x
)
=
P
(
+
1
∣
x
)
∈
[
0
,
1
]
f(\mathbf{x})=P(+1|\mathbf{x}) \in [0,1]
f(x)=P(+1∣x)∈[0,1]
问题在于,我们得到的数据标签是样本的类别,而非样本被分到某个类的概率。
对于一个样本的所有特征 x = ( x 0 , x 1 , x 2 , ⋯ , x d ) \mathbf{x}=(x_0, x_1, x_2, \cdots,x_d) x=(x0,x1,x2,⋯,xd),令 s = ∑ i = 0 d w i x i s=\sum\limits_{i=0}^{d} w_i x_i s=i=0∑dwixi。我们可用逻辑函数(logistic function) θ ( s ) \theta(s) θ(s)将它转换成估计的概率。也就是说,逻辑回归(logistic regression)的假设为 h ( x ) = θ ( w T x ) h(\mathbf{x})=\theta(\mathbf{w}^T\mathbf{x}) h(x)=θ(wTx)。
最常用的逻辑函数是
θ
(
s
)
=
e
s
1
+
e
s
=
1
1
+
e
−
s
\theta(s)=\dfrac{e^s}{1+e^s}=\dfrac{1}{1+e^{-s}}
θ(s)=1+eses=1+e−s1
函数图像如下:
可见,它是个光滑的、单调的、“S”形的(sigmoid)函数。
接下来,要定义逻辑回归的
E
in
(
w
)
E_\text{in}(\mathbf{w})
Ein(w)。先将目标函数
f
(
x
)
=
P
(
+
1
∣
x
)
f(\mathbf{x})=P(+1|\mathbf{x})
f(x)=P(+1∣x)反表示为
P
(
y
∣
x
)
=
{
f
(
x
)
for
y
=
+
1
1
−
f
(
x
)
for
y
=
−
1
P(y|\mathbf{x})=\begin{cases} f(\mathbf{x})&\text{for } y=+1\\ 1-f(\mathbf{x})&\text{for } y=-1 \end{cases}
P(y∣x)={f(x)1−f(x)for y=+1for y=−1
假设手中的数据集为
D
=
{
(
x
1
,
∘
)
,
(
x
2
,
×
)
,
…
,
(
x
N
,
×
)
}
\mathcal{D}=\{(\mathbf{x}_1,\circ),(\mathbf{x}_2,\times),\ldots, (\mathbf{x}_N,\times)\}
D={(x1,∘),(x2,×),…,(xN,×)}
那么,由
f
f
f生成
D
\mathcal{D}
D的概率为
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ &P(\mathbf{x}_…
由我们的假设
h
h
h生成
D
\mathcal{D}
D的似然(likelihood)为
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ &P(\mathbf{x}_…
如果
h
≈
f
h\approx f
h≈f,那么
h
h
h生成
D
\mathcal{D}
D的似然也应该接近于由
f
f
f生成
D
\mathcal{D}
D的概率,并且由
f
f
f生成
D
\mathcal{D}
D的概率应该是较大的(正好被我们抽样抽到)。所以,机器学习算法可以取
g
=
arg
max
h
likelihood
(
h
)
g=\mathop{\arg\max}\limits_{h} \text{likelihood}(h)
g=hargmaxlikelihood(h)
若
h
(
x
)
=
θ
(
w
T
x
)
h(\mathbf{x})=\theta(\mathbf{w}^T\mathbf{x})
h(x)=θ(wTx),由函数的性质可知,
1
−
h
(
x
)
=
h
(
−
x
)
1-h(\mathbf{x})=h(-\mathbf{x})
1−h(x)=h(−x),所以
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ &\text{likelih…
而
P
(
x
1
)
P(\mathbf{x}_1)
P(x1)、
P
(
x
2
)
P(\mathbf{x}_2)
P(x2)、……、
P
(
x
N
)
P(\mathbf{x}_N)
P(xN)都与
h
h
h无关,因此有
likelihood
(
logistic
h
)
∝
∏
n
=
1
N
h
(
y
n
x
n
)
\text{likelihood}(\text{logistic } h)\propto \prod\limits_{n=1}^N h(y_n\mathbf{x}_n)
likelihood(logistic h)∝n=1∏Nh(ynxn)
现在要将它最大化,以找出最终的
h
h
h。可先把
θ
(
s
)
\theta(s)
θ(s)代入,再取对数(对数函数单调,不改变最大化取值的点),变为
max
w
ln
∏
n
=
1
N
θ
(
y
n
w
T
x
n
)
\max\limits_\mathbf{w} \ln\prod\limits_{n=1}^N\theta(y_n\mathbf{w}^T\mathbf{x}_n)
wmaxlnn=1∏Nθ(ynwTxn)
再取相反数(最大化变为最小化)、除
N
N
N(不改变最值点)后,又可变为
min
w
1
N
∑
n
=
1
N
−
ln
θ
(
y
n
w
T
x
n
)
\min\limits_\mathbf{w} \dfrac{1}{N}\sum\limits_{n=1}^N - \ln \theta(y_n\mathbf{w}^T\mathbf{x}_n)
wminN1n=1∑N−lnθ(ynwTxn)
将
θ
(
s
)
\theta(s)
θ(s)展开得到
min
w
1
N
∑
n
=
1
N
ln
(
1
+
exp
(
−
y
n
w
T
x
n
)
)
\min\limits_\mathbf{w} \dfrac{1}{N}\sum\limits_{n=1}^N \ln \left(1+\exp(-y_n\mathbf{w}^T\mathbf{x}_n)\right)
wminN1n=1∑Nln(1+exp(−ynwTxn))
令
err
(
w
,
x
,
y
)
=
ln
(
1
+
exp
(
−
y
w
x
)
)
\text{err}(\mathbf{w},\mathbf{x},y)=\ln\left(1+\exp(-y\mathbf{w}\mathbf{x})\right)
err(w,x,y)=ln(1+exp(−ywx))
这就是交叉熵误差(cross-entropy error),而 ∑ n = 1 N err ( w , x n , y n ) \sum\limits_{n=1}^N \text{err}(\mathbf{w},\mathbf{x}_n,y_n) n=1∑Nerr(w,xn,yn)就是 E in ( w ) E_\text{in}(\mathbf{w}) Ein(w)。
2.2 梯度下降
接下来就要最小化
E
in
(
w
)
E_\text{in}(\mathbf{w})
Ein(w),它是连续的、可微的、二次可微的、凸的,因此可以试着让它梯度为
0
0
0。求出它的梯度
∇
E
in
(
w
)
=
1
N
∑
n
=
1
N
θ
(
−
y
n
w
T
x
n
)
(
−
y
n
x
n
)
\nabla E_{\text{in}}(\mathbf{w})=\dfrac{1}{N}\sum_{n=1}^N\theta(-y_n\mathbf{w}^T\mathbf{x}_n)(-y_n\mathbf{x}_n)
∇Ein(w)=N1n=1∑Nθ(−ynwTxn)(−ynxn)
它的梯度可以看成是以 θ ( ⋅ ) \theta(\cdot) θ(⋅)为权重的 − y n x n -y_n\mathbf{x}_n −ynxn的加权平均。要让它为0,有两种方式:
- 让所有的 θ ( − y n w T x n ) \theta(-y_n\mathbf{w}^T\mathbf{x}_n) θ(−ynwTxn)都为0,这意味着所有样本都满足 y n w n x n ≫ 0 y_n\mathbf{w}_n\mathbf{x}_n\gg 0 ynwnxn≫0,也即 D \mathcal{D} D是线性可分的;
- 若 D \mathcal{D} D不是线性可分的,要让加权和为0,这是个非线性方程,没有闭式解(closed-form solution)。
可用与PLA中类似的方法进行迭代,即 w t + 1 ← w t + η v \mathbf{w}_{t+1}\leftarrow\mathbf{w}_t+\eta\mathbf{v} wt+1←wt+ηv,其中 v \mathbf{v} v确定了更新的方向, η \eta η确定了更新的步长,如图:
怎么迭代呢?可用贪心算法,一步步让
E
in
E_\text{in}
Ein变小。假设已经给定某个
η
\eta
η,要确定
v
\mathbf{v}
v的方向,每一步的更新问题就转换成了
min
∥
v
∥
=
1
E
in
(
w
t
+
η
v
)
\min\limits_{\Vert\mathbf{v}\Vert=1}E_\text{in}(\mathbf{w}_t+\eta\mathbf{v})
∥v∥=1minEin(wt+ηv)
看起来仿佛更难解了。但如果
η
\eta
η足够小,我们可以用局部线性近似展开它(泰勒展开,Taylor expansion):
E
in
(
w
t
+
η
v
)
≈
E
in
(
w
t
)
+
η
v
T
∇
E
in
(
w
t
)
E_\text{in}(\mathbf{w}_t+\eta\mathbf{v})\approx E_\text{in}(\mathbf{w}_t)+\eta\mathbf{v}^T\nabla E_\text{in}(\mathbf{w}_t)
Ein(wt+ηv)≈Ein(wt)+ηvT∇Ein(wt)
式中
E
in
(
w
t
)
E_\text{in}(\mathbf{w}_t)
Ein(wt)和
∇
E
in
(
w
t
)
\nabla E_\text{in}(\mathbf{w}_t)
∇Ein(wt)已知,
η
\eta
η给定,只需确定
v
\mathbf{v}
v即可,注意到上式第二项本质上是两个向量内积,当两个向量方向相反时值最小,因此要最小化上式,可取
v
=
−
∇
E
in
(
w
t
)
∥
∇
E
in
(
w
t
)
∥
\mathbf{v}=-\dfrac{\nabla E_\text{in}(\mathbf{w}_t)}{\Vert\nabla E_\text{in}(\mathbf{w}_t)\Vert}
v=−∥∇Ein(wt)∥∇Ein(wt)
梯度下降的迭代更新就变成了:对于给定的较小
η
\eta
η,
w
t
+
1
←
w
t
−
η
∇
E
in
(
w
t
)
∥
∇
E
in
(
w
t
)
∥
\mathbf{w}_{t+1}\leftarrow\mathbf{w}_t-\eta\dfrac{\nabla E_\text{in}(\mathbf{w}_t)}{\Vert\nabla E_\text{in}(\mathbf{w}_t)\Vert}
wt+1←wt−η∥∇Ein(wt)∥∇Ein(wt)
η \eta η太小会导致非常慢,太大会导致不稳定,最好用变化的 η \eta η,如下图所示:
那么,
η
\eta
η怎么变比较好?可让它与
∥
∇
E
in
(
w
t
)
∥
\Vert\nabla E_\text{in}(\mathbf{w}_t)\Vert
∥∇Ein(wt)∥正相关,将原来固定的
η
\eta
η乘上
∥
∇
E
in
(
w
t
)
∥
\Vert\nabla E_\text{in}(\mathbf{w}_t)\Vert
∥∇Ein(wt)∥即可。这样,更新规则也就变成了
w
t
+
1
←
w
t
−
η
∇
E
in
(
w
t
)
\mathbf{w}_{t+1}\leftarrow\mathbf{w}_t-\eta{\nabla E_\text{in}(\mathbf{w}_t)}
wt+1←wt−η∇Ein(wt)
这个新的
η
\eta
η可叫作固定的学习率(learning rate)。
3 分类的线性模型
3.1 三种算法的比较
记 s = w T x s=\mathbf{w}^T\mathbf{x} s=wTx,以下是总结三种模型(线性分类、线性回归、逻辑回归):
这里的 y s ys ys可称为分类正确度分数(classification correctness score),即度量分类有多正确,该值越大,说明分类越“正确”。
若将交叉熵误差函数
err
CE
(
s
,
y
)
\text{err}_\text{CE}(s,y)
errCE(s,y)做scale(除
ln
2
\ln 2
ln2),得到
err
SCE
(
s
,
y
)
=
log
2
(
1
+
exp
(
−
y
s
)
)
\text{err}_\text{SCE}(s,y)=\log_2(1+\exp(-ys))
errSCE(s,y)=log2(1+exp(−ys))
把它们的误差函数都画出来,可得下图:
从图中可知,一定有
err
0
/
1
≤
err
SCE
(
s
,
y
)
=
1
ln
2
err
CE
(
s
,
y
)
\text{err}_{0/1} \le \text{err}_\text{SCE}(s,y) = \dfrac{1}{\ln 2}\text{err}_\text{CE}(s,y)
err0/1≤errSCE(s,y)=ln21errCE(s,y)
由此可以用VC维理论证明,使用 err CE \text{err}_\text{CE} errCE也可以做好分类任务,有两种思路:
- 从分类的角度出发,有
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ E_\text{out}^{…
- 从交叉熵角度出发,有
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ E_\text{out}^{…
不管用哪种方式,只要保证 E in CE E_\text{in}^\text{CE} EinCE足够小,都可以保证 E out 0 / 1 ( w ) E_\text{out}^{0/1}(\mathbf{w}) Eout0/1(w)也足够小,也就是说,使用逻辑回归或线性回归都可以做线性分类。
用PLA、线性回归、逻辑回归做分类,三种方法的优缺点如下:
3.2 随机梯度下降
PLA每次迭代的时间复杂度为 O ( 1 ) O(1) O(1),但逻辑回归(或pocket算法)每次迭代都需要对 D \mathcal{D} D中的所有样本进行一次运算,时间复杂度为 O ( N ) O(N) O(N),能不能让每次迭代的时间复杂度也变成 O ( 1 ) O(1) O(1)?
我们在做更新
w
t
+
1
←
w
t
+
η
v
\mathbf{w}_{t+1}\leftarrow\mathbf{w}_t+\eta\mathbf{v}
wt+1←wt+ηv时,取了
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ \mathbf{v}&=-\…
可以看到,计算梯度需要遍历所有样本,复杂度实在太高了。可将它里面的
1
N
∑
n
=
1
N
\dfrac{1}{N}\sum\limits_{n=1}^{N}
N1n=1∑N看作是期望
E
\mathcal{E}
E,相当于不断随机抽一个样本计算出来的结果的平均。若将随机抽一个样本
n
n
n算出来的梯度称为随机梯度
∇
w
err
(
w
,
x
n
,
y
n
)
\nabla_\mathbf{w}\text{err}(\mathbf{w},\mathbf{x}_n,y_n)
∇werr(w,xn,yn),那么真正的梯度可看作是它的期望:
∇
w
E
in
(
w
)
=
E
random
n
∇
w
err
(
w
,
x
n
,
y
n
)
\nabla_\mathbf{w} E_\text{in}(\mathbf{w})=\mathop{\mathcal{E}}_{\text{random }n}\nabla_\mathbf{w}\text{err}(\mathbf{w},\mathbf{x}_n,y_n)
∇wEin(w)=Erandom n∇werr(w,xn,yn)
这样,就可以用随机梯度下降(Stochastic Gradient Descent,SGD)进行迭代。它的好处是非常简单,计算的成本低,非常适用于大数据或在线学习的情况,缺点是不够稳定。
在逻辑回归中,用SGD更新的步骤就变成了
w
t
+
1
←
w
t
+
η
⋅
θ
(
−
y
n
w
t
T
x
n
)
(
y
n
x
n
)
\mathbf{w}_{t+1}\leftarrow\mathbf{w}_t+\eta\cdot \theta(-y_n\mathbf{w}_t^T\mathbf{x}_n)(y_n\mathbf{x}_n)
wt+1←wt+η⋅θ(−ynwtTxn)(ynxn)
这与PLA中的更新步骤十分相似,PLA中是这样的:
w
t
+
1
←
w
t
+
1
⋅
1
[
y
N
≠
sign
(
w
t
T
x
n
)
]
(
y
n
x
n
)
\mathbf{w}_{t+1}\leftarrow\mathbf{w}_t+1 \cdot \mathbf{1}_{[y_N\ne \text{sign}(\mathbf{w}_t^T \mathbf{x}_n)]}(y_n\mathbf{x}_n)
wt+1←wt+1⋅1[yN=sign(wtTxn)](ynxn)
因此用SGD的逻辑回归,可以看作是“软”的PLA。而反过来,若取
η
=
1
\eta=1
η=1,则PLA在
w
t
T
x
n
\mathbf{w}_t^T \mathbf{x}_n
wtTxn很大的时候也可以看作是用SGD的逻辑回归。
在用SGD时,有两个经验法则:
- 什么时候停止? t t t足够大的时候就可以(不要判断梯度是否真的为0,否则又会带来梯度计算的复杂度);
- 当 x \mathbf{x} x在一般范围内时,就取 η = 0.1 \eta=0.1 η=0.1吧。
4 多分类问题
4.1 用逻辑回归做多分类
假设 Y = { □ , ♢ , △ , ⋆ } \mathcal{Y}=\{\square, \diamondsuit,\triangle,\star\} Y={□,♢,△,⋆},数据分布如下图:
可对每个类别分别做一次分类,如下图:
但这样做,在最后要把它们结合起来时,会出现问题,有些区域无法判定属于哪一类:
怎么解决呢?可以用逻辑回归做“软”分类器,依旧是对每个类别
k
k
k,用数据集
D
[
k
]
=
{
(
x
n
,
y
n
′
=
2
⋅
1
[
y
n
=
k
]
−
1
)
}
n
=
1
N
\mathcal{D}_{[k]}=\{(\mathbf{x}_n,y_n'=2\cdot\mathbf{1}_{[y_n=k]}-1)\}_{n=1}^{N}
D[k]={(xn,yn′=2⋅1[yn=k]−1)}n=1N
做一次逻辑回归,得到一个分类器
w
[
k
]
\mathbf{w}_{[k]}
w[k]:
做完后要将它们结合起来,可取 g ( x ) = arg max k ∈ Y θ ( w [ k ] T x ) g(\mathbf{x})=\arg\max_{k\in\mathcal{Y}}\theta(\mathbf{w}_{[k]}^T\mathbf{x}) g(x)=argmaxk∈Yθ(w[k]Tx),这样就得到某个点应该属于哪一类了:
这样做称为OVA(One-Versus-All) Decomposition,好处是有效率,可以和类似逻辑回归的方法结合起来,但缺点在于当 K K K很大时,往往会使 D [ k ] \mathcal{D}_{[k]} D[k]非常不平衡,比如有100类,并且分布比较均匀,OVA每次用于训练的样本的两类数据的个数就会非常悬殊。
可以再进行扩展,如multinomial (‘coupled’) logistic regression,加入一些如“属于不同类的概率加起来应该为1”之类的限制,让它更适合用于多分类。
4.2 用二分类做多分类
为了克服不平衡问题,可以对两两类别进行训练,即用数据集
D
[
k
,
ℓ
]
=
{
(
x
n
,
y
n
′
=
2
⋅
1
[
y
n
=
k
]
−
1
)
:
y
n
=
k
or
y
n
=
ℓ
}
\mathcal{D}_{[k,\ell]}=\{(\mathbf{x}_n,y_n'=2\cdot\mathbf{1}_{[y_n=k]}-1):y_n=k\text{ or } y_n=\ell\}
D[k,ℓ]={(xn,yn′=2⋅1[yn=k]−1):yn=k or yn=ℓ}
进行线性二分类:
最后,取
g
(
x
)
=
tournament champion
{
w
[
k
,
ℓ
]
T
x
}
g(\mathbf{x})=\text{tournament champion}\{\mathbf{w}_{[k,\ell]}^T\mathbf{x}\}
g(x)=tournament champion{w[k,ℓ]Tx}
即可:
这样的方法叫作OVO(One-Versus-One)Decomposition,好处在于有效率(因为每次训练用的数据量较少),并且是稳定的,可以和任何二分类方法相结合,但缺点在于不断计算 w [ k , ℓ ] \mathbf{w}_{[k,\ell]} w[k,ℓ]的操作总共的复杂度是 O ( K 2 ) O(K^2) O(K2),需要更多运算空间。当 K K K不是非常大时,OVO很常用。
5 非线性变换
对于某些数据集来说,不管怎么使用线性模型, E i n E_{in} Ein都很大:
5.1 二次的假设集
我们发现,如果用一个圆来做它的分类界线,它其实是可分的:
所以我们要重新设计圆形PLA、圆形回归、……吗?当然不是。我们可以将 x ∈ X \mathbf{x}\in\mathcal{X} x∈X用变换 Φ \Phi Φ映射到 z ∈ Z \mathbf{z}\in\mathcal{Z} z∈Z,使得在 X \mathcal{X} X中圆形可分的数据在 Z \mathcal{Z} Z中线性可分。
通过由
Φ
2
(
x
)
=
(
1
,
x
1
,
x
2
,
x
1
2
,
x
1
x
2
,
x
2
2
)
\Phi_2(\mathbf{x})=(1,x_1,x_2,x_1^2,x_1x_2,x^2_2)
Φ2(x)=(1,x1,x2,x12,x1x2,x22)映射而来的
Z
\mathcal{Z}
Z空间,可构成一般的二次假设集:
H
Φ
2
=
{
h
(
x
)
:
h
(
x
)
=
h
~
(
Φ
2
(
x
)
)
for some linear
h
~
on
Z
}
\mathcal{H}_{\Phi_2}=\{h(\mathbf{x}):h(\mathbf{x})=\tilde h(\Phi_2(\mathbf{x}))\text{ for some linear }\tilde h \text{ on }\mathcal{Z}\}
HΦ2={h(x):h(x)=h~(Φ2(x)) for some linear h~ on Z}
当然也可以用更高次的非线性变换,用非线性变换的流程如下图:
具体步骤如下:
- 先用 Φ \Phi Φ将 { ( x n , y n ) } \{(\mathbf{x}_n,y_n)\} {(xn,yn)}变换到 { ( z n = Φ ( x n ) , y n ) } \{(\mathbf{z}_n=\Phi(\mathbf{x}_n),y_n)\} {(zn=Φ(xn),yn)};
- 用 { ( z n , y n ) } \{(\mathbf{z}_n,y_n)\} {(zn,yn)}和线性分类算法 A \mathcal{A} A训练出模型 w ~ \tilde{\mathbf{w}} w~;
- 返回 g ( x ) = sign ( w ~ T Φ ( x ) ) g(\mathbf{x})=\text{sign}\left(\tilde{\mathbf{w}}^T \Phi(\mathbf{x})\right) g(x)=sign(w~TΦ(x))即可。
5.2 复杂度的代价
假设用
Q
Q
Q次的非线性变换:
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ \Phi_Q(\mathbf…
式中的项数
1
+
d
~
1+\tilde d
1+d~是多少呢?若有
d
d
d个特征,可以在补上1后认为上面式子后边的每一项都是
Q
Q
Q次的,也就是说要对
d
+
1
d+1
d+1项每项都赋予一个次数,并且所有次数之和必须为
Q
Q
Q。可以用隔板法:想象共有
Q
+
d
+
1
Q+d+1
Q+d+1个小球,要在它们的空隙中放入
d
d
d个隔板,隔成
d
+
1
d+1
d+1段,每一段的小球个数减去1代表了对应位置的项的次数,由于要求每段中至少有1个小球,因此两端不能放隔板,共有
Q
+
d
Q+d
Q+d个位置可放隔板,共有
(
Q
+
d
d
)
\binom{Q+d}{d}
(dQ+d)种放法,也就是说,上式等号右边的项数
1
+
d
~
=
(
Q
+
d
d
)
=
O
(
Q
d
)
1+\tilde d=\binom{Q+d}{d}=O(Q^d)
1+d~=(dQ+d)=O(Qd)
当
Q
Q
Q较大时,一方面计算或存储的成本非常高,另一方面
1
+
d
~
1+\tilde d
1+d~是
d
VC
(
H
Φ
Q
)
d_\text{VC}(\mathcal{H}_{\Phi_Q})
dVC(HΦQ)的上界,
Q
Q
Q太大会导致
d
VC
d_\text{VC}
dVC过大,模型损失了泛化能力。
5.3 Q Q Q的选择
如何选择
Q
Q
Q?假设
Φ
0
(
x
)
=
(
1
)
\Phi_0(\mathbf{x})=(1)
Φ0(x)=(1),
Φ
1
(
x
)
=
(
Φ
0
(
x
)
,
x
1
,
x
2
,
…
,
x
d
,
)
\Phi_1(\mathbf{x})=\left(\Phi_0(\mathbf{x}),x_1,x_2,\ldots,x_d,\right)
Φ1(x)=(Φ0(x),x1,x2,…,xd,),……,
Φ
Q
(
x
)
=
(
Φ
Q
−
1
(
x
)
,
x
1
Q
,
x
1
Q
−
1
x
2
,
…
,
x
d
Q
,
)
\Phi_Q(\mathbf{x})=\left(\Phi_{Q-1}(\mathbf{x}),x_1^Q,x_1^{Q-1}x_2,\ldots,x_d^Q,\right)
ΦQ(x)=(ΦQ−1(x),x1Q,x1Q−1x2,…,xdQ,),将它们的假设集分别记为
H
0
\mathcal{H}_0
H0,
H
1
\mathcal{H}_1
H1,……,
H
Q
\mathcal{H}_Q
HQ,它们存在嵌套关系
H
0
⊂
H
1
⊂
H
2
⊂
⋯
\mathcal{H}_0 \subset \mathcal{H}_1\subset\mathcal{H}_2\subset\cdots
H0⊂H1⊂H2⊂⋯
如图所示:
并且,它们的VC维满足
d
VC
(
H
0
)
≤
d
VC
(
H
1
)
≤
d
VC
(
H
2
)
≤
⋯
d_\text{VC}(\mathcal{H}_0)\le d_\text{VC}(\mathcal{H}_1)\le d_\text{VC}(\mathcal{H}_2)\le\cdots
dVC(H0)≤dVC(H1)≤dVC(H2)≤⋯
若取
g
i
=
arg
min
h
∈
H
i
E
in
(
h
)
g_i=\arg\min_{h\in \mathcal{H}_i} E_\text{in}(h)
gi=argminh∈HiEin(h),则它们的
E
in
E_\text{in}
Ein满足
E
in
(
g
0
)
≥
E
in
(
g
1
)
≥
E
in
(
g
2
)
≥
⋯
E_\text{in}(g_0)\ge E_\text{in}(g_1)\ge E_\text{in}(g_2)\ge \cdots
Ein(g0)≥Ein(g1)≥Ein(g2)≥⋯
如何选择
Q
Q
Q?安全的做法是,先看
E
in
(
g
1
)
E_\text{in}(g_1)
Ein(g1)是否已经足够小,如果足够小,就可以了,否则,就用再稍微复杂一些的模型,也就是在下图中向右移动: