论文标题:You eat with your eyes first: Optimizing Yelp Image 论文链接:https://arxiv.org/abs/2011.01434 论文单位:斯坦福大学
01
STEPS 引言
该论文是一篇利用AI技术分析用户餐饮行为的文章,[目的是为餐厅老板支招看看通过什么方式能吸引到用户]。
简单介绍一下论文中提及到的Yelp网站如下图所示,它是美国著名商户点评网站,囊括各地餐馆、购物中心、酒店、旅游等领域的商户,用户可以在Yelp网站中给商户打分,提交评论,交流购物体验等,感觉跟中国的大众点评差不多。
Yelp网站有大量的用户群体,约有3600万用户,单就在2019年的第四季度就有3000万用餐者。可以毫不夸张地说,在当今高评论、高流量的世界里,糟糕的评论可以“杀死”一家餐馆。Yelp评级增加一星会导致餐馆收入增加5-9%,这对独立餐厅的收入产生了主要影响。
有观察者发现消费者的评价受广告图像影响较大。在食品行业,小企业往往利润微薄,无力承担连锁餐厅的广告预算。在Yelp上餐厅可以能够上传的它们的食品的广告图片宣传自己餐厅的特色。
企业主其实不清楚一个吸引顾客的“好”形象是什么样子的。[在该论文种作者使用Yelp的图像数据集和基于星级的评估系统来衡量图像在促进餐饮业务发展方面的有效性]。
作者使用迁移学习来训练一个接受Yelp图像并预测星级的分类器。并且作者用Yelp 数据集训练一个GAN来定性研究餐饮图像的共同属性。
实验中对各种图像类别的星级进行分类,分类准确率可以达到90-98%,并观察到包含蓝天、开放环境和许多窗口的图像与好评相关联。
02
STEPS 论文贡献
该论文的贡献可以归结为三点分别是
03
STEPS 模型介绍
该论文首先以迁移学习为研究出发点。论文中涉及的数据集Yelp大约有100000张图像,共9类且分布不均匀。作者为了能够获得高质量模型分类器,测试了各种超参数组合、损失函数、优化器。
在该论文中作者训练数据集中使用的优化器的算法有SGD(随机梯度下降),因为SGD是在减少小批量误差的方向上执行权重更新,所采用的深度学习框架是PyTorch,其中动量更新的SGD的公式如下所示
其中表示参数,是梯度,是速度。另外,作者也测试Adma优化器的训练性能,Adma结合了RMSProp和AdaGrad的原理,其通过计算力矩估计值来对模型参数进行更新,具体公式如下所示:
但Adma需要注意的一个问题就是如果给定错误的参数,它将无法收敛。
要知道在该论文中的数据集的9个分类的距离是不等距的[这里需要注意的是分类距离不等距不是说类内数据分布不均匀],如果一个餐馆形象的真实标签是“1.5颗星”,与预测标签“5颗星”相比,模型预测标签“2 颗星”在训练的过程中应该受到更少的惩罚,所以在该论文中采用类邻近性作为分类的测试指标。
论文中采用的损失函数是均方误差损失和交叉熵损失,其中均方误差的损失公式如下所示:
交叉熵损失具体公式如下所示:
对于训练一个深度神经网络来说最让人头疼的就是超参数的调优。在该论文中作者对学习率、学习率衰减、权重、动量、批量等各方面的参数调优都进行大量的尝试。
作者的调优策略是先在10的数量级上进行粗粒度搜索,然后在定义的范围内使用随机初始化进行细粒度搜索。
作者在预训练模型(在ResNet-18中)上进行微调,用预训练权重初始化模型,然后在提供的图像上进行正常训练。对于特征提取,模型用预训练的权重初始化,并且在训练期间仅更新最终的完全连接的层。
训练的过程中发现相邻评分星级之间的差异有些随意,为了提高模型的实用性和简单性,作者对于类别进行了进一步的划分。假设用户将评论[0,3.5]星视为低于平均水平,将评论4.0星视为平均水平,将任何评论[4.5,5]视为高于平均水平。
作者训练一种新的分类器,它接受相同的输入图像,但将输出类别的数量减少到3个[从9个类别进一步缩减为3个类别更有助于可视化]。
如下所示:该论文中作者基于Yelp数据集训练了一个GAN模型。经典的GAN框架中涉及一个生成模型和一个判别器,通过这二者来“竞争”减少对抗损失,进而使得GAN的生成器能够模拟出真实的数据分布。
生成器接受随机噪声,并尝试创建与真实图像分布相匹配的图像;判别器试图判别图像是否是原始数据集的成员[在该论文中判别器的作用是判别生成器生成的Yelp数据集中的图像是否为真],GAN的具体的公式如下所示:
从公式中可以看出此方法是通过零和博弈的方式训练来生成器和判别器。
由于输入的星级产生不同类别的图像,所以作者相应做了一个处理就是在不同分类子集上训练不同的模型[这里需要指明的是其实作者可以使用有监督的GAN来对不同的类别进行生成,但是为了保证图像质量的生成效果],作者决定采用无监督的GAN在各个类别中对数据进行训练。
作者在该论文中主要使用的框架是StyleGAN2[StyleGAN2 是当前无监督GAN 中图像生成效果非常棒的框架],其中输入的随机噪声被转换成中间编码向量,它允许创建样式和使用自适应实例规范化)。
04
STEPS 数据集
作者从Yelp学术数据集提取数据,该数据集通常用于自然语言处理研究,但也包含一个包含200000 多幅图像的文件夹。作者将每张图片与一家企业和该企业的星级相关联,所以需要进行大量的预处理。
该数据集由10个大都市地区209393家企业的1968703名用户的8021122条评论组成,数据集大小有20 GB,其中代表的大都市区有蒙特利尔、卡尔加里、多伦多、匹兹堡、夏洛特、厄巴纳-香槟、凤凰城、拉斯维加斯、麦迪逊和克利夫兰,其中相关的字段被捕获并聚集在几个特定的标签周围:业务id和用户id。
“星级”字段包含每个业务的浮动星级。每个图像都包含一个标签字段,分类为:“食物”、“饮料”、“菜单”、“内部”或“外部”。
为了减小特征空间的大小,作者从Yelp数据集中选择感兴趣多个特定字段。并只保留商业id、 照片id、标签和星级。论文中将每个照片标识映射到一个业务标识,然后再映射到它的星级,最后将图像转换成numpy数组,填充并缩小图像到一个恒定的大小。
所有预处理的图像都存储在8维数组(3,144,200)中。处理后的图像阵列和星级一起存储在最终的数字阵列中,并保存到磁盘上。在该论文中作者实现了一个定制的数据集类,它与这些保存的数组进行交互,并由pytorch DataLoader进行使用。
对于GAN训练,作者根据标签和星级将图像分成新的目录[即一个文件夹包含所有5星级食物图像,另一个文件夹包含所有星级内部图像],论文中明确选择给餐馆的所有图像分配相同的星值。
需要注意一点的是在北美中等城市的所有位置,获得的任何结果都可能不适用于其他环境中的偏好。
如图下图所示,星级严重向左倾斜,并且分布不是正态或均匀的。一个考虑因素是,所有这些评论都来自只占客户群体一部分的Yelp 用户,他们的评论不一定反映他们自己偏好之外的任何因素。
05
STEPS 实验结果
如下图所示,显示了ResNet-18中的FC层的最高精度和损失。在实验中可以发现训练数据没有显著的过度拟合,大约7epoch后,损失和精度都收敛了。
因此此时应用的学习速率衰减似乎非常有帮助,这种高准确度的部分原因可以在下图中看到的评级分布。可以发现,由于平均评级聚集在4,该模型有更高的动机预测更高的星级。
由下表可以发现5个等级中的每一个等级的相对准确度都是显著的。测试准确度从高到低的顺序分别是室内、菜单、室外、饮料、食物。要知道食物数据集大约是第二大数据集的两倍,显然,训练数据的大小并不是导致准确性差异的唯一指标。
在该论文中作者认为这种分类精度的排序可以归因于数据集大小和类内变化的组合。菜单的平均外观可能远没有商店里的一道菜看起来那么多变,这可能导致菜单具有如此高的准确性。
作者观察到一些与正面评价相关的特定品质,比如大窗户、晴朗的蓝天和清晰的店面很普遍,并且生成的图像在视图中显示店面以及地理特征或地标。这表明餐馆的位置和周围的环境氛围对消费者很重要。
如下图所示,可以看到食物图像在生成时表现不佳。把这归因于食物外观和风格的巨大变化,不仅仅是烹饪和传统之间的变化,而是食物外观的根本变化。