system: [SYSTEM]

user: 2. 神经网络与深度Q-learning算法 2.1. 神经网络 神经网络是根据生物学的基本原理搭建的，其会对人类大脑进行模仿，从而对复杂的事件进行处理的数学运算模型。在该模型中，其包括了多个神经节点，彼此之间相互连接。对于神经元而言，其为特定输出函数，也被称为是激活函数。不同节点间的连接意味着其不同的权重，神经网络就是如此通过一个个神经元相互传递信息最终达到模仿人类大脑记忆功能。神经网络的模型基础为神经元的数学模型。其中，在神经网络中，比较典型的模型包括Hopfield网络、BP (back propagation)网络。根据网络层次的不同，可以对其进行分类，共有单层感知器和多层感知器两类。其中，最简单的神经网络模型为单层感知器 [ 1 ]，如下图2左图所示，其组成包括输入层和输出层，二者直接相连。对于多层感知器而言，其中在输出层和输入层中还加入了很多隐含层。其中，对于单隐层的神经网络而言，其本质上为多层感知器。对于整个网络而言，其组成中包含很多个神经元，每个神经元都是感知器，其中下图2右图表示的为盛京网络模型结构，其组成包括输出层、隐含层以及输入层。同时，输入单元、隐含单元以及输出单元各有3个、3个、2个。偏置节点将使用“+1”进行表示，也就是截距。 图2. (a) 单层感知器；(b) 多层感知器 2.1.1. 激活函数 激活函数可以在一定程度上展现其神经网络性能。因此，激活函数会使神经网络在收敛方面表现的不同，具体不同的问题需要采取不同的激活函数。主要采取两种激活函数。(选用relu激活函数，原因在于relu激活函数在梯度下降时可以在一定情况下抑制梯度消失问题) 1) 单极S型(Sigmoid)函数，表达式： f ( x ) = sigmoid ( x ) = 1 1 + e − x 对于Sigmoid函数而言，其使用的阈值函数具有单调性、连续性。同时，在神经网络中，还存在的一种激活函数。从图3可以看出Sigmoid函数的定义域是整个实数，值域介于0到1之间，因为在此之间的输出正好符合输入量可能发生的概率，适用于拟合。最重要在于它的导函数是由因变量组成，在后续的函数求导中起到了关键性作用。导函数的表达式为： f ′ ( x ) = f ( x ) ⋅ ( 1 − f ( x ) ) 图3. Sigmoid函数表示 2) 双极性S型函数(Tanh)，如图3所示，其表达式为： f ( x ) = tanh ( x ) = e x − e − x e x + e − x 双极性S型函数类似于sigmoid函数曲线。S型函数的值域是[−1， 1]，这可以刻画出一些需要反向含义的神经网络，定义域是整体实数，在一定程度上反应了输入对输出特定的需求。 3) 修正线性函数 [ 2 ] (Rectified linear unit， ReLU)，如图4所示，其表达式为： ReLU ( x ) = { x if   x > 0 0 if   x ≤ 0 ReLU函数相比较Sigmoid函数与Tanh函数的优点在于克服了梯度下降问题并且加快了伸进网络的训练速度，但是面对输入为负数的情况下，ReLU函数会失去训练作用。ReLU函数输出只会是零或正数，不会出现以零为中心的函数。 图4. Relu函数表示 2.1.2. 卷积神经网络 卷积神经网络是一种对于二维图像处理的多层感知器，其采用的生物神经网络类似于共享网络结构，能够降低其复杂性，并可以将其连接权值数量降低，能够降低训练的时间。特别是多维图像是网络输入的对象，此时无需提取特征，并重构数据。其中，卷积神经网络属于多层感知器，可以识别二维形状，在对神经网络进行训练的时候，将使用梯度下降法以及BP算法。尤其是在网络结构上，其还加入了下采样、权值共享以及局部感受等 [ 3 ]，在处理缩放和平移的时候，存在高度不变性，性能稳定。 2.1.3. 卷积运算 从本质上看，卷积属于数学运算，其主要是指在设定的范围内，两个变量先相乘然后进行求和。其运算和傅里叶变换之间具有十分精密的关系。利用该特性，可以对傅里叶分析进行简化。 在处理图像的时候，最有效的方式就是卷积。因此在确定输入图像的时候，其每个像素都是相应的像素加权平均值。而卷积核的函数定义就是权值。其中，卷积核是指普通神经网络权值。但是在处理图像卷积、图像信号时，二者存在着一定的差异。对于卷积神经网络而言，对大样本特征进行学习，从而得到小样本。例如，如果小样本大小是10 × 10，则神经元得到的特征是(100 − 10 + 1) × (100 − 10 + 1)，而其对应的卷积特征有100 × 89 × 89个。 2.1.4. 局部感受野和权值共享 从本质上看，局部感受就是隐含神经元的局部连接，其可以对人的眼睛进行模仿。其中，当眼球保持不动的时候，其如果在观看东西，也无法将全目光集中自爱全部物品上，只能关注一个局部。在这种情况下，神经元并不会感知到全部的原始图像信息，出现这种情况下的主要原因是在网络结构中，其设计了pooling层、卷积层，二者之间为局部连接关系。对于神经元而言，其能够充分感受到野的值，此时会提高其原始图像的范围，这也表明其语义层的特征值更高。反之，则说明其更加重视细节和局部。通过对野的值进行感受，从而确定其所处的抽象层次。而在Conv1中，对于其每个单元而言，其原始图像大小为3 × 3。而对于Conv2而言，其组成成分为2 × 2的Conv1。通过这种方式，可以得到原始图像。其中，对于Conv1和Conv2的感受野分别是3、5。对于输入图像而言，其感受野定义是1，具体如图5。 从本质上看，权值共享属于节省训练连接权值。其将对感受野的权值进行共享，其类似于神经系统。尤其是在功能和结构等方面，具有一定的可替代性。而在卷积神经网络中，其各个神经元的权值都一样。 在多层感知器中，对于隐含层神经元而言，在其图像中，像素之间为全连接的方式。尤其是对于卷积神经网络中，局部范围中像素点进行连接，通过该方式能够降低训练权值参数，并且优化训练效果，提升速率，从整体上看，提高系统运行的效率。 图5. 为卷积过程 2.1.5. 卷积神经网络的结构 在卷积神经网络中，其为多层感知器，具有一定的特殊性，可以对二维图形进行识别。在该网络结构中，其每层的组成都有多个二维平面，其中又有大量的神经图。具体结构如图6。 图6. 卷积神经网络的一般结构 对于一般的卷积神经网络而言，其含有的隐含层共有两种，分别是下采样层以及卷积层。其中，卷积层数据获得的方式是卷积运算，而对于下采样层而言，其会利用均匀卷积核的方式，对局部数据进行平均，然后删除重叠的部分展开二次提取。对于输入层而言，当图像输入以后，利用卷积运算的方式，可以得到三个特征映射图。然后对其展开分组和求和，并加入权值和偏置。最后，可以利用Sigmoid函数最终得到采样2层对应的映射图。以此进行操作，可以分别得到卷积2层以及下采样4层对应的特征映射图。之间，将这些图像进行光栅化处理，最后输出相应的值。 同时，在同一个映射面中，其可以将神经元的权值进行共享，同时在网络环境下，其自由参数也出现了大幅度的降低，此时网络复杂度也随之降低。对于卷积神经网络而言，其会以下采样层位基础，卷积层会进行局部平均，然后开展二次提取，但是该方式比较特殊，利用该特点，网络不仅可以识别样本，同时还能够容忍畸变。 2.1.6. 预处理 在Flappy Bird游戏中，其最终出现的图片像素为284 × 512。同时，为了降低存储量，将对图像进行压缩，将其缩小到84 × 84。在这种情况下，图像色阶设定为0~255。为了提升精度，将使用纯黑色背景替代原有的图片背景，如图7。 图7. 去除游戏背景 按照预定的顺序，对游戏图像进行处理，其具体的步骤包括缩放、灰度化、亮度处理等。对于当前帧而言，其在进出下个状态前，需要对多个图像进行处理，通过叠加组合的方式获得多维图像数据。其中，当两个不同帧重叠以后，此时其灰度就会随之下降。 其中，蓝色部分、绿色部分、红色部分分别表示的全连接层、最大池化层以及卷积层。如图8。 图8. 图像处理流程图 2.2. 深度Q-Learning算法 2.2.1. 深度Q-Learning结构 如下图9所示，在目前的模型结构中，其隐藏层的数量为3个。卷积层和完全连接层各有2个，其最终输出的信息为两个动作得分，其主要是通过损失函数计算而得到的。在对损失函数进行优化以后，可以设置Q学习参数。同时还以空间批量作为规范，针对每个卷积层，将加入最大池化层以及ReLu。同时，在首个仿射层中，将利用ReLu激活函数，并对标准层进行批量出来。对于卷积层而言，其中设有滤波器。在每个时刻中，其输出操作有两种可能性，最终可以得到相应的得分值，从而确定最佳的动作。 图9. 卷积神经网络结构图 以模型处理精度作为基础，可以进一步提升模型复杂度。在本次设计中，将改进卷积层的数量，设立为3个。而全连接层以及池化层分别是2个和3个。在进行叠加时，需要对连续4帧预处理，并输入相应的图像值。在表1中，确定了各个步骤的数据和参数。 Table 1 Changes in parameters of each laye Layer Output Activation Num filters Stride Filter size Input conv1 20 × 20 × 32 ReLU 32 4 8 × 8 84 × 84 × 4 pooling1 20 × 20 × 32 conv2 8 × 8 × 64 ReLU 64 1 3 × 3 10 × 10 × 32 pooling2 8 × 8 × 64 conv3 2 × 2 × 64 ReLU 64 1 3 × 3 4 × 4 × 64 pooling3 2 × 2 × 64 Fc1 1 × 1 × 4 Fc2 1 × 64 表1. 各层参数变化 2.2.2. 损失函数 强化学习的目标是使总回报最大化。而在进行Q学习的时候，其属于非策略。因此在进行迭代更新的时候，将利用贝尔曼方程，其计算公式为： Q i + 1 ( s ， a ) = r + γ max a ′ Q i ( s ′ ， a ′ ) 在上述公式中，s'为下一帧状态，a'为下一帧动作，γ是折扣因子，r是奖励。(s， a)矩阵在第i次迭代的Q值使用 Q i ( s ， a ) 表示。利用更新迭代的方式能够达到收敛的效果，从而得到最优的Q-learning。同时，为了避免出现学习僵化的情况，可以使用函数的方式来表达动作值函数，可以对不可预见的状态进行概括。而对于学习算法而言，其输入点的构成是s t ，a t ，r t ， s t + 1 。利用函数，通过输入点可以构建相应的模型对动作进行预测。方程如下： L = ∑ s ， a ， r ， s ′ ( Q ( s ， a ; θ ) − ( r + γ max a ′ Q ( s ′ ， a ′ ; θ − ) ) ) 2 Δ θ L = ∑ s ， a ， r ， s ′ − 2 ( Q ( s ， a ; θ ) − ( r + γ max a ′ Q ( s ′ ， a ′ ; θ − ) ) ) Δ θ Q ( s ， a ; θ ) 其中，θ是训练后的DQN参数，θ − 是Q值函数的非更新参数。通过该方式，可以对上述损失函数展开计算，并利用反向传播算法、随机梯度下降法，对神经网络权重进行更新。对于算法1而言，其设计的初衷是进行训练，以ε贪婪算法作为基础，并进行了强化。而在进行训练的时候，由于存在ε的概率，此时就可以得到最优的工作，其对应的函数关系为 a o p t = argmax a ′ Q ( s ， a ′ ; θ ) 。随着更新次数的提高，ε学会随之下降，最终变为0。同时，为了提高损失函数的稳定性，可以利用方式2，最终得到DQN模型。 2.2.3. 经验回放 在Q-learning中，而通过连续方式进行记录，其和经验数据之间具有密切的关系。在对DQN参数进行处理时，其使用的顺序相同，同时也会干扰整个训练的过程。针对这种情况，需要设置经验回放存储器，可以保存每帧游戏的有关数据 ( s t ， a t ， r t ， s t + 1 ) ，从而得到最大存储容量。当经验数据存量达到一定量以后，可以在DQN参数进行处理时将使用随机抽取小批经验。在对DQN参数进行处理，需要对其进行定期更新。考虑到在使用小批量选择结果时，其具有随机性，因此在对DQN参数进行更新时，需要确保其去相关。