Logo

萝莉共享loli commons

每日萝莉
基于ε-Greedy策略与Softmax函数的推荐机制

原文 发布于 Bangumi ~技术宅真可怕~
本文遵循 CC BY 4.0 发布。
很久很久以前,希腊先贤苏菈带着她的小女儿去新年庙会,苏菈说「我们从庙会这头走到那头,不走回头路。你只可以选一家店买一个苹果糖,选定后就不能反悔哦」 走到尽头小女儿也没决定买哪家的苹果糖,她哭着说「因为只能选一次……我看到喜欢的苹果糖又担心后面有更好的……走到后面,才发现最好的我已经错过了……」 苏菈擦擦女儿的眼泪,说「(思考用时9s)假设有 n 个苹果糖,你应该先将前 n/e 个苹果糖作为参考,然后从第 n/e+1 个苹果糖开始,选择第一个比前面所有都更好的苹果糖即可」女儿哭得更大声了
「每日萝莉」是在2025年2月萝莉共享组件中实装的一个互动小功能,就是由大家投稿萝莉插画,而组件则会每天在bgm首页展示一张图片。大家可以查看图片的绘师、角色信息,也可以为喜欢的图片送出贴贴。目标是成为一项适合各种程度的萝莉控参与其中的轻松活动。
每日萝莉界面
接收了一定数量的投稿后,我开始仔细思考如何给这些图片排队。首先需要解决的问题是给每个投稿的人比较平衡的展示机会。比如说萝莉控A连着投了三张图片,萝莉控B紧随其后投了一张图片。那相比在A连着上场三天之后才轮到B上场,A上场一次后就让给B上场会更好些,既能给更多人机会,又能让大家看到更多样的风格。这种大家轮流玩的规则一般被称作 round-robin,有不少现实中的应用,这里就不展开讲了。
解决了新投稿的排队公平性之后,接下来,也就是这篇帖子的重点,我想谈谈怎样让
众萝莉控都
喜闻乐见
的好图片
收获更多的关注?

#ε-Greedy策略:新作 vs 旧的佳作

每一次的投稿,都需要一点小小的勇气:你并不知道大家对这张图的看法。直到一天结束,你数着自己的图收获的贴贴数量的时候,答案才被揭晓。所以说,贴贴是检验萝莉的唯一标准。
看着数据库里在过去获得大家好评的图片,我希望这些优质的萝莉图能有更多的展示机会。另一方面,我也应该经常补充新提交的萝莉图,让萝莉控们能欣赏新图,也是给新图接受贴贴评价的机会。 其实,大家也应该遇到过这种要在利用已知信息和探索未知信息中二选一的情况。想想看,当你看完一部番,准备看下一部时,你可以选择重刷自己心目中的超神作,没有风险地获取愉悦,但有时也要冒着浪费几小时人生的风险去检验新番,因为你不想错过发现下一部超神作的机会。
那么,如何平衡展示好图和探索新图这两种选择呢?我想到了强化学习中常用的 ε-greedy 策略。强化学习是让 AI 在不停的尝试中获取经验、总结策略的机器学习方法。大名鼎鼎的围棋高手 AlphaGo 就是强化学习的产物,而现今大型语言模型的成功也离不开强化学习。那么 ε-greedy 策略是什么呢?当 AI 面对一个完全陌生的环境,它一开始的策略只有乱试。在随机尝试与反馈当中,AI 对什么是好的选择什么是坏的选择逐渐有了了解,所以会开始更多使用已总结的经验、逐渐减少尝试。到探索度比较高的时候,AI 就几乎完全依靠经验做决定,而很少尝试了。而这个 ε,就是进行尝试的概率,会随着经验累积而下降。
简单来说,动画萌新要多尝试不同风格的番积累经验,而对于大场面见得多了的婆罗门,重刷的收益会比较大。怎么样?是不是很合理?未知内容多的时候就多探索,探索得差不多了就多吃老本。 回到每日萝莉的选择,如果我把当前还在排队的、还没被展示的图片数量作为探索度的标准:排队的图片越多,越需要尝试新图;排队的图片越少、甚至没有新图的时候,就越可能从过去的图里选好图。目前在使用的策略如下:
ε随排队图片数量变化
你看上面这张图表,排队图片越多,探索尝试概率 ε 就越高。只有一只萝莉在排队时,她明天出场的几率 ε 是 12%,而剩下 88% 的情况是从之前出过场的萝莉堆里选一只高分萝莉。如果没出过场的队列里有高达四只或更多的萝莉在等待,那排最前面的萝莉明天出场的几率 ε 几乎是 100%。

#Softmax函数:豪堪就要多多多多看

既然有时候要从之前出过场的萝莉堆里选一只高分萝莉,那具体怎么选呢?
「选最多贴贴的那一个!」台下小朋友连手都还没举起来就抢答道
但如果这样,在下一个更高贴贴数的萝莉出现之前,贴贴冠军会被重复选中啊,而且对那些一票惜败的萝莉也不太公平吧
「那……按照贴贴的数量作为选中的几率,抽签决定」
诶,方向对了,但我还想要更刺激一点:每多一个
贴贴,
不只是增加
固定的概率,
而是让
概率成倍增长。
而这,就要用到 softmax 函数
Softmax 函数,字面意思,就是比较软萌的 max。她最有可能选中最高分 (max) 的一项,但有时也会选其他的。随机程度由一个被称作“温度”的参数决定,温度为 0 时,冷酷无情的 softmax 只会选择最高分的一项(只max不soft),而温度越高,softmax 越发热红温,更有可能不理智地选择其他不是最高分的选项(只soft不max)。
那具体应用到每日萝莉抽签时又是什么样的呢?请看下面这个例子,假设四张图各有9个、6个、14个、16个贴贴:
softmax前后对比
在上图中,蓝色和红色分别对应6个和16个贴贴,但它们在 softmax 后被选中的概率差别却达到了6%对61%。在合适的温度下,又 soft 又 max 的 softmax 能有效地凸显最好的一个或几个选项,所以机器学习中涉及到“做选择”的情况经常会用上 softmax 函数。
好,讲完啦,谢谢看到这里的你耐心听讲。现代的 AI 虽然都很厉害,但它们的成功也是由许许多多像 ε-greedy 策略和 softmax 函数这样的小细节组成的,而这些小细节也并不是那么难懂,对吧?所以多去观察像这样的小细节吧,积累到一定程度时,说不定你也可以创造让大家觉得“好厉害”的东西了。
本来此文还有姊妹篇「每日萝莉:构建于『贴贴』体系上的最小化社交系统实践」,但奈何笔者专业不对口,若是有点了社会科学技能树的萝莉控接过此任,不胜感激。