智能问答系统神经网络

搭建样例:

输入为x,例如一张图片,像素为34*34pixels,那么根据RGB成色原理,共有34*34*3个数据,所以将x映射为一个(34*34*3, 1)的矩阵(一般采用w的转置矩阵,即wT),按照R(34*34),G(34*34),B(34*34)进行排列。

下一步需要确定f(x)函数,先采取比较简单的线性(一次)神经网络,比较常见的一元一次方程形式为f(x)= ax+b,所以采用类似的形式:

       f(x) = W*x + b

其中,W为weight权重,b为bias偏差,即学习调整参数,也就是调整W和b的值。

注意:

矩阵相乘对矩阵的大小是有要求的,在这里x的规格为(34*34*3, 1),所以W的列数也应该为34*34*3,如果我们只有一层神经元,那么f(x)就是一个数,即(1, 1)的矩阵,所以此处W的大小应为(1, 34*34*3),b仅仅是一个常数。

 

线性方程的范围大家都知道,是(-∞,+∞),所以我们需要映射到 [0,1] 的区间,也需要一个方程:

       sigmoid(z) = 1 / (1 + e^(-z))

将变量映射到0,1之间,选择这个方程的原因是求导容易, s’(x) = s(x) / (1 – s(x)).

 

 

评价参数是否合理也需要一个方程,即损失方程(Loss),表示的含义为预测值与标准(监督)值之间的偏差,尽量减小这个偏差来达到更好的预测(分类)效果,比较常用的损失方程为:

定义,a为预测值,y为准确值。

L(a, y)= -y * log(a)- (1 - y) * log (1 - a)

如果有m个训练样例的话,平均损失函数为值加起来后除以m,即

       L = sum(Li) / m

 

计算完cost后需要调整W和b的值,因为我们需要cost的值减小,所以需要对L方程求导获取梯度值(gradient),逐步朝着最小值前进,此处’dw’、’db’均为方便在python代码中进行表示,实际含义为右侧等式(求的是微分):

       ‘dw’ = dJ/dw = (dj/dz)*(dz/dw)= X*(A-Y)T / m

       ‘db’ = dj/db = sum(a-y) / m

所以新的值为:

       w = w – α * dw

       b = b – α * db,其中 α 为学习速率,在下一轮迭代中采用新的w、b。

设定迭代次数,迭代完毕后,就是最终得到的参数w, b,用测试用例来验证识别准确率,一般应该在70%以上。

 

我们的神经网络一共三层

 

第一层输入层,神经元个数为输入数据的向量个数为204个,激活函数Relu

第二层,神经元个数为64个,激活函数为SIGMOD

第三层,输出层也是损失层,神经元个数为2个,损失函数为CrossEntropy,激活函数为softmax

 

posted on 2018-07-04 18:06  王甜甜的小摩托  阅读(355)  评论(0)    收藏  举报

导航