在第二部分,我记录了实验中提取图像特征的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=1n(y iyi)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=1mj=01 1{y(i)=j} log p(y(i)=jx(i);θ)] 1 { ⋅ } 1\{ \cdot \} 1{}是指示函数,当 y ( i ) = j y^{(i)}=j y(i)=j时函数值为1否则为0
0 − 1 0-1 01损失 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=0m 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=0D 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θ θjp)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θ θjp)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=1xθ)=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θTx1
P ( y = 1 ∣ x ′ θ ) = 1 1 + e − θ T x ′ P(y=1|x'\theta)=\frac{1}{1+e^{-\theta^Tx'}} P(y=1xθ)=1+eθTx1
其中, θ 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=1my(i) log hθ(x(i))+(1y(i))log (1hθ(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=0x0
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 αkxk,xk+1=xk+αkPk,k=k+1
6. 当 ∣ ∣ ∇ f ( x k ) &lt; ϵ 时 算 法 停 止 当\mid \mid \nabla f(\bm{x_k})&lt;\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=1my(i) log hθ(x(i))+(1y(i))log (1hθ(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)[1h(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θ(1hθ)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=1m[y(i)hθ1θhθ+(1y(i))1hθ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=1m[y(i)hθ1hθ(1hθ)x(i)T+(y(i)1)1hθ1hθ(1hθ)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=1mx(i)T[y(i)(1hθ)+(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=1mx(i)T(y(i)hθ)+λθT
上式就是损失函数关于权重向量 θ \theta θ的梯度向量,应该是一个行向量


  1. 算法的关键在于求出每次迭代的下降方向,即 ∇ f ( x k ) = ∂ f ( x k ) ∂   θ ⃗ \nabla f(\bm{x_k})=\frac{\partial f(\bm{x_k})}{\partial \ \bm{ \vec \theta}} f(xk)= θ f(xk),这里的自变量是一个向量。 ↩︎

  2. 下降方向确定的情话况下,将 α \alpha α看做新函数的自变量,选择最合适的下降步长,以便获得原函数最大的下降程度。这个函数的优化不必要特别精确,否则计算复杂度的升高会得不偿失。 ↩︎

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐