当搭配遇上个性化推荐

总第 111 篇文章,本文大约 3000 字,阅读大约需要 10 分钟

今天介绍的是一篇个性化搭配推荐的论文,是 2017 年时候的论文,这也是比较早的开始结合搭配和个性化推荐的一个工作,基于度量学习和排序学习的方法。

论文题目:FashionNet: Personalized Outfit Recommendation with Deep Neural Network

论文地址:https://www.ijcai.org/proceedings/2017/0239.pdf

概览

将推荐加入到搭配中,实现个性化搭配的推荐。采用的也是深度学习的算法-- CNN 模型,具体实现就是用 VGG-16 网络模型作为基础,实现 FashionNet 模型,一个 FashionNet 模型包括两个网络,特征提取网络和实现搭配的匹配网络,这部分作者设计了 3 种网络结构,并做了对比实验,而在训练上采用的两阶段训练策略,即先训练一个通用的搭配模型,然后加入用户信息来微调网络模型,此外网络的最终结构如下所示,输入两套搭配,正样本是训练集 polyvore ,也就是用户自己上传的搭配,负样本就是随机选择衣服的搭配,分别通过 FashionNet,然后计算 RankLoss。


研究方法

本文研究的问题类似于度量学习,度量学习需要学习的是物体间的距离,或者说是相似性,而搭配需要学会的是衣服之间的匹配性;

网络结构

设计了三种网络结构,如下图所示。

FashionNet A

第一种网络结构,输入的时候将一套搭配里的衣服图片在颜色通道上进行concat,得到的就是一个 w*h*9 的输入图片,然后输入 VGGNet 网络,提取特征,接着是 1 个 FC(全连接)层+ softmax,输出两个数值,表示喜欢和不喜欢的概率;

这个网络的特点就是将特征学习和匹配性衡量都集成在一起;

FashionNet B

第二种网络结构,输入的时候并不会将搭配中的衣服图片 concat 起来,而是分别传入单独的 VGGNet 中,但每种衣服经过的网络都是相同的,也就是都被影射到共同的隐空间中,然后提取到的特征 concat 起来,后面跟着 3 个 FC 层 + softmax。

FashionNet C

前两个网络的问题:

  1. 在获取高阶关系的时候会有困难;

  2. 造成数据空间的扩大(原始数据或者特征空间),这要求大量的训练样本,但实际上并没有足够数量的训练样本;

因此,第三种网络结构,特征提取部分和 FashionNet B 是一样的,但是之后则是将任意的两个衣服提取到的特征 concat,经过各自的匹配网络(3FC+softmax),匹配网络的数量就和搭配数量有关系了;不同的匹配网络应用于不同类型衣服对,比如上装-鞋子,上装-下装对等,匹配网络的结果会累加起来得到搭配的最终得分 s。

训练网络模型

最终训练的网络结构如下图所示,

个性化搭配推荐不仅仅涉及到度量学习,还是是一个排序学习(learning-to-rank )问题,输入是正负样本对,分别输入一个 FashionNet ,网络输出的评分 s ,再采用 rank loss 计算 Loss。公式如下图所示:

训练

采用两阶段训练策略的原因有:

  • 每个用户的搭配数量是比较少的,特别是如果需要训练一个性能很好的神经网络;

  • 很多用户的搭配都比较相似,这些相似的搭配数量并不少;

  • 尽管每个用户的搭配审美都不完全相同,但还是存在很多通用的搭配尝试,比如衬衫通常都会搭配牛仔裤

基于以上的原因,选择两阶段训练网络的策略。

第一阶段的训练是学习一个通用的搭配网络模型,在这一步,会丢弃用户信息,将所有的搭配都混合在一起,然后训练网络。一个训练样本是正样本和负样本的搭配对,采用在 ImageNet 上预训练好的参数初始化 VGGNet,其他的网络层参数则是通过高斯分布进行初始化;

第二阶段是训练用户特定的模型(user-specific model)来进行个性化推荐。初始化是用第一步训练好的网络模型参数,接着使用每个用户的数据来微调网络。

对于上述的 3 种网络结构在第二阶段的微调,是这样设置的:

  1. FashionNet A 的微调是对整个网络都微调(特征提取和匹配网络);

  2. 对于 B 和 C 两个网络,有两种策略:

  • 微调整个网络,特征提取网络和匹配网络都会有个性化的参数,也就是对不同的用户,同样的衣服会有不同的特征表示;

  • 固定特征提取网络,仅微调匹配网络。这种做法会加快训练速度,实际应用中更多的微调都是这种做法。

三种网络结构的参数设置情况如下所示:


实验

数据集

采用的 Polyvore 数据集,包含来自 800 个用户上传的搭配数据,每套搭配是三件衣服--上装、下装和鞋子,将 polyvore 作为正样本,负样本则是随机选择上装、下装和鞋子得到的搭配。

数据集分为训练集、验证集和测试集,在每个集合中,每个用户的正样本数量分别是 202,46 和 62,而负样本则是正样本的 6 倍,也就是 1212,276 和 372。

指标

NDCG 评价标准,用来评价一个排序的列表,其公式如下所示,第 m 个位置的 NDCG 是:

 表示一个理想排序的得分,对于正样本, 是 1,负样本是 0;

NDCG 的最优数值是 1;

Mean NDCG 是 NDCG@m (m=1,....M,表示排序的长度)的均值;

最终采用的指标:

  • mean NDCG:所有用户的 mean NDCG@m,也就是先计算不同m数值的NDCG,然后求平均,再除以用户数量;

  • average of NDCG @m:所有用户的NDCG@m,不同m值的均值(仅除以用户数量)

  • top-k 结果中正样本的数量(特定的 k 数量)

参数设置

使用的框架是 Caffe,batch 为 30,epoch 是 18。

学习率的策略参考论文《Return of the devil in the details: Delving deep into convolutional nets》。

实验结果

实验结果如下图所示:

上图中,Initial 是采用初始化参数的结果,也就是预训练模型的结果,Stage one 就是训练好第一阶段的模型,Stage two (partial)  和 Stage two(whole) 就是第二阶段的微调的两种策略,前者就是固定特征提取网络,微调匹配网络,后者就是整个网络都微调;Stage two(direct) 是不经过第一阶段的训练,直接微调网络的结果,应该就是直接用每个用户的数据来训练一个网络模型的结果。

通过实验结果的对比,可以得到这四个结论:

  1. FashionNet A vs B、C 前者是将特征提取和匹配计算都放在一个网络中,而后面两种网络是分开这两种功能,实验结果表明采用不同网络实现不同的功能,可以取得更好的性能;

  2. FashionNet B vs C 两个网络的区别是在匹配网络的设计,前者是仅设计了一个匹配网络,后者是任何两种不同类别的衣服的特征进行 concat 后,输入一个单独的匹配网络,实验结果是后者的效果更好,这表明将高阶关系分开成一系列成对组合是更佳的解决办法;

  3. 两阶段训练策略 对比第一阶段和第二阶段的结果,后者效果更好,这也说明微调是非常有用的技术;

  4. Stage two (partial)  vs Stage two(whole) 实验结果表明后者的效果更好,这表明学习一个特定用户的特征表示对于推荐任务很有帮助,但这种策略的训练时间会更久,它需要重新计算所有衣服的特征,因此,实际应用会采用效果稍差的第一种方法,仅仅微调匹配网络。


小结

这篇论文的思路是结合了度量学习和排序学习的方法,并且应用了 CNN 来进行特征提取,然后计算衣服之间的匹配性,训练策略上也是从训练通用的搭配模型到训练个性化搭配模型。

不过,这里我也还是存在一个小小的疑问的:按照论文的介绍,第二步采用用户的搭配来训练个性化推荐模型,那最终就是每个用户都会训练得到一个模型,也就是用户越多,训练得到的模型数量也就越多了

当然,这可能也是我的理解不到位,如果看过这篇论文的,也欢迎和我讨论一下。

欢迎留言,跟我进行交流!

欢迎关注我的微信公众号--算法猿的成长,或者扫描下方的二维码,大家一起交流,学习和进步!

如果觉得不错,在看、转发就是对小编的一个支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020年周记(1/50)

总第 112 篇文章,本文大约 1200 字,阅读大约需要 3 分钟正如标题所言,希望 2020 年能写满 50 篇周记吧,刚好前两周没有发,所以希望接下来每周完成一篇。周记的内容主要是这几方面的内容:工作学习阅读&…

python版代码整洁之道

总第 113 篇文章,本文大约 8000 字,阅读大约需要 20 分钟原文:https://github.com/zedr/clean-code-pythonpython 版的代码整洁之道。目录如下所示:介绍变量函数1. 介绍软件工程的原则,来自 Robert C. Martins 的书--《…

MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。...

MVC3.0框架开发项目: 有时在程序运行的时候会出现“HTTP 404。您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。”的错误提示。 在这里我们以运行时打开登录页面&#xff…

2020年1月总结

总第 114 篇文章,本文大约 1300 字,阅读大约需要 4 分钟这是 2020 年的第一篇月总结,总结的内容和周记差不多,也还是从这几个方面进行总结:工作学习阅读&写作2月计划工作这个月的工作时间大概是2周多一点&#xff…

python技巧(1)--如何转换itertools.chain对象为数组

总第 115 篇文章,本文大约 900 字,阅读大约需要 3 分钟之前做1月总结的时候说过希望每天或者每2天开始的更新一些学习笔记,这是开始的第一篇。这篇介绍的是如何把一个 itertools.chain 对象转换为一个数组。参考 stackoverflow 上的一个回答&…

python技巧(2)--碾平列表和列表去重

总第 116 篇文章,本文大约 1000 字,阅读大约需要 3 分钟今天介绍和列表相关的两个小技巧:碾平列表(flatten list),也就是列表里的元素也带有列表的情况;列表去重,保留原始顺序和不保…

原来电脑并不需要重装系统才能恢复出厂设置,这个操作学起来!

前言 小伙伴们应该都知道手机上有恢复出厂设置的功能,如果想要把手机送给朋友或者卖给别人,就会先恢复出厂设置。 但换到Windows电脑上之后,如果出现同样的情况,就会第一时间想到重装系统。就好像Windows电脑上不存在恢复出厂设…

2020年周记(2/50)

总第 117 篇文章,本文大约 1400 字,阅读大约需要 5 分钟因为春节假期的延长,中间还是休息过长,少了两周的周记了,这是2020年的第二篇周记,内容还是这几个方面:工作学习阅读&写作其他下周计划…

一日一学:返回排序好的列表的索引顺序

总第 118 篇文章,本文大约 700 字,阅读大约需要 2 分钟今天介绍的是对列表排序后,返回排序好的索引顺序。问题描述:给定一个列表 [2, 3, 1, 4, 5] ,怎么返回排序后的索引顺序,即 [2,0,1,3,4] ?解决方法&a…

2020年周记(3/50)

总第 119 篇文章,本文大约 700 字,阅读大约需要 2 分钟第三篇周记,依然在家办公的一周。工作学习阅读&写作其他下周计划ps. 昨天发文章后才发现有些地方需要修改,所以删除了发出的文章,修改后再发出来&#xff1…

一日一学--如何对数值型特征进行分桶

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 120 篇文章,本文大约 1200 字,阅读大约需要 3 分钟今天这篇文章主要是介绍在特征工程中,对数值型特征进行分桶操作的方法。简介分桶是离散化的常用…

常见的数据增强项目和论文介绍

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 121 篇文章,本文大约 1100 字,阅读大约需要 3 分钟在机器学习项目中,数据集对算法模型的性能是有很大的影响的,特别是现在深度学习&a…

PS网页设计教程XXIX——如何在PS中设计一个画廊布局

作为编码者,美工基础是偏弱的。我们可以参考一些成熟的网页PS教程,提高自身的设计能力。套用一句话,“熟读唐诗三百首,不会作诗也会吟”。 本系列的教程来源于网上的PS教程,都是国外的,全英文的。本人尝试翻…

RS(2)--从文本数据到用户画像

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 122 篇文章,本文大约 5100 字,阅读大约需要 15 分钟上一篇文章简单介绍了推荐系统的定义和应用,推荐系统第二篇,简单介绍用户画像的知…

深度学习算法简要综述(上)

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 123 篇文章,本文大约 2300 字,阅读大约需要 7 分钟原文:https://theaisummer.com/Deep-Learning-Algorithms/作者:Sergios Karagianna…

深度学习算法简要综述(下)

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 124 篇文章,本文大约 3731 字,阅读大约需要 10 分钟原文:https://theaisummer.com/Deep-Learning-Algorithms/作者:Sergios Karagianna…

关于AI你可能不知道的5件事情

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 125 篇文章,本文大约 1400 字,阅读大约需要 7 分钟原文:https://www.blog.google/technology/ai/five-things-a-to-z-ai/作者:Gina Nef…