尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

从回归到排序:构建与人类偏好对齐的AI人脸吸引力模型

发布时间:2026/9/24 21:40:31

资讯中心
01
ARTICLE

从回归到排序:构建与人类偏好对齐的AI人脸吸引力模型

从回归到排序:构建与人类偏好对齐的AI人脸吸引力模型
最近在Hacker News上逛的时候看到一个「Show HN」项目AI Facial Attractiveness Model Aligned with Human Preferences通俗说就是做一个“用人类偏好对齐出来的AI人脸吸引力模型”。这个方向我过去大半年一直在折腾从第一批demo翻车到现在勉强能上线中间踩的坑不少今天想把这个项目的完整技术链路、设计取舍和边界思考一次性写清楚给同样在做人脸美学、偏好对齐或者视觉AI排序的朋友做个参考。先说结论这个项目真正值钱的不是“让AI打分”这个动作而是把“人类怎么看美丑”建模成可训练的偏好分布。市面上很多颜值打分demo跑出来的分数跟人类直觉对不上比如换个角度分数暴跌、给明星照片打低分、同一个人磨皮前后能差0.6分。根本原因就是模型学的是图像统计学特征而不是人类偏好。所以这个项目把核心突破点放在了对齐Alignment上——不是训练一个“更准的评分模型”而是训练一个“更接近人类偏好”的评分模型。我下面会按技术动机、数据构建、模型训练、评估调优、伦理边界这五块来讲每块都会给出我在实际项目中用到的方案和踩过的坑。如果你正在做人脸美学相关的研究或产品或者对“人类偏好对齐”这个方法论感兴趣这篇应该能帮你省掉至少一个月的试错时间。1. 从“机器觉得美”到“人类觉得美”这个项目的技术动机1.1 直接训练回归模型的三大硬伤我最早做这个项目时想法特别简单拿公开的SCUT-FBP 5500这类颜值评分数据集用ResNet直接回归1-5分。当时觉得“打分任务能有多难”结果跑通之后被现实狠狠教育了一顿。第一个问题是“分数的方差”。同一个人的同一张照片不同标注员给的分能差出1.5分以上。审美不是物理量它是个体经验、文化背景和当下状态的叠加。拿这样的标签给模型做回归模型学到的其实是标注员群体平均后的模糊值而不是“美”本身。更麻烦的是回归目标稍有噪声模型loss就特别难降而且会自动倾向于把所有人都打到中位数附近。第二个问题是样本分布。真实人脸数据里极端好看和极端不好看的样本都偏少中间段扎堆。MSE回归天然要求目标分布均匀一旦不均匀模型就会牺牲少数群体换取整体均方误差降低。结果是中等颜值样本预测得还行真正有辨识度的高分和低分样本预测结果被严重拉向平均。第三个问题更隐蔽——模型会作弊。直接回归时模型很容易学会去抓一些与“颜值”高度相关但并非因果的特征比如清晰度、光照、磨皮程度、背景颜色。换句话说它在用图像质量替代面部美学。我拿同一张脸的高清图和模糊图分别测试分数能差0.4分这在人眼看来完全不合理。这种情况在深度学习里特别常见模型总会走捷径除非你在设计目标函数时就把它堵住。1.2 偏好对齐把审美问题改写成排序问题后来我换了个思路不直接预测绝对分数而是预测“相对偏好”。这个转变背后的逻辑是人类对美的判断在绝对尺度上不稳定但在相对比较上稳定得多。让一个人给照片打3分还是4分可能取决于他上一张看的是什么但让他从两张照片里挑出“更好看的那张”一致性会显著提升。这其实和推荐系统、大模型RLHF里的思路是同一个——绝对答案难标注相对偏好容易采集。所以我把这个问题从回归任务改写成了排序任务构造大量二维比较对一张图比另一张图美让模型学习一个隐含的分数函数f(x)使得对任意偏好对(A, B)都能有f(A)大于f(B)。训练时用pairwise logistic loss推理时直接输出f(x)作为吸引力分数。这一步解决了人工标注噪声问题也顺带缓解了回归模型的“平均化”倾向。多说一点“Aligned with Human Preferences”这个关键点。它不只是工程技巧更是一种建模哲学模型的目标函数不是某个客观美丑标准而是人类打分群体的偏好分布。这要求我们在训练集和评估集上都与真实人类偏好做对齐而不是只看loss大小。说白了模型输出的是“一群标注员在看到这张脸时的平均偏好反应”而不是某种绝对真理。1.3 项目定位与适用人群这个项目的技术栈是预训练人脸embedding 偏好排序头 校准输出。它适合以下几类人参考做多模态模型或人脸特征工程的同学想给视觉模型加上“美学偏好”维度做推荐系统、内容排序的人想借鉴“人类偏好对齐”的方法论做虚拟形象生成、AI修图、摄影辅助选片的从业者需要一个稳定的美学评分信号对AI伦理论证感兴趣的读者因为这类模型天然处在争议中心如果你是想在商业产品里直接套一个“颜值分”我建议你先看完第5章再动手。这个方向一旦用错了场景负面影响远超技术收益。2. 数据是审美难题的核心人类偏好数据集怎么搭2.1 评分制 vs 排序制标注方案的设计取舍数据是这类项目的命门。我没有直接沿用评分数据集而是把标注方案拆成两段。第一阶段用评分制做初筛。找8位标注员对约3万张公开授权的人脸图分别打1-5分。这个阶段的目的不是得到精确标签而是快速剔除明显低质量样本、摸清数据分布。第二阶段用成对比较做精标注。从初筛集合里随机抽18万对图片让标注员二选一“哪一张更好看”同时允许“难以判断”选项。得到的偏好对比绝对分数靠谱得多。这个两阶段设计有一个很实际的考量评分便宜但噪声大成对比较噪声小但贵所以让便宜的先去粗筛把贵花在关键部分。如果一开始就全量做成对比较成本至少要翻三倍。我这里给出两种方案的对比维度评分制1-5分成对比较制标注成本低单张几秒高一对几秒到十几秒标注一致性低受标注员状态影响高相对判断稳定噪声水平高标准差普遍大于0.8低多数情况下能达成一致能否直接训练能但容易平均化不适合直接回归适合排序我的用途初筛、构建辅助回归loss主训练信号标注界面我也做了个细节处理同一屏显示两张图按钮只有“左好/右好/难分”不提供分数输入框。这让标注员不需要做任何数值抽象只靠直觉就能完成判断。每100对里插入10对已知答案的验证对实时监控标注质量一旦某个标注员在验证对上的错误率超过15%系统自动暂停任务并重新培训。这些质控细节看着琐碎但直接影响偏好数据的稳定性和后续模型的泛化能力。2.2 数据清洗与隐私合规处理数据这块我有几条硬规矩都是踩过坑之后总结出来的。第一来源必须干净。公开学术数据集FFHQ、CelebA-HQ这类用于研究没问题但要确认授权条款是否允许二次标注和模型训练。不推荐去社交平台抓图一旦涉及真实个体问题会非常复杂。第二人脸必须脱敏。我把图片做了不可逆匿名化处理任何人无法从预处理后的样本反推原始身份。纯粹的学术demo可以这么处理但商业应用建议在原始数据链路就做数据最小化。第三未成年人照片一律剔除。这种模型本身就有争议未成年人数据是绝对红线没有任何商量余地。第四是做标签去噪。我用两个指标过滤标注员标准差超过1.2的样本直接丢弃用Kappa系数评估标注员之间的一致性低于阈值的样本重新标注。这一步很关键能有效减少后面训练时的label noise。在实际做的时候我还加了一层相似样本排重避免同一张脸以不同裁剪方式反复出现否则模型会对某些特定人脸严重过拟合。2.3 防止“单一审美”偏差的策略审美是有群体差异的这一点不只是学术问题更是产品口碑问题。如果模型只学会某一个人群的偏好评估时可能表现很好但部署时会翻大车。我的处理方法分三个层次。标注员多样性。8位标注员的年龄、性别、地域背景尽量分散避免一个同质小圈子把审美观固化到数据集里。数据配比均衡。在构造成对偏好时我按人脸的性别、年龄段、肤色分布做了分层采样避免某一群体被过度表征。测试独立采样。评估集单独采样且标注员和训练集不重叠。这样测出来的分数才是模型泛化能力的真实反映而不是“背下了训练标注员的口味”。另外更严谨的做法是建模为“偏好分布”而不是“单一偏好评级”。可以按标注员群体分组训练多个评分头推理时按用户群选择。这个方向我实验过一版复杂度明显上升但作为进阶方案值得研究。如果你的产品有明确的用户人群画像可以考虑这条路。3. 模型架构与训练细节embedding ranking head 的实践3.1 骨干特征的选择为什么不用从零训练CNN项目最初版本是拿ResNet50从零回归人脸分数效果很一般原因很简单从零训练需要海量带标注数据而颜值标注数据本身又稀缺又贵。哪怕我把训练集做到几万张对一个深层CNN来说仍然不够学出一套能应对各种角度、光照、表情的表征。所以我最终采用了“预训练人脸embedding 轻量评分头”的两段式架构。骨干用的是insightface里的ArcFace R100输出512维人脸身份向量。ArcFace这类人脸识别模型在大规模人脸数据上预训练过它提取的特征虽然是为身份识别设计的但天然携带了大量关于面部结构、比例、对称性的几何信息而这些恰恰是美学判断的基础底盘。用现成embedding相当于让模型站在了“已经懂人脸几何”的起跑线上评分头只需要在这个表征上做偏好映射训练成本极低。我也试过CLIP的图像embedding做骨干它的泛化性更好但对人脸结构的精细几何信息编码不如ArcFace最终排序指标略低。还试过几个美学专用特征提取器但开源和文档都不够成熟不值得在生产环境引入。有个细节值得说骨干默认冻结只训练评分头。理由有两条。一是样本量不够解冻全部参数容易过拟合二是人脸embedding经过大规模训练已经很稳定解开微调容易灾难性遗忘。3.2 评分头与损失函数MSE、pairwise ranking 怎么配合评分头是个两层MLP512 - 128 - 1中间带ReLU和Dropout输出接Sigmoid得到0到1之间的吸引力分数。主损失用的是pairwise ranking loss。具体来说对于偏好对(A, B)A比B更好看期望模型输出的差f(A) - f(B)越大越好用logistic形式import torch import torch.nn.functional as F def pairwise_rank_loss(score_a, score_b, margin0.1): # score_a: 模型给定的A分数A应该比B好看 logits score_a - score_b - margin loss -F.logsigmoid(logits).mean() return loss加margin的目的在于防止模型输出“谁都差不多”的局部最优解。没有margin模型其实可以靠输出一个常数来把两个分数拉的差距极小loss也会很低但排序效果会很弱。margin相当于强制要求“A至少比B高0.1分”。除此之外我还保留了一个辅助回归loss。初筛阶段的1-5分经过标准化后变成回归目标用MSE计算。最终的总loss是L_total L_rank λ * L_mseλ我取0.3。这个组合的意义是rank loss提供主要的偏好学习信号让模型学会正确排序MSE辅助loss则把输出分数校准到人类评分的绝对尺度上避免推理分数严重偏离直觉。为什么纯MSE效果差纯rank又不够纯MSE震荡大、易平均化纯rank无法给分数赋予绝对语义。两者结合虽然参数多一个但彼此补偿最终效果明显好于任何单一loss。3.3 训练配置与调参手记训练配置上我用的是AdamW优化器初始学习率1e-4batch size 128总共24个epoch。前2个epoch做线性warmup后面加余弦退火。评分头的Dropout设为0.3训练过程用混合精度加速。整套模型单卡A100大概3小时跑完。但这里有个比配置更重要的环节成对采样策略。如果只是随机采样pair会发现模型学得很慢而且loss下降后排序指标提升不明显。原因是大部分随机pair非常简单一张明显好看一张明显普通模型很快就判断对了梯度没有信息量。后来我改成“hard negative采样”每个batch里优先挑那些模型当前难以区分的pair也就是-score差距小于margin的样本。这样能显著加速收敛Kendall‘s Tau大概提升了0.05左右。还要注意batch内的pair不要重复太多。一个batch里不同pair之间应该覆盖不同的人脸如果反复用同一张图跟不同图配对模型会记住这张图的绝对分数而不是学相对偏好泛化会变差。推理阶段还有一个细节评分头输出的sigmoid概率不能直接当最终分数。我加了温度缩放temperature scaling在验证集上优化一个温度参数使输出概率分布和人类评分的经验分布更匹配。模型训练时只需要内部排序正确但部署时要让分数落在用户能理解的量程上。4. 评估与调优对齐效果不能只看准确率4.1 评价指标怎么设计训练过程中我同时看三个维度的指标避免被单一分数误导。排序一致性用Kendall‘s Tau和Spearman’s rank correlation拿模型分数和人类评分均值做相关分析。这两个指标关注的是“排序上是否一致”是偏好对齐模型最核心的度量。分组命中率方面把测试集按人类评分分成top10%和bottom10%看模型能否把这部分识别出来用top10召回率和bottom10错误率来衡量。稳定性指标主要是同一身份多张照片不同角度、光照、表情的分数标准差。模型分数随姿态剧烈波动的话说明它学到了各种无关因素不是在评估面部结构本身。指标计算方式我实测到的参考范围Kendall’s Tau模型排序 vs 人类排序0.58 - 0.64Spearman相关同上用秩相关0.72 - 0.79top10%召回模型top分命中人类top分比例0.41 - 0.48稳定性同人多图分数标准差0.06 - 0.12这个表是参考值具体数字会随数据集和骨干变化但量级是可信的。对比之下纯MSE回归模型的Kendall‘s Tau只有0.47左右排序方案的对齐优势非常明显。4.2 实测翻车案例与排查链路项目里最有价值的部分其实是那几次“模型看起来在学实际学错了”的翻车事故我详细说两个。第一个case是“化妆作为混杂因子”。训练后我检查发现模型对浓妆照片普遍给高分素颜同人照片明显低分。起初我以为是合理偏好后来做消融实验把成对偏好里的化妆状态作为混杂因子做分层统计发现模型过度依赖妆面纹理几乎忽略了面部结构。定位到原因后修复手段有两步一是构造偏好对时尽量让对比双方的化妆状态一致二是给训练集加了局部区域遮挡增强强迫模型不能只依赖皮肤纹理。修复后素颜/浓妆同人图的分数差从0.21缩小到0.08。关键不是控制“有没有妆”而是消除“妆面掩盖了太多结构”这个错误信号。第二个case是侧脸分数系统性偏低。正脸平均分0.72侧脸同人只有0.58。这其实是指标设计时埋的雷单纯看回归loss根本发现不了因为我没在训练集里配上角度标签。排查方式是在测试集按yaw角分桶画出分数-角度曲线看到明显的负相关。修复方法是做角度增强训练时对图片做随机水平翻转、轻微旋转和仿射扰动。改完之后侧脸和正脸的分数差控制在0.04以内整体稳定性指标也明显改善。这两个案例的共同教训是可控的评估集远比复杂的模型重要。预训练embedding能解决表征问题但解决不了数据层面的系统偏差。这也是为什么我在项目后期愿意花大量时间去做分层评估而不是继续堆模型参数量。4.3 鲁棒性测试光照、角度、表情最后我把鲁棒性做成了一套固定的评测脚本每次迭代都跑一遍。主要包括光照变换提亮、压暗、加噪、几何变换旋转、缩放、平移、表情变换真实多人表情照 vs 中性表情。跑完发现一个高频问题模型对清晰度极其敏感。只要是边缘锐利的图分数就偏高高斯模糊之后分数立刻掉0.2以上。这个现象和“近视眼觉得美”差不多——模型把对焦、磨皮误当成了颜值。为了抑制这个问题我在测试级也加了test-time augmentation同一张图做多次随机扰动取分数平均能显著提升稳定性。代价是推理耗时增加但对质量敏感的应用场景这笔开销是值得的。5. 这种模型绕不开的边界问题5.1 为什么外貌评分模型一直被质疑我必须花一整章来谈这件事因为这类项目太容易做出来、也太容易被滥用。外界对外貌评分模型的质疑主要集中在三点。第一是对容貌焦虑的放大。一个能随时给任何人打分的产品会把审美压力变成可量化、可比较的数值这对未成年人和心理脆弱群体尤其不友好。第二是数据偏见的固化。模型学的是训练集中的偏好分布如果训练集本身就受到某种审美偏见比如单一地域、单一肤色、单一身材标准的影响模型就是在用一个系统的均值去压制多样性。第三是实际危害场景比如招聘筛选、信贷审批、社交平台推荐里如果暗中使用了颜值分会对个体产生不可控的影响而且普通人没有申诉渠道也很难验证自己是否被这种分数影响了。学术圈对“AI评分美丑”也基本是一个公认的伦理雷区。不是所有能做的技术都应该做成产品这个判断在这个项目里尤其重要。如果你在做一个面向公众的产品最好把“美学评分”做成辅助信号而不是决策依据同时要有非常清晰的用户告知和申诉机制。5.2 我能接受的用法和坚决不做的场景基于上面的考虑我给这个模型划了几条明确的使用边界。可接受虚拟形象生成时的美学一致性校验、摄影工作室选片辅助、美学研究的学术实验、对“平均偏好”的社会学观察不建议对真实个体的公开评分、婚恋匹配里的排序推荐、任何招聘或准入决策、医美效果承诺类应用实现层面我在模型的输出接口里加了一个约束输出分数时始终附带置信区间而不是只给一个孤立的数字。这样调用方会直观意识到审美判断本身有很强的不确定性。比如同一个人的照片模型输出0.73置信区间是[0.65, 0.80]这时候任何理性人都不会把它当成一个精确的裁判标准。同时在模型文档里明确写明“这是基于特定标注人群偏好分布的建模结果不代表客观美丑标准”。这些约束不能完全消除风险但至少能让使用方意识到这不是一个“权威颜值裁判”。如果读者真的想在自己产品里用这类模型我的建议是先回答三个问题用户会不会因为某个分数产生心理压力这个分数会不会影响一个真实个体获得资源的机会被评分的人是否知情并同意如果任何一个答案是否定的请再斟酌一下场景。我在这个项目上做的最重要的决定不是换骨干网络、不是调loss权重而是在最后把模型定义成“一个描述人类偏好分布的统计工具”而不是“定义美的机器”。审美永远是概率和文化的产物模型能帮我们观察它、理解它但绝不应该替代每个人自己的判断。这是这个项目走到最后我最大的一点体会。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。