论文阅读_基于深度学习的服装穿搭推荐
论文地址:https://arxiv.org/pdf/1810.02443v1.pdf
《FashionNet: Personalized Outfit Recommendation with Deep Neural Network》是2018年发表在cs.CV上的论文。其目标是建立基于深度学习网络的穿搭推荐系统。
由于时尚产业的利益驱动,近来时尚产品的智能推荐也倍受关注。之前推荐往往比较单一,不能细化推荐,比如推荐场景中的单个商品,推荐不同商品组合等等。目前一些流行服饰社区给出了很多穿搭建议,由此提供了资源,使建模成为可能。
协同过滤
collaborative filtering(CF)是一种推荐系统的常用算法,它通过之前不同用户对同一单品的打分作为训练数据学习用户习惯,但它对数据的稀疏程度非常敏感,在组合推荐问题中,该问题更凸显出来。因此,论文中同时使用了深度学习网络和CF方法。
推荐系统
推荐系统需要解决两个问题:服饰的合理搭配,以及针对不同用户的偏好推荐。通过使用CNN网络提取图片语义可以解决第一个问题;第二个问题可通过将用户的信息编码后送入网络来解决。尽管用户喜好各具特点,但也有一定共性(比如T恤搭配牛仔裤),这样借鉴同类用户的喜好也弥补了单个用户数据有限的问题,最终用精调fine-tune的方式针对具体用户计算最终推荐的搭配。
图像检索技术在推荐系统中被广泛使用,利用用户查询的图片,在图片库中寻找其特征与待检索图片最为相近的商品,使用孪生网络计算特征的兼容性等等,但都很少涉及个人偏好的差异,以及结合个人偏好与商品特征。论文中不仅考虑到商品的相似度,还考虑到不同类别商品在穿搭时的匹配程度,用深度学习网络同时学习了商品的特征和用户差异。
数据设计
论文将服装粗分成:上身、下身、鞋,每一组搭配需要从不同类别中选择一个商品,用分数s(score)度量用户对该搭配的满意度,这里暗含了商品本身的搭配度和用户的偏好。最终将模型计算出的分数最高的组合推荐给用户。
用于训练的数据来自Polyvore网站,包括800个用户建立的搭配,使用它们作为正例,随机生成组合(从每个上身、下身、鞋的类别中各随机选择一件组合)作为反例(文中称“中例”),反例是正例的六倍。
网络结构
模型的目标是查找商品的相关性(穿搭合理与否),而非相似度,假设每组穿搭都由上身t(top),下身b(bottom),鞋s(shoes)三部分组成。
文中设计了下图中A,B,C三种网络结构。
FashionNet A,将三张图片合成一个组合,每个商品图片包含红绿蓝三个通道,组合后有9个通道,作为单个实例代入VGG模型,将提取到的特征代入全连接层,并以Softmax方式计算得分s。图片的特征和兼容性同时被学习。
FashionNet B,将学习图片特征和兼容性分成两部分,三张商品图片分别代入VGG网络,这部分网络结构相同且共享参数,该网络学习了所有类别商品的特征。将特征网络计算出的图片特征连接起来,代入三个全连接网络层,以学习特征之间的兼容性。
FashionNet C,前两种方法同时代入三种商品,因而涉及更多组合的可能性,维度增加使计算量暴增,为解决这一问题,引入了模型C,它用每两个单品做组合,其它与模型B无差别,最后将结果加起来做整体评分。需要注意的是,VGG层使用同样的网络提取不同商品的特征,FC层使用不同参数的网络,训练不同类别之间的差异。
两阶段训练
单一用户的数据可能很少,不足以精调模型,但可能存在很多与他品味想似的用户数据,为了更好地进行个性化推荐,作者设计出了分两阶段训练的网络。
第一阶段,去掉用户个性化数据,使用所有用户数据训练穿搭的共性模型。代入模型的两组穿搭分别是用户创建的穿搭和随机选出的类别中的穿搭(假定用户创建的好于随机选择的)。
第二阶段,加入用户个性化数据,精调(fine-tune)模型。精调网络的方法也有两种,一种是精调整个网络,另一种是冻住(Freeze)特征提取模型,只调整上层的匹配模型,这种方法节约大量算力,但效果稍差。
损失函数
最终模型效果通过排序方法评测,训练时,每次输入一对数据,包括一个正例和一个反例(中性),正例是相互兼容的三张图片(分别是上身、下身、鞋),反例也是三张图片,正例比反例用户评分更高,用上图(d)中的双塔形结构训练网络,最终计算排序损失,损失函数公式如下:
在排序方面,使用标准的排序算法NDCG作为评价标准,公式如下:
它给出了使用策略π时,对前m个推荐组合的评分,m是序列的长度,正例时y为1,反例时y为0。最佳的NDCG得分为1。
训练结果如下表所示:
可以看到策略B和C分数都较高,尤其是策略C对全网络调参时效果更好;分阶段训练优于单阶段训练;全网调参优于部分调参,但计算代价也高很多。
模型效果
最终作者用图片方式展示出不同用户的推荐效果:
图中分别是对两个用户的推荐组合,用红框框出的是用户建立的组合,推荐均使用Fashion C算法,从上到下依次是:全调参的两阶段训练,部分调参的两阶段训练,一阶段训练,使用初始模型的结果。