自GitHub
参与:蒋思源、吴攀
生成对抗网络(GAN)是近段时间以来最受研究者关注的机器学习方法之一,深度学习泰斗 Yann LeCun 就曾多次谈到 这种机器学习理念的巨大价值和未来前景。在本文中,机器之心总结了 GitHub 上两篇关于 GAN 的资源,其中一篇介绍了 GAN 的一些引人关注的新理论和实践(如 Wasserstein GAN),另一篇则集中展示了大量 GAN 相关的论文。
以下是两篇原文的链接:
GAN 理论&实践的新进展:https://casmls.github.io/general/2017/04/13/gan.html
GAN 论文列表项目:https://github.com/nightrome/really-awesome-gan
GAN 理论&实践的新进展
首先我们看看 Liping Liu 在 github.io 上发布的这篇介绍了 GAN 理论和实践上的新进展的文章。这篇文章对两篇 GAN 相关的论文进行了探讨;其中第一篇是 Arora et al. 的《Generalization and Equilibrium in Generative Adversarial Nets》,该论文是一篇对 GAN 的理论研究;第二篇则是 Gulrajani et al. 的《Improved Training of Wasserstein GANs》,其介绍了一种用于 Facebook 最近提出并引起了广泛关注的 Wasserstein GAN 的新训练方法。下面的视频对第一篇论文给出了很好的介绍:
GAN 和 Wasserstein GAN
GAN 训练是一个两方博弈过程,其中生成器(generator)的目标是最小化其生成的分布和数据分布之间的差异,而判别器(discriminator)的工作则是尽力区分生成器分布的样本和真实数据分布的样本。当判别器的表现不比随机乱猜更好时,我们就认为生成器「获胜」了。
基本 GAN 的优化问题是一个「最小-最大问题(min-max problem)」:
简单解释一下,最好的判别器会给出生成器分布 G(h),h∼pNormal 与数据分布 pdata 之间的差的度量。如果我们有 pdata(x) 且该判别器可以是任意函数,那么该生成器的优化目标就是最小化 pdata 和 G(h) 之间的 Jensen-Shannon 散度。
在实际中,人们已经在使用 Wasserstein 距离来度量两个分布之间的差异了。可参阅以下文章:
Robin Winstanley 的《Modified GANs》:https://casmls.github.io/general/2017/02/23/modified-gans.html
数据分布和生成分布之间的 Wasserstein 距离是:
其中 L1 表示 1-Lipschitz 函数集;f 是指判别器,其采用了神经网络的形式,并通过 GAN 训练来学习。其目标是最小化这两个分布之间的 Wasserstein 距离。
第一篇论文解决了以下问题:
1. 差异的度量定义在分布之上,但是当目标是使用有限样本计算的时候,我们能得到什么结果?
2. 训练能否达到均衡?
3.「达到均衡」究竟是什么意思?
第二篇论文研究了这个惩罚优化器(penalizing the optimizer)的问题——以便其在 1-Lipschitz 空间中近似找到最优的判别器。
论文 1:GAN 中的泛化与均衡(Generalization and Equilibrium in Generative Adversarial Nets)
论文地址:https://arxiv.org/abs/1703.00573
距离度量的泛化
Arora et al 引进了一种新的距离度量:神经网络散度(neural network divergence)。该距离度量定义在由神经网络生成的分布上。
定理:当样本空间足够大,两个分布之间的距离可以由各自样本间的距离逼近。
均衡
直观解释:一个强大的生成器总是能赢得对抗,因为它能使用无限的混合分量逼近数据的分布。弱一些的生成器使用有限但又足够多的混合分量也能近似逼近赢得博弈。
设置博弈:u 和 v 代表着生成器和判别器的纯策略。博弈的收益函数 F(u,v) 就是该 GAN 的目标函数:
根据冯·诺依曼的一个定理,混合策略总是能实现均衡,但在该理想情况下,生成器和判别器都需要考虑无限的纯策略。本论文提出有限纯策略的*ϵ*-近似均衡。
定理:给定生成器和判别器足够多的混合分量,生成器能近似赢得博弈。
MIX+GAN:生成器与判别器的混合
通过理论分析,该论文建议使用生成器和判别器的混合。模型的目标是最小化生成器 T 和其混合权重,判别器 T 和其混合权重。在这里 w=softmax(α)。
该论文使用 DCGAN 作为基本模型,并展示了 MIX+DCGAN 能生成更逼真的图像,且比 DCGAN 有更高的起始分。参阅论文《Unsupervised representation learning with deep convolutional generative adversarial networks》by Radford, Alec, et al. https://arxiv.org/abs/1511.06434
图 4:MIX+DCGAN 和 DCGAN 的训练曲线
论文 2:使用梯度惩罚的 Wasserstein GAN 训练(Wasserstein GAN training with gradient penalty)
这篇论文基于一个好结果——即最优的判别器(在该论文中被称为 critic)在几乎任何位置都有 norm 1 的梯度。这里的梯度是关于 x 的,而非该判别器的参数。
由于以下原因,梯度裁剪(gradient clipping)效果并不是很好:
1. 这个带有梯度裁剪的优化器会在一个比 1-Lipschitz 小的空间中搜索该判别器,所以其会使该判别器偏向更简单的函数。
2. 被裁剪后的梯度在反向传播通过网络层的过程中会消失或爆炸。
梯度的理论结果和梯度裁剪的缺点激发了新方法「梯度惩罚」的提出。如果梯度的标准不是一个,判别器将得到惩罚。目标函数为:
x_hat 是在直线 x 和 x_bar 之间的随机点。
在实验中,使用梯度惩罚的 GAN 训练要比使用权重裁剪的拥有更快的收敛速度。在图像生成和语言建模任务中,使用该论文提出的方法训练模型常常要比其他模型拥有更好的结果。
在了解生成对抗网络的最新进展之后,下面我们列出了 GitHub 用户 Holger Caesar 整理的 GAN 资源。
研讨会
NIPS 2016 对抗性训练研讨会 [https://sites.google.com/site/nips2016adversarial/] [http://www.inference.vc/my-summary-of-adversarial-training-nips-workshop/]
教程和技术博客
How to Train a GAN? Tips and tricks to make GANs work [https://github.com/soumith/ganhacks]
NIPS 2016 Tutorial: Generative Adversarial Networks [https://arxiv.org/abs/1701.00160]
On the intuition behind deep learning & GANs—towards a fundamental understanding [https://blog.waya.ai/introduction-to-gans-a-boxing-match-b-w-neural-nets-b4e5319cc935]
OpenAI - Generative Models [https://blog.openai.com/generative-models/]
SimGANs - a game changer in unsupervised learning, self driving cars, and more [https://blog.waya.ai/simgans-applied-to-autonomous-driving-5a8c6676e36b]
论文
理论和机器学习
A Connection between Generative Adversarial Networks, Inverse Reinforcement Learning, and Energy-Based Models [https://arxiv.org/abs/1611.03852]
A General Retraining Framework for Scalable Adversarial Classification [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_2.pdf]
Adversarial Autoencoders [https://arxiv.org/abs/1511.05644]
Adversarial Discriminative Domain Adaptation [https://arxiv.org/abs/1702.05464]
Adversarial Generator-Encoder Networks [https://arxiv.org/pdf/1704.02304.pdf]
Adversarial Feature Learning [https://arxiv.org/abs/1605.09782]
Adversarially Learned Inference [https://arxiv.org/abs/1606.00704]
An Adversarial Regularisation for Semi-Supervised Training of Structured Output Neural Networks [https://arxiv.org/abs/1702.02382]
Associative Adversarial Networks [https://arxiv.org/abs/1611.06953]
b-GAN: New Framework of Generative Adversarial Networks [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_4.pdf]
Boundary-Seeking Generative Adversarial Networks [https://arxiv.org/abs/1702.08431]
Conditional Generative Adversarial Nets [https://arxiv.org/abs/1411.1784]
Connecting Generative Adversarial Networks and Actor-Critic Methods [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_1.pdf]
Cooperative Training of Descriptor and Generator Networks [https://arxiv.org/abs/1609.09408]
Explaining and Harnessing Adversarial Examples [https://arxiv.org/abs/1412.6572]
f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization [https://arxiv.org/abs/1606.00709]
Generating images with recurrent adversarial networks [https://arxiv.org/abs/1602.05110]
Generative Adversarial Nets with Labeled Data by Activation Maximization [https://arxiv.org/abs/1703.02000]
Generative Adversarial Networks [https://arxiv.org/abs/1406.2661] [https://github.com/goodfeli/adversarial]
Generative Adversarial Residual Pairwise Networks for One Shot Learning [https://arxiv.org/abs/1703.08033]
Generative Adversarial Structured Networks [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_14.pdf]
Generative Moment Matching Networks [https://arxiv.org/abs/1502.02761] [https://github.com/yujiali/gmmn]
Improved Techniques for Training GANs [https://arxiv.org/abs/1606.03498] [https://github.com/openai/improved-gan]
Inverting The Generator Of A Generative Adversarial Network [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_9.pdf]
Learning in Implicit Generative Models [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_10.pdf]
Learning to Discover Cross-Domain Relations with Generative Adversarial Networks [https://arxiv.org/abs/1703.05192]
Least Squares Generative Adversarial Networks [https://arxiv.org/abs/1611.04076]
Loss-Sensitive Generative Adversarial Networks on Lipschitz Densities [https://arxiv.org/abs/1701.06264]
LR-GAN: Layered Recursive Generative Adversarial Networks for Image Generation [https://arxiv.org/abs/1703.01560]
Maximum-Likelihood Augmented Discrete Generative Adversarial Networks [https://arxiv.org/abs/1702.07983]
Mode Regularized Generative Adversarial Networks [https://arxiv.org/abs/1612.02136]
On the Quantitative Analysis of Decoder-Based Generative Models [https://arxiv.org/abs/1611.04273]
SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient [https://arxiv.org/abs/1609.05473]
Simple Black-Box Adversarial Perturbations for Deep Networks [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_11.pdf]
Stacked Generative Adversarial Networks [https://arxiv.org/abs/1612.04357]
Training generative neural networks via Maximum Mean Discrepancy optimization [https://arxiv.org/abs/1505.03906]
Triple Generative Adversarial Nets [https://arxiv.org/abs/1703.02291]
Unrolled Generative Adversarial Networks [https://arxiv.org/abs/1611.02163]
Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks [https://arxiv.org/abs/1511.06434] [https://github.com/Newmu/dcgan_code] [https://github.com/pytorch/examples/tree/master/dcgan][https://github.com/carpedm20/DCGAN-tensorflow] [https://github.com/soumith/dcgan.torch] [https://github.com/jacobgil/keras-dcgan]
Wasserstein GAN [https://arxiv.org/abs/1701.07875] [https://github.com/martinarjovsky/WassersteinGAN]
视觉应用
Adversarial Networks for the Detection of Aggressive Prostate Cancer [https://arxiv.org/abs/1702.08014]
Age Progression / Regression by Conditional Adversarial Autoencoder [https://arxiv.org/abs/1702.08423]
ArtGAN: Artwork Synthesis with Conditional Categorial GANs [https://arxiv.org/abs/1702.03410]
Conditional generative adversarial nets for convolutional face generation [http://www.foldl.me/uploads/2015/conditional-gans-face-generation/paper.pdf]
Conditional Image Synthesis with Auxiliary Classifier GANs [https://arxiv.org/abs/1610.09585]
Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks [https://arxiv.org/abs/1506.05751] [https://github.com/facebook/eyescream] [http://soumith.ch/eyescream/]
Deep multi-scale video prediction beyond mean square error [https://arxiv.org/abs/1511.05440] [https://github.com/dyelax/Adversarial_Video_Generation]
Full Resolution Image Compression with Recurrent Neural Networks [https://arxiv.org/abs/1608.05148]
Generate To Adapt: Aligning Domains using Generative Adversarial Networks [https://arxiv.org/pdf/1704.01705.pdf]
Generative Adversarial Text to Image Synthesis [https://arxiv.org/abs/1605.05396] [https://github.com/paarthneekhara/text-to-image]
Generative Visual Manipulation on the Natural Image Manifold [http://www.eecs.berkeley.edu/~junyanz/projects/gvm/] [https://youtu.be/9c4z6YsBGQ0] [https://arxiv.org/abs/1609.03552] [https://github.com/junyanz/iGAN]
Image De-raining Using a Conditional Generative Adversarial Network [https://arxiv.org/abs/1701.05957]
Image Generation and Editing with Variational Info Generative Adversarial Networks [https://arxiv.org/abs/1701.04568]
Image-to-Image Translation with Conditional Adversarial Networks [https://arxiv.org/abs/1611.07004] [https://github.com/phillipi/pix2pix]
Imitating Driver Behavior with Generative Adversarial Networks [https://arxiv.org/abs/1701.06699]
Invertible Conditional GANs for image editing [https://arxiv.org/abs/1611.06355]
Multi-view Generative Adversarial Networks [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_13.pdf]
Neural Photo Editing with Introspective Adversarial Networks [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_15.pdf]
Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network [https://arxiv.org/abs/1609.04802]
Recurrent Topic-Transition GAN for Visual Paragraph Generation [https://arxiv.org/abs/1703.07022]
RenderGAN: Generating Realistic Labeled Data [https://arxiv.org/abs/1611.01331]
SeGAN: Segmenting and Generating the Invisible [https://arxiv.org/abs/1703.10239]
Semantic Segmentation using Adversarial Networks [https://arxiv.org/abs/1611.08408]
Semi-Latent GAN: Learning to generate and modify facial images from attributes [https://arxiv.org/pdf/1704.02166.pdf]
TAC-GAN - Text Conditioned Auxiliary Classifier Generative Adversarial Network [https://arxiv.org/abs/1703.06412]
Towards Diverse and Natural Image Descriptions via a Conditional GAN [https://arxiv.org/abs/1703.06029]
Unlabeled Samples Generated by GAN Improve the Person Re-identification Baseline in vitro [https://arxiv.org/abs/1701.07717]
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks [https://arxiv.org/abs/1703.10593]
Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery [https://arxiv.org/abs/1703.05921]
Unsupervised Cross-Domain Image Generation [https://arxiv.org/abs/1611.02200]
WaterGAN: Unsupervised Generative Network to Enable Real-time Color Correction of Monocular Underwater Images [https://arxiv.org/abs/1702.07392]
其它应用
Adversarial Training Methods for Semi-Supervised Text Classification [https://arxiv.org/abs/1605.07725]
Learning to Protect Communications with Adversarial Neural Cryptography [https://arxiv.org/abs/1610.06918] [https://blog.acolyer.org/2017/02/10/learning-to-protect-communications-with-adversarial-neural-cryptography/]
MidiNet: A Convolutional Generative Adversarial Network for Symbolic-domain Music Generation using 1D and 2D Conditions [https://arxiv.org/abs/1703.10847]
Semi-supervised Learning of Compact Document Representations with Deep Networks [http://www.cs.nyu.edu/~ranzato/publications/ranzato-icml08.pdf]
Steganographic Generative Adversarial Networks [https://arxiv.org/abs/1703.05502]
视频
Generative Adversarial Networks by Ian Goodfellow [https://channel9.msdn.com/Events/Neural-Information-Processing-Systems-Conference/Neural-Information-Processing-Systems-Conference-NIPS-2016/Generative-Adversarial-Networks]
Tutorial on Generative Adversarial Networks by Mark Chang [https://www.youtube.com/playlist?list=PLeeHDpwX2Kj5Ugx6c9EfDLDojuQxnmxmU]
代码
Cleverhans: A library for benchmarking vulnerability to adversarial examples [https://github.com/openai/cleverhans] [http://cleverhans.io/]
Generative Adversarial Networks (GANs) in 50 lines of code (PyTorch) [https://medium.com/@devnag/generative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f] [https://github.com/devnag/pytorch-generative-adversarial-networks]
谓智能分发,即利用人工智能进行个性化推荐的技术,也称之为智能推荐,推荐系统。
思考三个问题:
以下是正文:
接上篇:服务核心所需的能力规划| 保险公司互联网平台建设系列(九),每一个版本的演化都离不开横向支撑体系的场景创新和纵向深度拓展体系的场景创新。
在V1.0版本,我们会集中分享四个典型的场景,横向为创新型金融产品“续期宝” 、创新型增值服务“在线智能问诊”两个非常经典的场景;纵深方面,会集中分享创新型服务“智能分发”(本篇)、创新型服务“场景智能串接”两个场景。场景的分享无法穷尽,更无法解决所有企业所有的问题,仅做引子。
所谓智能分发,即利用人工智能进行个性化推荐的技术,也称之为智能推荐,推荐系统。
国内智能推荐做的比较好的企业目前只有两个,而且这两家企业从一开始,几乎所有的业务都是建立在智能推荐这一基础条件下的,一家是信息分发领域的字节跳动公司,代表产品有、抖音,另一家企业就是老牌互联网公司阿里,代表产品是淘宝、天猫、聚划算等等。
国外,各大视频网站都堪称推荐系统的佼佼者,典型的代表就是YouTube和Netflix,这两家公司依靠推荐系统,侵占了全球4/7的流量。研究推荐系统,这两家公司肯定是绕不过去的。
全文包括推荐系统架构初探、推荐起点是人与物的画像、推荐算法、应用场景、在效率和精准度上人是彻头彻尾的输家五部分内容。
从工程师的角度来看,推荐系统的底层架构,即推荐系统架构,与搜索系统架构具有一定的相似度:二者实现的都是信息与用户意图之间的匹配。搜索系统是将海量内容与用户表达的意思通过关键词查询关联,推荐系统则是将海量内容与用户没有明确表达的偏好相互关联。前者需要用户交付确定性内容,后者需要通过规则判断用户确定性需要。
也就是说,只要了解了搜索系统的架构,基本上就很容易理解推荐系统的架构。通常,工程师把搜索系统划分为离线和在线两部分。
其中,离线部分专注于内容的搜集和处理。搜索引擎的爬虫系统会从海量网站上抓取原始内容,并针对搜索系统的不同要求建立不同的索引体系。比如:我们假设新内容是有时效性消费价值的,那么,为了让新内容能够被更好地检索,就可以建立专门的时效性索引用于存储几小时之内发布的内容。
索引是一个基于关键词的序列,每一个关键词对应一长串提及该关键词的内容(倒排索引)。比如:“教育”这个词命中内容1、2、3,“NBA”命中了另外一批内容1、2、4。
在线部分负责响应用户的搜索请求,完成内容的筛选和排序,并最终把结果返回给用户。
当用户输入搜索词后,系统会首先对搜索词进行分词、变换、扩充、纠错等处理过程,以便更好地理解用户的搜索意图。如上图所示,用户只输入“NBA”一个关键词,系统发现“NBA”和“美职篮”是同义词,就会将其扩充,以便两个词都可以应用在索引的查询上。
如果用户输入了“NB2S”,系统认为输入有误,就会将其纠正为“NBA2S”,并首先返回相应结果。
经历完搜索词处理后,将进入召回环节。系统通过多种方式从不同的索引数据里获得候选集合。在上图中,就进行了一个“2×2”的过程,两个搜索“NBA”与“美职篮”分别查询了全量的索引数据和时效性索引数据,一共获得了8篇内容的集合。
召回得到的候选集合会继续进入排序环节,通过更精细的计算模型对每一篇候选内容进行分值计算,从而获得最终结果(如上图中的文章10和文章1)。
在展示给用户之前,搜索结果还需要经过规则干预这一环节。规则通常服务于特定的产品目的,对计算产出的内容进行最终的调整。假如我们有这样一条“官方网站保护规则:确保所有品牌名搜索词都可以优先返回官网”,那么规则层就会在文章10和文章1之前,强行插入NBA官方网站返回给用户。
在结果展示给用户之后,用户的点击反馈会影响到排序环节的模型。在下图中,用户在展示给他的两篇内容中只点击了文章10,这一行为会被模型记录为统计文章10和文章1在搜索词“NBA”下的表现情况。如果在“NBA”的搜索结果中,更多人点击了文章10,那么文章10在后续计算中的权重会升高,从而获得更靠前的展现位置(即点击调权的过程)。
以搜索系统为参考基础,我们可以更好地理解推荐系统的工作方式。推荐系统的离线部分同样需要通过各种方式来获取待推荐的内容(如用户提交、协议同步、数据库导入等)。对内容平台来说,其内容的结构化要远胜于推荐引擎爬虫抓取的内容。之后,离线系统依据推荐引擎对信息的不同理解维度对这些内容进行索引化处理,如话题、类目、实体词等。
下图中展示了两个维度:分类维度和实体词维度。
在线部分,其理亦然:量化用户的请求,完成内容的筛选和排序。
推荐与搜索最大的差异在于用户表意是否明确。因此,推荐系统需要尽可能地完善用户的长期画像(对哪些类目、实体词、话题感兴趣)和短期场景(时间、地点信息),这样才能够在用户每一次请求时更好地揣摩用户当下的意图,以进行后续的内容匹配。
当用户打开内容推荐应用时,提交给系统的信息包括时间、地理位置、网络环境、手机设备型号、登录用户ID(身份认证)等。基于用户ID,推荐系统会从数据库中取出用户的画像数据(User Profile)。
如下图所示的推荐系统支持分类和实体词两个维度的用户画像:在分类维度,用户对体育和科技内容感兴趣;在实体词维度,用户对NBA感兴趣。基于体育、科技、NBA,推荐系统会进行下一步的内容召回和排序操作。
召回和排序操作与搜索系统比较相似,系统基于类目查询和实体词查询分别获得候选内容集合。排序模块按照特定预估目标(如点击导向、互动导向、停留时长导向等)对候选集统一排序,并经过规则层的处理后最终反馈给用户。
值得注意的是,在推荐系统中,用户的行为不仅像在搜索系统中那样具有针对内容价值的群体评估意义,而且还具有针对自身画像的个体进化意义。
在群体评估意义层面,每一个读者就像是一名陪审团成员,通过自己的行为来决定某篇内容的好坏。比如:某篇关于NBA的内容,如果连偏好NBA的用户都不怎么点击,那么这篇内容在“NBA”这个实体词下的权重自然应该降低,这一部分的应用与搜索场景比较类似。
在个体进化意义层面,用户的阅读反馈行为在持续改进着自身的画像。比如:用户是热火队的粉丝,那么在行为层他就会更多地点击与热火队相关的NBA内容,系统捕捉到这一信息后,就会在他的画像中补充“热火”这个实体词,从而影响后续的推荐内容流。
当然,搜索和推荐的区别,在于前者是人找信息,后者是信息找人。这也是为什么百度向信息流转的时候,可以迅速获得超过4成的市场份额,因为底层预备的技术能力是OK的,具体做什么前端的业务展示,并不复杂。
在了解了推荐系统的架构后,我们做的还有三个步骤:
想要把内容准确的推荐给需要的人,首先要让系统充分的理解内容的特点,内容刻画最简单的方式就是我们常说的“打标签”。标签是人对三维事物、二维事物的一维化理解,抽象出事物更具有表意性、更为显著的特点。在不同的应用场景下,要对标签全集进行有针对性地投射,有倾向性地选用不同的标签以换取信息匹配的效率最大化。
通过更系统化的分类方式,可以完整地呈现出一个内容的特点。这涉及到标签和分类的关系。
一般情况下采用的分类都是树状的,是自上而下依次划分的。在分类体系里,每个节点都有严格的父类继承关系,在兄弟节点层都具有可以被完全枚举的属性值。例如:将人类属性基于性别划分为男女,就能够覆盖全部人类属性,其实,要是研究过淘宝的人,都知道淘宝的性别标签有18个。由于树状的层次结构性较好,所以在内容的分类查找领域,有很多应用。
应用的分类必须考虑分类权威性和信息完备性问题,避免因为子节点覆盖不全或分类错误导致的认知问题。
如果标签是网状的,更强调表达属性关系(has a)而非集成关系(is a),只有权重大小之分,不强调包含于被包含关系。这就使得相对于分类而言,标签的灵活性更强。在权威性方面,标签是弱化的,每个用户都可以参与进来为自己的喜好贴标签,也可以为自己喜好的内容贴标签,从而借助规模效应实现对信息表意完备性的覆盖。
由于网状结构包含树状结构,故而标签可以被应用于分类的场景,在设计系统时,可以先基于产品场景快速覆盖主要标签,在结合标签集合的使用频次、专家建议等因素逐步将部分入口收敛到树状的分类体系中来。
最后,值得一提的是,标签是怎么产出的?答案就是PGC和UGC,即专家系统产出和用户产出。很多金融公司的产品App,到目前为止都没有开放UGC的功能,从某种意义上说,用户、内容的画像都不可能有机会完备。
与内容画像相对应的,是用户的画像。用户画像是产生动态的超级360°视图,具体可参考这篇文章:企业数字化转型:外部驱动力之客户篇(五)。用户画像也是给目标用户贴标签的过程,通过标签来描述一个用户的特征集合。
通常,用户画像主要应用场景包括:精准营销、行业研究、产品效率优化、个性化服务等等,实际上所有围绕个人用户的产品,都是典型的用户画像需求方。
具体应用场景就不展开详细说明了,智能推荐就属于产品效率优化。其中,应用最具有深度的就是信息匹配,、抖音、淘宝、Facebook、YouTube和Netflix都是典型的佼佼者。所有这些平台,都是基于用户的画像信息来优化推荐排序的,从而实现人和信息的高效匹配,以提升效益、降低成本,提高用户体验。
根据Netflix官方2016年的数据,个性化推荐系统每年为它的业务节省费用超过10亿美金。
中性的技术,在不同人手里可能就有不同的用户,某些人利用系统中,用户无法区分真假货,从而针对性的进行真假货混发。特别是根据用户收货地址、过往评价可以轻松推断出用户的认知水平,从而决定发送真货、高仿还是其它假货。
另外一个面临的问题就是价格歧视,保险歧视等问题,同一件商品不同人加入购物车,显式的价格是完全不一样的,价格敏感性用户往往更容易收到优惠券。
通常,我们把用户画像的数据分为静态数据和动态数据。
静态用户画像数据:一般包括用户独立于产品场景之外的属性,如性别、学历、年龄、婚育状况、常住位置、教育程度以及家庭结构等等。这些信息往往是相对稳定的,可以通过第三方联合登录、用户表单填写等方式获取。静态数据通常具有统计意义,但在满足实时服务需求和挖局潜在需求方面,价值并不高。
动态用户画像数据:用户在产品场景中所产生的显式或隐式行为的数据。显式行为包括对某篇文章、某个服务、某段视频的点赞、评论、转发、分享,关注了某个领域的作者等等。在众多显式行为中,由于产品场景的不同,不同行为的权重也不尽相同。
像电商的场景,典型的权重依次为:购买的权重>下单不支付的权重>购物车的权重>查看的权重。隐式行为包括在页面停留的时长、某屏内容停留的时长、用户操作行为轨迹、手指按压滑动的频率和力度等等。通常,显式行为的权重要高于隐式行为,但还是要依赖不同场景决定。由于显式行为更为稀疏,所以需要隐式行为来补充验证。
最后就是关于动静态数据的权重问题,实际上,动态数据价值意义更大,一般在很多场合,都是先将常数n设置为0.8,然后再后续不同场景中,后续升级是确定n=f(x)具体函数,从而进行计算。
第三个是推荐算法,就是我们拥有了完备的内容画像、用户画像,怎么将合适的内容,准确的匹配给需要的用户。淘宝早期的做法,是基于其固有属性来计算物品与物品之间的相似度,从而推荐与用户历史消费相似的新物品。如果是内容中的文章,常见的因素就有作者层面的相似性、内容层面的相似性、同类用户层面的相似性等等。
一个人在某个场景下怎么决策,我们首先要把他抽象成一个模型,然后要找到一套数学的方法,让它能够收敛,用模型去优化他的决策。通过该收敛的结构去匹配内容的过程,就是智能推荐系统连接人和内容的过程。
当然,到此并未结束,一般情况下,系统一次性就推荐到用户百分百喜欢的内容是不太现实的,此时就要让系统形成有效的反馈闭环。将结果快速反馈到用户交互层的产品上,用户喜欢点击了还是未点击,快速给一个反馈,系统经过优化,再次推荐一个结果,如此往复,形成一个学习、提升、再学习、再提升的过程。这就是推荐算法的价值所在,也是系统推荐之所以高效、精准的原因。
2016年9月18日,在波士顿举办的第10届ACM推荐系统大会(ACM’s RecSys ‘16)上,来自Google的一个研究团队公布了YouTube推荐系统的深度学习论文:Deep Neural Networks for YouTube Recommendations。论文地址:https://research.google.com/pubs/pub45530.html
论文作者是Google的软件工程师Jay Adams与高级软件工程师 Paul Covington、Embre Sargin,他们向业界展示了YouTube在机器学习推荐算法上的深度神经网络使用情况。该论文涉及到一些非常技术、非常高级的细节,但它最大的意义是为我们完整描绘了YouTube推荐算法的工作原理!!该论文细致、审慎地描述了YouTube检索、筛选并推荐视频时的大量细节。
在YouTube,人工调整算法、人工权衡这些调整并将其部署上世界最大的视频分享网站的机会将越来越少。而是由算法实时来读取数据、为视频排名,然后基于这些排名来推荐视频。该论文以算法的基本架构作为开篇,下面是作者的图示:
该系统由两大神经网络组成,一个用于生成候选视频,一个用来对其排名。这两个过滤器及其输入内容,基本上决定了用户在YouTubes上能看到的每一个视频:建议你播放的下一个、推荐给你的视频列表、你所浏览的视频列表……
第一个过滤器是候选生成器。候选是基于用户的YouTube活动记录产生的,也就是用户的观看历史与观看时长。候选生成器还会考虑相似用户的浏览记录,这一点被称为协同过滤。相似用户是算法通过视频ID、搜索关键词及相关的用户统计信息决定出来的。
候选生成器的通过率仅为属百分之一,换言之,如果某个视频能从数百个中脱颖而出成为你的候选视频,它必定是跟你的观看记录有关,同时还有一个跟你相似的用户已经看过它。
第二个是排名过滤器。该论文对排名过滤器进行了大量的深度解析,并列举出不少有趣的因素。排名过滤器是基于描述视频和用户的丰富特征,目标期望函数会给每个视频设定分数。根据分数排名,得分最高的视频将被展示给用户。根据论文透漏,排名过滤器中用到了数百种特征。
最后,简单的总结就是:
相较于YouTube较为抽象简化的数据流图,Netflix的架构图稍微显得复杂一点,不过依然保持了离线模型的训练、在线召回排序、更新用户画像与内容画像的基本结构。
系统在实时响应用户请求的在线层和负责数据处理、模型训练的离线层之间增加了NearLine层,即所谓的近线层,以实现计算规模和实效性的折中。
在数据流上,用户的所有动作,包括选择、播放、暂停、评分、浏览等行为,共同构成了在线层的输入。根据业务需要,Netflix将用户行为拆分为数据和事件。其中,数据的时间敏感度更低,事件的时间敏感度更高。比如,在用户观看一部电影之后,如果希望及时更新用户的推荐列表,那么这次观看动作就会被是做事件型进入近线层,以更快地更新用户画像数据。
用户的请求,经由多种召回方式,从离线索引中获取结果后,经过在线的模型排序计算,将最终结果返回给用户。
由于我们自己的平台在2017年启动了全面智能化策略,所有用户看到的信息,除个别强制推荐的以外,都是系统基于用户行为进行智能推荐的。一级页面的布局结构,完全实现了所谓的千人千面甚至一人千面的构建,单个服务内容的具体展示,也逐步向智能推荐系统方向优化,例如上一篇所介绍的“智能问诊服务”。
相比于传统的千人一面的结构和总编推荐模式,机器推荐的效率、精准度上,都是人类无法比拟的。例如相比如出版业总编推荐模式,智能分发的效率是其2.4亿倍,这是人工手段下所无法想象的。
在人机效率、精准性的较量中,人只会越来越失败,差距只会越来越大。
参考文献:
保险公司互联网平台建设综述 | 互联网平台建设系列(一)
颠覆式创新,左右平台经济时代竞争的主要力量 | 互联网平台建设系列(二)
平台建设规划的三种思路 | 互联网平台建设(四)
基于险企传统资源优势的“一核三环”规划 | 互联网平台建设(五)
保险公司互联网平台的战略定位 | 互联网平台建设系列(六)
名称,决定了平台的发展愿景 | 互联网平台建设系列(七)
平台建设的根节与基础保障 | 互联网平台建设系列(八)
服务核心所需的能力规划 | 互联网平台建设系列(九)
创新型金融产品“续期宝” | 互联网平台建设系列(十)
作者:李有龙,公众号:IAB物智链
本文由 @李有龙 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议
文主要内容
html 的常见元素主要分为两类:head 区域的元素、body 区域的元素。下面来分别介绍。
head 区域的 html 元素,不会在页面上留下直接的内容。
base元素的介绍:
<base href="/">
base 标签用于指定基础的路径。指定之后,所有的 a 链接都是以这个路径为基准。
body 区域的 html 元素,会直接出现在页面上。
div 是最常见的元素,大多数场景下,都可以用div(实在不行就多包几层div)。可见,div 是比较通用的元素,这也决定了 div 的的语义并不是很明确。
常见标签的重要属性:
我们平时在写论文或者其他文档的时候,一般会先列出大纲,然后再写具体的内容。
同样,html 网页也可以看成是一种文档,也有属于它的大纲。
一个常见的html文档,它的结构可以是:
<section>
<h1>一级标题</h1>
<section>
<h2>二级标题</h2>
<p>段落内容</p>
</section>
<section>
<h2>二级标题</h2>
<p>段落内容</p>
</section>
<aside>
<p>广告内容</p>
</aside>
</section>
<footer>
<p>某某公司出品</p>
</footer>
我们可以通过 http://h5o.github.io/ 这个工具查看一个网页的大纲。
使用方法:
(1)将网址 http://h5o.github.io/ 保存到书签栏
(2)去目标网页,点击书签栏的网址,即可查看该网页的大纲。
这个工具非常好用,既可以查看网页的大纲,也可以查看 markdown 在线文档的结构。
按照样式分类:
按照内容分类:
注意:在 HTML5 中 a > div 是合法的, div > a > div是不合法的 ;但是在 html 4.0.1 中, a > div 仍然是不合法的。
比如下拉框这种比较复杂的元素,是自带默认样式的。如果没有这个默认样式,则该元素在页面上不会有任何表现,则必然增加一些工作量。
同时,默认样式也会带来一些问题:比如,有些默认样式我们是不需要的;有些默认样式甚至无法去掉。
如果我们不需要默认的样式,这里就需要引入一个概念:CSS Reset。
方案一:
CSS Tools: Reset CSS
方案二:
雅虎的 CSS Reset
我们可以直接通过 CDN 的方式引入:
<link rel="stylesheet" type="text/css" href=">
方式三:(比较有争议)
*{
margin: 0;
padding: 0;
}
上面何种写法,比较简洁,但也有争议。有争议的地方在于,可能会导致 css 选择器的性能问题。
上面的几种 css reset 的解决思路是:将所有的默认样式清零。
但是,Normalize.css 的思路是:既然浏览器提供了这些默认样式,那它就是有意义的。既然不同浏览器的默认样式不一致,那么,Normalize.css就将这些默认样式设置为一致。
共同点:二者都是表示斜体。
区别:
自闭和的元素中不能再嵌入别的元素。且 HTML5 中要求加斜杠。
所以,如果我们是通过 Ajax 提交表单数据,也建议加上 form。
*请认真填写需求信息,我们会在24小时内与您取得联系。