机器学习与计算机视觉入门项目——视频投篮检测(三)
机器学习与计算机视觉入门项目——视频投篮检测(三)
在第二部分,我记录了实验中提取图像特征的HOG算子及其实现代码,我们接下来就要构造几个简单的分类器,对数据集的HOG特征来分类,实现进球/不进球的分类任务。
分类器的设计和选择
实验中要用到的分类模型主要有四个:
- logistic回归
- SVM支持向量机
- MLP多层感知机
- CNN卷积神经网络
构建分类器的过程中总有许多因素会对最终性能产生影响,比如数据的增广方式、模型的超参数、是否引入某个修正项等等。不同因素的组合会产生非常多的可选方案,因此我们采用交叉验证和绘制ROC曲线的形式来确定模型的最优超参数,并比较不同参数及不同模型的优劣。交叉验证和ROC曲线在随后都会讲到。
几种损失函数
| 函数名称 | 形式 |
|---|---|
| 均方误差损失 | M S E = − 1 n ∑ i = 1 n ( y ^ i − y i ) 2 MSE=-\frac{1}{n} \sum_{i=1}^{n} (\widehat{y}_{i}-y_i)^2 MSE=−n1i=1∑n(y i−yi)2 y i y_i yi是数据的真实标签, y ^ i \widehat{y}_i y i是模型的输出结果 |
| 平均交叉熵损失 | − 1 m [ ∑ i = 1 m ∑ j = 0 1 1 { y ( i ) = j } l o g p ( y ( i ) = j ∣ x ( i ) ; θ ) ] -\frac{1}{m}[\sum_{i=1}^{m}\sum_{j=0}^{1}\ 1\{ y^{(i)}=j\}\ log \ p(y^{(i)}=j\mid x^{(i)};\theta)] −m1[i=1∑mj=0∑1 1{y(i)=j} log p(y(i)=j∣x(i);θ)] 1 { ⋅ } 1\{ \cdot \} 1{⋅}是指示函数,当 y ( i ) = j y^{(i)}=j y(i)=j时函数值为1否则为0 |
| 0 − 1 0-1 0−1损失 | L 0 , 1 = ∑ i = 0 m I f ( x ( i ) ) ≠ y ( i ) L_{0,1}=\sum_{i=0}^{m}\ I_{f(x^{(i)})\ne y^{(i)}} L0,1=i=0∑m If(x(i))̸=y(i) I x I_x Ix也是指示函数,0-1损失相当于记录了模型分类出错的次数 |
| 负对数似然损失 | N L L ( θ , D ) = − ∑ i = 0 ∣ D ∣ l o g P ( Y = y ( i ) ∣ x ( i ) , θ ) NLL(\theta,D)=-\sum_{i=0}^{\mid D \mid}\ log\ P(Y=y^{(i)}\mid x^{(i)},\theta) NLL(θ,D)=−i=0∑∣D∣ log P(Y=y(i)∣x(i),θ) |
| L 1 L1 L1正则化 | E ( θ , D ) = N L L ( θ , D ) + λ ∣ ∣ θ ∣ ∣ 1 E(\theta,D)=NLL(\theta,D)+\lambda\mid \mid \theta \mid \mid_1 E(θ,D)=NLL(θ,D)+λ∣∣θ∣∣1 ∣ ∣ θ ∣ ∣ p = ( ∑ j = 0 ∣ θ ∣ ∣ θ j ∣ p ) 1 p p = 1 \mid \mid \theta \mid \mid_p=(\sum_{j=0}^{\mid \theta\mid}\ \mid \theta_j \mid^p)^{\frac{1}{p}} \quad p=1 ∣∣θ∣∣p=(j=0∑∣θ∣ ∣θj∣p)p1p=1 |
| L 2 L2 L2正则化 | E ( θ , D ) = N L L ( θ , D ) + λ ∣ ∣ θ ∣ ∣ 2 E(\theta,D)=NLL(\theta,D)+\lambda\mid \mid \theta \mid \mid_2 E(θ,D)=NLL(θ,D)+λ∣∣θ∣∣2 ∣ ∣ θ ∣ ∣ p = ( ∑ j = 0 ∣ θ ∣ ∣ θ j ∣ p ) 1 p p = 2 \mid \mid \theta \mid \mid_p=(\sum_{j=0}^{\mid \theta\mid}\ \mid \theta_j \mid^p)^{\frac{1}{p}} \quad p=2 ∣∣θ∣∣p=(j=0∑∣θ∣ ∣θj∣p)p1p=2 |
我所理解的正则化的一个目的是限制 θ \theta θ的各维分量不至于出现极大的值,也就是避免出现输入向量中某一维度
Logistic回归
基本原理
logistic回归是一个基于概率的线性二分类器,通过学习一组权重向量
ω
\omega
ω和偏置
b
b
b,模型将一个输入向量映射到一个高维空间。权重可以理解为对输入特征向量的线性加权,体现了不同维度对分类的重要程度,偏置可以理解为系统的零输入响应,是系统在没有输入的情况下的输出值。
x
→
ω
T
x
+
b
x\to \omega^Tx+b
x→ωTx+b
实际上,模型的参数
ω
\omega
ω和
b
b
b正是决定了这个高维空间中的一个超平面,用于将样本点分在超平面的两侧。而下面的公式也可以说明,样本点距离超平面的距离与属于该类别的概率成正比。
s
(
x
)
=
1
1
+
e
−
(
ω
T
x
+
b
)
s(x)=\frac{1}{1+e^{-(\omega^T x+b)}}
s(x)=1+e−(ωTx+b)1
P
(
y
=
1
∣
x
′
θ
)
=
1
1
+
e
−
(
ω
T
x
+
b
)
P(y=1|x'\theta)=\frac{1}{1+e^{-(\omega^Tx+b)}}
P(y=1∣x′θ)=1+e−(ωTx+b)1
我们将输入向量稍作改动,添加一个常数1的维度,目的是将偏置
b
b
b写进输入向量
x
x
x,同时将权重
ω
\omega
ω增加一维,用于和
x
′
x'
x′的最后一维相乘,得到偏置。
ω
T
x
+
b
=
θ
T
x
′
\omega^Tx+b=\theta^T x'
ωTx+b=θTx′
那么上两式就可以改写成
s
(
x
)
=
1
1
+
e
−
θ
T
x
′
s(x)=\frac{1}{1+e^{-\theta^Tx'}}
s(x)=1+e−θTx′1
P
(
y
=
1
∣
x
′
θ
)
=
1
1
+
e
−
θ
T
x
′
P(y=1|x'\theta)=\frac{1}{1+e^{-\theta^Tx'}}
P(y=1∣x′θ)=1+e−θTx′1
其中,
θ
T
x
′
\theta^Tx'
θTx′是高维空间中一点到由
θ
\theta
θ决定的超平面的距离,因为
θ
T
x
′
=
θ
⃗
⋅
x
⃗
\theta^Tx'=\vec \theta \cdot \vec x
θTx′=θ⋅x,默认向量都是列向量,
θ
\theta
θ规定为超平面的法向量,它可以朝向平面任一侧。距离越大,向量点积的值就越大,根据
s
i
g
m
o
i
d
sigmoid
sigmoid函数的图像我们知道该点属于某一类别的概率值就越接近于1,相反如果数据点在法向量
θ
\theta
θ的另一侧,其点积的值越接近
−
1
-1
−1,属于另一类的概率就越大。


损失函数
在二值分类的问题中,我们将平均交叉熵损失函数写成如下
J
(
θ
)
=
−
1
m
[
∑
i
=
1
m
y
(
i
)
l
o
g
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
]
+
λ
∣
∣
θ
∣
∣
2
2
J(\theta)=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}\ log\ h_\theta(x^{(i)})+(1-y^{(i)})log\ (1-h_\theta(x^{(i)}))]+\lambda\mid \mid \theta \mid\mid ^2_2
J(θ)=−m1[i=1∑my(i) log hθ(x(i))+(1−y(i))log (1−hθ(x(i)))]+λ∣∣θ∣∣22
其中,
h
θ
(
x
(
i
)
)
=
1
1
+
e
−
θ
T
x
(
i
)
′
h_\theta(x^{(i)})=\frac{1}{1+e^{-\theta^Tx^{(i)'}}}
hθ(x(i))=1+e−θTx(i)′1,
x
(
i
)
x^{(i)}
x(i)是数据集中第
i
i
i个样本,这个损失函数也就是Logistic回归的损失函数。下面我们用梯度下降法对它进行求解。
Logistic回归的求解——梯度下降法
直接将梯度下降的算法写出来。
1.
置
迭
代
代
数
k
=
0
,
设
置
初
始
点
x
0
置迭代代数k=0,设置初始点\bm{x_0}
置迭代代数k=0,设置初始点x0
2.
重
复
以
下
操
作
重复以下操作
重复以下操作
3.
计
算
下
降
方
向
P
k
\quad \quad \quad计算下降方向\bm{P_k}
计算下降方向Pk 1
4.
选
择
α
k
∈
ℜ
+
作
为
下
降
步
长
“
尽
量
”
最
小
化
h
(
α
)
=
f
(
x
k
+
α
P
k
)
\quad \quad \quad选择\alpha_k\in \Re_+作为下降步长“尽量”最小化h(\alpha)=f(\bm{x_k}+\alpha\bm{P_k})
选择αk∈ℜ+作为下降步长“尽量”最小化h(α)=f(xk+αPk)2
5.
用
步
长
α
k
来
更
新
当
前
点
x
k
,
x
k
+
1
=
x
k
+
α
k
P
k
,
k
=
k
+
1
\quad \quad \quad用步长\alpha_k来更新当前点\bm{x_k},\bm{x_{k+1}=\bm{x_k+\alpha_kP_k}},k=k+1
用步长αk来更新当前点xk,xk+1=xk+αkPk,k=k+1
6.
当
∣
∣
∇
f
(
x
k
)
<
ϵ
时
算
法
停
止
当\mid \mid \nabla f(\bm{x_k})<\epsilon时算法停止
当∣∣∇f(xk)<ϵ时算法停止
损失函数的梯度计算
补充的向量微分知识。

我们将要对这个函数求梯度向量。
J
(
θ
)
=
−
1
m
[
∑
i
=
1
m
y
(
i
)
l
o
g
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
]
+
λ
∣
∣
θ
∣
∣
2
2
J(\theta)=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}\ log\ h_\theta(x^{(i)})+(1-y^{(i)})log\ (1-h_\theta(x^{(i)}))]+\lambda\mid \mid \theta \mid\mid ^2_2
J(θ)=−m1[i=1∑my(i) log hθ(x(i))+(1−y(i))log (1−hθ(x(i)))]+λ∣∣θ∣∣22
∵
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
,
x
,
θ
是
向
量
\because h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}, x,\theta是向量
∵hθ(x)=1+e−θTx1,x,θ是向量
d
h
(
x
)
d
x
=
h
(
x
)
[
1
−
h
(
x
)
]
\frac{dh(x)}{dx}=h(x)[1-h(x)]
dxdh(x)=h(x)[1−h(x)]
∴
∂
h
θ
(
x
)
∂
θ
=
∂
h
θ
(
x
)
∂
(
θ
T
x
)
∂
(
θ
T
x
)
∂
θ
=
h
θ
(
1
−
h
θ
)
x
T
\therefore \frac{\partial h_\theta(x)}{\partial \theta}=\frac{\partial h_\theta(x)}{\partial(\theta^Tx)}\frac{\partial (\theta^Tx)}{\partial \theta}=h_\theta(1-h_\theta)x^T
∴∂θ∂hθ(x)=∂(θTx)∂hθ(x)∂θ∂(θTx)=hθ(1−hθ)xT
∴
∇
θ
J
(
θ
)
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
1
h
θ
∂
h
θ
∂
θ
+
(
1
−
y
(
i
)
)
1
1
−
h
θ
(
−
1
)
∂
h
θ
∂
θ
]
+
λ
θ
T
\therefore \nabla_\theta J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}\frac{1}{h_\theta}\frac{\partial h_\theta}{\partial \theta}+(1-y^{(i)})\frac{1}{1-h_\theta}(-1)\frac{\partial h_\theta}{\partial \theta}]+\lambda\theta^T
∴∇θJ(θ)=−m1i=1∑m[y(i)hθ1∂θ∂hθ+(1−y(i))1−hθ1(−1)∂θ∂hθ]+λθT
∴
∇
θ
J
(
θ
)
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
1
h
θ
h
θ
(
1
−
h
θ
)
x
(
i
)
T
+
(
y
(
i
)
−
1
)
1
1
−
h
θ
h
θ
(
1
−
h
θ
)
x
(
i
)
T
]
+
λ
θ
T
\therefore \nabla_\theta J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}\frac{1}{h_\theta}h_\theta(1-h_\theta)x^{(i)T}+(y^{(i)}-1)\frac{1}{1-h_\theta}h_\theta(1-h_\theta)x^{(i)T}]+\lambda\theta^T
∴∇θJ(θ)=−m1i=1∑m[y(i)hθ1hθ(1−hθ)x(i)T+(y(i)−1)1−hθ1hθ(1−hθ)x(i)T]+λθT
∴
∇
θ
J
(
θ
)
=
−
1
m
∑
i
=
1
m
x
(
i
)
T
[
y
(
i
)
(
1
−
h
θ
)
+
(
y
(
i
)
−
1
)
h
θ
]
+
λ
θ
T
\therefore \nabla_\theta J(\theta)=-\frac{1}{m} \sum_{i=1}^{m} x^{(i)T} [ y^{(i)} (1-h_\theta)+(y^{(i)}-1) h_\theta]+\lambda\theta^T
∴∇θJ(θ)=−m1i=1∑mx(i)T[y(i)(1−hθ)+(y(i)−1)hθ]+λθT
∴
∇
θ
J
(
θ
)
=
−
1
m
∑
i
=
1
m
x
(
i
)
T
(
y
(
i
)
−
h
θ
)
+
λ
θ
T
\therefore \nabla_\theta J(\theta)=-\frac{1}{m} \sum_{i=1}^{m} x^{(i)T}(y^{(i)}-h_\theta)+\lambda\theta^T
∴∇θJ(θ)=−m1i=1∑mx(i)T(y(i)−hθ)+λθT
上式就是损失函数关于权重向量
θ
\theta
θ的梯度向量,应该是一个行向量
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)