视频链接: https://youtu.be/vXtfdGphr3c?si=OSgYu_SyAS7I8-3q
大家好。在这个视频中,你将学习有关强化学习的所有内容,如何训练ChatGPT并构建世界上最好的围棋程序。
但让我们从更简单的东西开始。还记得《乒乓》吗?它是最早的电子游戏之一。左边的玩家有一个简单的策略。它只是跟着球上下移动。
让我们训练一个AI乒乓游戏代理来与它竞争。为此,我们需要定义一个策略,该策略将世界的状态作为输入,并输出一个动作,在这种情况下,我们将球的X和Y位置以及两个球拍的位置作为输入,还会包括速度。所以我们的策略将获得这些输入。为了保持图表的简洁,我不会显示速度,我们将用神经网络来表示我们的策略。我们的网络将每个值乘以一个权重并将它们相加。我们将添加一个sigmoid函数,将结果转换为0到1之间的值。如果结果大于0.5,我们将向上移动,否则向下移动。就是这样。很好。
让我们来玩几局乒乓。我们将从随机权重开始。一个随机的乒乓玩家并不怎么厉害。它只是躲在角落里。这就像如果你从未打过网球,而你被安排与塞雷娜·威廉姆斯对战,你可能也会躲起来,或者你可能会问对手怎么打。
假设你的伙伴告诉你每一步该怎么做。我们可以使用这种监督来训练我们的策略。假设我们的教练说跟着球走。球在我们的球拍上方。所以正确的答案是向上。但假设我们的网络输出是0.2,这意味着向下。我们希望将那个0.2改为1。这是另一种情况,正确的答案是向下,我们希望将输出驱动到零。一个更确定的向下答案,我们可以通过定义一个误差函数并优化权重来减少这个误差。
与其用数字,不如将这些权重画成彩色线条。正权重是蓝色的,负权重是红色的,权重越强,线条越粗。每次优化步骤后,权重会稍微改变一点。
如果我们训练数千个动作,右边的权重开始收敛。现在我们训练好了,让我们来玩几局游戏。我们的乒乓游戏代理现在相当不错,尽管它并不经常赢。我们如何训练我们的代理赢得更多?
你可以把游戏看作是一系列可能导致输或赢的动作。假设我们输了。我们希望我们的教练告诉我们。哪些动作出了问题。也许我们在最后搞砸了,然后我们可以根据这个反馈重新训练我们的策略,就像我们之前做的那样。像这样训练网络被称为监督学习,你需要一个非常好的教练。
但假设你没有教练,你只知道这一系列动作导致了失败,而这一系列动作导致了胜利。这种问题被称为强化学习。我们不知道哪些动作是负责任的,所以我们只会惩罚我们在失败中做出的所有动作,并奖励或强化我们在胜利中做出的所有动作。这将其转化为一个监督学习问题,就像我们在视频的第一部分中解决的那样。
实际上,我们可以做得更好一点,通过更多地惩罚后面的动作,因为游戏失败的错误通常发生在最后。同样地,对于奖励,在训练了3000局游戏后,我们的代理已经改进到与对手打得差不多好。你可以看到比分相当接近。在大约12000局游戏后,我们的代理发现用球拍的角落击球会使球速更快。酷。现在它赢了。
大多数时候,强化学习很酷。你通过尝试来学习。有时你会发现连教练都不知道的东西。
但这种方法也有一些挑战。我们的神经网络试图最小化一个误差函数。你可以把这个函数想象成一个地形,我们通过使用梯度下降法向下滚动来最小化它。梯度下降可能会陷入局部最小值,所以我们需要探索更广泛的策略以找到最佳策略。
所以让我们使策略具有概率性。0.7 现在意味着有 70% 的概率向上移动。所以代理实际上有 30% 的时间会向下移动。这一点随机性使我们的代理能够摆脱一些局部最小值。
总结一下,这是我们到目前为止描述的方法。我们将从随机初始化的权重开始。然后我们用监督学习进行训练,并用强化学习进行优化。
令人惊讶的是,我们可以跳过中间步骤,直接从随机初始权重运行强化学习。训练时间更长,但仍然适用于许多问题。
我们还可以做更令人惊奇的事情。到目前为止,我们假设球和球拍的位置作为策略的输入提供。假设我们只有屏幕的照片。计算机会将其视为一堆数字,不知道这个数字是球,这些是球拍。换句话说,策略不仅要学习如何行动,还要学习如何看。
编码速度信息也很有帮助。一种方法是从当前帧中减去前一帧。现在,正值代表当前帧,负值代表前一帧。我们将所有行堆叠成一个长像素向量,并将所有这些像素连接到一个神经元。现在我们将添加更多神经元,总共 10 个。我们使用修正线性激活函数。这些非常标准。它们连接到最后的 sigmoid 神经元,它将输出向上移动的概率。这可能看起来很复杂,但对于深度网络来说,它实际上非常小。这个网络中只有 11 个神经元。
与人类大脑相比,视觉皮层中有数十亿个神经元。只有 11 个神经元,你怎么能看到?让我们训练网络并找出答案。我们将从完全随机的权重开始。它花了大约 600 万局游戏来学习一个平均能击败计算机的策略。这几乎是在我的 MacBook Air 上运行了一周。
但这个网络实际上在学习什么?它真的学会了如何看吗?让我们检查第一个神经元。它对图像中的每个像素都有一个权重。记住,这些像素形成一个二维图像,每个像素都有一个对应的权重。
所以我们可以将权重可视化为一个形状像乒乓球屏幕的图像。它看起来像噪声,因为我随机初始化了权重。这里的白色具有最大的绝对值。现在我们将通过玩游戏开始训练策略。你可以看到它在 100 万和 600 万局游戏后收敛到一个特定的模式。这些条纹对应于这个神经元关注的球轨迹,它对这些球拍位置特别感兴趣。它也在观察对手的球拍,这是球位置的良好指标。这只是一个神经元。其他的神经元会寻找不同的模式。
所以我们的简单网络已经学会了如何“看”,这种强化学习的方法被称为策略梯度(policy gradient)。你可以通过限制每次更新的规模来进一步改进它,这种方法的一个变体称为PPO(Proximal Policy Optimization, 近端策略优化)。它们共同推动了许多令人兴奋的应用。我们将在接下来的两个视频中讨论其中的两个应用:AlphaGo 和 ChatGPT。敬请期待!