高能效类脑智能:算法与体系架构
上QQ阅读APP看书,第一时间看更新

2.2.4 案例研究:基于动作的启发式动态规划

本节将提供一个具体的神经网络学习示例,以帮助理解如何在实际应用中使用和训练ANN。本节中的材料部分基于我们先前关于构建定制ADP加速器的工作之一[27]。ADP是一种流行且功能强大的算法,已在许多应用中使用[12,28-30]。从算法的目标是通过强化最大化未来的某些奖励的意义上来说,它可以被视为强化学习算法的一种。许多现实生活中问题的最佳控制策略或最佳决策可以通过求解最佳等式——贝尔曼方程来获得,如式(2.11)所示。如前所述,直接通过动态规划求解贝尔曼方程可能会非常困难,尤其是在问题规模较大时。因此,发明了ADP以通过强化来自适应地解决贝尔曼方程的解。在文献中,ADP算法有时也称为自适应动态规划、自适应评论家设计和神经动态规划。

ADP算法有两种:基于模型的ADP和无模型的ADP,具体取决于系统模型的使用方式。基于模型的ADP算法需要系统的动力学特性以便进行学习,如式(2.9)所示,模型信息用于求解贝尔曼方程的过程。另一方面,在无模型的ADP算法中,系统的模型不是必需的。无模型ADP算法在与系统交互的过程中学习与系统模型关联的信息。

在系统模型简单且可用的情况下,基于模型的ADP算法由于获得了模型信息,可以直接加速学习,从而变得更加方便。不幸的是许多复杂系统的模型难以建立,并且可能随时间变化,这使得基于模型的方法不那么有吸引力。从这个意义上讲,无模型的ADP算法更加通用,功能更强大。本案例研究中提出的基于动作的启发式动态规划(ADHDP)是一种无模型的ADP算法,它是ADP算法中最流行且功能最强大的形式之一[11,31-35]。下面通过对该算法的分析来详细说明神经网络的用法和训练。

2.2.4.1 演员-评论家网络

ADHDP算法利用两个函数逼近器来学习目标函数。图2.12说明了ADHDP算法的基本配置。agent由两个网络组成:演员网络和评论家网络。演员网络的功能是选择它认为可以最大化未来所有奖励的最佳策略,而评论家网络的工作是估计要获得的奖励J[x(t)],如式(2.10)及其输出所示。显然,J[x(t)]隐含的是agent当前策略的函数。在此之前,演员输出的动作直接回馈给评论家,这就是为什么将该算法称为“动作相关”的原因。agent通过将动作a(m维动作向量)输出到环境来与环境交互,然后环境会在下一个时间步骤中根据系统动力学和agent采取的动作以n维状态向量x进行响应,同时奖励(如果有)也将反馈给agent。即使可以将满足函数逼近器要求的任何神经网络都用于演员和评论家,但此处仍使用了一个隐藏层的神经网络,这也是许多ADP文献中的流行选择[11,31-35]

图2.12 ADHDP算法中使用的演员评论家配置的说明[27]。该算法采用了评论家网络和演员网络来逼近需要学习的函数。演员网络基于当前状态x输出动作a。评论家网络在当前状态下评估动作a并估计待获得奖励。评论家被更新以保持时间上的一致性,而演员被更新以产生可以使待获得奖励最大化的动作。经IEEE许可转载

2.2.4.2 在线学习算法

ADHDP算法通过调整评论家和演员网络中的突触权重(即wa1、wa2、wc1和wc2)来最小化或最大化某些成本或效用函数,其学习过程本质上是一种优化过程。如2.1.2节所述,在反向传播的帮助下,随机梯度下降(SGD)学习是进行优化过程的最常用方法。在前向传递中,演员和评论家网络按如下方式计算动作a和估计待获得奖励

在式(2.13)~式(2.17)中,ha和hc分别是来自演员网络和评论家网络中隐藏单元的Nha维和Nhc维输出向量,σ(·)是激活函数。如2.1.1节所述,常用的选择是双曲正切函数、sigmoid函数和ReLU函数。

在反向传播期间,评论家和演员网络需要更新其权重以便将来的奖励可以最大化,这是通过最小化两个损失函数来完成的。评论家的目的是学习奖励J[x(t)],这可以通过最小化TD误差的幅度来实现:

显然,式(2.18)是式(2.11)中贝尔曼方程的必要条件,agent通过保持时间上的一致性来学习正确的奖励。演员网络的目的是找到一种可以使估计的奖励最大化的策略。具体来说,如果存在目标奖励Jexp,可以使用作为代价函数,其绝对值需要最小化。在许多控制问题中,目标是在预定义的范围内调节设备状态。当设备的状态没有得到很好的调节时,agent会得到负面奖励即惩罚。在这种情况下,Jexp的期望选择为零,这意味着期望将设备很好地控制在预定范围内。因此出于说明目的,我们在本节中使用作为损失函数。但是对于演员网络,使用其他形式的损失函数来实现该算法很简单。

为了使代价函数[δ(t)]2/2最小,可以根据以下方式更新评论家网络的突触权重:

其中是隐藏网络层中误差,ac是评论家网络的学习率。

为了最小化损失函数,演员网络的突触权重能够根据以下公式更新:

其中:

在式(2.23)~式(2.25)中,分别是中的误差。

完整的学习过程如图2.13所示。第一个while循环对应于每次学习尝试。尝试可能由于任务失败、任务的成功或已达到时间限制而终止,终止是通过提出终止请求来进行的。每个尝试包含许多时间步长,在每个时间步长,两个网络都以替代方式更新突触权重。第二、三个while循环分别用于评论家网络更新和演员网络更新。

2.2.4.3 虚拟更新技术

图2.13所描述的ADHDP算法需要多个更新周期来最小化代价函数。当代价函数低于预设值Ec和Ea时,或者当达到允许的最大周期数时,循环更新将停止。对于文献中的ADHDP算法,Ic和Ia通常在10~100之间。换句话说,对同一输入向量进行多次迭代,试图在每一次迭代中最小化代价函数。因此,人们可能会想,是否可以对输入向量进行预处理,以便能够更有效地进行后续处理?

在不失去一般性的情况下,以评论家网络的更新为例,该过程也适用于演员网络。为了方便讨论,引入ic,将式(2.20)和式(2.16)重新写为式(2.26)和式(2.27)。

值得注意,评论家网络的输入pc与ic无关,因为当评论家网络更新其权重时pc是不变的。由于pc独立于ic,那么原始算法可以进行简化。把式(2.26)代入式(2.27),可以得到

图2.13 ADHDP算法的伪代码[27]。经IEEE许可转载

其中

可推导出式(2.28)~式(2.32)。在上面的等式中,εiic是隐藏层神经元输入的反向传播误差,是隐藏层神经元的输入,Λc是一个需要在每一次循环开始时计算的常数。式(2.28)~式(2.32)的意义在于,我们可以方便地从之前迭代计算出来的数据中获得hc,而不需要从零开始迭代计算。更方便的是,如果我们从第0次迭代开始,那么我们只需要根据初始权重和输入向量计算一次

然后,对于第i次迭代,式(2.34)和式(2.35)可以用来计算

因此,我们可以在不更新权重的情况下计算更新后的网络输出,我们称这种技术为虚拟更新技术,它的概念如图2.14所示。而传统的训练方法是通过两次前向迭代来产生估值,用这一估值来计算TD误差,然后这一误差通过两次反向迭代来反向传递给每一个突触。这些前向后向操作一直重复,直到TD误差足够小或者达到最大迭代次数。

图2.14 虚拟更新算法的概念说明。第一层突触的反向迭代和前向迭代结合成一个虚拟更新操作

而虚拟更新技术中的迭代是将第二次反向迭代和第一次前向迭代合并为一次迭代(虚拟更新),因为考虑到这两次迭代是对同一组输入的处理。虚拟更新算法不会使精度降低,因为它不用进行近似计算。删除无效操作和重新调整计算顺序可以让迭代更加高效,使计算速度得到提高。当使用虚拟更新技术时,对应于评论家更新阶段的while循环伪代码如图2.15所示。值得一提的是,即使在更新评论家网络的过程中,突触的权重并没有改变,但是它们也必须在退出while循环之前更新,除非迭代次数达到极限或者代价函数满足了要求。

图2.15 虚拟更新算法[27]的伪代码。只显示用于更新评论家的while循环。经IEEE许可转载

为了更好地对传统更新算法与虚拟更新算法进行对比,在表2.1中给出了这两种算法的复杂性。在表中,MAC、MUL和ADD分别表示乘法累加、乘法和加法运算。由于原算法需要更新权重并计算更新的神经元输入,因此每次迭代的计算复杂度大约为ONiNh。但是,虚拟更新算法将平方复杂度降为了线性复杂度ONh,这大大提高了算法的吞吐量。乍一看,如此大幅度减少运算量似乎是违背常理的。

表2.1 传统更新和虚拟更新的计算复杂度的比较

来源:数据摘自文献[27]。经IEEE许可转载

图2.16显示了一个简化的图表,以提供算法背后的一些直观信息。在传统更新中,隐藏层的误差与输入向量相乘来获得第一层突触的权重更新。然后将更新后的突触与输入向量相乘,得到更新后的隐藏层输入。为简洁起见,图中未显示出用新权重替换旧权重的过程。而在虚拟更新算法中,交换了矩阵乘法的顺序。由于输入向量在多次学习迭代中保持不变,因此输入向量与自身的内积在式(2.31)中为Λc,只需要计算一次。同样,为了清楚起见,图中未显示出和旧权重相关的操作,因为它们在此分析中不重要。从这一过程可看出,算术运算数量的节省主要来自矩阵乘法的循环展开和重新排序。

尽管虚拟更新技术仅适用于输入层和隐藏层之间的突触,但由于神经网络中的大多数权重通常集中在这两层之间,因此节省了计算工作量。除了加快训练速度外,虚拟更新算法还可以显著降低硬件的能耗。能耗的节省主要有两个原因:第一个原因是虚拟更新算法直到最后一次迭代才更新突触权重,中间过程被保存到了突触存储器中;第二个原因是它涉及较少的算术运算。第3章将会说明实际节省的能耗百分比。

图2.16 虚拟更新算法可以如何帮助节省算术运算的直观说明。虚拟更新算法依靠循环展开和矩阵乘法的重排来将计算复杂度从O(N2)降低到O(N)。为了简洁起见,图中省略了权重更新的内容