这篇文章主要介绍联合多个空间(下面介绍有哪些空间)进行学习,使用learning to rank 训练得到排序函数,完成音乐方面的预测任务
每一个预测任务可任务是一个空间:
1.Artist prediction:输入一首歌曲,或一个音乐片段,返回一个有序的歌手列表
2.Song prediction:输入一个歌手,返回一个有序的歌曲列表
3.Similar Artists:输入一个歌手,返回一个有序的相似歌手列表
4.Similar Songs:输入一首歌曲,返回一个有序的相似歌曲的列表
5.Tag prediction:输入一首歌曲,返回一个适合该歌曲的标签列表
模型结构:
文章假设跟音乐相关的歌曲,歌手,标签都可以用一个d维的向量来表征,两个向量的相似性用点积(dot product)来衡量
歌手:
对于一个给定的歌手,下标用j表示,j ∈ 1, . . . , |A|,这个歌手的特征向量表示为:
ΦArtist(i):{1,...,|A|}→Rd = Ai
其中A = [A1,...,A|A|] ,A是一个d × |A|大小的矩阵,d表示用于表征歌手特征向量的维度, |A|表示歌手的个数,矩阵A将在学习中获得
标签:
相似的,对于一个标签,用j表示下标,j ∈ 1, . . . , |T |,这个标签的特征向量表示为:
ΦTag(i):{1,...,|T|}→Rd = Ti
其中T = [T1,...,T|T|],A是一个d × |T|大小的矩阵,d表示用于表征标签特征向量的维度, |T|表示标签的个数,矩阵T将在学习的获得
歌曲:
最后,对于一首歌曲,其声学特征向量用s′表示,我们使用线性转移矩阵V,将声学特征转移到d维向量上:
ΦSong(s′):R|S|→ Rd = Vs′
矩阵V是一个d × |S|大小的矩阵,矩阵V也将在学习阶段获得
这样便获得了歌手,歌曲,标签的表征方法
实体类别
特征向量
大小
获得方式
歌手
ΦArtist(i)=Ai
d × |A|
A:学习获得
歌曲
ΦTag(i)=Ti
d × |T|
T:学习获得
标签
ΦSong(s′)=Vs′
d × |S|
V:学习获得,s`声学特征
那么针对之前提到的预测任务,我们用f(x)表示排序函数,例如Artist prediction:

其中候选的歌手i ∈ {1, . . . , |A|}会根据fi(x)的magnitude大小进行排序,高的排在前面,对于其他的task也有相似的排序函数:
966FTL%60GNR%7BL7_%24O7%5BV.png)

GS4FOGRY.png)

从上面的排序函数中可以看出,许多预测任务都含有相同的参数。例如song prediction 和 similar artist都用到歌手的特征矩阵A,tag prediction 和song prediction 都用到了线性转移矩阵V。因此,我们可以在多个任务下,同时训练参数矩阵A,T,V,使得系统获得更好的效果。
训练模型:
multi-Task Training
假设任务是tag prediction 和artist prediction,可以将这两个任务联合起来训练参数,目标函数定义为:
CGOA2QF_%24W82%7BG.png)
这里err表示损失函数
文章中一共使用了两种损失函数:
1.AUC Marginine Ranking Loss

其中x表示输入,y表示输出(标注集),这个损失函数考虑所有的可能的输出,根据排序函数f计算magnitude,只要k(不在标注集的所有结果)的模大于标注集里任意结果,或者两者只差小于1,都会累加到损失结果中。如果两个输出结果的margin violation(损失函数值)相同,那这个两个结果将被视为等同的。随意这个损失函数在优化前k个排序结果时,不太适用。
2.WARP Loss
*WARP Loss这个损失函数最初设计的时候用于学习得到矩阵参数,给图片打标签,并且标签之间是没有序的
这个损失函数定义为:

其中ranky(f(x))是通过矩阵函数f(x)计算得到的实际排名:

其中I()为指示函数,I(True) = 1, I(False) = 0,L()将这个排名转换成一种惩罚度

接着原作者将指示函数做了调整,使用hinge loss,使得损失函数是代替指示函数连续的。(没看懂)

其中|t|+表示正数部分,如果t<0 ,则|t|+ = 0,

%604V3@~I(ZV%5DJ~F)D.png)
GZTFM~6%7D9T.png)
对于P(x,y)上的任意一点



使得改点的积分为0,一次来更新参数矩阵A,T,V
H8K~GD(S1B.png)
其中βt表示参数矩阵,βt+1表示更新后的参数矩阵。问章采用的就是这种随机梯度下降的方式更新参数矩阵,具体步骤如下:

A7W1O@XYGYS0N0.png)
*疑问:这个随时函数可以通过训练学习计算给定输出情况下,哪些输出合理,但并没有考虑输出结果的顺序
网友评论