在复刻黏土风图生成中mg游戏平台官方网站 — 模型微调/LoRA 原理/图生图

2024-5-19 评论(0) 分类:技术文章 Tags:

继续mg游戏平台官方网站 Stable Diffusion,这次想以搭建一个实际可用的生图场景 — 黏土风格作为引导,弄清楚整个流程的同时,把过程中遇到的相关概念和原理也做了解,所以这篇是掺和了应用流程和原理的文章。

ComfyUI & 模型

使用 Stable Diffusion 去生成图,有非常多的插件/模型/配置相互搭配组合使用,一般用 WebUIComfyUI 这两个工具,更推荐 ComfyUI,自由串联一个个模块,流程更清楚,网上有很多在自己电脑部署使用 comfyUI 的保姆级教程,比如这个,这里就不多介绍了。

先看 ComfyUI 这个默认的最简单的 workflow:

1

这里面简单的几个元素概念和生图流程,上篇文章都有介绍过:最左边的 Load Checkpoint 是加载 SD 模型,接着用 CLIP 模型编码文本 → 生成隐空间原始噪声图 → 采样器根据文本和噪声图输入→在隐空间里迭代降噪生成隐空间图片→最终用VAE解码图片。

为什么叫模型 checkpoint ?模型在微调训练过程中,会在关键节点保存模型参数的状态,这个保存点被称为 checkpoint,SD 有大量基于基座模型微调训练的模型,包括官方出的,比如 SDv1.5 是从 v1.2 的基础上调整得到的,SDXL Turbo 也是基于 SDXL1.0 基础上训练的,这些模型都被称为 checkpoint,这些 checkpoint 包含了生成图所需要的全部核心组件,包括 VAE、CLIP、UNet 的模型数据,可以直接使用。

那模型文件的后缀为什么是 .safetensors ?早期的模型文件后缀是 .ckpt (checkpoint缩写),一个通过 Python 序列化后的数据,使用时需要对它反序列化,这个反序列化过程也就容易被注入恶意代码,所以后面提出了新型安全的格式 safetensors,只包含张量数据(模型上的参数数据),无需反序列化,安全且速度快,目前模型基本都以这种方式存储。

我们用这个默认 workflow,选个模型,用纯提示词 claymation style, a tower 试试生成黏土风图片:(图上使用了 dreamshaperXL 模型,是在SDXL 的基础上微调的最受欢迎的一个模型)

2

可以看到效果并不是很好,比较生硬。可能加多一些细节提示词、调节下相关参数会好一些,但在图片训练过程中,黏土风格相关的图片数量应该是不多的,训练图片对应的文本描述也比较散,如果固定要这种风格,生图的 prompt 要尽量贴近训练时这类图偏对应的文本,才有可能有好一点的效果,这很难控制,也不保证效果,很难达到我们想要的风格。

模型微调

如果我要一个能更好输出黏土风格的模型,那可以给这个模型做微调,给它输入更多黏土风格的图片训练,让它学会我们具体要的是什么,针对性输出。

微调 SD 模型,目前从成本大到小,目前用得最多的有三种方式:

  1. Full Finetune:
    1. 最朴素的方式,使用图片+ 标注的数据集,进行迭代训练,对原模型所有参数进行调整,成本最高,但可以对整个模型做全面调优,大幅改变生成风格,上面的 dreamshaperXL 就是以这种方式。它训练数据量要求大、计算资源消耗高、最终模型就是包含所有模型参数的 checkpoint。
    2. 这种训练我理解适合大量的数据、对模型整体做调优较合适,如果只是想在特定领域,用少量数据,比如把某只猫,把某个人脸、某个物品训练进去让模型认识,那很可能出现过拟合问题(数据不够多样,污染了通用词,比如拿自家的猫训练,最终整个模型对 cat 这个输入只能生成自家的猫),或欠拟合问题(训练样本太少,没有影响到网络参数,训练无效)。
  2. Dreambooth:
    1. 针对 Full Finetune 过拟合和欠拟合、数据量大的问题的一种解决方案,数据量要求小,个位数的图片可训练,能很好还原训练图片里的人物/物品,同时不会污染原模型,能正常用原模型的能力,只在有特殊 prompt 的情况下命中微调的效果。它跟 finetune 一样是修改整个模型的参数,所以产物跟原模型一样大,也是个完整的 checkpoint。具体原理可以看这些文章(1 2)的介绍。
  3. LoRA:训练门槛极低,只需要个人PC的算力、个位数(三五张图片)也能训练出特定人物、风格的微调模型,也能达到很好的效果,生成的是外挂文件,体积小可插拔,是目前 SD 使用最广的微调模型,原理下面细讲。

像黏土风格这种诉求,仅是一种风格化的优化,是比较适合使用 LoRA 模型的,从 civitai (最大的SD 模型社区)上找了个黏土风的 LoRA 模型 CLAYMATE,在原 workflow 简单加上这个 LoRA模型,先看看应用的效果:

3

同样的提示词下,效果好了很多,是比较舒服的黏土的风格。

每个 LoRA 都有个触发词,上面用的这个模型触发词就是 claymation style,我理解相当于训练时大部分图片的 prompt 标签都加上了这个词,这样使用这个词时,模型能更好定位到训练到的数据。比如下面去掉这个claymation style ,即使用了 LoRA,也对应不上这个 LoRA 的风格。

4

这模型是怎么训练的?基本上流程是,选好图片→处理图片(裁剪+加提示词)→用工具 Kohya 训练→看结果调参重复,具体跟着网上教程走就行,各种参数细节参考这里,我还没真正执行过训练,先不多说。另外训练的整个代码生态都是围绕 NVIDIA 显卡建立的,Mac 没有 NVIDIA 显卡,没法训练。虽然理论上可行,但社区生态不友好,基本不可用,要训练只能搞台 PC 或用云服务器。

LoRA 原理

来具体看看 LoRA 的原理,全称 Low-Rank Adaptation,低秩适应。什么是低秩?为什么能做到微调成本低文件小效果也不差?

Full finetune

先看看正常的微调,也就是前面说的 Full finetune,下面这图很好理解,正常微调就是通过新增的训练集,重新调整这模型里面网络的参数,把这个参数更新到原有网络里,变成一个新的模型使用。

5

这里除了前面说的要求的训练数据量大、容易过拟合/欠拟合的问题外,还有个大的问题,就是计算量大、资源要求高。

大模型都是由多层神经网络叠加组成,Transformer 和 UNet 都是,使用这些模型时,是对这些模型正向推理,这个过程需要的资源不高,只需要把模型参数全部加载进内存,一层层正向计算就行。

6

但训练这些神经网络要求就比正向推理高很多,整个训练中,每一步训练的过程包括:

  1. 前向传播:训练数据(样本)输入当前网络,生成预测结果(跟使用模型一致)
  2. 损失函数计算:把预测结果跟样本对应的预期输出对比,评估差异
  3. 反向传播:把这个差异(损失函数的梯度),反向从输出层到输入层传播,计算每一层每个参数对这个差异的贡献,记下相应数据。
  4. 更新参数:对反向传播获得的数据,更新网络中每个参数值

这里内存中就需要同时存在好几个数据:1.原网络参数 2.前向传播过程中计算出来的数据,反向传播计算时需要用到 3.反向传播过程中每个参数的差异贡献(梯度值),更新参数时要用到。

所以假如整个神经网络有 n 个参数,每一步训练就要在显存存储 3n 个数据,进行 3n 次计算(正向推理、反向传播计算,更新每个参数的值)。还有一些训练优化的方法,数据的存储和计算量会更高。Stable diffusion XL 的参数量是35亿,llama 3最高参数量达到4000亿,每一步的计算量感人。

参数冻结

再来看看 LoRA 怎么解这个问题。

首先,LoRA训练过程中,会把原网络参数冻结(下图的W),不会去修改原网络参数,只让原网络参与正向推理预测结果的过程,所有对参数的调节都独立出来在 △W 上,这个△W最终也不会更新在网络上,只会在使用这个模型时外挂式地加上它,跟原模型一起叠加共同进行推理。

到这里,其实它只是换种方式,专门把训练变化的部分抽出来,其他都没变,△W 跟 W 的参数个数一样,该存储和计算的量一样。

7

低秩分解

下一步才是主要的,接下来需要一点点基础线性代数矩阵的知识。

前面这个分离出来的部分△W,变成下图这样,不是用跟原网络一样的参数量去表示,而是通过一个数学的方法 低秩分解 去表示,把原模型参数 W 和 △W 看成一个矩阵数据,那 △W 这个矩阵可以用两个小矩阵Wa 和 Wb 相乘去表示,这过程就叫低秩分解。

8

矩阵中秩(Rank)的概念简单说就是矩阵中行列较小的那个值,比如 100 x 5 的矩阵,秩就是5,把100 x 100 的矩阵,分解成 100 x 5 和 5 x 100 的矩阵相乘(相乘后是100×100的矩阵),就是低秩分解。图中的 r (rank)就是这个秩。

可以看到这个秩越小,数据量越小,比如分解成 100×10 和 10×100 两个矩阵,这俩矩阵数据量是2000,如果分解成 100 x 5 和 5 x 100 ,数据量是1000,相对于原矩阵 100×100 数据量 10000,要存储的数据量下降10倍。

所以 LoRA 训练出来的不是△W,而是分解后的两个低秩矩阵 Wa 和 Wb,这就是 Low-Rank Adaptation 低秩适应的意思。设定的秩的值越低,所要存储的数据量越低, 所以 LoRA 模型会根据训练时设置的秩值,比原模型大小低一两个数量级。同时训练过程中,因为这俩低秩矩阵跟原矩阵不是一个数量级,所需要的计算量和显存也相应减少了,在普通 PC 也能跑起来。

看起来很神奇,把一个完整的数据做这样的分解,数据的信息量肯定减少了,为什么用这种方式做微调,效果还能好?LoRA 论文中表示,在预训练的大模型上微调时,如果是处理一个细分的小任务,参数的更新主要在低维子空间中,很多高维子空间的参数在微调前后根本就没动,越简单的细分任务,对应要更新的参数维度就越低,可以简单理解为 LoRA 的低秩分解能对应到大模型低维子空间的参数更新中,更多扩展阅读参考 1 2 3

模型微调和 LoRA 原理就介绍到这里,我们继续回到黏土风的整个 workflow。

图生图

黏土风格这种模型的应用场景是给用户当图片特效使用,也就是需要图生图的方式,前面只做了文生图,来看看图生图的 workflow,以及生成的效果:

9

只需要在前面的 workflow 基础上,把生成空白噪声图 Empty Latent image 节点,改成 Load image + VAE 编码节点即可。

这里的原理很好理解,文生图是用一张全是随机噪点的图作为输入,沿着 Prompt 逐步降噪生成图片。我们把这个输入换成一张真实的图片,再在上面加上一定量的随机噪点,代替完全随机噪点图进行采样迭代逐步生成图片。把这个加了噪点图片看成是图片生成降噪过程中的某一步状态的话,相当于之前图片是从 0 开始生成,现在是从某一个中间过程点开始去生成,整个流程是一样的。

这里要加多少噪点,在 KSample 这个采样器节点的 denoise 里可以设置,来看看同样的文本 prompt 和图片输入的情况下,设置不同值的效果

10

denoise 为 0 时,没有加噪点,也就没有去噪的过程,输出是原图,denoise 为 0.4 时,可以猜想到,这时加的噪点程度不影响图的主结构,猫戴帽子的细节也还有,那降噪生成后这些细节还会保留,随着噪点越来越多,原图的细节越来越少,到 denoise 为1.0时,也就是加100%噪点时,跟输入一张随机噪声图是一样的,跟原图就没什么关系了,只跟输入的 Prompt 文字有关系。

看起来设置 0.4 到 0.6 之间的降噪,效果还可以,即保留了原图整图的大致内容,也能适当加上黏土的风格。用其他图片尝试,也还行:

11

图片 Tag 生成

但这里不同的图片的 Prompt 得自己手动改,才能生成类似的图,我们正常使用这类风格化滤镜是不需要自己输入 prompt 的。我们可以加个图片 Prompt 生成器,让它描述输入的图片,再作为图片生成的过程。

我们添加 WD14 Tagger 这个插件节点,它可以从图片中反推出适用于 SD 提示词的标签(booru风格标签),我们把它解析出来的 tag,跟 LoRA 模型的触发词 claymation style page 一起组合,作为 Prompt 输入,这样就实现了只输入图片,不用修改 Prompt 就能产出对应的图了。

这里注意得用 (claymation style page:2) 这种 Prompt 权重表达方式,把这几个 LoRA 模型的触发词调高权重,不然会淹没在图片输出的众多Tag上,没法起到作用。

12

最终的 workflow文件(下载这张图片可在ComfyUI上导入):

workflow到这里,我们实现了一个最简单的黏土风格图生图流程,也认识了过程中涉及到的技术原理。目前这只是个最简单的 demo,在某些图片下效果还可以,但要真正达到可用还有很多问题,后续会随着一些问题继续探索 SD 里的相关技术。

 

参考资料

LoRA模型微调原理:http://www.bilibili.com/video/BV1Tu4y1R7H5

利用LoRA对LLM进行参数高效的微调:http://zhuanlan.zhihu.com/p/632159261

神经网络训练:http://blog.csdn.net/brytlevson/article/details/131660289

Stable Diffusion原理可视化:http://www.youtube.com/watch?v=ezgKJhi0Czc

Stable Diffusion 图片生成原理简述

2024-5-13 评论(0) 分类:技术文章 Tags:

最近关注和mg游戏平台官方网站 AI 比较多,包括 AIGC 和 LLM 大模型,现在 AI 的原理介绍和入门教程已经非常多了,但还是想自己写一下,主要是遵从费曼mg游戏平台官方网站法,分享是最好的mg游戏平台官方网站,帮助自己整理思路。

本文介绍这一轮图片生成热潮的集大成者 Stable Diffusion 涉及的一些图片生成基本原理,这里全篇不会有数学公式,因为大部分公式我也不懂,但应该不会太影响理解基本原理和思路,有理解错误的地方欢迎指正。

扩散模型

在看图片生成这个逆天能力的时候,很好奇它是怎么做到的。要完全理解这里面的算法细节门槛挺高,但要了解基础原理概念还是简单的。

目前市面上文字生成图片基本上都基于 Diffusion 扩散模型,Stable Diffusion 自然也是,它最基本的原理是:根据文字指示,把一张随机生成的全是噪点的图片,一步步去掉噪点生成跟文字描述匹配的图片。

具体是怎样做到的?这里可以分步看两个问题:

  1. 怎么从一张随机噪点的图生成一张正常的图
  2. 怎么控制这个生成的图跟输入的 prompt 文字关联上

先看第一个问题,从随机噪点图生成一张正常图片,通过训练和组合 UNet 模型可以做到。

单步训练-生成

UNet 是个深度mg游戏平台官方网站网络模型,模型细节不说,个人可以非常粗略地理解为,这个 UNet 模型里面的参数,记录了训练的图片的内容,但它不是精确存储,而是有一些映射和数学运算,做到可以识别提取图片特征,模糊地记忆图片的关键信息,混合存储。

这个模型训练出来后,如果你是用一张图片玩命训练它,那它最终恢复出来的就是这张图片(maybe?)。如果你用1万张图片训练这个模型,那它恢复出来的会是这一万张图片内容随机组合的一张图片。

1

下面稍微再展开看下训练过程和生成过程:

  1. 选一张正常图片A,随机生成一个噪声X,给A加上这个噪声。A+X=A1。
  2. 把A1输入到模型,我们希望做到的是,模型能在只有输入A1,没有输入噪声X的情况下,能自己推理知道噪声X是什么,如果能做到,那就可以通过A1 – X = A,把更清晰的图给反解出来了,也就是输入一张有噪点的图,输出一张去了噪点的图。
  3. 怎样做到?在训练过程中,我们是有A1和X这两个数据的,模型自己生成另一个噪声Y,跟噪声X对比,然后通过不断调节自己的参数,让自己生成的这个噪声接近X就行了。
  4. 这样模型记录了相关参数,下次拿A1过来,它就能推算出近似于上面加的噪声X,然后做A1 – X = A去噪,得到更清晰的图片A。

2

总的来说,我们训练的这个模型,它的能力就是,给一个图片,它能预测出来这张图片上是加了多少噪声,这样就可以让这张图减掉这些噪声,得到更清晰一点的图。

多步扩散

上面是简化的一步,只是把图片从稍微加了点噪声中还原出来,并不是直接从一个没有信息量充满噪声的图片中直接还原蹦出一张图来。要实现从纯噪声图生成一张图片,需要重复很多步上述步骤,所以它还有一个Time step的参数参与在训练过程中。

Time step 就是噪声强度,很好理解,表示的是加多少次噪声。回到上面的训练过程继续:

  1. 上面的训练,A 是完全没加过噪声的图片,A1是加了一次噪声X的图片,time step 就是1表示加了一次噪声,A1 和 t=1 输入到模型,训练出能推算 A1->A的能力
  2. 下一步针对A1再加一个噪声X2,A1+X2=A2,time step就是2,把加了两次噪声的图片A2和t=2输入到模型,训练出能推算A2->A1的能力
  3. 循环N次,加上多张图片重复这个步骤,模型的参数就学会了这里每一个步骤加的噪声数据。
    1. 实际训练过程中,t会是一个随机数,经过海量图片多轮训练,会覆盖所有t的值。下图epoch[回合],表示一轮一轮的训练,每次用不同的图片,不同的time step做训练

    3

  4. 最后就能从这个链路里把一个满是噪声(比如加了1000次噪声)的A1000逐渐去噪生成出清晰的图片A。A1000->A999 … ->A2->A1->A:
    4

训练和生成过程简化后就是这样。如果训练集是一张图片反复训练,我猜测输入一张加满噪声的图,最终会把这张图片还原出来。如果训练集是海量的图片,那这里还原出来的图片,如果不加其他控制,就会是这些海量图片随机的组合结果。

控制生成

接下来到下一个问题,就是怎样控制它去噪过程,让它生成的图片跟我们输入的文案描述匹配。

概念上很简单,就是在训练和生成过程中,把图片的描述文字也加进去。我们事先准备提供给模型训练的数据,除了图片本身,还需要包含对这张图片的文本描述,这样模型才能学到文本和图片内容的关系。

按刚才训练过程的示意图,实际上模型是三个输入,加了噪声的图片A1、图片对应的文本描述text,噪声强度time step,在这三者的作用下共同推理出对应的噪声。

5

有text的训练输入后,后续在通过噪声生成图片的过程中,根据用户输入的prompt文本,就可以引导去噪的走向。

如果比较具象地想象这个过程,比如训练集有20张图片,5张的图片描述是girl,其他15张没有girl。训练过程中,girl这个词就跟这5张图片关联记录在网络参数里,在训练后使用这个模型时,输入的文本有girl,那去噪的过程的每一步就大概率会定位到这5张图片训练时的数据,会有更大概率去噪的过程走向这5张图片,而不是之前的随机走向。

到这里,扩散模型最基本的原理就差不多了。

重要概念

上述整个过程比较简化,过程中有几个重要的问题和概念还没提到,这里逐个说明。

Latent Space & VAE

上述的扩散模型的训练和使用,有个很明显要解决的问题,就是图片太大了,如果图片用像素数据表示,现在 iPhone 拍的一张照片有最小有 500w 像素,即使做常见的图片压缩(JPG/PNG),也有几百K的数据大小,如果用原图按上面的流程跑下来,计算量巨大,显然我们要针对图片做降维(或者理解为压缩),把一张图片的数据量降低,再进行后续的训练和使用。所以需要一个降维模型做这个事,这个模型需要满足:

  1. 有 encode 和 decode,需要能从 encode 和处理后的低维数据 decode 成高清图片。
  2. 要压缩得尽量小,方便低成本做上述海量的计算。
  3. 信息要能保留得足够多。
  4. 信息要有语义,不然训练过程中不同图片的信息无法交叉融合。

VAE (Variational Autoencoders 变分自编码器)能做到这些,VAE 提供了 encoder 和 decoder,一张图片经过 VAE encode,可以压缩成仅有 64x64x4 的矩阵,这里经过 encode 后的数据空间,就称为隐空间(Latent Space),在这个空间里进行上述扩散模型的训练和生成流程,成本就非常低,这也是目前Stable Diffusion能跑在我们普通电脑上的原因。最后在隐空间里生成的图片数据,经过 VAE decoder,就能转换成高清图。

那 VAE 为什么能做到这样?一张图片转成 64x64x4 这么小的数据量,为什么能保存图片的信息?通俗理解是 VAE 把图片内容转成了语义概率表示,相当于变成了这张图片的描述,比如描述这张图片有猫的概率、有猫爪子的概率,猫在左边的概率,绿色的概率,类似这样,更深入就不了解了,这篇文章 有讲解到一些,也只了解到这里了。

CLIP

VAE 解决图片编码问题,再来看看文本的编码。在控制生成里,文本实际上是怎样参与到模型训练和生成的过程?如果文本只是随便编码进入模型,模型可能只认得一些特定字符,不认识语义,也就在后续的图片生成中没法比较好地通过自由的prompt文案控制。

SD 使用 OpenAI 训练的 CLIP 模型,把文本转为对应的向量,为什么用它,因为 CLIP 模型本身是一个文本到图片的映射模型,它对文本转出来的向量,更贴近图片的特征空间。

稍微展开说下原理:

  1. 有N张图片、以及它们对应的 N 个对图片的描述文本
  2. 对图像进行编码,得到I,下图中,I1/I2/…/IN 表示从第 1 到 N 张图片的编码表示。
  3. 对文本片段进行编码,得到T,下图中,T1/T2..TN 表示从第 1 到 N 张图片对应的文本描述。
  4. 模型的任务是训练 TextEncoder 和 ImageEncoder的 参数:
    1. 让图中蓝色部分Ti和Ii相似度变高,它们原本就是一一对应的文本-图片,属于正样本。(数学上是计算余弦相似度,越大表示相似度越高,最大化这个值)
    2. 让白色部分相似度最低,它们的文本和图片是没有关系的,属于负样本。(数学上是余弦相似度值最小化)6

这样训练后,最终使用这个模型时,TextEncoder出来的向量表示,就跟图片内容有很强的关系。比如下图第四行,猫的文字描述通过 TextEncode 出来的值,跟猫的图片的ImageEncode出来的值,相似度更高,跟其图片的encode相似度就低。

7

PS. 更细节的 CLIP 怎么跟 SD 生成过程结合,还没弄得很清楚,实际上SD 没有用 CLIP 里的 Image encoder,扩展模型训练过程中是用别的 Image Encoder,那就并没有用到文本和实际图片的对应映射关系,但可能CLIP出来的文本编码,语义和表现形式上已经是图片的模式,比如文字 cat,它能跟图片空间里猫所表示的形态(形状/位置)、视觉(眼睛/颜色/形状)、语义(宠物/动物)能比较接近地对应上,也能存储到相关信息,所以跟其他图片编码结合,也能起到很大作用?

采样器

编码和数据量的问题解决了,还有个问题没提到,就是上面流程里的步数太长了,最开始提出的扩散模型训练方案 DDPM(Denoising Diffusion Probabilistic Models 去噪扩散概率模型),正常需要 1000 步降噪过程(称为采样),才能生成一张不错的图片,即使上述隐空间已经降低了计算量,但生成一张图要1000步,还是达不到大规模可用。

为什么 DDPM 一定要这么多次采样?这篇文章说得比较清楚,不能直接减小步数(每次噪声加得很少,避免一步就破坏掉原图),不能跳步降噪(每一步状态都依赖前一步,号称马尔科夫性质)。

随后很快有人提出 DDIM(Denoising Diffusion Implicit Models 去噪扩散隐式模型) 方案,训练时还是 DDPM 一步步来,但生成时是可以做到跳步,同时还能让在步数变少的情况下保持生成的稳定。DDIM不是从头开始逐步去噪,而是选择几个关键的时间点,只在这些时间点上进行去噪操作,并且中间的步骤,比如从降噪100次的图片,下一步直接生成降噪90次的图片,跳10步,生成速度就快了10倍。为什么它能做到跳步,具体原因都是数学公式,就不展开了(还没全看懂),可以看回这篇文章

Stable Diffusion 的 WebUI 上有很多采样器,Eular a,Karras,DPM 等,在去噪过程中通过不同的方法,有不同的多样化程度、图像质量、速度、收敛性的区别。

Stable Diffusion

最后总结说下 Stable Diffusion。上面整个过程和概念,是一个个解决问题的方法,把它们组合起来,逐渐建立起基于扩散模型生成图片的方法大厦,谁都可以用这些公开的理论方法建一套自己的生图模型。

Stable Diffusion 就在这些基础上做一些改进,建立一套稳定的框架、训练出基础模型,开源让所有人可以用,整个 SD 就是多种能力的组合,这些能力可以分别不断升级替换,模型本身还有很多方式去做更强的控制干预(controlNet / LORA等),使得它可定制性可玩性很强,生态越来越繁荣。

最后让我们用一个图串起整个流程和讲解到的概念。

  1. Part1 是用 CLIP 模型对文本做编码。
  2. Part2 在模型训练过程中,图片经过 AutoencoderKL(VAE编码器的实现)生成隐空间下图片的表示,随机生成一个 noise 噪声,加到这个图片里,同时把通过 CLIP 模型编码的图片对应描述文本加入进来,一起进入 UNet 模型,训练预测加了多少 noise 噪声的能力。
  3. Part3 在模型推理过程中,输入一个完全随机噪点,在隐空间里通过不同的采样器,结合prompt 文本输入(图上没表示出来,文本数据会参与到降噪过程),在 UNet 模型里迭代多步做降噪预测,生成隐空间里的图片,再通过 VAE AutoencoderKL 解码出图片。

8

了解整个基础流程和概念后,现在看 Stable Diffusion 论文中的这张架构图,应该也大致能理解是什么意思了。

9

参考资料

2023

2023-12-31 评论(5) 分类:生活

最后一刻才动笔,本想不写了,但已经是连续第17年年终博客了,不管好赖,还是不要断了,随便写写。

旅游

疫情开放了,本来想去更多的地方,但真是很难,只在下半年去了香港和马来西亚,一家人出去还是比较紧张的。

关于香港,上一次去是十年前了,今年再去看不到什么变化,很明显能感受到的是香港的科技互联网跟十年前也差不多,很差,比如八达通充值后扣了钱但没到账,一搜一堆人这半年反馈很多,这在国内互联网是P0级别按小时修复的问题,香港好像没打算修,其他还有很多槽点,比如买地铁票被吞/出票错误,因为垄断了这些事不重要吧。但它还是国际化大都市,各国各色的人,多样化国际化的感觉很好。

马来西亚去了吉隆坡和兰卡威,感受了下伊斯兰教清真寺,挺友好的,特别是布城的粉红清真寺,接待人热情,很多宣传资料以非常直白的方式介绍伊斯兰教,探讨生命的意义,探讨的过程挺好,很科学很思辨,但结论是人类的意义就是相信并崇拜安拉,这让人难以接受。在兰卡威首次驾驶右舵汽车,稍微熟悉一下没啥问题,也是个新体验,整个兰卡威感觉还行,不是旅游旺季人很少,是挺舒服的,听说东马仙本那更好点,下次有机会再去。

6月再出差去了次美国,对洛杉矶市中心的印象就是脏乱差,尿骚味,流浪汉。入住的第一天同事的东西在酒店里还全被偷了,还好有mg游戏网站的find功能,否则整个街道都没有摄像头,完全不可能找回。旧金山也是脏乱差的代表,坑人、垃圾乱飘、砸车风险高、拥挤,但其他地方似乎又很好,像阿纳海姆就很漂亮,美国太大了,差异很大,有机会都体验下。住了airbnb美国的大house,住的几个小区应该不差,但整个感觉很僻静,很冷清,不怎样。

家庭

今年身体是近十年最差的,有一半的时间在咳嗽,上半年已经连续咳了两个月,6月底中招后又一直持续咳了半年,断断续续咽炎鼻窦炎轮流来,搞得很严重,病总是一直不好,很影响心情。3月中开始健身一直到6月,本来希望坚持锻炼下身体能好点的,结果好像身体免疫力越来越差,平时不运动,马上去健身似乎也不是好事,6月开始咳后也没法继续了,咳的时候不敢运动,等好了还是得再看看别的锻炼方式。

对两个小孩的教育还是很佛系,有点放养,也导致一些问题,难以教育,两个娃在探索上的缺乏,拒绝尝试新东西,看电视也喜欢看已看过的,一遍又一遍,十分念旧,怎么引导他们的好奇心和探索欲,没找到方法。另一个是锻炼缺乏,身体素质不太好,也是我的问题,来年要跟家人一起加油。

年末经历了亲人过世,面对死亡很沉重,怎样能尽可能安心地面对后续可能的离别?好好对待在的人,也好好对待自己,不要时间到了后悔。

mg游戏平台官方网站

在各种行业的萎靡下,AI 的发展几乎是唯一能触动大家神经的,发展速度太快,主要是研究方向明确了,全世界那么多聪明人/先进的组织/最多的资本支持,都沿着这条路跑,自然很快,但跑了一年后,大家期望的大模型跟各行各业结合的应用还没跑出来比较好的,还需要继续探索,总体上,它的未来是显而易见让人兴奋的,今年没有多少时间投入mg游戏平台官方网站,明年得规划好投入,希望有进展。

今年读的书很少,但上下班听讲述和小课程比较多,印象比较深的是华衫讲儒学,听完对很多概念都理解了,格物致知/必有事焉而勿正/中庸/近悦远来/诚意正心,非常强的正气,当然道理都懂但难的就是做到,做到的真是圣人。我至今没找到修身养性的方法,通过多看这些书明白这些概念,远远不行,看的另一本书《悉达多》,明确讲到这个问题,没有任何宗派教义可以教人领悟涅槃,都要靠自己体验,自己领悟。

其他

股票继续跌,我一直放着一直存着希望,这么低的价格,真的不涨回来吗,结果真的不涨,还继续跌,核心是什么都知道,信心很重要,但信心不断被殴打。房子方面年初还有回涨趋势,当时甚至想搞满杠杆进入,还好最后没有,越来越往下走刹不住车,等经济好了,信心有了,房子才有可能回来吧,现在保命就行了,还了房贷,安心活着。

今年35岁了,国内特有的年龄槛,虽然有时候是调侃,但焦虑切实存在,来年加油吧。

2022

2022-12-31 评论(0) 分类:生活

疫情

2022是疫情防控拉胯的一年,各种大规模封控带来的不合逻辑的事情频繁出现,到11月顶峰,太多魔幻的事情,真是挺怕要倒退50年,一个不符合逻辑的社会,还好后面止住了。那段时间在家办公关了一个多月,真是给闷坏了,12月放开后,某天开车出去转转,看到街边恢复生气的样子有点感动,自由而归于正常的感觉。

紧接而来的就是大规模的快速感染,速度确实是快到出乎意料,而zf在这块确实继续在拉胯,核酸全撤,抗原不准以及难抢,导致想尽早自我隔离避免感染家人是很难做到的,撤了所有防控措施,药也储备不足,拉胯,全得靠自己。放开后去深圳出了趟差,一不注意,回来就导致全家中招了。

两三天的反复发烧,最高到40度,头痛欲裂,睡不着非常痛苦,脑子乱七八糟转,感觉在非常高速地运转,各种碎片漂移凑不成一块但又停不下来,夹杂着痛苦,在万花筒的世界中。全身酸软、刺痛、咳嗽加剧、肠胃不舒服、鼻塞,症状确实是很猛,还好布洛芬能帮助扛一下。家人有各不一样的症状,总的来说还好,算平安度过,希望以后不要再得了。

不知道世界接下来能不能恢复正常,传播力这么强的病毒,变种又那么多,持续下去受不了。回看以前出去玩的照片,人堆中没有戴口罩,有种恍如隔世,希望世界能恢复。

股票

还以为去年股市已经是惨案了,没想到今年更拉胯,持续下跌,最低只跌剩最高点的20%,我买的都是中概股,跌的也都是中概,也是跟疫情的操作有关,对中国的信心快被疫情期间的各种操作消磨殆尽了,从奋斗变成躺平,爱怎样怎样,放弃幻想,做好打工人,不想玩了。

教育

俩小孩大娃上学了,小娃上幼儿园,小学还好,没有传说中那么卷,作业不多,我们也是很佛系,前面还有每天晚上陪着做作业看英语绘本,后面也少了。虽然不卷,但像英语没有提前学就容易跟不上,跟不上就容易产生厌学情绪。大娃在mg游戏平台官方网站上算是很乖了,目前还没有血压高涨的经历。小娃幼儿园基本就上了一个多月,后面就因为自己感冒、疫情一直没去,社交能力基本为0,希望下学期能正常。

回看小孩的成长,今年2月希希才掉第一颗牙,转眼间牙掉了七八颗,大牙都长出来了,挺快的。希希年初也还不会玩游戏,下半年跟她一起通关了双人成行,现在也玩得很溜了。

旅游

很想旅游的一年,5月去了下潮州汕头转转,7月去了呼伦贝尔,带着大娃三个人,幸运地没被疫情封控影响,完整地游玩了草原,大片大片的草原,金黄色的油菜花田比草原更美,村庄里看漫天繁星,高空秋千和滑草,麋鹿卡丁车骑马,玩得还算不错,不过就景色来说,还是去年的新疆最美。

8月跟公司团队去成都开会,再去了下川西海螺沟一片,不过时间太短过于仓促,没玩什么,仅到此一游,走非常险的山路到若丁山,很适合野营的一个地方,大片草地配合漂亮的山景,下午在那里度过很舒适惬意,要是晚上能住下看星星就更好了。

期望明年可以出国游,可憋太久了,疫情以后不断把自己缩小在两点一线,封控期间还只剩一个点,整个人感觉非常闭塞,长久下去对身心健康不利,希望能更多出游,对在全国全世界留下脚印这事很感兴趣。

玩乐

当前几乎唯一持久的兴趣就是看看NBA22赛季一整个赛季勇士库里看下来,最后竟然真的夺冠了,有点梦幻,G4感受到库里强悍的意志力,体育不是体能技巧的比拼,精神力量在当中占的比重很高,才会这么有魅力。同时这一年也见识了威少、杜兰特从各种嘲讽中不受影响一步步走出来的坚韧,球星确实身心都很强大,看别人做到自己做不到的事,敬佩。

科技和互联网变得有些无趣,以前喜欢体验感受各种手机,现在千篇一律,已经玩不出花了,iPhone也没什么惊喜,反而摄像头越来越傻大黑粗,VR彻底凉凉的感觉,互联网产品没什么让人惊艳的新品,也就chatGPT稍微亮眼。倒是今年玩了个让人惊叹的游戏双人成行,每次玩都在感叹它的创意创造力,不愧是年度最佳游戏,强烈推荐亲子或情侣玩。

及时行乐,成了新的标语,之前工作的比重占太大了,现在各方面都无趣的情况下,不如多让自己玩得开心,旅游、游戏、体育娱乐等,看到同事们也在开拓自己的兴趣找乐子,多玩玩多体验生活,别到老了后悔。

最后

2022年元旦全家感冒咳了两个月,年末全家中新冠又是一波,希望来年都能健康,多体验美好生活。

2021

2021-12-31 评论(9) 分类:生活

一年没写博客,生疏了,到了年终这篇不知道该写啥,博客这个词现在也变得非常有年代感,差不多要彻底消失了。没写的最主要原因是懒了,另外好像也变得不那么愿意发表观点了。

总的来说今年还是一个对自己不太满意的一年,对自己的期望没达到,一整年时间,做成了什么事情?达成了什么成就?认知有什么提升?回想起来并没有多少值得一提的,只能写写一些生活小事。

经历了一次特别的体验,住在6月份广州疫情最中心地区,被完全封闭在家27天,不能下楼不能收快递,物资紧缺,吃肉成奢侈,体验了一下物资相对匮乏的生活,感受上还好,在哪不是一样拿着电脑手机联网工作,差别不是很大。

还有一次体验,跟一个人聊技术聊了一个多小时,感觉进入了心流的状态,很怀念心流的感觉,岗位不同以后,进入这种状态就变得很困难。当时聊完挺兴奋,工作10年,回想起这个互联网大航海时代,有很多参与其中的回忆,只不过是纯技术的。往后10年,希望能再做些事,为自己留下更多好的回忆。

今年各种政策轰炸,行业一个个毁灭和暴跌,去年那个外滩事情真是中国互联网的拐点。上半年在各种纠结,真是很难,下半年感觉开始佛了,爱怎样就怎样。有时会想,向前看这么简单的道理为什么实践起来难呢,进化论的角度看,是绝对理性倾向向前看的人在原始社会活不下来吗,没想明白。

今年也成了资深韭菜,以前每次股灾一般中概股不会太怎样,今年倒是纯中概股股灾,完全踩在雷区里,美股的资产变成负数,确实自己不是这块料也没有太大兴趣投入,也是直接躺平了。

挤着时间还是转悠了几个地方,带家人去北京,跟朋友去了阳江,两人去了新疆,喀纳斯的美景值得多去看看,是个好地方,青色湖水山色配得上仙境的称呼,可惜在禾木刚好阴天没看到星星银河,这个愿望继续往后推了。

今年大娃小娃健康成长,小娃到2岁还不说话,最近一个月才开始开窍咿咿呀呀各种学说话,是最可爱的时候了。大娃继续经常撒娇可爱,但很多时候不讲理,被气得够呛,以前看的育儿方法在情绪面前都忘光了,情绪控制也是今年对自己很失望的一点,不仅没长进还退步了。

2022年,希望明年回顾时对自己的表现能满意一些。

2020

2020-12-31 评论(15) 分类:生活

2020是很特殊的年份,世界发生很多大事,感觉过得很快,又感觉过得很慢,每年都会发生很多不好的事和好的事,看自己更在意和看重哪部分。

工作

今年上半年工作上拿到不错的成绩,年中去晋升答辩,也是一段难忘的经历,前一晚通宵改PPT,大雨的日子,六七点回家还被车栏撞到流血,睡了半个钟匆忙跑去答辩,喝了几瓶红牛咖啡头脑都不是很清醒,顺利讲完回答完问题,然而并没有通过,确实很难。

年末从蚂蚁转岗到lazada,结束三年半蚂蚁的历程,也结束了一年多以来北上广深杭多地跑的处境,今年飞机坐了36次,因为疫情算起来只比去年多几次,但总感觉多了很多,好几次延误凌晨两三点才到家,也经常早上五点出发赶飞机,有点累,对比下现在广深跑简直跟同城没什么区别。刚到新环境,目前状态不错,尽力做好事情,务实解决问题,不着急,就是英语口语这个问题没解决。

蚂蚁上市这历史的一粒尘落头上,作为其中一小员无力影响事情本身,能做是调整心态,做好自己的事,以及相信公司本身的价值。舆论上势头往哪处走,内容就会投其所好地往哪处生产,追涨杀跌是群众普遍行为规律,谁都能上来说两句,看起来讲得头头是道,实际上基本事实都不顾,跟那些养生排毒文章一个性质。巧合的是,2010年11月3日腾讯发表3Q大战“艰难的决定”声明,2020年11月3日,蚂蚁暂缓上市,十年过去。

物质

用心感受一些美好的物质,对提升幸福感很有帮助。

特别喜欢今年的 iPhone 12 pro 的工业设计,用了半个多月每次用还是很有愉悦感,上次有这种感觉的手机是9年前的 iPhone 4s,可能我更偏向喜欢这种规规整整很有秩序感的设计,美轮美奂,爱不释手,全平的屏幕,玻璃跟金属直接衔接感觉很完美,如果摄像头处是平的就更完美了。今年iPhone 买的就是外形工业设计和拍照的提升,5g/A14什么的基本无感,iPhone已经性能过剩,软件没有把提升的性能吃完,就算是三年前的iPhone X用起来速度也是没什么问题。智能手机诞生13年,还没有看到下一代突破的曙光。

今年换了辆车,起初到处试驾一些bba传统车型,感觉跟我的雷凌没什么区别,后面试特斯拉model3,真是有种震撼的感觉,我这个不懂车的理工男太容易被这种产品吸引了,极简(大部分人觉得是粗糙)的内饰,没有一大批乱七八糟的按钮,现代的车机系统,给我第一感受这跟之前试驾的车不是一个时代的东西,冲击比较大,我不知道传统车厂会不会成为诺基亚,但当时确实有类似手机功能机和iPhone 对比的感觉。只是model3这种自己开着爽坐车的人不舒服的体验,不适合我这二胎家庭的需求,所以并没有买model3,而modelX又过于高价,觉得远不值那个价钱,最后买了特别符合我这个实用主义奶爸定位的理想ONE,这车除了外形个人不喜欢,其他表现都很好,车机系统的体验感觉是所有车里最好的,比较满意。

今年开始似乎酒成了我一大爱好,开始品尝各种威士忌,买了各种酒摆柜子上,看着就舒服,有种手办的感觉,喝着也爽,经常小酌。有时不同酒的小差别我也喝不懂,就是喜欢尝,目前喝起来感觉最好的是山崎,就是太贵了。酒吧里的鸡尾酒和氛围也是挚爱,同时我一直想知道酒吧里的冰块哪里有卖,透明无暇实心的冰块可以融化得很慢,自己冻不出来,也没地方买,酒吧的酒就贵在这冰块上了。

家庭

小男孩进入精力旺盛阶段,男孩跟女孩真是天生有巨大差别,大女儿一岁多时经常乖乖坐着玩玩具,小男孩一岁多基本坐不下来,满屋不停乱跑乱爬,举止粗鲁,摔了无数次,破皮流血都好几次,真是累坏人了,茁壮成长中。

大女儿有时特别暖心,有时特别任性,教育的问题长期困扰我们,家里每个人的教育方式理念难达成一致,加上大人自身一些脾气缺陷让孩子学了,经常会闹腾搞得不愉快,不知道怎么教。年末开始听一些育儿类书籍的讲书,正面管教、亲密关系、父母的语言、不吼不叫等等,讲的教育理念其实差不多,就是无条件爱孩子、倾听、说出情绪、正面肯定、理解、保持温柔、不计较、定规则底线、不评价、言传身教、以身作则,我觉得听完是有些作用的,对小孩在努力变得更有耐心容忍度更高一些,有意识实践这些理念,只是小孩性格习惯形成后,并不是一两招一朝一夕就能轻易改变的,任重道远,知行合一不容易,努力做好父亲的角色吧。

今年小孩学钢琴,我也以极其缓慢的速度跟她一起学了,羡慕会弹琴的人,不需要达到多好的水平,只需要有时能玩玩抒发情绪减缓压力,琴棋书画诗词歌赋是抒发和感受情感的介质,少了这些能力,人生会少了一些乐趣。

今年的疫情改变世界,作为普通人被改变的并不是很多,疫情导致年初在老家一家老少十几个人一起待了一个月整,十分难得,这一个月估计我爸妈可开心了,一大家人在一起的感觉多好,几个小朋友也玩得high,离开时小孩哭得很厉害,以后估计很难有这样的机会了。疫情导致全国的感冒大降,因为全年戴口罩,今年我完全没生过病,什么感冒咽喉发炎都没了,口罩的作用很大,只是戴口罩像给人类打了个补丁,只是个临时方案,期望科技能提供更好的方案。

个人

有段时间工作上有些迷失,加上一直多地跑,家庭矛盾等问题,状态很差,那时看脱口秀李雪琴的的专访,说到以前没事桌上的笔掉地上了,都能让自己情绪一下子掉下来,虽然还没那么夸张,但竟然感觉情况特别类似。经过几轮调整后现在好很多,年末这段时间基本恢复正常了。

有时候多看看或听听一些我觉得是“科学式鸡汤”的书对调整心态挺有帮助的,像 正念、被讨厌的勇气、活好 这些书,短期内可以注入一些理念,时刻提醒关注当下,意识上淡化处理压力带来的负面情绪。幸福快乐是种能力,如果不是天生具有的话,是应该花时间学学的。

另一个缓解方式是多跟不同的人聊天,了解广阔世界不同的生活方式价值观,过去几年好像被困在一个圈子里出不来,视野越来越局限在公司内,内心也狭小起来,一些问题在狭小的圈子/体系/空间里可能是致命焦虑的大问题,但在其他多元的世界里它可能不值一提,前提是脑子里有没有这个世界。

2021 期望能持续年末的状态,找好自己的节奏和方法,做点事情赚点钱实现好自己的价值,多点感受身边美好的事物。

个性化UI在金融场景的探索和应用

2020-8-3 评论(5) 分类:技术文章

背景

随着各业务流量红利逐渐见顶,如何在有限的流量下,提升流量给用户带来的体验,对流量进行精细化运营,进而提升转化效率,成为各业务的重要课题。

蚂蚁数字金融线包含了 保险/理财/信用/借贷 等业务,经过多年建设,形成了多样的金融资产/场景服务/权益/内容等多维度的产品去服务用户,而这些产品分发给用户时,决定曝转率的大体上以产品推荐是否精准,以及产品以什么样的UI表述方式进行展示决定。在产品推荐上,算法已经逐步覆盖,给业务带来很大的效果提升,在产品推荐算法优化到一定程度后,提升的投入产出比已经有限,我们开始在UI展示上探索,是否个性化智能化的展示能为业务带来提升。

探索

UI1

淘宝比较早地做了智能UI的尝试,在推荐出商品后,对于商品的UI展现方式进行千人千面个性化,商品列表有两列/三列/横排的布局方式,商品封面有 场景图/白底图/视频 等类型,商品本身有 标题/描述/评价/销量/属性/标签/活动/价格/快递/地区 等一系列字段标签,在列表上无法全部容纳,不同的人对不同的 布局密度/封面/字段标签 会有不一样的关注度,这里就有了智能化的空间,对这些属性进行自由组合千人千面推荐,取得不错的提升成果。

在数字金融线的业务,是否也可以这样做?数字金融线各业务的“货”并不是统一标准化的商品,主要由 金融资产/服务/权益/内容 构成。例如财富业务,金融资产(基金/定期等)在购买门槛高的情况下,会通过各种包装降低门槛,包括场景化包装成服务(工资理财/笔笔攒等),配合营销活动包装权益(体验金/财运金/黄金票等),包装资讯/视频/直播等形式的内容。同时这些包装后的“货”在不同场景有不同的UI展现形式,并不是标准化的,这些“货”也没有多种字段可以直接进行自由组合搭配,如何能做个性化千人千面?

问题

我们可以针对一个个场景设计多个模板样式去匹配不同的人,这也是之前在一些业务上进行过一些尝试的,但有几个问题:

  1. 无设计标准:设计什么不同的UI样式才可能有效,没有标准和指导,靠设计师个人经验。
  2. 样式生产效能:UI样式需要一定量级进行分人群匹配,设计工作量大。
  3. 算法匹配信息不足:算法难以识别不同UI样式间的差别,以 人<->样式ID 的方式匹配效果有限。
  4. 无沉淀不通用:不同的场景割裂,设计经验/算法经验/工程链路无法复用,无法沉淀用户偏好,各场景实现成本大。

针对这些问题,我们探索了一套相对通用的个性化UI解决方案。

方案

语义标签体系

UI2

首先是根据过往数金各场景的设计经验,由设计团队主导抽象出一套UI语义标签体系,去描述一个UI样式里可能吸引用户点击的关键点。

这个标签体系分表现层和内容层两个层面:

  1. 表现层去描述UI长什么样,比如它的风格是实物还是扁平的,色彩是鲜艳的还是偏透明的,字体相对大小。
  2. 内容层表示这个UI展现有什么内在含义,比如它是突出权益的(红包/抽奖等),代表从众心理的(xx人正在购买),代表认知的(黄金图/人物图/降维描述/品牌权威描述)等等。

我们认为不同人对这里列出来的标签是会有不同偏好的,例如年轻持仓少的,可能用扁平图/从众/降维描述相对能打中,老年人可能对权益/实物图形/大按钮比较敏感。

这套标签期望能产生几个作用:

  1. 指导设计往什么方向进行差异化设计。
  2. 语义化描述UI,作为特征让算法更好地认识UI的外在和内在含义,多场景通用。
  3. 后期可以针对线上数据进行归因分析,语义化看出不同用户的UI偏好差异。

工程算法

标签体系的思路把UI的维度拆细了,为不同人原子化设计不同的元素,我们沿着这个思路打造了相应的工程和算法方案:

UI3

1.多样式生成

我们将UI原子化打散-自由组合。一个产品可以以各种方式包装后呈现给用户,主要包括描述产品的创意物料(文案/图片/动画),再配合不同的样式和版式(字号/背景/布局排版)组成,这些元素可以进行自由组合,例如一个单图文模块,我们可以参考标签体系设计10个文案,10个图片,2个排版样式,排列组合就可以生成200个UI样式包,作为丰富的可以匹配不同用户的素材。

2.UI偏好模型

我们将组合生成的UI样式包结合UI标签与用户属性进行匹配关联,以CTR为目标训练模型。训练中取三种数据:

  1. 用户属性,包括年龄性别等基础属性,以及像持仓情况、投资次数这样的业务属性
  2. 每个UI样式包所打的UI标签数据
  3. 每个UI样式包在线上随机投放的曝光点击数据

经过特征工程处理,组成训练集去训练出DNN模型,在线上部署使用,输入是 用户属性 + (UI样式包对应的)UI标签 列表,输出是每个UI包的点击概率排序。

3.工程链路打通

从样式配置,到数据组装,到召回排序,到最后前端渲染,对接各个平台串联整个链路,在各场景实现千人千面UI推荐能力。

落地效果

当前个性化UI在数金多个场景落地,不同场景有不同的提升效果,按流量平均下来CTR(曝光点击率)提升20%左右,同时接入的场景CVR(曝光转化率)也同步提升。

其中流量最大的是支付宝首页财富生活模块,组合了几百种样式进行匹配推荐,CTR的提升在首页大流量的加持下为业务带来很大价值。

CTR提升最大的是理财Tab蓄水版直通车里的黄金和黄金票卡片,一千多 种样式,CTR 和CVR可以提升50%左右。在这个版本里卡片在屏幕占比较大,不同元素的展示对用户点击的影响是非常大的,这也是最适合接入个性化UI的场景。

UI7

分析

有效性分析

为什么这套方案会有效提升CTR,尝试回答几个常见问题:

1.疲劳度

是不是用户对一成不变的样式有疲劳度,只要有新的样式点击率就会提高?我们在每个场景里上线个性化UI,会分几个桶进行AB效果对比,其中随机桶是对组合生成的几百个样式进行随机投放,比如这是财富生活的实验数据:UI5-2

可以看到随机投放组合出来的样式效果并不好,并没有因为样式多了就能提升,反而因为组合出来的某些质量相对差的样式影响CTR下降,这在多个场景里都有类似的的情况,可以看到CTR的提升并不是疲劳度新鲜UI带来的。

2.UI外的因素

是否是UI以外的因素影响CTR,例如不同的产品/权益内容?每个展位接入的AB实验里,产品和权益是固定不变的,个性化UI用不同的表述方式(图片/文案/样式/排版)展示同样的产品和权益在同一时间随机人群进行AB对比,没有其他因素干扰。

3.新样式抢眼

是否有几个很吸引眼球的UI拉高了CTR,没什么人群偏好差别?很有可能因为原来的样式不抢眼,我们组合出来的某些样式加红加粗天然吸引用户注意力,实际上我们实践中因为设计规范的约束不会做太抢注意力的设计,同时我们也分析了,不同样式在随机投放和算法投放的差别,例如下图玩转理财场景里,一些样式算法推荐的人群比这个样式随机投放它的点击率提升了几十个百分点,说明不同人对这些样式有明显偏好,算法把这些样式分配给真正偏好的人,带来了点击率提升的收益。UI6

归因分析

我们看到了用户对不同UI表述展示方式有不同偏好,期望能沉淀出具体人群跟UI的偏好关系,给设计师和业务方在新场景设计中提供参考帮助。得益于UI语义标签体系,我们是可以沉淀出UI偏好和画像的。

我们探索尝试了多种方法去做归因分析,包括:

  1. 数据统计,直接统计线上不同人群在不同样式的点击率,在图表上找出点击率的差异,沉淀偏好结论。
  2. EBM可解释性模型,解释DNN模型中各特征对最终效果的贡献度,以及交叉特征观察人群特征和UI标签的关联关系。
  3. 网格分析,在表格上将多个人群特征-UI标签进行组合,列出所有组合的点击率,从中找出点击率变化规律和差异,找出偏好差异。
  4. 标准化偏好,CTR(UI特征,人群特征,对应产品)/CTR(人群特征,对应产品),衡量单个UI元素在指定人群特征里对点击率的影响程度,再进行对比找出偏好差异。
  5. 单样本方法,建模的方式分析人群特征和UI特征的贡献度。

初步可以沉淀出一些偏好洞察,例如:

  1. 理财货架场景上,收入较低者偏好产品名称,普通/高收入者偏好产品推荐语。
  2. 按钮颜色上,总体红色比蓝色更吸引,但越年轻的用户,越偏好支付宝蓝。
  3. 白领/初级投资者偏好金融元素,蓝领/高级投资者偏好品牌元素。
  4. 有信用卡者对走势图不敏感,无信用卡者更偏好走势图。
  5. 中年(40-50岁)年龄段特别偏好紧迫心理类型的标题,尤其偏好行业风口类。
  6. 理财货架中,整体上宫格样式效果远低于列表样式(宫格面积相对小),但年长者对宫格偏好不低。

归因洞察还未形成稳定分析体系,处于探索期,最终是期望探索到一种或多种分析有效通用的方法,沉淀为平台自动分析能力,能在平台沉淀 业务维度、场景维度、人群维度 的UI偏好画像。

产品化

在方案落地出效果后,我们看到这套能力是具备一定通用性,各业务可以接入获益的,于是我们致力于将它的能力产品化,沉淀多样式生成配置、通用高效的UI偏好模型等能力,让各场景可以快速接入。主要围绕接入效率和接入效果进行优化。

效率优化

个性化UI的接入成本比较高,需要设计素材,人工打标,前端/业务后台/中台对接工程链路,训练UI偏好模型,跟进实验,手工清洗数据分析。涉及流程长,对接的角色多,投入较大。在平台级大流量展位上接入这套能力,能产出很大的业务效果,这样的投入还能接受,但要覆盖更多的长尾场景,这样的接入效率性价比相对低,难以被接受,我们从几个方面建设去提升各场景的接入效率:

  1. 一站式配置平台(万花筒平台),完善样式配置、组合预览、打标、筛选审核、业务干预、样式三板斧发布、数据分析能力。
  2. 通用链路,提供从样式包召回、推荐、数据组装的通用工程链路,通过 BFF SDK 输出,普通场景只需要前端BFF接入SDK即可完成接入,减少与业务后台和中台的链路对接。
  3. 通用模型,用户特征和UI标签特征在各个场景里是通用的,也就可以训练出一个通用模型,映射用户特征和UI标签特征的偏好关系进行推荐,虽然效果相对专门训练的模型会打折扣,但适合长尾场景快速接入。
  4. 专用链路,数金多数场景与各业务平台和中台结合较紧密,我们把个性化UI能力嵌入这些平台,可以提供更好的结合业务和特定场景的一站式使用体验,提升效率,例如对接UCDP/梵高/毕加索建设banner链路、对接洛可建设微贷专有链路等。

以上几点是短期内会建设完成的能力,此外有两个正在探索中的提升接入效率的课题:

  1. 素材生成,当前接入的大多数场景需要设计师和运营一起产出多个图片和文案素材,这是接入流程中最大的成本,我们在探索素材自动生成的方案,沉淀符合设计规范的原子图片素材库,提供对不同场景尺寸和组合的处理适配能力,让图片素材可以在多个场景里复用。文案方面在中台智能文案基础上加入更多的业务语料,自动生产的文案更符合业务调性和用户偏好。
  2. 自动化打标,当前需要手工对每个元素进行打标,当标签趋于稳定,并且打标量达到一定程度后,可以通过算法理解图片和文本,归类到指定的标签进行自动化打标,减少人工投入。

效果优化

如何对样式推荐的效果进行进一步提升,也是我们持续在探索的,算法效果的提升,很大一部分取决于特征数据的丰富和准确,围绕数据会在这几方面进行尝试:

  1. 端智能结合,云端不直接推荐UI样式结果,而是推荐几个样式候选集,端上再进行实时重排。为什么端上重排可能会有效,端上可以根据用户的实时行为,判断用户看了还是没看(停留了、快速划过),再结合它的行为路径(点了有某个UI标签的展位、快速离开、去了很多二级页等),去综合判断是否因为疲劳度、兴趣变化等去切换其他样式,更好打中用户。
  2. 自动特征工程,训练专用的UI推荐模型时,会根据对场景的理解进行特征筛选和交叉组合处理,这里选择什么特征交叉由个人经验决定,我们借助AI中台的能力,尝试autoCross自动筛选有效的交叉特征,理论上能得到比手工交叉筛选更好的效果,同时减少特征工程的人员投入。
  3. 多模态建模,抽取图片素材/文本素材的高维特征,融合后作为UI标签的补充加入训练,丰富模型对UI的理解。
  4. UI标签演进,我们一开始构建的表现层/内容层的标签体系,几个场景使用下来有不错的效果,但还没能做到很通用地描述UI,正在尝试以描述因子/驱动因子的方式组织标签,我们会尝试不断迭代标签的描述粒度和通用性。

未来

个性化UI在金融场景我们实现了从0到1的突破,后续从1到100我们还需要做很多工作,除了上面说的产品化效率和效果优化,还有三个方向持续探索:

  1. 通用性,当前的标签体系、模型、工程链路都是围绕数金业务进行建设,实际上这套能力在多产品服务分发的场景都能适用,比较适合支付宝的业务形态,后续可提升通用性,在支付宝分发海量产品服务的展位上进行尝试。
  2. UI偏好画像,接入的场景足够多,标签体系足够完善,归因的方法探索出通用有效的方案后,可以沉淀用户的UI偏好画像,作为体验端的数据资产,为后续算法模型、业务设计提供价值。
  3. 能力扩展,我们围绕单展位模块的千人千面建设个性化UI能力,在这以外,跟智能展示相关的,还会有其他空间可以挖掘,例如全屏的注意力管理,用智能化的手段,避免全屏范围内 动画/红点/抢眼颜色/弹屏 不断抢占用户吸引力,以合适的方式分配用户注意力,提供更好的体验和效果,是一个可以探索的方向。

总结

我们针对数金的业务特性,在对产品的个性化UI展示上提出了 元素打散组合-语义打标-算法推荐-归因分析 的方案,落地取得了不错的效果,当前在将能力进行产品化沉淀的过程中,逐渐完善核心的 多样式生产、精准UI偏好模型、UI偏好画像 能力,让各长尾场景快速接入取得规模化的业务结果。过程中会碰到许多困难,但核心的“不同人有不同UI偏好”已被验证,我们会沿着这个方向,联合设计、产品运营、算法、质量一起持续深耕和拓展个性化UI能力。

2019

2019-12-31 评论(19) 分类:随记

今年博客进一步减少,去年年终时就说了,不再遵循每月至少一篇的惯例,以后年终的一篇可能也不写了。

今年最大的变化,就是生二胎和异地。四个月的娃,已长成大胖小子,逐渐会跟人交流了,日渐可爱,很少哭闹,健康得很,三好娃儿,可惜今年在他身边的时间实在太少,因为异地了,我在杭州,家人在广州,这是一系列巧合和各种考虑下的结果,真是之前没想到的一种状态,回看17年博客说希望能增加陪小孩的时间,没想到越来越少。

异地这事,作为老父亲,有些感触,回想起以前每学期回大学坐车时我爸妈都很不舍得,我妈每次流眼泪,我觉得这有什么好流的,麻烦。就像现在我找小孩视频小孩不理我一样,深刻感受到作为父母对小孩的不舍得与思念,以及作为小孩的没心没肺,这很正常。其实异地也不尽是坏处,一个东西变稀缺了,就会让人更珍视,有来之不易的陪伴时间时会更投入和珍惜,同时也更感受到家人的重要性,就我这一个人生活的宅男状态,要是现在还单身一个人,那是多糟糕。人的适应能力很强,像经常坐飞机往返,早上五点起床赶飞机,这种看起来很累实际上还好,就像小镇上的人觉得城里每天地铁上下班两三小时很辛苦一样,习惯了没什么。

工作上持续有很强的焦虑感,人生就是不断的千军万马过独木桥的阶段,除非甘心躺着不动。互联网行业的速度催着人要快步往前跑,不能走也不能躺,否则可能产生踩踏,还赶不上车,在今年这形势下更严峻了,以后在35+这辆车上的准入门槛可是越来越高了。今年继续mg游戏平台官方网站,在大公司一个好处是身边很多聪明人,观察mg游戏平台官方网站下他们的思维和行动力,吸收一些经验见识,mg游戏平台官方网站做些事情,期望不落下。

想不起还能写什么,用一些数字表示吧。今年外出旅游0次,有点闷;坐飞机32次,大部分是下半年;电影56部,刷剧5部,也是下半年,一个人去电影院次数暴涨;14本书,开始入坑庆余年这种超长网络小说;健身40次左右,都是年初有兴致,后面懒加受伤停了;记账第3180天,今年收支盈余6000元,年光族;连续3583天写日记,小想法从博客转向日记了。

今年总的来说对自己的表现并不是很满意的一年,2020年加油吧。

《少年的你》碎念

2019-11-3 评论(4) 分类:随记

看电影《少年的你》,挺喜欢。

回想起来小学我也被打过几次,不过印象不是很深,也没那么夸张,小学时回家告诉了家人,然后去学校找了老师,后来怎样记不得了,但大家都表示出这是个麻烦事,老师更是在班上严肃地说没什么大事就应该自己搞定,不用搞得这么大,作为男孩,大家觉得被欺负还不能自己解决是丢人的。回想起电影里班主任离职时,说的话肯定是被审查过了,原版应该是一些尖酸怪罪的话。有多少老师能做到真正关心学生,而不是是不是给自己带来麻烦。

电影渲染了高考的恐怖氛围,比我们当时严重,但高考确实一直是我的噩梦,虽然我考得不错,但那段日子不堪回首,成年很多时候可以靠平时的成绩,而不是高考这样的一锤定音。高考是底层通往中上层走出去的几乎唯一通路,而底层的学生要克服的困难比中上层多得多,在学校受歧视欺负时的话语权,电影里没提到的教育资源的不足,思维惯性的缺陷,原生家庭可能的不安宁,甚至上学机会都没有。十年前有《我奋斗了18年才和你坐在一起喝咖啡》,现在依然一样。

电影表现出来的满满少年感,压抑的氛围中有美好和温暖,不知不觉已接近中年,少年的美好总是很能触动人。男女主角的表演看着特别高质量特别享受,敬佩这些演员,一直在感叹人与人之间的差距,天赋和努力程度都差距巨大,脑回路上的差距比社会地位上的差距更大。

保护世界看起来是个虚无宏大的事情,但这部电影确实能做到保护世界,把社会上一些不怎么被关注的问题放大成热门话题,多少正在受校园欺凌的人会感谢这部电影,虽然按网民惯性很快会冷却,但影响力在那里,跟《我不是药神》那样。期待有越来越多被公众误解或不关心的主题电影出现,像抑郁症,同性恋等。

另一种保护世界,就在我们日常工作中,经济增长是保护世界最有效的方式,商业创造出来的低门槛工作岗位,工厂,快递,外卖,能帮助多少家庭走出困境,多少小混混走上正轨,商业就是慈善。

程序员和工程师

2019-9-28 评论(5) 分类:随记

程序员和工程师是两个不同的角色。

程序员是创作者,作品的所有者。

工程师是工程的设计者,建设者。

公司里的职位是工程师,而不是程序员。

工程师是负责把公司产品打造出来的角色,涉及到方方面面的工作,写代码,架构设计,规范制定,质量保障,进度把控,方案权衡,制度建设,上下游沟通,多团队协作,业务理解,问题定义,中长期规划。

程序员则是更纯粹一些的角色,就是通过写代码进行创作的人,与作家、画家、木匠、铁匠类似的角色。

早期只有程序员没有工程师,因为程序是一批嬉皮士的玩物,还没进入工业化批量生产。

现在可能只有工程师没有程序员,程序成了工业化社会中的一环,现代软件产品大多都需要作为一个工程去由一个团队实现。

理论上程序还是可以脱离工程存在,作为一种创作介质,程序员可以独立创造属于自己的作品,它的自由度很高,可以是引擎,工具,语言,游戏等,但它的空间越来越小了。

在做工程师的同时,可以尝试保留程序员的角色,创造自己的代表作。

Baidu
sogou