|
50| 0
|
强化学习:驯服小狗App |

本帖最后由 szjuliet 于 2026-8-3 16:43 编辑 强化学习:驯服小狗App挑战强化学习:驯服小狗 学习是一种奇妙的现象,指人类与动物学习做出特定行为,用以响应环境刺激的过程。但毋庸置疑,在学习过程中引入反馈机制(奖励与惩罚),能够巩固学习效果、加快学习进程。 在本项目中,你将接触一种机器学习算法 ——强化学习(RL),学习如何利用奖励与惩罚机制,模拟并强化学习过程。 一、App制作教程(难度:高级) 1. 引言在本项目中,我们将探究强化学习(RL)。强化学习是人工智能领域主流机器学习方法之一,与监督学习、无监督学习并列。我们将以 “训狗” 这一场景为例,讲解强化学习的核心思想。在本次模拟场景中,我们需要训练一只初始处于站立状态的小狗: 小狗一开始听不懂任何指令,会随机做出各种动作。不过,每一次下达指令后,主人都会给予小狗正向反馈(即奖励,例如:“乖狗狗!”)或是负向反馈(即惩罚,例如:“不行!”)。 依靠不同类型的反馈(奖励 / 惩罚),小狗形成训练 “记忆”,也就是记住什么动作会带来什么样的结果。 不断累积的奖励与惩罚数值,会存放在一张 2×2 的表格中,我们称之为Q 表(Q-Table)。 表格行标题为主人发出的指令:“坐下!”、“握手!” 表格列标题为小狗执行的动作:坐下、握手。 (为简化表述,我们统一将指令和动作简称为 SIT(坐下)、SHAKE(握手)) 表格单元格内的初始数值全部为 0。在每一轮训练过程中,程序会通过公式更新数值(教程最后部分会讲解该公式!): 其中: Q(c,a):Q[command,action] α: 学习率(Learning Rate) 专业术语
2. 用户界面(UI)为方便大家专注理解本项目中强化学习的核心原理,配套的用户界面(UI)已经预先搭建完成。 3.变量初始化接下来切换到逻辑设计。 程序首先需要对将要使用的变量进行初始化。 变量 STAND(站立)、SIT(坐下)、SHAKE(握手) 代表小狗的不同状态,分别赋值数字 0、1、2(而非文本),方便程序进行数值运算与处理。 变量 变量 变量 变量 变量 在训练开始前,没有任何训练记忆,因此矩阵内所有数值初始都为 0: 按照下文所示,初始化变量 Qtable。 4. Q 表过程研读下面这几个 Q 表过程:
请注意:后两个过程在定义时,都调用了第一个过程。 下面提供一些示例,帮助加深你对 Q 表的理解。注意:你不需要在代码里复现这些示例。 以下方的 Q 表为例 (等价于这份 Q 表) Q 表第 1 行是包含两个数字的列表: 在代码中,过程 同理,Q 表第 2 行是包含两个数字的列表: 在代码中,过程 下面定位 Q 表中某个单元格:Q 表第 2 行第 1 列,数值为:-0.35。 在代码中,过程 思考:Q 表第 1 行第 2 列的值是多少? 也就是过程 Q-Table (1,2) 参考答案 思考:调用过程 Q 表赋值操作 参考答案 将原本的数值 -0.15 替换为 -0.75,表格就会更新为如下状态。 借助这些过程,访问、修改 Q 表矩阵,会比直接操作嵌套列表更加简便。 5. 学习率滑动条研读这段积木代码。你能否说明移动学习率滑动条(LearningRateSlider)时,程序会执行什么操作? 解析变量 6.重置RESET按钮研读这段代码,尝试说明点击【重置】按钮时会发生什么。 解析
所有内容恢复至训练开始前的初始状态。 7. 坐下SIT按钮与握手SHAKE按钮研读这段代码。请说明点击【SIT】按钮时程序执行的逻辑。稍后我们会讲解 接下来,参照上述代码编写 whenShakeButton.Click 事件处理程序。你可以大量使用复制粘贴(快捷键 Ctrl-C / Ctrl-V),仅做少量修改即可完成。 参考实现方案 8. 过程:findMaxAction(寻找最优动作)接下来定义过程 findMaxAction。该过程借助 Q 表,根据用户下达的指令选出最优行动方案。 当收到指令 “坐下!” 时,程序读取 Q 表的第一行,对比该行两个单元格内的 Q 值,选择数值更大的一项对应的动作。 当收到指令 “握手!” 时,程序读取 Q 表的第二行,对比该行两个单元格内的 Q 值,选择数值更大的一项对应的动作。 举个例子:训练过程中某一刻 Q 表数值如下所示: 此时用户发出指令 “坐下!”。程序检索矩阵第一行,第一个单元格数值为 0.25,大于 - 0.15。因此依据 Q 表,小狗的最优动作就是坐下。
参考实现方案 注意:【列表最大值】积木位于【数学】分类模块中,在【算术平均数】(平均数)积木的下拉菜单内可以找到。 该过程会返回拥有更大 Q 值对应的列索引:1(坐下 SIT)或者 2(握手 SHAKE)。 这也就是我们将变量 SIT、SHAKE 设置为数字 1、2,而非文本格式的原因。 9. 过程:chooseAction(选择动作)接下来定义 chooseAction 过程。该过程根据用户发出的指令,决定小狗做出何种行为。 定义这个过程有多种方式。我们先采用下面这套简易方案:在前 10 次训练尝试中,假定小狗毫无头绪,无论收到什么指令,只是随机做出坐下或者握手的动作。小狗需要一段时间,才能意识到指令、自身动作与后续奖励之间存在关联。 10 次尝试之后,小狗逐渐学会思考,开始参考训练记忆,依据 Q 表给出的最优动作执行行为。最优动作将由
参考实现方案 提示:在本项目的拓展任务中,你可以尝试使用更进阶的方式编写该过程。 10. 过程:showDogAction(展示小狗动作)该过程根据小狗执行的动作,决定显示小狗对应的图片。请再次核对,确保理解这段逻辑。 11. 奖励按钮RewardButton与惩罚按钮PenaltyButton下方代码演示完整流程:用户下达指令,小狗做出动作,用户点击【Reward奖励】按钮给予反馈。 首先,变量 reward 赋值为 +1。(如果点击【惩罚】按钮,reward 值设置为 -1)。随后程序执行运算(后续讲解),更新 Q 表,并在界面上展示更新后的 Q 表。 以【RewardButton】代码作为参照,编写 PenaltyButton.Click(惩罚按钮点击) 事件处理程序。你可以直接复制代码再修改。 参考实现方案 12. 过程:printQTable(打印 Q 表)该过程用于展示 Q 表当前状态:读取 Qtable 变量里每行、每列的数据,将内容填充到界面对应的标签组件上。 13. 更新 Q 表接下来我们学习强化学习中的核心公式:当用户下达指令 (c)、小狗执行动作 (a),并且用户根据小狗的行为给出反馈(奖励 + 1 或惩罚 - 1)时,如何更新 Q 表数值。 (Q(c,a)) 代表在用户指令 (c)、小狗动作 (a) 对应的 Q 表数值。(记住:指令对应表格行,动作对应表格列)下方公式用于更新 (Q(c,a)): 结合示意图理解公式: 新 Q 值是 当前奖励(+1 或 - 1) 与 原有 Q 值(过往训练记忆) 的加权平均值。 公式通过权重 (\alpha)(学习率)与 (1-\alpha)(学习率补数),决定更侧重当下的奖励反馈,还是过往训练积累的经验。 举例说明: 若学习率为 100%(小狗瞬间完全学会),(\alpha=1,1-\alpha=0),新 Q 值直接等于本次奖励(+1 或 - 1)。 反之,学习率 0%(小狗完全无法学习),(\alpha=0,1-\alpha=1),新 Q 值与旧 Q 值保持不变,没有任何更新。 再举一例: 沿用上述 Q 表,学习率设置为 0.7(70%),指令为 “坐下!”,小狗做出坐下动作。 位置 Q [1,1] 新 Q 值计算: (Q[1,1] = 0.7×(+1)+(1-0.7)×0.25 = 0.7×1+0.3×0.25 = 0.775) 根据上面 Q 表更新规则编写对应过程: 参考实现方案 想要让加法积木与 QTable (行,列) 积木布局更紧凑,可以右键积木,选择【外部输入】。该设置会将参数由横向排布改为纵向对齐。 14. 测试使用 AI2 伴侣生成的二维码扫码,测试你的应用。 全面测试所有功能,观察小狗在前 10 次随机动作之后,能否按照设定的学习率进行学习。 尝试设置不同学习率(例如:0.00、0.25、0.50、0.75、1.0),验证学习效果和学习率参数相匹配。 恭喜!你完成了第一个人工智能强化学习(RL)项目。 二、拓展你的应用深入探究1当你成功训练小狗之后,能否再 “逆向训练” 它,让它总是做出错误动作? 深入探究2你能否添加学习曲线图,展示正确动作的累计占比? 界面中已经预置好图表组件 Chart1,只需将其设置为可见即可使用。注意:你可能需要在界面中向下滚动,才能看到该图表。 深入探究3新增一个名为记忆响应度(Memory Responsiveness)的参数,用于衡量小狗对过往训练记忆的敏感程度。大多数动物(包括人类)都需要一段时间,才会开始参考训练记忆。记忆里积累的奖惩感受,需要达到足够高的阈值,生物才能够理解训练传递的信息,进而做出合适的行为。 基于这个新参数修改 在界面中,将存放滑动条的【水平布局 1】与【水平布局 2】设置为可见。 提示: 如果小狗的记忆响应度很高,即便微小的 Q 值(接近 0),也会促使小狗依照训练经验行动; 如果记忆响应度很低,即便 Q 值很大(接近 + 1 或 - 1),小狗也难以依靠记忆做判断。 下文提供一份参考修改方案,改造 深入探究4如果指令不再是 2 种,而是 3 种,本项目需要做出哪些改动? 新增指令:“坐下!”、“握手!” 以及 “打滚!” 修改界面与代码,实现这个新版本。 你还有哪些很棒的拓展创意? |
75.38 KB, 下载次数: 0
App Inventor项目初始文件
沪公网安备31011502402448© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed