system: [SYSTEM]

user: 2. 约束性神经网络 传统神经网络的主体思想是，给定一个从输入X到输出Y的数学模型 Y = f ( W ， X ) ，其中X是输入矢量，Y是输出矢量，W是参数矢量，通过给定大量样本数据集 ( x i ， y i ) ，其中 i = 1 ， 2 ， ⋯ ， n ，列出联合方程式，使用优化算法解算出模型参数W，最终建立从输入X到输出Y的完整数学模型。 然而，在不同的实际问题中，输入X与输出Y之间往往关系复杂，并非简单的线性关系可以表示，且输出Y多会有值域上的范围约束(本文中称作弱约束)，或多个输出分量之间存在函数约束(本文中称作强约束)，所以不论用多少样本都是有限的，无法完整和精确地描述模型，对于一个新样本 x i ∗ ，经过神经 网络前向传播输出的 y i ∗ = f ( W ， x i ∗ ) ，不可能永远满足各项约束，这就提出一类新的问题——如何对现有 神经网络进行改进，使其不仅符合有限样本集的约束，而且满足各种实际问题的约束，进而使得一些以前不方便直接用神经网络解决的问题也能得到解决。因此本文的意义在于提出一种解决一类具有约束问题的一般性方法。 2.1. 弱约束 弱约束是指输出Y在值域上存在范围约束。例如，预测图像目标定位框的宽高，输出的值域范围是 [ 0 ， + ∞ ) ；利用人脸图像预测年龄，输出的值域范围可以设为 [ 0 ， 100 ] 等。 神经网络原始输出的值域范围是 ( − ∞ ， + ∞ ) ，为了满足弱约束，一般性解决方案是采用输出转换函数 ϕ ( y ) ，将原始输出变换到要求的值域区间。输出转换函数 ϕ ( y ) 必须满足以下两个特性： 1) 单调，这样转换才具有唯一性； 2) 输出值域与问题期待值域范围一致。 在网络进行前向传播时，使用输出转换函数对原始输出进行转换，对误差进行反向传播时根据链式求导法则求出对应的偏导值，进行权值修正。 事实上，常用的几个激励函数可以作为输出转换函数使用，对于值域为 ( − ∞ ， + ∞ ) 的原始输出，tanh函数可将其映射到 [ − 1 ， 1 ] 区间上；sigmoid函数可将其映射到 [ 0 ， 1 ] 区间上，而为避免梯度消失的问题，现在很少在中间层使用；ReLU函数可将正数保持不变，非正数全部映射成0，由于会丢失掉负数部分的信息，不宜作为输出转换函数。另外，也可根据实际问题，构造合适的输出转换函数，例如在预测图像目标定位框的宽高问题上，可在前向传播时，使用指数函数 ϕ ( y i ) = e y i 对神经网络输出值进行转换，将 y i ∈ ( − ∞ ， + ∞ ) 映射到 ϕ ( y i ) ∈ ( 0 ， + ∞ ) 上。 2.2. 强约束 强约束是指根据问题需要，对输出矢量Y的内部某些分量有函数约束，以 φ ( y ) = 0 表示。对于不同问题，约束函数 φ ( y ) 的形式各不相同。 如果约束函数关系简单，比如只存在线性关系，也可通过输出转换函数实现。在经典的图像目标分类问题中，需要输出目标属于各个类别的概率，且概率总和为1，取其中概率最大者对应的类别作为该目标的预测类别，此问题中输出Y的各个分量需满足 ∑ i = 1 n y i = 1 ， y i ∈ [ 0 ， 1 ] ，即输出约束函数 φ ( y ) = ∑ i = 1 n y i − 1 = 0 ， y i ∈ [ 0 ， 1 ] ，由于 (1) 能很好地满足该约束要求，所以使用softmax函数作为转换输出函数，在神经网络最后加一个softmax层即可解决该分类问题。 但是，在很多复杂情况下，约束函数非线性，很难找到合适的输出转换函数，由此，本文提出一种解决这类问题的一般性方案。 当输出矢量Y的分量间有单个强约束函数关系 φ ( y ) = 0 时，那么在构建神经网络时，不仅需要将最终预测的 y ˜ i 分量与真值 y ¯ i 作比较求误差，以 D i f f y 表示，则 D i f f y = y ˜ i − y ¯ i (2) 还需要考虑 y ˜ i 分量之间的约束关系，增加一个约束误差计算，即计算 φ ( y ˜ ) 并与约束值真值0相减求误差，定义约束误差函数为 E r r o r φ ，则 E r r o r φ = φ ( y ˜ ) − 0 = φ ( y ˜ ) (3) 考虑约束误差的完整网络结构如图2所示。 在利用大量样本集进行网络训练的过程中，通过误差反向传播对各权值进行修正，反向传播采用经典的梯度下降法 [ 11 ] ，计算式如下。 使用均方差定义输出损失函数 L o s s y ，则 L o s s y = 1 2 ∑ i = 1 n ( y ˜ i − y ¯ i ) 2 (4) L o s s y 在反向传播时，对 y ˜ i 的偏导为 图2. 带有单个输出约束的神经网络结构图 ∂ L o s s y ∂ y ˜ i = y ˜ i − y ¯ i (5) 约束误差的平方为 E r r o r φ 2 = ( φ ( y ˜ ) − 0 ) 2 = φ 2 ( y ˜ ) (6) E r r o r φ 2 在反向传播时，对 y ˜ i 的偏导为 ∂ E r r o r φ 2 ∂ y ˜ i = 2 φ ( y ˜ ) × ∂ φ ( y ˜ ) ∂ y ˜ i (7) 记总体误差为 E sum ，则 E sum = λ ⋅ E r r o r φ 2 + L o s s y (8) 其中 λ 为约束误差的常数系数。 则 E sum 在反向传播时，对 y ˜ i 的偏导为 ∂ E sum ∂ y ˜ i = λ ∂ E r r o r φ 2 ∂ y ˜ i + ∂ L o s s y ∂ y ˜ i (9) 代入公式(5)和(7)，则 E sum 对 y ˜ i 的偏导为 ∂ E sum ∂ y ˜ i = 2 λ ⋅ φ ( y ˜ ) × ∂ φ ( y ˜ ) ∂ y ˜ i + ( y ˜ i − y ¯ i ) (10) 权值修正根据导数的链式法则计算，例如，可通过下式更新权值 w ″ k i ， ∂ E sum ∂ w ″ k i = ∂ E sum ∂ y ˜ i × ∂ y ˜ i ∂ w ″ k i (11) w ″ k i + = w ″ k i − η ⋅ ∂ E sum ∂ w ″ k i (12) 其中 η 为神经网络的学习率。 其他部分与传统神经网络处理方法一致，由此对网络中所有权值进行更新迭代，得到模型最佳参数矢量W。 考虑约束误差的反向传播过程如图3所示。 如果输出分量 y i 之间具有N个输出约束 φ j ( y ) = 0 ，其中 j = 1 ， 2 ， ⋯ ， N ，同理，在网络中对应增加N个约束误差计算，每个约束误差函数为 E r r o r φ i ，则 E r r o r φ j = φ j ( y ˜ ) − 0 = φ j ( y ˜ ) (13) 构建如图4所示的带有N个输出约束的神经网络。 此时，总体误差为 E sum = ∑ j = 1 N λ j ⋅ E r r o r φ j 2 + L o s s y (14) 其中 λ j 为各个约束误差的常数系数。 图3. 带有单个输出约束的神经网络反向传播示意图 图4. 带有N个输出约束的神经网络结构图 则 E sum 在反向传播时，对 y ˜ i 的偏导为 ∂ E sum ∂ y ˜ i = ∑ j = 1 N λ j ∂ E r r o r φ j 2 ∂ y ˜ i + ∂ L o s s y ∂ y ˜ i = 2 ∑ j = 1 N λ j ⋅ φ j ( y ˜ ) × ∂ φ j ( y ˜ ) ∂ y ˜ i + ( y ˜ i − y ¯ i ) (15) 同样通过链导原则进行权值修正和迭代更新，最终构建完整模型。 以上即为输出带有一个或多个强约束关系的神经网络的一般处理方案。约束性问题模型广泛存在，例如第二节将介绍的使用约束性神经网络预测目标方向分量，进而估计目标方向。