前向传播算法概念
1.神经元向前传播的结构2.输入的权重即是神经元的参数(最简单的例如 加权和)
3.神经网络的优化过程就是优化神经元参数取值的过程,前向传播算法在此过程中起到的作用是:
根据输入值和神经元参数值得到输出的预测值
如图:这是一个简单的三层全连接神经网络,用于判断一个零件是否合格
x1、x2为输入层,a11、a12、a13为中间的隐藏层,y为输出层
传播过程为加权和,例如:a11=[w11(1)]*x1+[w21(1)]*x2
y=[w11(2)]*a11+[w12(2)]*a12+[w13(2)]*a13
我们发现这样的计算过程就是矩阵相乘的过程!
算法实现
/*定义神经元参数的矩阵*///从输入层到隐藏层之间的2*3个w参数可以合并为一个[2,3]的矩阵
w1=tf.Variable(tf.random_normal([2,3],stddev=1))
//从隐藏层到输出层之间的3个w参数可以合并为一个[3,1]的矩阵
w2=tf.Variable(tf.random_normal([3,1],stddev=1))
//定义零件长度和零件质量为一个[1,2]的矩阵变量
//placeholder方法用于提供输入数据,相当于定义一个位置,其中的数据等程序运行时再指定
x=tf.placeholder(tf.float32,shape=(1,2),name="input")
//matmul为矩阵相乘计算
a=tf.matmul(x,w1)
y=tf.matmul(a,w2)
sess=tf.Session()
init_op=tf.initialize_all_variables()
sess.run(init_op)
//feed_dict是一个字典,在字典中需要给出每一个用到的placeholder的取值
print(sess.run(y,feed_dict={x:[[0.7,0.9]]}))
如果说y>0为零件合格的话,本次预测值-3.9就为不合格
也许你能轻松的看懂这个算法,但对它的意义和用途是迷惑的,那么我来谈谈自己对它的粗浅理解。
依然拿零件合格检测为例,想要实现人工智能的检测,我们的储备资源要有大量的已有数据结论,比如零件长度为m、零件质量为n时结果是合格品或不合格品,这样的结论,至少给个10000个吧。
接着,我们就可以随机产生一组神经元参数[2,x]的矩阵,行数为2是因为零件有两个特征输入。然后,我们用已有结论中的数据{长度,质量,是否合格},将长度和质量作为输入,通过前向传播算法,计算出输出,判断输出预测值和真实值是否一致,根据是否一致的结果去影响神经元参数的改变。
这样,通过无数次的验证和改变,神经元参数会优化到对已知数据结论判断的最大准确度(感觉是一个概率统计过程),之后再用这个最优的神经元去判断新的未知元件是否合格,就准确度很大了!