数据的输入
信号的正向传递
误差的计算
标签值的选择
损失函数
误差的反向传播
梯度下降法确定权值更新量
Python实现经典的三层反向传播网络

数据的输入

神经网络模型的构建Python
不管是多么复杂的网络,总是要从输入层开始的,对于这种全连接的反向传播网络来说,其输入其实就是一个实数向量,这个实数向量有几维,对应的网络的输入层就有几个节点。对应上图所示的网络,其有8个输入节点,也就是说网络的输入向量应该是这种形式的
[x1,x2,x3,x4,x5,x6,x7,x8]
(先不要纠结是行向量还是列向量)。输入向量可以有一个别称——特征向量

信号的正向传递

输入特征向量之后,信号是如何一步步被运算处理,最终到达输出层的呢?我们常说的”全连接“网络又是什么意思呢?它的实现是通过指针、链表?还是通过数组、索引?——其实神经网络简单至极!只要会矩阵乘法,就能解决这个问题!
为方便说明,我们使用一个具有三个输入节点,四个隐藏节点,两个输出节点的简单网络为例,来说明信号的正向传播问题。
神经网络模型的构建Python
假定,输入层为一个列向量
神经网络模型的构建Python
可以看到,第一层到第二层的权值较多,不方便处理,为此我们将其表示为矩阵形式:
神经网络模型的构建Python
其中wi,j表示前一层的第i个节点,到后一层第j个节点的链接权值。
我们从前边的例子(感知机,单计算节点模型)中知道,网络后一层节点接收到的信号,是前一层每个节点输出值的加权求和。对于该例来说,隐藏层的四个节点的值所接收到的值,也可以用向量的形式给出
神经网络模型的构建Python
现在,我们离成功只差一步了!稍加观察,运用我们学过的线性代数的知识,能够很容易的写出下式:
神经网络模型的构建Python
现在,我们其实已经完成了一个伟大的任务了!我们将信号由输入层传递到了隐藏层,而且我们也并没有使用什么复杂的技术,仅仅就是使用了一个矩阵乘法而已!如果我们将权值矩阵记为W1,输入特征向量记为X,隐藏层节点的输入记为In_1
那么就有In_1 = W.T * X
神经网络模型的构建Python隐藏层的后一层(输出层)的输入,其实还是同样的道理,只不过W1变成了W2,X变为了隐藏层的输出。
隐藏层的输出其实就是每一个元素(一个实数)经过**函数作用后的结果。
神经网络模型的构建Python
那么,现在信号传递到了输出层,输出层的输入in_2显然可以这样表出
神经网络模型的构建Python
同样的,输出层的输出out_2还是经过**函数作用后的结果,out_2就是这个三层网络最终的输出。(因为我们这里只是构建了一个三层的网络)。
关于误差函数,梯度下降,权值修正,以及最终的模型代码,将在下一篇文章种给出

相关文章: