机器学习与计算机视觉入门项目——视频投篮检测(三)

  • Post author:
  • Post category:其他


在第二部分,我记录了实验中提取图像特征的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






M


S


E




=






















n














1































i


=


1



















n


















(











y

































i































y










i



















)










2
















y

i

y_i







y










i





















是数据的真实标签,



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)]




















m














1




















[











i


=


1



















m





























j


=


0



















1






















1


{




y











(


i


)












=








j


}




l


o


g




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)}}







L











0


,


1





















=

















i


=


0



















m























I











f


(



x











(


i


)










)















̸





















=




y











(


i


)


































I

x

I_x







I










x





















也是指示函数,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)






N


L


L


(


θ


,




D


)




=






















i


=


0






















D

























l


o


g




P


(


Y




=









y











(


i


)






















x











(


i


)










,




θ


)








L

1

L1






L


1





正则化





E

(

θ

,

D

)

=

N

L

L

(

θ

,

D

)

+

λ

θ

1

E(\theta,D)=NLL(\theta,D)+\lambda\mid \mid \theta \mid \mid_1






E


(


θ


,




D


)




=








N


L


L


(


θ


,




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














)























p
















1































p




=








1








L

2

L2






L


2





正则化





E

(

θ

,

D

)

=

N

L

L

(

θ

,

D

)

+

λ

θ

2

E(\theta,D)=NLL(\theta,D)+\lambda\mid \mid \theta \mid \mid_2






E


(


θ


,




D


)




=








N


L


L


(


θ


,




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














)























p
















1































p




=








2





我所理解的正则化的一个目的是限制



θ

\theta






θ





的各维分量不至于出现极大的值,也就是避免出现输入向量中某一维度



Logistic回归



基本原理

logistic回归是一个基于概率的线性二分类器,通过学习一组权重向量



ω

\omega






ω





和偏置



b

b






b





,模型将一个输入向量映射到一个高维空间。权重可以理解为对输入特征向量的线性加权,体现了不同维度对分类的重要程度,偏置可以理解为系统的零输入响应,是系统在没有输入的情况下的输出值。





x

ω

T

x

+

b

x\to \omega^Tx+b






x














ω










T









x




+








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














(



ω










T









x


+


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














(



ω










T









x


+


b


)






















1

























我们将输入向量稍作改动,添加一个常数1的维度,目的是将偏置



b

b






b





写进输入向量



x

x






x





,同时将权重



ω

\omega






ω





增加一维,用于和



x

x'







x

























的最后一维相乘,得到偏置。





ω

T

x

+

b

=

θ

T

x

\omega^Tx+b=\theta^T x'







ω










T









x




+








b




=









θ










T










x

























那么上两式就可以改写成





s

(

x

)

=

1

1

+

e

θ

T

x

s(x)=\frac{1}{1+e^{-\theta^Tx'}}






s


(


x


)




=



















1




+





e















θ










T










x










































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















θ










T










x










































1

























其中,



θ

T

x

\theta^Tx'







θ










T










x

























是高维空间中一点到由



θ

\theta






θ





决定的超平面的距离,因为



θ

T

x

=

θ

x

\theta^Tx'=\vec \theta \cdot \vec x







θ










T










x
























=















θ


































x



















,默认向量都是列向量,



θ

\theta






θ





规定为超平面的法向量,它可以朝向平面任一侧。距离越大,向量点积的值就越大,根据



s

i

g

m

o

i

d

sigmoid






s


i


g


m


o


i


d





函数的图像我们知道该点属于某一类别的概率值就越接近于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


(


θ


)




=






















m














1




















[











i


=


1



















m





















y











(


i


)












l


o


g





h










θ


















(



x











(


i


)










)




+








(


1














y











(


i


)










)


l


o


g




(


1














h










θ


















(



x











(


i


)










)


)


]




+








λ




















θ























2








2























其中,



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















θ









T









x










(


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























x










0
























2.



重复以下操作




























3.



P

k

\quad \quad \quad计算下降方向\bm{P_k}

































P










k

























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


(





x










k






















+








α





P










k




















)







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







































x










k




















,







x











k


+


1





















=







x










k




















+





α










k



















P










k






















,




k




=








k




+








1






6.



f

(

x

k

)

<

ϵ

当\mid \mid \nabla f(\bm{x_k})<\epsilon时算法停止






























f


(





x










k




















)




<








ϵ





















损失函数的梯度计算

补充的向量微分知识。

在这里插入图片描述

我们将要对这个函数求梯度向量。





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


(


θ


)




=






















m














1




















[











i


=


1



















m





















y











(


i


)












l


o


g





h










θ


















(



x











(


i


)










)




+








(


1














y











(


i


)










)


l


o


g




(


1














h










θ


















(



x











(


i


)










)


)


]




+








λ




















θ























2








2

























h

θ

(

x

)

=

1

1

+

e

θ

T

x

,

x

,

θ

\because h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}, x,\theta是向量
















h










θ


















(


x


)




=



















1




+





e















θ










T









x






















1




















,




x


,




θ




















d

h

(

x

)

d

x

=

h

(

x

)

[

1

h

(

x

)

]

\frac{dh(x)}{dx}=h(x)[1-h(x)]

















d


x














d


h


(


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


)






















=






















(



θ










T









x


)


















h










θ


















(


x


)


































θ

















(



θ










T









x


)






















=









h










θ


















(


1














h










θ


















)



x










T


















θ

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


(


θ


)




=






















m














1































i


=


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


(


θ


)




=






















m














1































i


=


1



















m


















[



y











(


i


)






















h










θ






























1





















h










θ


















(


1














h










θ


















)



x











(


i


)


T












+








(



y











(


i


)





















1


)













1










h










θ






























1





















h










θ


















(


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


(


θ


)




=






















m














1































i


=


1



















m





















x











(


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


(


θ


)




=






















m














1































i


=


1



















m





















x











(


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


    (





    x










    k




















    )




    =




































    θ



































    f


    (





    x










    k




















    )
























    ,这里的自变量是一个向量。

    ↩︎

  2. 下降方向确定的情话况下,将



    α

    \alpha






    α





    看做新函数的自变量,选择最合适的下降步长,以便获得原函数最大的下降程度。这个函数的优化不必要特别精确,否则计算复杂度的升高会得不偿失。

    ↩︎



版权声明:本文为hhy_csdn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。