2023年12月9日晚上,我在火车上旁听了整个AE 实践会议,在此期间我注意到一些问题:虽然麦老师提供了充足的学习材料,并且讲解和演示了“轨道遮罩”功能和“颜色范围”抠像,但轮到学员进行操作时,他们的操作总是会出现各种问题。
#
这是典型的“一看就会,一做就废”问题。《断墨寻径》[第二章](https://www.modevol.com/episode/ckx8itiir000l01l2avezagzt)和[第八章](https://www.modevol.com/episode/ckx8iy4bl001501l204sz05x3)对此给出解释,这里我简单说明一下:
虽然我们通过其他人提供的学习材料初步建构出新模型,但是新模型没有经过多次有效地模型训练,大脑在神经层面上没有适配新模型;另外,新模型没有经过验证,很可能存在欠拟合现象或者过拟合现象。
我们从学习材料中建构出新模型后,便可以开始模型训练:
挑选某一个实例性材料作为任务,运用新模型对其进行预测和实际执行。
实际执行任务结束后,根据现实与预测的差异,对新模型进行评估和更新。
提供足够的休息时间,让大脑进行适配和更新,休息完毕后开始下一轮训练。
没有开刃的菜刀,拿来切菜会感到十分费劲,因此需要通过细致地打磨,使菜刀变得锋利无比。[王刚磨刀全过程:开刃、开锋、细磨、利刃](https://www.bilibili.com/video/BV1sa411Y7BN/)
在《艾尔登法环》中,玩家可以通过弹反机制,让敌人进入失衡状态。
敌人进入失衡状态后,玩家可以使用致命一击,对敌人造成高额伤害。
我在 B 站上找到一个包含大量实例性材料的视频:[【老头环】新手“从无到有”连续11次完美弹反“熔炉骑士”](https://www.bilibili.com/video/BV1aL411N7Qa/)
通过对这个视频进行观察和归纳,我建构出一个弹反模型:
敌人进行蓄力重击时,玩家在某一时段进行弹反,可以让敌人进入失衡状态。
第一轮训练,我在风暴关卡附近,找葛瑞克士兵练习弹反。
由于我不知道什么时候进行弹反,全凭感觉,所以十次弹反练习中,有七次是挨打。在挨打过程中,我注意到敌人的手部动作与弹反时机存在某种关联,于是我有意识地观察敌人进行蓄力重击时,敌人的手部动作变化。最终,我发现敌人快要攻击时,手部动作会由慢变快,此时我进行弹反,大概率会让敌人进入失衡状态。

第一轮训练结束后,我完成弹反模型更新:
敌人从蓄力状态切换到攻击状态时,手部动作会出现由慢变快的变化,此时对敌人进行弹反,很可能会让敌人进入失衡状态。
如果玩家弹反失败,玩家会进入硬直状态,会出现以下两种情况:
敌人蓄力时玩家弹反,玩家在硬直状态下,受到全额攻击伤害。
敌人攻击时玩家弹反,玩家在硬直状态下,受到部分攻击伤害和精力伤害。
第二轮训练,我进入风暴山丘的封印监牢,找熔炉骑士练习弹反。
刚开始,我一直举盾观察熔炉骑士,结果我被他打空精力后破盾,被他一套连招带走。角色复活后,我通过举盾、翻滚和游走来观察熔炉骑士的招式,我逐步捕捉到熔炉骑士各种蓄力重击的手部动作。死亡&复活三十多次后,我最终抓到合适的弹反时机,通过弹反&处决打败了熔炉骑士。

第二轮训练结束后,我完成弹反模型更新:
如果敌人的招式一板一眼,那么这个敌人适合进行弹反。遇敌时玩家需要与敌人进行周旋,观察敌人的手部动作变化。
一般来说,当敌人从蓄力状态切换到攻击状态时,手部动作会出现由慢变快的变化,此时对敌人进行盾牌弹反,很可能会让敌人进入失衡状态。 如果玩家弹反失败,玩家会进入硬直状态,会出现以下两种情况。
敌人蓄力时玩家弹反,玩家在硬直状态下,受到全额攻击伤害。
敌人攻击时玩家弹反,玩家在硬直状态下,受到部分攻击伤害和精力伤害。
第三轮训练,我在习战者的破屋,等待灵珠猎人出现。
原本我打算用“辉剑圆阵”和“准备架势”的削韧伤害组合,打出敌人失衡状态后进行致命一击。但在对峙过程中,我发现灵珠猎人的招式也是大开大合,于是我决定用弹反模型来处理。我通过观察灵珠猎人的手部动作,抓住时机进行弹反&处决,最终我打败了灵珠猎人。

现在,我的弹反模型已经能够处理攻击招式大开大合的敌人,因此不需要再进行模型训练。
我想学习 Python 的匿名函数,我在菜鸟教程上找到相关的描述性材料和实例性材料:[Python lambda(匿名函数)](https://www.runoob.com/python3/python-lambda.html)
通过这些学习材料,我建构出一个匿名函数模型:
匿名函数是一种小型便捷的内联函数,它可以拥有任意个参数,但只有一个表达式作为返回值。
我们可以将匿名函数赋值给变量,通过变量来调用匿名函数。
第一轮训练,我模仿菜鸟教程提供的实例:
dlcr = lambda : '垮小脸'
print(dlcr())我预测控制台输出”垮小脸“。运行代码,控制台输出:
PS E:\Python Code> python lambda.py
垮小脸实际结果与预测结果一致,我不需要对匿名函数模型进行更新。
第二轮训练,我对上一个任务进行调整,为匿名函数添加参数。
elden_ring_str = lambda a: '接下来,' + a + '很有用'
print(elden_ring_str('睡眠'))我预测控制台输出”接下来,睡眠很有用“。运行代码,控制台输出:
PS E:\Python Code> python lambda.py
接下来,睡眠很有用实际结果与预测结果一致,我不需要对匿名函数模型进行更新。
第三轮训练,我适当提高任务难度,用匿名函数返回两个数的中间值。
list1 = [1, 2, 3]
list2 = [7, 8, 9]
list3 = []
f = lambda x, y: (x + y) / 2
for i in range(len(list1)):
list3.append(f(list1[i], list2[i]))
print(list3)我预测`list3 = [4, 5, 6]`。运行代码,控制台输出:
PS E:\Python Code> python lambda.py
[4.0, 5.0, 6.0]实际结果与预测结果数值相同,我不需要对匿名函数模型进行更新。
受限于篇幅,这里就不继续列举第 4 次到第 5 次训练内容。
由于菜鸟教程提供了合适的指令描述,因此我不需要继承过来的匿名函数模型进行更新。
只需要通过模型训练,让大脑适配匿名函数模型即可。
2023年12月10日下午,我已经记不清昨天会议的具体内容,只记得麦老师用“轨道遮罩”功能和“颜色范围”抠像完成”飞天鲸鱼“项目。
我通过 Copilot 找到 Adobe After Effects 的教程页面:[轨道遮罩和移动遮罩](https://helpx.adobe.com/cn/after-effects/using/track-mattes-and-traveling-mattes.html)
通过阅读官方提供的描述性材料和实例性材料,我发现 After Effects 的“轨道遮罩”功能类似 Photoshop “剪贴蒙版”功能。
我决定对脑中已有的剪贴蒙版模型进行迁移,结合轨道遮罩相关的学习材料,调整得到轨道遮罩模型。
在 Photoshop 中,我绘制一个矩形图案作为图层 A,导入一张图像作为图层 B,其中图层 B 在图层 A 的上层。
选中图层 B,点击右键 - 创建剪贴蒙版,使图层 B 的内容限制在图层 A 的形状轮廓内。

在 After Effects 中,导入背景素材作为轨道 A,导入鲸鱼素材作为轨道 B,其中轨道 B 在轨道 A 的上层。
原本我是想在轨道 B 的轨道遮罩中选择 轨道 A,实现类似剪贴蒙版的效果,实际操作后发现无法这样操作。
后来发现是在轨道 A 的轨道遮罩中选择”Alpha 遮罩轨道 A“,使轨道 A 的内容限制在轨道 B 的形状轮廓内。

我对比“剪贴蒙版”功能和“轨道遮罩”功能,发现前者是在图层 B 上创建剪贴蒙版,使图层 B 的内容限制在图层 A 的形状轮廓内;而后者是在轨道 A 上使用轨道遮罩,使轨道 A 的内容限制在轨道 B 的形状轮廓内。二者功能相同,作用对象相反。
现在,我完成对剪贴蒙版模型的迁移,调整得到轨道遮罩模型:
若轨道 B 在轨道 A 的上层,那么可以设置轨道 A 的轨道遮罩为"Alpha 遮罩轨道 B",使轨道 A 的内容限制在轨道 B 的形状轮廓内。
第一轮训练,在 After Effects 中,新建一个黑色轨道 C,置于轨道 B 的下层,设置轨道 C 的轨道遮罩为”亮度遮罩轨道 B“。
此时,After Effects 自动设置轨道 B 不可见,并通过轨道 B 的亮度通道,来限制轨道 C 的内容。

第一轮训练结束后,我完成轨道遮罩模型更新:
若轨道 B 在轨道 A 的上层,那么可以设置轨道 A 的轨道遮罩:
"Alpha 遮罩轨道 B",通过轨道 B 的 Alpha 通道来显示轨道 A 的内容。
"Alpha 反转遮罩轨道 B",通过反转轨道 B 的 Alpha 通道来显示轨道 A 的内容。
"亮度遮罩轨道 B",通过轨道 B 的亮度通道来显示轨道 A 的内容。
"亮度反转遮罩轨道 B",通过反转轨道 B 的亮度通道来显示轨道 A 的内容。
此时,After Effects 自动设置轨道 B 不可见。
Premiere 有一个效果叫”轨道遮罩键“,我认为它就是 After Effects 的”轨道遮罩“功能。
我找到了一个相关的视频:[PR教程-轨道遮罩键原理讲解](https://www.bilibili.com/video/BV1k44y147rA/)
我打开 Premiere,导入背景素材、过场素材和动画素材进去。
我将背景素材放到 V1 轨道上,动画素材放到 V2 轨道上,过场素材放到 V3 轨道上。然后,为 V2 轨道添加”轨道遮罩键“效果,在效果控件中,设置遮罩为”视频3“,合成方式为”Alpha 遮罩“,也就是”Alpha 遮罩 V3 轨道“。
此时,Premiere 不显示 V3 轨道内容,并通过 V3 轨道的 Alpha 通道,来限制 V2 轨道的内容。

第二轮训练结束后,我不需要更新轨道遮罩模型,而是将 Premiere 添加到轨道遮罩模型的有效范围内。
我用同样的方法去理解“颜色范围”抠像。
最后我对”飞天鲸鱼“项目分而治之,大概用了两个小时完成项目。

让我们回到 AE 实践会议,这里大家应该能猜出学员如何解决问题。学员在 After Effects 中实际执行了新建构的模型;遇到问题后,麦老师进行提醒和引导,学员通过思考,对新模型进行更新;完成模型更新后,学员重新开始上述环节,直到学员顺利完成任务。
正是因为学员进行了多次有效地模型训练,使得学员建构出的新模型有足够的泛化能力。现在,我们可以给出渐构模型的定义了。
我们从学习材料中建构出模型,并对模型进行多轮模型训练,从而不断提升模型的泛化能力的过程。
这篇文档开始于年初我提出的一个设想:能否参考 AI 学习的过程?反过来指导人类学习?然后我用了大半年的时间去研究如何训练 AI 模型,最终我完成了 AI 绘画模型和 AI 语音模型的训练,从中学到很多有用的知识,这些知识反过来指导我开展项目实践活动。不出意外的话,这是我今年写的最后一篇文档。原本是想做成视频,但临时参加了一个合作项目,就鸽到明年了。