手机网站图片切换,wordpress移动端菜单栏,芙蓉区网站建设,WordPress页面生成时间一、说明 在 2024 年暑假假期期间#xff0c;Tim学习并应用了Q-Learning #xff08;一种强化学习形式#xff09;来训练神经网络玩简化版的俄罗斯方块游戏。在本文中#xff0c;我将详细介绍我是如何做到这一点的。我希望这对任何有兴趣将强化学习应用于新领域的人有所帮助…                                              一、说明 在 2024 年暑假假期期间Tim学习并应用了Q-Learning 一种强化学习形式来训练神经网络玩简化版的俄罗斯方块游戏。在本文中我将详细介绍我是如何做到这一点的。我希望这对任何有兴趣将强化学习应用于新领域的人有所帮助 正如您在下面的 GIF 中看到的经过约 6,000 场游戏或约 85,000 次单独动作的训练后该模型成功“学会”了如何有效且高效地玩简化的俄罗斯方块游戏 二、游戏 
为了在尽可能简单的游戏环境中演示 Q-Learning 的过程我使用了俄罗斯方块游戏的一个非常简化的版本。“棋盘”是 4 行 4 列一个 4x4 矩阵。游戏非常简单AI 代理必须选择将单个框逐一“放入”4 列中的哪一列目标是最终填满棋盘上的所有 16 个方格。 
尽管这个游戏对你我来说似乎非常简单易玩但实际上有很多可能出错的地方。如果人工智能无法学习游戏的本质它就会不断进行随机操作最终做出非法操作。 
例如考虑以下情况 如果模型不理解游戏而是随机玩游戏则有 25% 的概率它会选择将一个方块放入第 4 列最右边的列。这将是一个非法举动使游戏无效并且不允许 AI 达到 16 分的 100% 得分 
我训练这个模型的目标是让模型有效、高效地玩游戏避免非法动作并在每场比赛中达到最高分 16 分。 
三、方法Q 学习 为了训练 AI 玩这个简化版的俄罗斯方块游戏我们将使用Q-Learning。Q -Learning 是机器学习中的一种强化学习算法。Q-Learning 的目标是找到任何潜在游戏状态的最佳动作选择策略。但这是什么意思呢 在深入研究 Q-Learning 方法之前让我们首先了解什么是“Q-Table”因为这是 Q-Learning 中的一个核心概念。 您可以将 Q 表视为系统记录和存储的长列表表格该列表映射了在任何给定情况下它选择的任何可能的下一步行动将带来的奖励。例如请考虑下表 使用上面的 Q 表系统可以通过查看该状态下每个潜在下一步行动的值来“查找”游戏任何状态下的最佳下一步行动游戏状态在这里用两个整数表示这是一种非常简单的表示。例如对于状态 (2,1)放入第 2 列将是下一个最佳行动因为这将导致预期奖励为0.5这是此位置所有可能动作中的最高值。 通过反复玩游戏最终系统可以从游戏的每个潜在状态中玩出每个潜在动作一旦它做到了这一点它就会有一个词汇表记录在游戏的任何场景中哪些动作是最佳选择。唯一的挑战是在绝大多数游戏中潜在场景的数量实在是太多了。在大多数游戏中有数百万、数十亿甚至数万亿个潜在的独特状态。存储如此长的表格是不可能的。而要玩完所有这些例子那将花很长时间 因为 Q 表太大无法收集和存储所以我们求助于神经网络。神经网络的规模要小得多通过观察游戏过程和收集奖励可以学习游戏中的潜在模式。这些模式使神经网络能够理解和估计与某些位置的某些动作相关的奖励而无需存储表格这很像我们人类的学习方式实际上该模型正在学习模拟“Q 表”。 当我们建立一个模型并通过 Q-Learning 进行训练时我们会反复让模型通过自我对弈来遇到、行动和观察。换句话说在游戏的每个“步骤”中游戏的当前情况模型必须对此做出决定称为状态。模型看到状态然后决定下一步应该怎么做这一举动称为动作。在对游戏执行选定的动作动作后模型会观察发生了什么——这一举动是否让情况变得更好更糟这被称为奖励。 该模型会自己反复玩游戏……数千次最终该模型收集了如此多的状态、动作、奖励对称为“经验”以至于它可以从这些经验中学习并充分了解哪些状态下的哪些动作会带来最高奖励最成功。 
四、神经网络模型 TensorFlow顺序神经网络将用于估计上述给定位置中每个潜在移动的估计奖励。我使用Keras API 使神经网络的高级操作更容易。 如上所述每次要求模型决定下一步该怎么做时都会向其呈现游戏的当前“状态”。这是对游戏整体情况的简单表示包括模型在决定下一步做什么时应考虑的所有标准。 在这个迷你俄罗斯方块游戏中“状态”非常简单4x4 棋盘上有 16 个方格因此有 16 个唯一输入。16 个输入中的每一个都将被表示并“显示”给模型即1或0如果特定方格已被占用则该方格的位置将表示为1如果为空则表示为0。 例如考虑以下棋盘状态 上图中的棋盘状态可以表示为以下整数数组其中每个方格表示为0或1其中每个方格在数组中的位置如上图所示 
[0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1  ]  因此我们的神经网络在评估位置和下一步要走什么时会考虑16 个输入。那么输出呢在 Q-Learning 中神经网络旨在预测任何给定状态下每个可能动作的“Q 值”或估计的当前/未来奖励。由于我们正在玩的游戏有4 个潜在动作在第 1、2、3 或 4 列中放置一个方块我们的神经网络将有4 个输出。 我们的神经网络还会有多个隐藏层它们是连接输入层和输出层的数学神经元层。这些隐藏层充当神经网络的“大脑”通过训练不断调整以“学习”游戏的性质以及状态、动作及其相关奖励之间的关系。 以下是构建整个模型所使用的代码 
# 构建层
input_board  keras.layers.Input(shape( 16 ,), name input_board ) 
carry  keras.layers.Dense( 64 , relu , name layer1 )(input_board) 
carry  keras.layers.Dense( 64 , relu , name layer2 )(carry) 
carry  keras.layers.Dense( 32 , relu , name layer3 )(carry) 
output  keras.layers.Dense( 4 , linear , name output )(carry) #构建模型
self.model  keras.Model(inputsinput_board, outputoutput) 
self.model.compile (optimizerkeras.optimizers.Adam(learning_rate 0.003 ), loss mse ) 
要查看构建和训练神经网络的代码请在GitHub 上查看。要了解如何将游戏状态转换为扁平整数数组表示形式请在此处查看该转换函数。 
五、奖励函数 如上所述神经网络旨在从游戏的任何给定状态近似每个潜在动作的Q 值。“Q 值”只是当前和未来奖励的混合体即“从短期和长期来看这一举动对我有多大帮助”的花哨术语。如果模型能够从任何状态近似所有四种可能动作的奖励那么该模型可以简单地选择它认为将返回最大奖励的动作作为建议的下一个最佳动作。 但是模型如何从本质上知道哪些动作是“好的”哪些动作“不太好”哪些动作是“坏的”这就是我们作为设计此过程的人需要为 AI 代理提供一些指导的地方。这种指导称为奖励函数。 简而言之奖励函数只是一个简单的函数我们将编写它来以数学方式计算任何潜在举动的好坏。请记住对于人工智能做出的每一个举动它都会观察它做出这一举动所获得的奖励。我们定义了一个高级函数可以粗略地计算出这一举动是好是坏。 我对这个迷你俄罗斯方块 AI 使用的奖励函数非常简单可以在模块中的类score_plus()中的函数中找到GameState类在tetris 
def score_plus(self) - float:# start at scoreToReturn:float  float(self.score())# penalize for standard deviationstdev:float  statistics.pstdev(self.column_depths())ToReturn  ToReturn - (stdev * 2)return ToReturn 首先我已将系统设置为仅根据移动后和移动前的“score_plus”之间的差异来确定奖励。换句话说score_plus模型在移动之前观察移动然后再次观察score_plus差异增加即为奖励。 我的奖励函数非常简单。首先score统计游戏的分数——这只是棋盘上被占据的方格数。之后我使用一个简单的标准偏差函数来计算“列深度”的偏差或者每列有多少个方格未被占据。 
标准差越大意味着棋盘的开发方式非常不平衡 — 即一边很高而另一边不高这对于俄罗斯方块游戏来说并不好。非常“水平”的棋盘反而等同于较小的标准差。通过从总分中减去柱深标准差我们可以惩罚模型构建不均匀、不平衡的棋盘从而激励构建平衡的棋盘。 
六、训练过程 在我们建立好底层模型并建立奖励函数后现在是时候训练模型了如前所述模型将自行运行自己反复玩游戏。它将从零开始了解如何玩游戏 — 只是能够观察游戏、做出决定并查看该决定获得的奖励。 通过反复进行自我游戏并根据这些结果进行训练神经网络最终形成了棋盘当前状态、可能做出的潜在决策以及此类决策的典型奖励之间的关系。一旦巩固了这种理解尽可能地玩游戏就很简单了我们所要做的就是始终选择模型预期会获得最大回报的移动动作 
更具体地说以下是精简的训练过程。完整的训练脚本可以在train.py中找到。 
初始化一个新的神经网络。通过选择模型认为最佳的动作组合来收集几百种状态、动作和奖励经验将当前游戏的状态转换为整数列表。根据模型认为最好的选择一种动作但可能不是因为模型还不知道任何事情或随机动作。偶尔会选择随机动作来鼓励探索。在此处阅读有关探索与开发的更多信息。执行玩该动作并观察该动作所给予的奖励。将此状态、动作、奖励“体验”存储到一个集合中。循环遍历所有这些收集到的状态、动作和奖励经验每次根据经验进行训练更新神经网络权重以便在给定状态和动作的情况下更好地近似正确的奖励。计算 Q 值即时/未来奖励应该是多少即时/未来奖励的混合代表该决策的总奖励。要求模型预测它认为的奖励Q 值是什么。该模型的预测可能不正确因为它还不知道任何事情。通过根据步骤 1 中计算的正确 Q 值进行训练来“纠正”模型。对每一次经历都反复这样做。反复重复上述步骤直到模型学会如何有效、合法地玩游戏 
在此处查看 GitHub 上的完整训练脚本。 
七、结果 
在train.py模块中设置好上述训练过程后我让它运行了大约 4 个小时。在这 4 个小时里经过 85,000 个状态、动作和奖励体验的训练后我的模型成功学会了完美地玩游戏。该模型可以从任何状态完美地玩游戏——从新的游戏位置空白板甚至“随机”位置。每次玩游戏时它总是在每场“游戏”中得分 16满分并且从不做出非法举动。 
我的模型经过了 85,000 次经验移动的训练但我认为没有必要训练这么多。正如训练日志文件中显示的那样最佳性能似乎在 4,500 次经验移动标记附近实现。 
您可以从下面的模型检查点部分下载我训练的模型并在assess.py脚本中运行它。 附代码 
该项目的所有代码均为开源https://github.com/TimHanewich/tetris-ai-mini 文章转载自: http://www.morning.drkk.cn.gov.cn.drkk.cn http://www.morning.fqpgf.cn.gov.cn.fqpgf.cn http://www.morning.geledi.com.gov.cn.geledi.com http://www.morning.jtybl.cn.gov.cn.jtybl.cn http://www.morning.gthwr.cn.gov.cn.gthwr.cn http://www.morning.flmxl.cn.gov.cn.flmxl.cn http://www.morning.yrkdq.cn.gov.cn.yrkdq.cn http://www.morning.nptls.cn.gov.cn.nptls.cn http://www.morning.crqpl.cn.gov.cn.crqpl.cn http://www.morning.hqbk.cn.gov.cn.hqbk.cn http://www.morning.ylqrc.cn.gov.cn.ylqrc.cn http://www.morning.kbgzj.cn.gov.cn.kbgzj.cn http://www.morning.pyzt.cn.gov.cn.pyzt.cn http://www.morning.dnbkz.cn.gov.cn.dnbkz.cn http://www.morning.hmxb.cn.gov.cn.hmxb.cn http://www.morning.bhznl.cn.gov.cn.bhznl.cn http://www.morning.jrwbl.cn.gov.cn.jrwbl.cn http://www.morning.wsxly.cn.gov.cn.wsxly.cn http://www.morning.kcbml.cn.gov.cn.kcbml.cn http://www.morning.xiaobaixinyong.cn.gov.cn.xiaobaixinyong.cn http://www.morning.znrgq.cn.gov.cn.znrgq.cn http://www.morning.gqbtw.cn.gov.cn.gqbtw.cn http://www.morning.cmfkp.cn.gov.cn.cmfkp.cn http://www.morning.lgwpm.cn.gov.cn.lgwpm.cn http://www.morning.ychoise.com.gov.cn.ychoise.com http://www.morning.ykklw.cn.gov.cn.ykklw.cn http://www.morning.tgczj.cn.gov.cn.tgczj.cn http://www.morning.qytpt.cn.gov.cn.qytpt.cn http://www.morning.lqlc.cn.gov.cn.lqlc.cn http://www.morning.wchsx.cn.gov.cn.wchsx.cn http://www.morning.pxbrg.cn.gov.cn.pxbrg.cn http://www.morning.huayaosteel.cn.gov.cn.huayaosteel.cn http://www.morning.jxfmn.cn.gov.cn.jxfmn.cn http://www.morning.xxhc.cn.gov.cn.xxhc.cn http://www.morning.bxgpy.cn.gov.cn.bxgpy.cn http://www.morning.mtgnd.cn.gov.cn.mtgnd.cn http://www.morning.blxor.com.gov.cn.blxor.com http://www.morning.mftzm.cn.gov.cn.mftzm.cn http://www.morning.gqnll.cn.gov.cn.gqnll.cn http://www.morning.ddrdt.cn.gov.cn.ddrdt.cn http://www.morning.nhzps.cn.gov.cn.nhzps.cn http://www.morning.sgpnz.cn.gov.cn.sgpnz.cn http://www.morning.qprtm.cn.gov.cn.qprtm.cn http://www.morning.qxljc.cn.gov.cn.qxljc.cn http://www.morning.fxygn.cn.gov.cn.fxygn.cn http://www.morning.wflsk.cn.gov.cn.wflsk.cn http://www.morning.mfcbk.cn.gov.cn.mfcbk.cn http://www.morning.hybmz.cn.gov.cn.hybmz.cn http://www.morning.homayy.com.gov.cn.homayy.com http://www.morning.qwyms.cn.gov.cn.qwyms.cn http://www.morning.kchwr.cn.gov.cn.kchwr.cn http://www.morning.kczkq.cn.gov.cn.kczkq.cn http://www.morning.lxyyp.cn.gov.cn.lxyyp.cn http://www.morning.nspbj.cn.gov.cn.nspbj.cn http://www.morning.wjrtg.cn.gov.cn.wjrtg.cn http://www.morning.ldcsw.cn.gov.cn.ldcsw.cn http://www.morning.flzqq.cn.gov.cn.flzqq.cn http://www.morning.mcjp.cn.gov.cn.mcjp.cn http://www.morning.sqfrg.cn.gov.cn.sqfrg.cn http://www.morning.qsmdd.cn.gov.cn.qsmdd.cn http://www.morning.gkmwk.cn.gov.cn.gkmwk.cn http://www.morning.psdbf.cn.gov.cn.psdbf.cn http://www.morning.mjkqj.cn.gov.cn.mjkqj.cn http://www.morning.xltwg.cn.gov.cn.xltwg.cn http://www.morning.tsdjj.cn.gov.cn.tsdjj.cn http://www.morning.qxbsq.cn.gov.cn.qxbsq.cn http://www.morning.sxfnf.cn.gov.cn.sxfnf.cn http://www.morning.trrrm.cn.gov.cn.trrrm.cn http://www.morning.qsy41.cn.gov.cn.qsy41.cn http://www.morning.smmby.cn.gov.cn.smmby.cn http://www.morning.nwrzf.cn.gov.cn.nwrzf.cn http://www.morning.kqqk.cn.gov.cn.kqqk.cn http://www.morning.fhhry.cn.gov.cn.fhhry.cn http://www.morning.lxlzm.cn.gov.cn.lxlzm.cn http://www.morning.ptzf.cn.gov.cn.ptzf.cn http://www.morning.fdrch.cn.gov.cn.fdrch.cn http://www.morning.srmdr.cn.gov.cn.srmdr.cn http://www.morning.tnhqr.cn.gov.cn.tnhqr.cn http://www.morning.knzdt.cn.gov.cn.knzdt.cn http://www.morning.sknbb.cn.gov.cn.sknbb.cn