神经网络模型的构建Python

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

数据的输入

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

信号的正向传递

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

关于Sorftmax

上面我们说,经过一系列矩阵乘法得到的与输出层同维数的向量可以作为网络最终的输出结果,但更一般的做法是利用Sorftmax函数(方法)将各输出节点的值转变为所属类别的概率(可以简单的理解为该节点的值占总的值的和的大小,显然这样各节点“所属类别的概率“的和为1)。
Sordtmax函数的定义如下:softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类!假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的softmax值就是
在这里插入图片描述

当我们通过正向传播得到网络的实际输出之后,如何能通过样本数据指导网络各权值的更新呢?上文提到过,我们的想法是通过误差(损失)来指导权值的更新,在得到误差之前,需要先设置标签值,通过标签才能得到网络的误差,才能指导其修正。

独热编码

以手写数字为例,简单来说,我们设置的网络的输出层与其类别数相同为10个,假设经过前向后得到的输出向量为
[0.12,0.90,0.23,0.67,-0.37,-0.22,0.45,0.11,0.19,0.39]
显然,该向量的第1号索引处的值0.9是其中最大的,也就是说网络预测出原样本是属于1类的,但是,假设他应该是属于第0类的,结果显然不对了就。那么我们可以通过独热编码的方式设置其标签向量为:
[1,0,0,0,0,0,0,0,0,0]
有了标签数据后才能计算误差,再通过梯度下降等办法指导权值的更新,也就是训练学习过程。
独热编码,又称一位有效码,像下面这个例子对10个类型的数字进行编码,其实就是对应的类别编号索引处为1其它位置为0
在这里插入图片描述
网络预测的分类结果,就是最终输出向量的最大值的索引,将其作为所属类别的类别种类。

误差与损失函数

在这里插入图片描述
损失函数的选择
损失函数是什么?——
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值