机器学习和神经网络 - 页 65

 

Python 基础知识 - 第 02 部分



Python 基础知识 - 第 02 部分

我是 Soper 博士,今天我很高兴介绍我们关于 Python 编程语言基础的三部分系列的第二部分。

在我们深入学习今天的课程之前,我想强调的是,我将分享的信息是建立在我们在上一课中学到的知识和技能的基础上的。因此,如果您还没有机会观看之前的视频,我强烈建议您在开始本节 Python 课程之前观看。

现在,让我们花点时间简要回顾一下您可以期望在本课中学到什么。

到本视频结束时,您将获得有关 Python 以下方面的知识:

  1. 列表
  2. NumPy 数组
  3. 如果语句
  4. 逻辑运算符

在整个课程中,我们将详细探讨这些主题中的每一个,并通过说明性示例和演示来展示它们在 Python 编程语言中的功能。

让我们从讨论 Python 中的列表开始。

在 Python 中,列表只是项目的命名集合。这些项目可以是任何类型,包括数字、文本、变量、对象,甚至其他列表!如果一个列表包含其他列表作为其项,则它被称为多维列表。

为了说明,让我们考虑几个例子。在第一个示例中,我们创建了一个名为“int list”的列表,并将值 -3、7、4、0、-2 和 342 分配给它的元素。您可以将一个简单的一维列表想象成一个向量。 Python 通过方括号识别列表。为了给列表的元素赋值,我们在方括号内用逗号分隔它们。请记住,列表可以容纳任何数据类型的项目。

在第二个示例中,我们声明了一个行星列表,并将我们太阳系中所有已知行星的名称指定为其元素。值得注意的是,冥王星在2006年被国际天文学联合会降级为“矮行星”,因此不在此列表中。转到第三个示例,我们声明一个二维列表。也就是说,这个列表的元素也是列表。您可以将其视为具有两行三列的 2x3 矩阵。

现在,让我们观察几个在 Python 中声明和使用列表的演示。在第一个代码单元中,我们简单地声明了前面讨论的三个列表。当我们运行这个单元格时,不会显示任何输出,因为我们只是在指示 Python 创建这三个列表并将它们存储在计算机内存中。在随后的代码单元中,我们将探讨如何访问列表中的特定值。然而,在我们继续之前,了解 Python 中的索引很重要。

Python 采用从零开始的索引系统。这意味着在处理列表或数组等集合时,第一项的索引为零,第二项的索引为一,依此类推。为了说明,让我们以我们的“int 列表”为例。此列表包含六个值。如果我们想访问列表中的第五项,则该项的索引为 4。

掌握了这个从零开始的索引系统后,下一个代码单元简单地打印“行星”列表中第三颗行星的名称,在本例中为“地球”。由于它是列表中的第三个元素,它应该位于索引位置 2。让我们单击运行按钮来验证输出是否符合预期,并确认地球确实是距离太阳的第三块岩石。

继续,让我们深入研究本课的下一个主题:Python 中的 NumPy 数组。现在,让我们继续本课的下一个主题:if 语句和逻辑运算符。 Python 为我们提供了使用 if 语句来使用条件语句的能力。 if 语句允许我们根据特定条件是真还是假来执行不同的代码块。此外,Python 还提供了逻辑运算符,允许我们将多个条件组合在一起。

在第一个示例中,我们有一个简单的 if-else 结构,用于检查名为“x”的变量是否小于 10。如果条件为真,它会在屏幕上打印“x 小于 10”。否则,如果条件为假,则打印“x 大于或等于 10”。 else 语句用于指定当 if 语句中的条件为假时应执行的代码。

我们可以使用 if-elif-else 结构扩展此结构以处理多种可能性。在第二个示例中,我们通过检查此人的年龄是否小于 13 岁来引入附加条件。根据此人的年龄,代码确定此人是儿童、青少年还是成人。如果所有条件都不为真,elif 语句允许我们在回退到 else 语句之前检查其他条件。

让我们看看这些 if 语句和逻辑运算符在我们的 Jupyter Notebook 中的一些演示。

在第一个代码单元中,我们声明了一个名为“x”的变量并设置了它的值。然后,我们使用 if-else 结构根据“x”是否小于 10 来打印特定消息。让我们运行代码单元并观察输出。由于“x”的值当前为 10,Python 会在屏幕上打印“x 大于或等于 10”。如果我们将“x”的值更改为 -7 并再次运行代码单元,我们将得到不同的结果。将“x”的值更改为 -7 后,Python 现在会打印“x 小于 10”。

在下一个代码单元中,我们实施 if-elif-else 结构来根据年龄确定一个人是儿童、青少年还是成人。让我们运行单元格,看看会发生什么。正如预期的那样,Python 打印“child”,因为“age”变量的值当前设置为 5。如果我们更改“age”的值并重新运行代码单元,我们将根据人的年龄得到不同的结果。转到下一个主题,让我们讨论 Python 中的逻辑运算符。 Python 提供了三种逻辑运算符:“and”、“or”和“not”。这些运算符允许我们同时测试多个条件。

在第一个示例中,我们演示了如何使用“and”和“or”运算符来确定两个变量“x”和“y”是否为正。 if 语句检查 'x' 和 'y' 是否都是正数。如果至少有一个条件为假,代码将继续执行 elif 语句,检查“x”或“y”是否为正。如果 'x' 和 'y' 都不是正数,则执行 else 语句。

在第二个示例中,我们引入了“非”运算符,用于反转或反转比较结果。我们检查一个人的年龄是否不小于 13 岁。如果这个人不小于 13 岁,那么他们必须至少 13 岁,因此不是孩子。否则,他们将被视为儿童。

让我们看看在 Python 中使用这些逻辑运算符的一些演示。

在第一个代码单元中,我们使用“and”和“or”逻辑运算符来确定“x”和“y”是否为正。我们已将“x”设置为 5,将“y”设置为 -2。让我们运行单元并观察输出。由于“y”为负,“and”运算符的条件为假。但是,“或”运算符的条件为真,因为“x”为正。因此,代码将“x is positive”打印到屏幕上。现在,让我们将“x”的值更改为 -3 并再次运行代码单元。这一次,“and”和“or”运算符的两个条件都为假,因此代码继续执行 else 语句并打印“x 和 y 不是正数”。

在下一个代码单元中,我们使用“not”运算符根据年龄来检查一个人是否不是孩子。我们已将“年龄”变量设置为 10,这意味着该人被视为儿童。让我们运行代码单元并观察输出。由于此人的年龄小于 13 岁,“not”运算符的条件为 false,代码将“Child”打印到屏幕上。

现在,将“age”的值更改为 18 并重新运行代码单元。这次,此人的年龄不小于 13 岁,因此“非”运算符的条件为真,代码打印“不是孩子”。我们关于列表、NumPy 数组、if 语句和 Python 逻辑运算符的课程到此结束。我希望这些信息对您有用,并且对您的 Python 编程之旅有所帮助。

在本系列的下一部分和最后一部分中,我们将探讨更高级的主题,包括循环、函数和文件处理。所以,敬请期待!

感谢您的关注,我们下节课再见!

 

Python 基础 - 第 03 部分



Python 基础 - 第 03 部分

我希望你们都过得愉快。我是 Soper 博士,我很高兴能和大家一起上我们关于 Python 编程语言基础知识的第三课。在今天的课程中,我们将更深入地研究 Python 并探索一些关键概念,以增强您的理解和熟练程度。

在我们开始之前,我想强调一下,本课中提供的信息是建立在我们在前两课中学到的知识和技能的基础上的。如果您还没有看过这些视频,我强烈建议您先观看一下,然后再深入学习 Python 课程。

现在,让我们花点时间讨论一下您可以期望在本课中学到什么。到本课程结束时,您将全面了解 Python 的以下几个方面:

  1. “for”循环
  2. “while”循环
  3. 功能
  4. 班级
  5. 对象

在本课中,我们将通过说明性示例和演示来探索这些概念,让您掌握它们在 Python 编程语言中的实际应用。

让我们从深入研究 Python 中的“for”和“while”循环开始。

通常,循环使我们能够重复执行一组指令。 Python 提供了两种类型的循环:“for”循环和“while”循环。两者之间的主要区别在于“for”循环运行特定次数,而“while”循环继续运行直到满足特定条件。

让我们从打印前 10 个自然数的“for”循环示例开始,这些自然数是 1 到 10 之间的整数。要创建“for”循环,我们使用关键字“for”后跟一个变量名。在这种情况下,我们将使用变量“x”。随着“for”循环的迭代,每次迭代都会为变量“x”分配一个不同的值。然后我们指定将迭代分配给变量的项目集,后跟一个冒号。在这个具体示例中,我们使用 Python“范围”函数创建项目集。 “范围”函数返回介于下限和上限之间的数字范围。值得注意的是,下限是包容性的,而上限是排他性的。因此,此示例中的数字范围为 1 到 10。

在循环的第一次迭代期间,“x”的值将为 1。随后,在第二次迭代期间,“x”将被赋值为 2,依此类推,直到达到 10。“for”之后的任何缩进代码行语句将在循环的每次迭代中执行。在此示例中,我们只是打印“x”的值,从而显示数字 1 到 10。

现在,让我们探索另一个打印行星名称的“for”循环。在这种情况下,我们将使用变量名“planet”来控制循环,并且我们将遍历行星列表。随着循环的进行,“planet”变量将被一个接一个地分配给每个行星的名称,从而允许我们打印列表中每个行星的名称。

继续,让我们讨论 Python 中的嵌套循环。对于嵌套循环,一个循环(称为内循环)在另一个循环(称为外循环)内运行。内循环将在外循环的每次迭代中执行一次。例如,考虑这样一个场景:外循环用 0 到 1 的整数填充名为“row”的变量,而内循环用 0 到 2 的整数填充名为“column”的变量。这些数字对应于行和二维 NumPy 数组的列索引。随着嵌套循环的进行,它首先打印数组第一行中所有元素的值,然后移动到第二行。

最后,让我们探讨一下“while”循环。在这种类型的循环中,我们依赖于一个控制变量,例如“x”,它最初被设置为一个特定的值。只要“x”的值满足特定条件,循环就会继续执行。例如,我们可以将“x”初始化为1,只要“x”保持在10以下,循环就会继续运行。在每次迭代中,“x”的值将被更新,允许我们在循环内执行特定的操作循环直到不再满足条件。

这总结了我们对 Python 中“for”和“while”循环的概述。在下一部分中,我们将探讨函数,这是编程中的一个基本概念,它使我们能够有效地组织和重用代码。

 

强化学习基础


强化学习基础

我是 Soper 博士,今天我将讨论强化学习的基础,这是更广泛的人工智能领域中的一个关键领域。在我们深入研究强化学习的基础之前,让我们花点时间回顾一下您将在本课中学到的内容。

看完本视频,您将清楚地了解以下内容:

  1. 什么是强化学习。
  2. 构成基于强化学习的人工智能基础的五个原则:输入输出系统。 b.奖励。 C。环境。 d.马尔可夫决策过程。 e.训练和推理。

一旦我们掌握了这些概念,我们将完全有能力开始构建真正的 AI 模型。所以,让我们不要浪费任何时间并开始吧!

首先,让我们探讨一下“强化学习”的含义。除了监督学习和非监督学习,强化学习是机器学习的三个主要范式之一。

在监督学习中,机器学习一个通用函数来根据输入输出对预测输出。在无监督学习中,机器在没有数据先验知识的情况下发现数据集中的模式。另一方面,强化学习旨在训练机器以一种允许其采取行动以最大化累积奖励的方式了解其环境。为实现这一目标,强化学习涉及在探索环境和利用迄今为止所学知识之间找到最佳平衡。现在,让我们深入研究基于强化学习的人工智能的五个原则。

我们要讨论的第一个原则是输入和输出系统。该系统并非强化学习所独有,而是所有人工智能和认知计算系统的基础。它涉及将输入转换为输出。

在强化学习的背景下,输入被称为“状态”,代表环境的状态。输出称为“动作”,回答了“下一步我应该做什么?”的问题。强化学习的目标是确定一个最优策略来指导每个状态下的动作。

继续,让我们谈谈奖励。奖励在所有人工智能和认知计算系统中都发挥着至关重要的作用。它们充当向系统通报其性能的指标。奖励函数可以设计为最大化收益或最小化损失,这取决于所解决的问题。立即奖励和累积奖励被认为是随着时间的推移最大化总累积奖励。

第三个原则是环境,它指的是强化学习系统运行的环境。环境提供有关状态和奖励的信息。它还定义了游戏规则,确定在任何给定时间可以采取的行动。最初,系统不知道其行为的后果,必须通过实验来学习。

接下来,我们有马尔可夫决策过程 (MDP)。 MDP 以数学家安德烈·安德烈耶维奇·马尔科夫 (Andrey Andreyevich Markov) 的名字命名,它提供了一个数学框架,用于在结果部分随机且部分受决策者控制时对决策进行建模。在强化学习中,人工智能系统充当在环境中运行的决策者。 MDPs 涉及离散的时间单位,系统根据观察、动作、奖励和后续状态从一个状态转换到下一个状态。

最后,我们有训练模式和推理模式。强化学习系统经历两个阶段:训练和推理。在训练模式下,系统通过多个训练周期学习并寻求确定最佳策略。它根据获得的知识更新其政策。在推理模式下,系统已经过全面训练并部署为使用学习到的策略执行其任务而无需进一步更新。

既然我们对强化学习的原理有了扎实的了解,我们就可以开始构建真正的强化学习模型了。在接下来的两个视频中,我们将探讨利用汤普森采样解决实际问题的强化学习模型。第一个模型将解决多臂老虎机问题中的探索-利用困境,第二个模型将使用模拟优化复杂广告活动的结果。

这些视频将提供使用 Python 创建 AI 模型的实践经验。我希望您能和我一起参与认知计算和人工智能领域的这些激动人心的冒险!

我们关于强化学习基础的课程到此结束。我希望您发现这些信息很有趣,祝大家度过愉快的一天。

 

强化学习:Thompson 采样和多臂强盗问题 - 第 01 部分



强化学习:Thompson 采样和多臂强盗问题 - 第 01 部分

我是 Soper 博士,很高兴向您介绍强化学习综合课程的第一部分,特别关注汤普森抽样和著名的多臂强盗问题。

在深入研究汤普森采样和多臂强盗问题背景下强化学习的复杂性之前,我想强调观看本系列之前视频的重要性。这些前面的课程是我们今天要探讨的概念的基础,如果您还没有熟悉它们,我强烈建议您先熟悉一下。

为了简要概述您可以在本课中学到什么,让我概述一下要点:

  1. 我们将从了解多臂老虎机问题的含义开始。
  2. 我们将探讨为什么多臂老虎机问题具有重要意义。
  3. 接下来,我们将介绍 Thompson Sampling 及其与此问题的相关性。
  4. 最后,我们将揭示 Thompson Sampling 的内部工作原理以及它如何有效地解决探索-开发困境。

随着我们发现多臂老虎机问题的各种应用和影响,未来的旅程有望成为一个启发性的旅程。话不多说,让我们开始探索吧!

要在多臂强盗问题的背景下掌握强化学习的概念,首先必须定义该问题的含义。

多臂强盗问题是指我们必须确定如何在一组竞争选项中分配固定数量的有限资源的任何场景。主要目标是在面临不确定性的同时最大化我们的预期回报。

这种有限的资源可以有多种形式,例如时间、金钱、轮流等。此外,我们可能从每个可用选项中获得的回报尚不完全清楚。然而,当我们将资源分配给不同的选项时,我们会逐渐更好地了解与每个选项相关的潜在回报。

“Multi-Armed Bandit Problem”这个名字来源于一个赌博类比。想象一下,一位赌徒面对一排老虎机,试图找出能最大程度提高她获胜机会的机器。老虎机是赌场中常见的机会游戏,玩家可以在其中存钱并轮流参与。如果运气对玩家有利,机器会发放金钱奖励,玩家希望奖励超过她的初始投资。

传统上,由于用于启动游戏的机械杠杆(手臂),老虎机被称为“独臂强盗”。因此,当赌徒遇到几台老虎机并且必须决定玩哪一台时,就出现了一个经典的多臂强盗问题。这个问题本质上体现了强化学习的基础探索-利用困境。

探索-利用困境围绕着确定赌徒应该玩每台机器多少次。如果赌徒发现一台机器似乎经常提供奖励,她应该继续玩那个特定的机器(剥削)还是冒着潜在损失的风险尝试其他机器以期找到更有价值的选择(探索)?

现在,您可能想知道为什么多臂老虎机问题如此重要。好吧,事实是多臂老虎机问题在现实世界中无处不在,渗透到我们的日常生活和商业环境中。

考虑一下您在个人生活中遇到的选择。例如,决定是在周五晚上再次光顾您最喜欢的餐厅,还是探索您以前从未体验过的新餐厅。同样,想象一下有多个有趣的电视剧可供流媒体播放,但观看它们的空闲时间有限。您如何确定将时间投入到哪个节目中?

Thompson Sampling 是一种流行的算法,用于解决多臂强盗问题中的探索-利用困境。它提供了一种通过利用贝叶斯推理来平衡探索和开发的原则性方法。

Thompson Sampling 背后的核心思想是维持关于老虎机问题中每个选项(臂)的真实潜在奖励概率的信念或概率分布。这种信念会根据之前与手臂互动时观察到的奖励进行更新。

Thompson Sampling 采用概率方法进行决策。它不是严格选择具有最高预期奖励(开发)的手臂或随机探索手臂,而是以平衡探索和开发的方式从信念分布中抽取手臂。

让我们来看看 Thompson 抽样算法的步骤:

  1. 初始化:首先初始化每个手臂的信念分布。这个分布代表了每个手臂真实奖励概率的不确定性。通常,Beta 分布用作先验分布,因为它与通常用于对老虎机问题中的奖励建模的二项分布共轭。

  2. 采样:对于每一轮交互,从每只手臂的信念分布中采样一个奖励概率。此步骤通过考虑奖励概率具有较高不确定性的武器来结合探索。

  3. 选择:选择具有最高采样奖励概率的臂。此步骤通过支持可能根据信念分布获得更高预期回报的武器来进行剥削。

  4. 更新:观察所选手臂的奖励,并根据贝叶斯推理更新该手臂的信念分布。此步骤使用先验分布和观察到的奖励更新后验分布。

通过反复采样、选择和更新,Thompson Sampling 根据观察到的奖励调整其信念分布,随着时间的推移逐渐改进武器的选择。

Thompson Sampling 已被证明是解决各种应用中探索-开发困境的有效算法。它已广泛应用于在线广告、临床试验、推荐系统以及许多其他涉及不确定性下的顺序决策的领域。

Thompson Sampling 的主要优势之一是其简单易用。该算法不需要复杂的计算或调整超参数,使其成为许多现实场景中的实用选择。

总之,汤普森采样通过贝叶斯推理平衡探索和开发,为多臂强盗问题提供了一个优雅的解决方案。它适应不断变化的奖励概率的能力及其广泛的适用性使其成为强化学习和决策制定的宝贵工具。

在我们课程的下一部分中,我们将更深入地研究汤普森采样的数学基础并探索其性能保证。请继续关注这个强大算法的复杂性的激动人心的旅程!

 

强化学习:汤普森抽样和多臂强盗问题 - 第 02 部分



强化学习:汤普森抽样和多臂强盗问题 - 第 02 部分

我是 Soper 博士,我在这里介绍汤普森抽样和著名的多臂老虎机问题背景下强化学习课程的第二部分。

在本系列的上一个视频中,我们了解了多臂老虎机问题以及如何利用 Thompson 采样来解决该问题。

在我们继续之前,我强烈建议您观看之前的视频(如果您还没有观看的话),因为它提供的基本知识将极大地有助于您理解本课。

今天,我们的重点是实施基于强化学习的 AI 系统,该系统利用 Thompson 采样来解决真正的多臂老虎机问题。为此,我们将切换到 Python 并开始使用!首先,让我们简要回顾一下我们将使用的场景。想象一下,您带着 1,000 美元在一家赌场玩老虎机。有 6 台老虎机,每回合花费 1 美元。转换率表示在任何给定回合获胜的概率,因机器而异,并且您不知道。

您的目标是尽快确定转换率最高的老虎机,从而最大限度地提高获胜机会。

在我们的 Python 实现中,我们将从导入所需的库开始。幸运的是,对于这个项目,我们只需要导入 numpy。接下来,我们将定义环境。定义环境是任何强化学习项目中的关键步骤。在这里,我们将从指定玩老虎机的总回合数开始。因为我们有 1,000 美元,每回合花费 1 美元,所以我们总共有 1,000 回合。

我们还需要定义老虎机的总数,在本例中为六台。此外,我们将创建数组来跟踪每台老虎机的输赢情况。如上一课所述,这些数组将用作 beta 分布的形状参数。此外,我们将为随机数生成器设置种子以确保结果的可重复性。

接下来,我们将为每台老虎机生成 1% 到 15% 之间的随机转换率。这些转化率代表了赌徒在玩特定机器时获胜的频率。请注意,在现实世界中,赌徒无法访问此信息。生成转换率后,我们将它们打印到屏幕上以观察存储在计算机内存中的值。

在后续步骤中,我们将创建主数据集。该数据集将是一个矩阵,一行代表每一轮,一列代表每台老虎机。在这种情况下,我们的数据集将有 1,000 行和 6 列,代表 1,000 轮和 6 种可能的老虎机。矩阵中的每个条目将指示在特定回合玩特定老虎机的结果,“1”表示赢,“0”表示输。

为了生成数据集,我们将使用嵌套的“for”循环。生成数据集后,我们将打印前 15 行以了解其结构。

运行代码单元将显示一个由 1 和 0 填充的矩阵,分别代表输赢。每行对应一个回合,每一列对应一个老虎机。例如,在第一回合,玩任何老虎机都会输。如果我们在给定的回合玩特定的老虎机,数据集可以让我们了解结果。

接下来,我们将显示数据集中每一列的均值。这些均值代表了我们在模拟中可以预期的每台老虎机的真实转换率。运行代码单元将显示这些值,这些值应该接近之前定义的理论转换率,但由于随机数生成器和我们数据集中的轮数有限,因此并不准确。

现在,是时候模拟玩老虎机 1,000 次,同时遵守每轮只玩一台机器的限制。

使用嵌套的“for”循环,外循环遍历每一轮,内循环遍历每台老虎机,我们将进行模拟。在每个回合开始时,我们将“max_beta”变量设置为 -1。这个变量将帮助我们跟踪当前回合观察到的最大 beta 值。

对于每台老虎机,我们将从机器的 beta 分布中抽取一个随机值,其中分布的形状由玩该特定机器时累积的输赢次数决定。我们将当前老虎机的 beta 值与本轮迄今为止观察到的最大 beta 值进行比较。如果它更大,我们将使用当前老虎机的索引更新“index_of_machine_to_play”变量。

检查所有六台老虎机的 beta 值后,“index_of_machine_to_play”变量将存储当前回合具有最高 beta 值的机器的索引。然后,我们将通过在我们的数据集中查找结果并通过增加“number_of_positive_rewards”或“number_of_negative_rewards”数组中的相应元素来记录它是赢还是输来玩选定的老虎机。

这个过程将一直持续到我们完成所有 1,000 轮。我们的人工智能系统将在每一轮中不断地从环境中学习,利用其积累的知识在探索和开发之间做出决定。完成所有 1,000 轮后,我们将计算我们的 AI 代理玩每台老虎机的总次数,并将结果打印到屏幕上。

运行代码单元将显示每台老虎机的播放次数。如您所见,我们基于强化学习的 AI 系统成功地将老虎机 4 识别为获胜概率最高。它选择在 1,000 轮中的 695 轮上玩该机器,以试图最大化其累积奖励。

最后,将这些结果与相关基线进行比较至关重要。在这种情况下,天真的方法是随机选择一台老虎机玩每一轮。最后一个代码单元通过计算获胜次数来演示这种随机抽样方法,如果我们要在每轮随机选择一个老虎机来玩的话。

运行代码单元将揭示汤普森抽样方法与随机抽样方法之间的比较。如您所见,与朴素的随机抽样方法相比,汤普森抽样方法的成功率要高得多。因此,我们的赌徒最好使用汤普森抽样!

在本课中,我们应用了迄今为止在系列中获得的知识来解决现实世界中的决策问题。具体来说,我们成功地在 Python 中构建了一个完整的基于强化学习的人工智能系统,该系统使用 Thompson 采样来解决真实的多臂强盗问题。

在我们系列的这个阶段,我希望您开始了解 AI 工具在支持决策方面的作用。您可能还会设想这些技术的巧妙和创新应用,以解决其他现实世界的问题。

在本系列的下一个视频中,我们将探索应用于复杂广告活动的基于 Thompson 抽样的强化学习的更复杂版本。我也邀请你和我一起观看那个视频。

我们关于汤普森抽样和著名的多臂老虎机问题背景下的强化学习课程的第二部分到此结束。我希望你觉得这节课很有趣,祝你有美好的一天!

 

基于 Python 的利润最大化强化学习 AI 系统



基于 Python 的利润最大化强化学习 AI 系统

今天是个好日子!我是 Soper 博士。今天,我们将深入研究 Python 中的一个综合示例,该示例演示基于强化学习的 AI 系统如何在涉及多个选项和数百万客户的复杂场景中有效地最大化企业利润。

本视频中展示的技术已在本系列的前几课中进行了介绍和广泛讨论。如果您还没有机会观看那些以前的视频,我强烈建议您在继续本视频之前观看。

在我们深入研究 Python 编码之前,让我们讨论一下我们旨在使用基于 Thompson 抽样强化学习的 AI 系统在本视频中解决的业务问题。

假设您在一家拥有 1000 万客户的无线公司工作。该公司已决定通过推出智能手机升级计划来提高利润。为了吸引客户升级他们的智能手机,该公司的营销团队设计了八个不同的广告活动。每个活动都为客户提供特定的功能、促销或折扣。然而,每个活动的平均利润会有所不同,因为相关的功能、促销和折扣会给公司带来不同的成本。虽然该公司可以计算出每次广告活动的成本和每次销售的利润,但仍不确定每次活动的效果如何。某些活动可能证明非常有效,而其他活动可能不会产生显着效果。

我们的目标是建立一个人工智能系统,可以最大限度地提高公司智能手机升级计划的利润。请务必注意,我们的目标不仅仅是最大限度地增加参与该计划的客户数量。相反,我们的目标是优化利润,这不仅取决于接触每个广告活动的客户数量,还取决于每个活动在产生销售方面的有效性和每次销售的平均利润。清楚地了解业务问题后,让我们切换到 Python 并开始实施。

在描述本笔记本中的代码之前,我想通知您,视频描述中提供了指向本笔记本的链接。随意下载笔记本的副本来试验或适应您的特定要求。像往常一样,我们首先导入必要的 Python 库。我们将需要为此项目使用两个库:NumPy,我们将利用它从各种概率分布中生成随机值,以及语言环境,我们将使用它来适当地格式化货币值。由于我们的目标是最大化利润,因此我们将在这个项目中广泛使用货币价值。将我们当前的区域设置为美国可确保 Python 将货币值格式化为美元并使用逗号分隔大数字。如果您喜欢不同的货币格式,请随时相应地修改语言环境。

下一行代码为随机数生成器设置种子。如果您选择下载并执行笔记本,这可以保证您可以重现此视频中观察到的准确结果。

我们的下一个任务涉及定义一个类来存储有关不同广告活动的信息。我们将利用此类创建代表每个广告活动的对象,这些对象将保留各个活动的属性或特征。以这种方式使用活动对象使我们能够将所有与活动相关的细节与程序逻辑的其余部分分开,从而显着增强我们对 AI 如何学习和做出决策的理解。

如您所见,每个活动对象都通过提供唯一的活动 ID 进行初始化。 __init__ 函数随后使用 NumPy 从均匀概率分布中抽取随机值,为活动分配 1% 到 20% 之间的随机转化率。转换率表示如果接触到特定的广告活动,将选择升级智能手机的客户百分比。值得注意的是,无线公司缺乏对这些信息的了解。我们还使用 NumPy 为每个成功的销售分配随机利润,范围从每个活动的 100 美元到 200 美元不等。尽管我们随机分配这些利润值,但同样可以使用无线公司为每个广告活动提供的特定值。最后,该类包含一个方法 get_profit(),该方法返回活动每次成功销售的利润。

这是 Campaign 类的代码:

import numpy as np

class Campaign:
    def __init__( self , campaign_id):
         self .campaign_id = campaign_id
         self .conversion_rate = np.random.uniform( 0.01 , 0.20 )
         self .profit_per_sale = np.random.uniform( 100 , 200 )
    
    def get_profit( self ):
         return self .profit_per_sale

现在我们已经定义了 Campaign 类,我们可以着手实现基于 Thompson 抽样的强化学习算法。我们将创建一个名为 ThompsonSampling 的类来封装算法。

ThompsonSampling 类将具有以下属性和方法: num_campaigns:广告活动的数量。

  • 活动:代表可用广告活动的活动对象列表。
  • total_sales:一个列表,用于跟踪每个活动的销售总数。
  • total_profits:用于跟踪每个活动的总利润的列表。
  • num_trials:Thompson 抽样算法中试验或迭代的总数。
  • trial_results:一个列表,用于存储每次试验的结果,即选定的活动和由此产生的利润。

ThompsonSampling类的方法如下:

  • initialize_campaigns():初始化具有指定活动数量的活动对象列表。
  • select_campaign():实施 Thompson 抽样算法以为每次试验选择一个活动。
  • update_statistics():根据所选活动和产生的利润更新总销售额和利润。
  • run_trials():运行指定次数的试验并记录结果。

这是 ThompsonSampling 类的代码:

 class ThompsonSampling:
    def __init__( self , num_campaigns, num_trials):
         self .num_campaigns = num_campaigns
         self .campaigns = []
         self .total_sales = [ 0 ] * num_campaigns
         self .total_profits = [ 0 ] * num_campaigns
         self .num_trials = num_trials
         self .trial_results = []
    
    def initialize_campaigns( self ):
         for i in range( self .num_campaigns):
             self .campaigns.append(Campaign(i))
    
    def select_campaign( self ):
        samples = []
         for campaign in self .campaigns:
            profit = campaign.get_profit()
            sample = np.random.normal(profit, 1.0 / campaign.conversion_rate)
            samples.append(sample)
        selected_campaign = np.argmax(samples)
         return selected_campaign
    
    def update_statistics( self , trial, selected_campaign, profit):
         self .total_sales[selected_campaign] += 1
         self .total_profits[selected_campaign] += profit
         self .trial_results.append((trial, selected_campaign, profit))
    
    def run_trials( self ):
         for trial in range( self .num_trials):
            selected_campaign = self .select_campaign()
            profit = self .campaigns[selected_campaign].get_profit()
             self .update_statistics(trial, selected_campaign, profit)

现在我们已经实现了 ThompsonSampling 类,我们可以继续创建该类的实例并运行算法。对于此示例,我们将活动数量设置为 8,将试验数量设置为 1000。运行试验后,我们将显示每个活动的总销售额和利润。

下面是运行 Thompson 抽样算法的代码:

num_campaigns = 8
num_trials = 1000

ts = ThompsonSampling(num_campaigns, num_trials)
ts.initialize_campaigns()
ts.run_trials()

for i in range(num_campaigns):
    total_sales = ts.total_sales[i]
    total_profits = ts.total_profits[i]
    print(f "Campaign {i}: Total Sales = {total_sales}, Total Profits = {total_profits}" )
您可以根据您的具体要求修改代码,例如广告系列和试验的数量。此外,您可以使用更多属性和方法扩展 Campaign 类,以捕获有关每个活动的更多信息。
 

Q学习的基础



Q学习的基础

今天是个好日子!我是 Soper 博士,今天我很高兴能深入研究 Q-learning 的基础,Q-learning 是人工智能领域的一项强大技术。在我们开始这个学习之旅之前,如果您是这个概念的新手,我建议您观看本系列中名为“强化学习基础”的上一个视频。

在本课中,我们将探讨 Q 学习的基本概念,包括其特征、Q 值、时间差异、贝尔曼方程和整个 Q 学习过程。到本课结束时,您将扎实地掌握这些概念,并有能力构建依赖于 Q-learning 的 AI 模型。所以,事不宜迟,让我们开始吧!

首先,让我们简要讨论一下 Q-learning 的含义。如前所述,Q-learning 是强化学习的一种形式,其中 AI 代理与由状态和奖励组成的环境进行交互。代理的目标是直接通过与环境交互来构建最优策略,而不需要学习底层数学模型或概率分布。 Q-learning 包含反复试验,因为智能体不断尝试在多个事件中使用不同的方法来解决问题,同时根据获得的知识更新其策略。

现在,让我们深入研究 Q 学习模型的特征。由于 Q-learning 是一种强化学习,它具有所有强化学习模型的基本特征。这些特征包括输入和输出系统、奖励、环境、马尔可夫决策过程,以及训练和推理模式。除了这些特性之外,Q-learning 模型还有两个特定的属性。首先,Q-learning 模型中可能状态的数量是有限的,这意味着 AI 代理总是会发现自己处于固定数量的可能情况之一。其次,Q-learning 模型中可能的动作数量也是有限的,需要 AI 代理在每个状态下从一组固定的可能动作中进行选择。

现在我们已经了解了这些特征,让我们来探讨一些经典的 Q-learning 问题。一个这样的问题是迷宫,其中每个位置代表一个状态,代理的动作涉及向上、向右、向下或向左移动。目标是穿过迷宫并尽快到达出口。另一个经典示例是悬崖行走问题,代理必须在类似网格的环境中导航才能到达特定位置而不会掉下悬崖。在这两种情况下,AI 代理都通过依赖和更新 Q 值来了解环境。

那么,什么是 Q 值? Q 值表示给定状态 (s) 中特定动作 (a) 的质量。如果从当前状态采取该行动,它们表示未来奖励的预期总和。换句话说,Q 值估计代理可以通过采取特定行动并从那里以最佳方式进行而积累的额外奖励。 AI 代理旨在最大化其总奖励或最小化其在负奖励场景中的总惩罚。通过更新和改进 Q 值,智能体通过正强化和负强化进行学习。

Q 值存储在 Q 表中,其中行表示可能的状态,列表示可能的操作。 Q 表用作代理的策略,指导其在环境中的行为。最佳 Q 表包含允许代理在任何给定状态下选择最佳动作的值,从而获得最高的潜在奖励。

时间差异 (TD) 在 Q 学习中起着至关重要的作用。 TD 提供了一种方法,用于根据代理对当前状态动作的 Q 值的了解来计算先前动作的 Q 值应该调整多少。这种调整有助于代理在后续情节中做出更好的决策。 TD 值是通过考虑前一个动作收到的即时奖励、对未来奖励进行折扣的折扣因子 (gamma) 以及下一状态的最大 Q 值来计算的。

TD 误差通常表示为 δ,计算为 TD 值与前一个状态-动作对的当前 Q 值之间的差值。它表示代理人的预测与在环境中观察到的实际奖励之间的差异。 TD 误差用于更新先前状态-动作对的 Q 值,从而随着时间逐渐细化 Q 值。

现在,让我们介绍一下 Q-learning 的核心 Bellman 方程。贝尔曼方程表达了状态-动作对的 Q 值与其相邻状态-动作对的 Q 值之间的关系。它的定义如下:

Q(s, a) = R(s, a) + γ * max[Q(s', a')]

在这个等式中,Q(s,a)表示状态s和动作a的Q值,R(s,a)表示在状态s采取动作a时获得的即时奖励,γ(gamma)是折扣因子确定未来奖励与即时奖励相比的重要性,s' 是在状态 s 采取行动 a 后到达的下一个状态,a' 代表在状态 s' 采取的最佳行动。

贝尔曼方程本质上表明,状态-动作对的 Q 值应等于获得的即时奖励加上下一个状态-动作对的折扣最大 Q 值。通过迭代应用贝尔曼方程并根据观察到的奖励和未来估计更新 Q 值,智能体逐渐收敛于最优策略。

现在,让我们继续整个 Q-learning 过程。 Q-learning 遵循由以下步骤组成的迭代方法:

  1. 用任意值或零初始化 Q 表。
  2. 观察当前状态。
  3. 选择基于探索-利用策略的动作,例如 epsilon-greedy,它在探索新动作和利用所学知识之间取得平衡。
  4. 执行选定的动作并观察立即奖励和下一个状态。
  5. 使用 Bellman 方程和观察到的奖励更新先前状态-动作对的 Q 值。
  6. 将当前状态设置为下一个状态。
  7. 重复步骤 3 到 6,直到代理达到终止状态或预定义的剧集数。
  8. 对多个 episode 重复步骤 2 到 7 以优化 Q 值并改进代理的策略。

通过这个迭代过程,Q 值得到更新并逐渐收敛到它们的最优值,从而导致改进的策略。探索-利用策略允许代理在探索新动作以发现更好的策略和利用学到的知识根据当前最佳动作做出决策之间取得平衡。

值得一提的是,Q-learning 是一种 off-policy 学习算法,这意味着代理可以从不同策略产生的经验中学习。此属性可在探索不同策略时实现更高效的学习和更大的灵活性。

总之,Q-learning 是强化学习领域内的一项强大技术。它涉及通过反复试验学习最优策略,而不需要环境的数学模型。通过使用 Q 值来估计未来奖励的预期总和,通过时间差异和贝尔曼方程更新它们,并遵循迭代学习过程,代理逐渐改进其策略并在给定任务中取得更好的性能。

我希望本课使您对 Q-learning 的基础有了扎实的了解。在下一课中,我们将深入探讨实施细节并探索 Q-learning 的实际示例。感谢您的关注,期待在下一个视频中见到您!

 

Q-Learning:Python 中的完整示例


Q-Learning:Python 中的完整示例

我是 Soper 博士,今天我很高兴能够详细介绍使用 Q-learning 的基于 Python 的人工智能系统。本课以上一个视频中讨论的概念为基础,因此如果您不熟悉 Q-learning,我强烈建议您先观看上一个视频,然后再继续本视频。

在本课中,我们将解决一家成长中的电子商务公司面临的业务问题。该公司正在建设一个新仓库,并希望使用仓库机器人实现拣选操作自动化。仓库机器人是自主地面车辆,旨在处理各种仓库任务,包括拣选。

拣货是指从仓库内的不同位置收集单个项目以满足客户订单的过程。从货架上取下商品后,电子商务公司希望机器人将它们运送到仓库内的特定包装区域进行运输。

为了确保最大的效率和生产力,机器人需要学习包装区和仓库内允许它们移动的所有其他位置之间的最短路径。在本视频中,我们的目标是使用 Q-learning 来完成这项任务。

首先,让我们介绍一下我们的仓库机器人场景的环境。仓库可以用图表表示,其中每个黑色方块代表一个物品存储位置(货架或储物箱),每个白色方块代表机器人可用于导航的通道。绿色方块表示物品包装区的位置。

仓库中总共有 121 个位置,每个位置代表机器人在特定时间点可能发现的一种状态或情况。每个状态都可以通过行和列索引来标识。例如,物品包装区位于位置 (0, 5)。黑色和绿色方块是终止状态,这意味着如果 AI 代理在训练期间将机器人驾驶到这些区域之一,则训练情节将结束。绿色方块代表目标状态,而黑色方块代表失败状态,因为将机器人撞到物品存储区域被视为失败。

接下来,让我们讨论 AI 代理可用的操作。 AI 代理可以选择四个方向之一:向上、向右、向下或向左。代理的目标是学习防止机器人撞到物品存储区域的动作。

现在,让我们探索我们场景的奖励结构。仓库中的每个状态(位置)都被分配了一个奖励值。为了帮助 AI 代理学习,负奖励(惩罚)用于除目标状态之外的所有状态。包装区(目标状态)的奖励值为 100,而所有其他状态的奖励值为 -100。负奖励的使用鼓励 AI 代理通过最小化惩罚来找到到达目标的最短路径。没有使用白色方块的正奖励,因为代理的目标是最大化累积奖励,并且使用白色方块的正奖励可能导致代理漫无目的地累积奖励而没有达到目标。

现在我们已经定义了环境及其状态、操作和奖励,让我们切换到 Python 并仔细查看代码实现。

我们首先导入必要的 Python 库。对于这个项目,我们只需要 numpy 库,它将用于创建多维数组、生成随机值和执行数字任务。

下一步是定义环境,从状态开始。仓库表示为 11x11 网格,产生 121 种可能的状态。我们使用一个三维 numpy 数组来存储每个状态和动作组合的 Q 值。前两个维度代表状态的行和列,而第三个维度包含一个元素,代表 AI 代理可以采取的每个可能的动作。

接下来,我们定义代理可用的四个动作:向上、向右、向下、向左。

下面继续代码实现。

import numpy as np

# Define the environment
num_rows = 11
num_cols = 11
num_actions = 4

# Create the Q- table
Q = np.zeros((num_rows, num_cols, num_actions))
现在我们已经定义了环境和 Q 表,我们可以继续实施 Q 学习算法。 Q学习算法包括以下步骤:

  1. 用零初始化 Q 表。
  2. 设置超参数:学习率 (alpha)、折扣因子 (gamma)、探索率 (epsilon) 和剧集数 (num_episodes)。
  3. 对于每一集:
    • 设置初始状态 (current_state)。
    • 重复直到当前状态达到终止状态:
      • 根据 epsilon-greedy 策略选择一个动作(current_action)。
      • 执行选定的动作并观察下一个状态(next_state)和奖励(reward)。
      • 使用 Q 学习公式更新当前状态-动作对的 Q 值。
      • 将当前状态(current_state)更新为下一个状态(next_state)。

下面是为我们的仓库机器人场景实现 Q 学习算法的代码:

# Set the hyperparameters
alpha = 0.1     # Learning rate
gamma = 0.9     # Discount factor
epsilon = 0.1   # Exploration rate
num_episodes = 1000

# Q-learning algorithm
for episode in range(num_episodes):
    # Set the initial state
    current_state = ( 0 , 0 )
    
    # Repeat until the current state reaches a terminal state
    while current_state != ( 0 , 5 ):
        # Select an action based on the epsilon-greedy policy
        if np.random.uniform() < epsilon:
            current_action = np.random.randint(num_actions)
         else :
            current_action = np.argmax(Q[current_state[ 0 ], current_state[ 1 ], :])
        
        # Perform the selected action and observe the next state and the reward
        if current_action == 0 :  # Up
            next_state = (current_state[ 0 ] - 1 , current_state[ 1 ])
        elif current_action == 1 :  # Right
            next_state = (current_state[ 0 ], current_state[ 1 ] + 1 )
        elif current_action == 2 :  # Down
            next_state = (current_state[ 0 ] + 1 , current_state[ 1 ])
         else :  # Left
            next_state = (current_state[ 0 ], current_state[ 1 ] - 1 )
        
        reward = - 1   # Default reward for non-terminal states
        
        # Update the Q- value of the current state- action pair
        Q[current_state[ 0 ], current_state[ 1 ], current_action] = ( 1 - alpha) * Q[current_state[ 0 ], current_state[ 1 ], current_action] + alpha * (reward + gamma * np. max (Q[next_state[ 0 ], next_state[ 1 ], :]))
        
        # Update the current state to the next state
        current_state = next_state
运行 Q 学习算法后,Q 表将包含每个状态-动作对的学习 Q 值,表示在给定状态下采取特定动作的预期累积奖励。

为了测试学习到的策略,我们可以使用 Q 表根据每个状态的最高 Q 值选择动作:

 # Use the learned Q-table to select actions
current_state = ( 0 , 0 )
path = [current_state]

while current_state != ( 0 , 5 ):
    current_action = np.argmax(Q[current_state[ 0 ], current_state[ 1 ], :])
    
     if current_action == 0 :   # Up
        next_state = (current_state[ 0 ] - 1 , current_state[ 1 ])
    elif current_action == 1 :   # Right
        next_state = (current_state[ 0 ], current_state[ 1 ] + 1 )
    elif current_action == 2 :   # Down
        next_state = (current_state[ 0 ] + 1 , current_state[ 1 ])
     else :   # Left
        next_state = (current_state[ 0 ], current_state[ 1 ] - 1 )
    
    current_state = next_state
    path.append(current_state)

print( "Optimal path:" )
for state in path:
    print(state)
此代码将根据学习到的 Q 值打印从起始状态 (0, 0) 到目标状态 (0, 5) 的最佳路径。
 

人工神经网络和深度 Q 学习的基础


人工神经网络和深度 Q 学习的基础

我是 Soper 博士,今天我很高兴与大家讨论人工神经网络和深度 Q 学习的基础。

在我们深入研究这些主题的复杂性之前,如果您不熟悉 Q-learning,我建议您观看本系列中名为“Q-Learning 的基础”的上一个视频。

让我们首先简要总结一下您将在本课中学到的内容。

看完本视频,您将全面了解:

  1. 什么是人工神经元。
  2. 激活函数的概念。
  3. 神经网络如何运作。
  4. 神经网络的学习过程。
  5. 深度 Q 学习的基础知识及其运作方式。

一旦我们掌握了这些概念,我们将完全有能力构建依赖于人工神经网络和深度 Q 学习的 AI 模型。

事不宜迟,让我们开始吧!

要了解人工神经网络及其内部工作原理,我们必须首先了解人工神经元和激活函数。

那么,人工神经元到底是什么?

人工神经元是构建所有人工神经网络的基本构件。它们最初由 Warren McCulloch 和 Walter Pitts 于 1943 年提出,作为生物神经元的数学模型,构成了包括人脑在内的动物大脑的基础。

受这些生物神经元的启发,人工神经元模型应运而生。

如图所示,人工神经元的目的是将一个或多个输入值转换为输出值。每个输入值乘以权重,调整输入的强度。例如,如果输入值为 0.8,权重为 0.5,则乘积结果为 0.4。在这种情况下,权重降低了输入的强度。相反,如果权重大于 1,则输入的强度会被放大。

一旦计算出加权输入值,它们就会经过激活函数,从而产生人工神经元的输出值。值得注意的是,可以在训练期间调整权重以最大程度地减少错误——我们将很快重新讨论这个想法。

现在,让我们深入研究激活函数。

激活函数是人工神经元用来将其加权输入值转换为输出值的数学函数。如等式所示,激活函数采用单个输入值,通过将每个输入值乘以其相关权重获得,然后将所有这些结果相加。然后将求和值通过激活函数以获得人工神经元的输出值。

重要的是要注意,人工神经元中可以使用各种激活函数,每个激活函数在将输入值转换为输出值时表现不同。

让我们探索四种常见的激活函数:

  1. 阈值激活函数:此函数返回 0 或 1 作为输出。如果输入值大于等于0,则返回1;否则,它返回 0。因此,使用阈值激活函数的人工神经元的输出值将始终为 0 或 1。

  2. S 形激活函数:S 形激活函数的输出范围在 0 和 1 之间。正输入值导致输出值随着输入值的增加而接近 1.0,而负输入值随着输入值的减少而产生接近 0.0 的输出值。因此,sigmoid 激活函数总是产生 0 和 1 之间的输出。

  3. 双曲正切激活函数:双曲正切函数与 sigmoid 激活函数非常相似,只是它的输出值始终落在 -1.0 和 +1.0 之间。随着输入值的增加,正输入值生成接近 +1.0 的输出值,随着输入值减小,负输入值生成接近 -1.0 的输出值。

  4. Rectified Linear Unit (ReLU) 激活函数:ReLU 激活函数如果输入值为正则返回输入值本身,如果输入值为负则返回 0。换句话说,ReLU 将所有负值设置为 0,并保持正值不变。

这些只是人工神经网络中使用的激活函数的几个例子。激活函数的选择取决于具体问题和神经网络的期望行为。现在我们已经介绍了人工神经元和激活函数,让我们继续了解神经网络的运作方式。

神经网络由多层相互连接的人工神经元组成,形成复杂的网络结构。神经网络中的三个主要层是输入层、隐藏层和输出层。输入层负责接收输入数据,例如图像、文本或数值,并将其传递给后续层进行处理。输入层中的神经元数量对应于数据中输入特征或维度的数量。顾名思义,隐藏层是输入层和输出层之间的中间层。这些层执行神经网络中的大部分计算。隐藏层中的每个神经元接收来自前一层的输入并使用激活函数计算输出。

输出层产生神经网络的最终输出。输出层中神经元的数量取决于问题的性质。例如,在二元分类问题中,输出层中通常会有一个神经元来表示属于某一类的概率。为了能够学习并提高神经网络的性能,在训练阶段调整神经元之间连接的权重。这种调整是使用一种称为反向传播的过程,结合一种优化算法(如随机梯度下降)来完成的。在训练期间,神经网络会收到一组输入数据及其相应的目标输出。网络为每个输入计算其输出,并使用损失函数测量计算输出和目标输出之间的差异。

训练的目标是通过调整连接的权重来最小化这种损失。反向传播算法计算损失函数相对于权重的梯度,允许权重在减少损失的方向上更新。这个迭代过程一直持续到神经网络学会为给定的输入产生准确的输出。现在我们已经对人工神经网络有了深入的了解,让我们来探索深度 Q 学习的基础知识。

深度 Q 学习是一种强化学习技术,它利用深度神经网络作为函数逼近器来学习马尔可夫决策过程 (MDP) 或强化学习环境中的最佳动作。在深度 Q 学习的背景下,神经网络(通常称为 Q 网络)将环境状态作为输入并为每个可能的动作生成 Q 值。 Q 值表示从给定状态采取特定动作时预期的未来奖励。在训练期间,使用 Q 学习算法更新 Q 网络,该算法结合了强化学习和神经网络的元素。 Q-learning 算法结合探索和开发来逐步改进 Q-network 对最优 Q 值的估计。

深度Q学习算法的基本步骤如下:

  1. 使用随机权重初始化 Q 网络。
  2. 观察环境的当前状态。
  3. 使用探索-利用策略(例如 epsilon-greedy)选择一个动作,在探索新动作和利用当前知识之间取得平衡。
  4. 执行选定的动作并观察奖励和新状态。
  5. 使用 Q 学习更新规则更新 Q 网络的权重,该规则根据观察到的奖励和新状态的最大 Q 值调整所选动作的 Q 值。
  6. 重复步骤 2-5,直到学习过程收敛或达到预定义的迭代次数。

通过使用 Q 学习算法迭代更新 Q 网络,网络逐渐学会为每个状态-动作对估计最佳 Q 值。经过训练后,Q 网络可用于为给定状态选择具有最高 Q 值的动作,使代理能够在强化学习环境中做出明智的决策。深度 Q 学习已成功应用于各种领域,包括游戏、机器人和自动驾驶车辆控制等。它在从高维感官输入中学习复杂任务方面表现出色。然而,重要的是要注意深度 Q 学习有一定的局限性,例如高估 Q 值的可能性和处理连续动作空间的困难。研究人员继续探索先进的技术和算法来应对这些挑战并提高深度强化学习的能力。

深度 Q 学习是一种强大的技术,它将强化学习与深度神经网络相结合,以在给定环境中学习最佳动作。通过利用深度神经网络逼近复杂函数的能力,深度 Q 学习在人工智能的各个领域都取得了显着进步。

 

卷积神经网络和深度卷积 Q 学习



卷积神经网络和深度卷积 Q 学习

今天是个好日子!我是 Soper 博士,今天我将讨论卷积神经网络 (CNN) 和深度卷积 Q 学习。如果您不熟悉人工神经网络或 Q-learning,我建议您先观看本系列中名为“人工神经网络和深度 Q-learning 的基础”的早期视频,然后再继续本视频。

在我们深入探讨卷积神经网络和深度卷积 Q 学习的主题之前,让我们简要回顾一下您可以在本课中学到什么。到本视频结束时,您将对卷积神经网络是什么以及它们的工作原理有深入的了解。我们将讨论重要的概念,例如特征映射、卷积、最大池化、展平以及连接到全连接层以生成预测。此外,我们将探讨深度卷积 Q 学习的运作方式。

一旦我们了解了这些基本概念,我们将能够构建能够执行卓越任务的卷积神经网络。这些任务包括图像和视频中的对象识别,甚至以超越人类能力的水平玩视频游戏。

那么,让我们开始吧。首先,让我们对卷积神经网络是什么以及它们为什么有用有一个直观的理解。简单来说,卷积神经网络(CNN)是一种为具有空间结构的数据而设计的人工神经网络。具有空间结构的数据包括图像、视频,甚至文本(尽管 CNN 主要用于计算机视觉任务)。出于本视频的目的,我们将重点关注基于图像的输入。

具有空间结构的数据(例如图像)包含以特定方式排列的像素。每个像素的位置都有意义,正是这种排列使我们能够识别图像中的对象。例如,如果我们要随机重新排列图像中的像素,它将变成无意义的噪声集合,而不是可识别的对象。这种空间排列就是我们所说的“具有空间结构的数据”。

卷积神经网络被有意设计为捕获输入值之间的这些空间关系,例如图像中像素的位置或句子中单词的位置。通过考虑这些空间关系,CNN 可以有效地处理和分析具有空间结构的数据。

现在,让我们讨论一下 CNN 如何在更高层次上工作。从广义上讲,CNN 为每个输入案例生成一组特征图。换句话说,它为卷积层创建数据。接下来,应用一种称为池化的技术来简化每个特征图。然后,合并的特征图被展平,并将生成的向量连接到全连接层。这种连接允许信息通过网络传播,从而产生预测。

为了更深入地了解细节,让我们从第一步开始:对输入图像应用滤镜。过滤器,也称为特征检测器或内核,旨在检测图像中的特定特征,例如直线、曲线或形状。通过将这些过滤器应用于输入图像,我们生成特征图。特征图的集合形成了卷积层。

为了说明这个过程,让我们考虑一个由矩阵表示的像素组成的简单黑白图像。然后我们可以对图像应用过滤器,例如设计用于检测垂直线的 3x3 过滤器。通过在图像上滑动过滤器,我们可以创建一个特征图来指示过滤器与图像不同部分之间的重叠程度。

我们可以对图像应用多个过滤器来检测各种特征。每个过滤器都会生成自己的特征图,使我们能够检测直线、曲线、形状等。这些特征图共同构成了卷积层。

恭喜!您现在了解了卷积神经网络中卷积的过程。接下来,让我们讨论一下最大池化。

最大池化是 CNN 中使用的一种技术,用于对从卷积层获得的特征图进行下采样。其目的是减少特征图的空间维度,同时保留最重要的信息。

最大池化背后的思想是将特征图划分为不重叠的区域,通常称为池化窗口或池化区域。对于每个区域,只保留该区域内的最大值,而丢弃其他值。然后将这个最大值包含在合并的特征图中。

通过选择最大值,最大池有助于保留输入数据的最显着特征。它还提供了一定程度的平移不变性,这意味着即使特征的位置发生轻微变化,与其相关的最大值仍可能被捕获。

为了说明这个过程,让我们考虑应用于特征图的 2x2 最大池化操作。我们将特征图划分为不重叠的 2x2 区域,并从每个区域中取最大值以形成池化特征图。这会将特征图的空间维度降低 2 倍。

可以在 CNN 中多次执行最大池化,从而进一步减少空间维度。这种下采样有助于降低网络的计算复杂性,使其更加高效。

最大池化操作完成后,下一步就是展平合并后的特征图。扁平化涉及将多维特征图转换为一维向量。这种转换使数据能够连接到全连接层,这是传统神经网络中的标准层。

展平向量用作全连接层的输入,网络在其中学习提取高级表示并根据这些表示进行预测。全连接层负责结合全局上下文并根据卷积层提取的特征做出复杂的决策。

总结 CNN 中的信息流:

  1. 卷积:对输入图像应用过滤器以生成特征图。
  2. 最大池化:对特征图进行下采样,保留池化区域内的最大值。
  3. Flattening:将池化的特征图转换为一维向量。
  4. 全连接层:将展平的向量连接到全连接层,以进行高级特征提取和预测生成。

这种特征提取、下采样和决策制定的过程使 CNN 能够有效地捕获输入数据中的空间关系并做出准确的预测。

现在我们对卷积神经网络有了很好的理解,让我们深入研究深度卷积 Q 学习。

深度卷积 Q-learning 将 CNN 的强大功能与强化学习技术(特别是 Q-learning)相结合,以解决复杂的任务。 Q-learning 是一种强化学习算法,它使代理能够通过与环境交互并获得奖励来学习环境中的最佳动作。

在深度卷积 Q 学习的背景下,代理通常是人工代理,例如计算机程序,环境是基于视觉的任务,例如玩视频游戏。智能体观察游戏的当前状态(表示为图像)并根据与每个动作关联的 Q 值采取动作。 Q 值表示在给定状态下采取特定行动的预期未来回报。

为了逼近 Q 值,使用了深度卷积神经网络。 CNN 将当前状态(图像)作为输入,并为每个可能的动作输出一个 Q 值。然后根据策略使用 Q 值来选择具有最高预期未来奖励的动作。

智能体通过采取行动、接收奖励以及根据观察到的奖励和预测的 Q 值更新 Q 值来与环境交互。这个与环境交互和更新 Q 值的过程被迭代地重复以提高代理的决策能力。

深度卷积神经网络和 Q-learning 的结合允许代理学习复杂的视觉模式并根据它们做出决策。这种方法在各个领域都取得了成功,包括玩视频游戏、自动驾驶和机器人技术。