system: [SYSTEM]

user: 3. 人工神经网络 人工神经网络(Artificial Neural Network，即ANN)，是20世纪80年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象，建立某种简单模型，按不同的连接方式组成不同的网络。 人工神经网络能自动从历史数据中提取有关经济活动中的知识，可以克服传统定量预测方法的许多局限以及面临的困难，同时也能避免许多人为因素的影响，因而在股市预测模型建造的合理性以及适用性方面都具有其独特的优点。 3.1. 算法原理 根据阎虎勤研究 [ 11 ] 表明，由于人工智能求解问题太过复杂，可以假设本文所讨论的ANN过程只有两层：输入层和输出层。这样就可以将复杂的问题简化为求解一个多元一次方程。 本文不打算采用一般的回归方程求解模式来求解，而是要采用迭代法来求解，通过一步步地迭代逼近，直到所得到的最终结果收敛于一个可接受的值。这个可接受的值，就是指方程的解，与目标输出值之间的误差小于某一个误差范围，即不超过某个值，例如0.001等。 如图1所示，就好比人类的神经元之间进行信号传递过程中：一个单一的神经元在发送一个信息给另外一个神经元时，对于接收方神经元来说，如果这些来自一个或者多个神经元的信息，经过加权合计，达到了足够的强度而超过了一个门限值(exceeds a threshold)，就会触发这个信息继续向前传递(transmission)，这个被激活(activation)的信息，将被传递给下一个神经元。 图1. 只有输入层和输出层的二层人工神经网络ANN学习过程计算机算法 假设A表示输入变量矩阵，它包含了n个子变量，每个子变量包含m个观测值，输入变量既可以被看成是一个矩阵，也可以被看成是一个行向量。如公式(1)所示： A = ( a 1     ⋯     a n ) = ( a 11 ⋯ a 1 n ⋮ ⋱ ⋮ a m 1 ⋯ a m n ) (1) 假设Y表示输出变量矩阵，它包含了1个子变量，具有m个观测值。如公式(2)所示： Y = ( y 1 ⋮ y m ) (2) 本文采用了有常数项扰动的线性方程组，实际上是一个非齐次线性方程组(多元一次方程)。如公式(3)所示： { a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n + h = y 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n + h = y 2                                           ⋮ a m 1 x 1 + a m 2 x 2 + ⋯ + a m n x n + h = y m (3) 方程组的矩阵表示形式为： A m n X n 1 + I m 1 h = Y m 1 (4) 由于二层人工神经网络方法没有直接求解方程组，于是便定义了一个激活函数f，把直接求解转化成了间接求解，即求解方程： f ( A m n X n 1 + I m 1 h ) = Y m 1 (5) 激活函数通过变换，把原来的线性方程组转换成了一个新的线性方程组。 3.2. 激活函数 边际产出，其实质就是对于生产函数求一阶偏导数： 在神经网络运算中，激活函数十分重要。激活函数是来向神经网络中引入非线性因素的，通过激活函数，神经网络就可以拟合各种曲线。 本文使用了sigmoid函数，即值域介于0和1之间的激活函数，这是一类增长函数。 f ( x ) = 1 1 + e − x = { 0           x → − ∞ 1 2             x → 0 1             x → + ∞ (6) 显然如图2所示，该函数的定义域为 x ∈ ( − ∞ ， ∞ ) ，而值域为 y ∈ ( 0 ， 1 ) 。 该函数的导函数为： f ′ ( x ) = e − x ( 1 + e − x ) 2 (7) 由于该函数的值域上限为1，所以，当作为因变量的样本值超过1时，就不能直接使用该函数作为激活函数。 图2. Sigmoid原函数及导数图形 为了排除该限制，本文将一个非负序列 { y 1 ， y 2 ， ⋯ ， y i ， ⋯ ， y n } ，设定一个上限值 K > 0 ，使得： M = max i = 1 ， 2 ， ⋯ ， n { y 1 ， y 2 ， ⋯ ， y i ， ⋯ ， y n ， K } (8) 取出因变量的样本值中最大的数，然后对原样本值重新进行处理，使得： y i = y i M ， ( i = 1 ， 2 ， ⋯ ， n ) (9) 那么，这样得到的新序列一定是符合激活函数值域要求的。而且，在取得最优解之后，如果要求得原序列的预测值并且进行图示，则必须还原序列为： y i = M y i ， ( i = 1 ， 2 ， ⋯ ， n ) (10) 经过以上处理，样本序列既符合几何函数值域要求，其预测目的也不受任何影响。 3.3. 求解过程 本文使用二层人工神经网络预测股票收盘价的算法步骤如下： 1) 正向方程求解逻辑。 假设输入样本为 A = [ x 1 ， x 2 ， ⋯ ， x n ] ，输出样本为 Y = [ y 1 ， y 2 ， ⋯ ， y n ] 。假设线性方程组的表现形式如下： U m 1 = A m n X n 1 + I m 1 h (11) 其中， X n 1 是方程的解，h是常数项。经过sigmoid激活函数 f ( u ) 作用之后，方程式可以表示为： f ( U m 1 ) = Y m 1 (12) 假设 E m 1 为误差项，满足关系式： E m 1 = Y m 1 − f ( U m 1 ) (13) 如果 E m 1 = 0 ，则 X n 1 和h就是带有激活函数的方程的解。 一言以蔽之，方程的求解问题就是寻找满足以下关系式的 X n 1 和h的最优解： min X n 1 ， h { E m 1 = Y m 1 − f ( A m n X n 1 + I m 1 h ) } (14) 2) 通过反向传播(Backward Propagation， BP)调解，求最优解。 如果误差项的值不为零，即 E m 1 ≠ 0 ，那么，通过对解 X n 1 和h增加调节量： X n 1 = X n 1 + δ n 1 (15) h = h + τ (16) 如果经过激活函数调解之后能够使误差项等于零，则满足条件： f ( A m n ( X n 1 + δ n 1 ) + I m 1 ( h + τ ) ) = f ( U m 1 + A m n δ n 1 + I m 1 τ ) = Y m 1 (17) 那么，原方程的求解问题就被转化为如下问题： min X n 1 ， h ， δ n 1 ， τ { E m 1 = Y m 1 − f ( A m n X n 1 + I m 1 h + A m n δ n 1 + I m 1 τ ) } (18) 按照泰勒(Taylor)展式，对激活函数按照一阶泰勒展式展开，则有： f ( U m 1 + A m n δ n 1 + I m 1 τ ) = f ( U m 1 ) + f ′ ( U m 1 ) [ A m n δ n 1 + I m 1 τ ] = Y m 1 (19) 那么就有： f ′ ( U m 1 ) [ A m n δ n 1 + I m 1 τ ] = Y m 1 − f ( U m 1 ) = E m 1 (20) 3) 调节变量 δ n 1 和 τ 取值的确定 由于有关系式： A m n δ n 1 + I m 1 τ = E m 1 f ′ ( U m 1 ) (21) 假如 τ = 0 ，则有： A m n δ n 1 = E m 1 f ′ ( U m 1 ) (22) A m n T A m n δ n 1 = A m n T [ E m 1 f ′ ( U m 1 ) ] (23) ( A m n T A m n ) − 1 A m n T A m n δ n 1 = ( A m n T A m n ) − 1 A m n T [ E m 1 f ′ ( U m 1 ) ] (24) δ n 1 = ( A m n T A m n ) − 1 A m n T [ E m 1 f ′ ( U m 1 ) ] (25) 假如 τ ≠ 0 ，从而，常数项的调解量就可以是： I m 1 τ = E m 1 f ′ ( U m 1 ) − A m n δ n 1 (26) I m 1 T I m 1 τ = I m 1 T { E m 1 f ′ ( U m 1 ) − A m n δ n 1 } (27) ( I m 1 T I m 1 ) − 1 I m 1 T I m 1 τ = ( I m 1 T I m 1 ) − 1 I m 1 T { E m 1 f ′ ( U m 1 ) − A m n δ n 1 } (28) 整理后得到 τ = ( I m 1 T I m 1 ) − 1 I m 1 T { E m 1 f ′ ( U m 1 ) − A m n δ n 1 } (29) 这样，只要重复上述过程，则可以逐步迭代，直到取得增加了调节量的 X n 1 和h的值，也就是具有扰动项的方程组的最优解。 3.4. 利用二层人工神经网络算法进行股票指数预测 假设股票指数样本序列为： S = { y 1 ， y 2 ， ⋯ ， y n − 1 ， y n ， y n + 1 ， ⋯ ， y n 0 ， y n 0 + 1 ， ⋯ ， y N 1 } (30) 为了进行模拟，我们采用时间序列的向量自回归(Vector Auto Regression， VAR)模型来进行预测，当 m = n 0 − n + 1 ，取 i = 0 ， 1 ， ⋯ ， m − 1 ，则通项公式可以写为： y 1 + i x 1 + y 2 + i x 2 + ⋯ + y n − 1 + i x n − 1 + h = y n + i (31) 该模型采用了一个自循环矩阵，使得输入矩阵和输出矩阵来源于同一个样本数据序列，但是在排列上有所区别。 如果将激活函数作用于矩阵方程，则有： f ( A m n X n 1 + I m 1 h ) = Y m 1 (32) 本文采用该模型进行实际编程时，如图3所示，对样本数据进行适当分割处理，以便能够检验最优解的效果。 图3. 人工神经网络预测程序样本窗口变量取舍示意图 其中样本总数为 N 1 ，被区分为模拟窗口 n 0 和预测窗口 N N = N 1 − n 0 。对于模拟窗口 n 0 ，如果输入矩阵列数为 n − 1 ，那么行数则为 m = n 0 − n + 1 。对于全样本窗口 N 1 ，如果输入矩阵列数为 n − 1 ，则行数则为 M = N 1 − n + 1 。