人工神经网络ANN理论及金融领域实践(上)
一、前言
听惯了各路大佬在人工智能领域的豪言壮语,作为菜鸟的笔者也想学习学习,但苦于理解各种疯狂的公式。幸运的是让笔者找到了一本“小人书”,里面用儿童化的语言说明了神经网络的工作原理,并且手把手教会笔者做出了第一个识别数字的人工智能程序!!这本书的名字《笔者还回去了,并且书名忘记了》!但笔者会把重要的内容以及笔者的理解加入到本文当中。
二、摘要
神经网络,模仿人脑神经元的工作方式:神经元接受输入、对输入进行处理、输出到下一个神经元。神经元的输入来自于上一级的神经元的输出乘以一个系数,我们的“记忆”就相当于这些一串一串的系数。在不断的训练、接受认知,改正错误的过程中,我们的“记忆”得到锻炼,使得我们能够准确判断数字、辨别熟人。人工神经元的工作原理就是如此:得到一组输入,依据当前的系数——“记忆”处理得到输出,比较输出与正确值——得到误差,用这些误差修正我们的“记忆”,在不断的“修炼”过程中,我们最终能准确判断!
三、ANN人工神经网络原理解析
笔者不打算按照书上的顺序,而是按照建立人工神经网络系统的顺序。
1、真正的神经元怎么工作
先假设一种简单情况,第一层输入的两个神经元输入x1、x2,与第二层——中间层(也叫隐藏层)的两个神经元两两链接,接收输入最后给出输出。我们很容易理解,中间层得到的输入并不完全是上一层的值而是加权后的,如中间层节点1得到的输入为 w 11 ∗ x 1 + w 21 ∗ x 2 w_{11}*x_1+w_{21}*x_2 w11∗x1+w21∗x2,中间节点2得到的输入为 w 12 ∗ x 1 + w 22 ∗ x 2 w_{12}*x_1+w_{22}*x_2 w12∗x1+w22∗x2。仔细想,这很符合我们对于神经元的理解,中间层的神经元收到上一层中两个神经元神经末梢释放的递质,但不是所有的递质都会被中间层感知!此外,上一个神经元的输出还有可能抑止中间层的反应,即权重为负。
中间层得到输入后,但高中课本还告诉我们,中间层的神经元不一定会传递信号,只有当输入达到一定程度后才会有所反应,这种现象用数学中的术语来说就是——存在阈值现象。
2、数学实现
那么如何来刻画这种现象呢?数学中有很多函数可以体现阈值现象,比如
y ( x ) = { 0 , x < 0 1 , x > = 0 y(x)=\{^{1, x>=0}_{0, x<0} y(x)={
0,x<01,x>=0
但是这个函数还不足以表达出神经元的作用,毕竟我们的大脑没有这么“死板“——超过一个数瞬间增大。比较常用的函数为 s i g m o i d sigmoid sigmoid函数
f ( x ) = 1 / ( 1 + e − x ) f(x)=1/(1+e^{-x}) f(x)=1/(1+e−x)
函数体现出来的柔性更能体现人的特征!
这里笔者产生过一个思考:为什么这些函数都必须是递增的?递减就不行吗?递减不是才可以体现出有些神经元的抑止效应吗?
喝了咖啡的读者可能记得,我们把抑止效用反映在链接的权重上,如果权重为负的,那么中间神经元的到的信号将会大大减少甚至为负(因为还有另一个神经元输入的存在),这样也是一种抑止效应。那么不失一般性,递增函数就可以粗略代表神经元的工作,而不用另外假设一些神经元为减函数(或许假设哪个神经元为递减的会让你头疼)。
到这里,可以自豪地得出我们最后的输出
y 1 = f ( w 11 ∗ x 1 + w 21 ∗ x 2 ) y_1=f(w_{11}*x_1+w_{21}*x_2) y1=f(w11∗x1+w21∗x2) y 2 = f ( w 12 ∗ x 1 + w 22 ∗ x 2 ) y_2=f(w_{12}*x_1+w_{22}*x_2) y2=f(w12∗x1+w22∗x2)
误差修正
但我们的神经元到这里还没有结束他们的工作。毕竟输出的结果可能和实际值相差甚远。我们定义 y 1 y_1 y1, y 2 y_2 y2的实际值为 t 1 t_1 t1, t 2 t_2 t2,误差分别为
e 1 = t 1 − y 1 e_1=t_1-y_1 e1=t1−y1 e 2 = t 2 − y 2 e_2=t_2-y_2 e2=t