BP神经网络教学

逻辑回归与神经网络

代码下载(免费):(43条消息) BP神经网络的简单应用资源-CSDN文库

逻辑回归主要是一种线性回归,他的分类特征并不是特别好。而神经网络是一种非线性的回归对各种数据处理良好。下面是以一个二维数据说明两者的具体区别。


数据集表述

如图所示是一个二维数据,X中储存了关于这个花的横坐标和纵坐标,Y储存了关于上述X中每个点的颜色,要求:将蓝色和红色的点进行区分。

线性回归表现


定义我们的算法模型,直接从sklearn库中导入类LinearRegression即可,由于线性回归比较简单,所以这个类的输入参数也比较少,不需要多加设置。 定义好模型之后直接训练,就能得到我们拟合的一些参数。

我们可以比较明显的看出,这个线性逻辑回归处理非线性问题还是有较大的误差如图所示,误差可以达到47%。效果并不是很理想

神经网络表现


下面我们搭建一个仅含一个隐藏层的神经网络,并在同一数据集下判断神经网络的性能。

以上是关于神经网络的架构示意图,可以看出该神经网络仅含有两层,仅仅有一层隐藏层,根据我们先前已知的信息我们知道,神经网络的隐藏层越高处理非线性性能相对来说是增加的(大概率是增加,但有少部分问题会减少),现在我们仅仅设置一层赢含层来判断在这么简单的层数下观察性能的良好程度。


由于先前已知的知识,以及该神经网络架构我们可以利用下面公式来反应神经网络的工作流程。


在模型评价方面我们选用下面的公式来计算成本函数:

 

流程:1.定义好神经网络架构主要包括输入层的神经元个数,以及隐含层的层数。2.接着是对参数进行初始化,这里的参数指的是权重以及偏置而不是超参数。3.循环:实施前向传播,再计算出成本函数,最后再利用反向传播计算出梯度,紧接着利用梯度来更新权重。

定义神经网络的架构

神经网络架构方面,对于本次问题主要确定好这几个参数分别是1.神经网络的输入层大小,即输入层的神经元个数,再通俗一点来讲就是多少个X。2.第二个是神经网络隐含层的大小,这里我们设置为4个。通常这样的设置是随机设置的,这里的4并没有很深的含义。3.第三个是关于这个输出层的大小。由于这是一个判断问题,所以输出层的大小问题这里设置成1。

输出化模型的参数

在这里我们初始化的是权重和偏置,先前的知识中我们容易知道,权重一般不可全部为0而偏置可以全部为0,这时由于权重为0的时候,隐藏层的大小将失去意义,所有输入都输出一个值。无法进行反向传播。在这里还要注意的一点是,将权重进行初始化的时候尽量要将其转化为一个小的数值,所以这里会乘以0.01,这时由于在激活函数之中,如果权重过于大会导致Z过于大会导致斜率变得极为小,这就不方便进行快速梯度下降。

循环

这里主要分为前向传播,反向传播以及更新参数,值得注意的是这里的操作过程可以参见前面所述的公示。在Z的计算中要注意利用的是矩阵的乘法运算,而不是点积:W1的大小是(隐含层的个数即隐含层的大小,输入层的大小),而X的大小是(X的特征数量,样本个数),他们所得的结果是(隐含层的大小,样本的个数)即Z1,再利用tanh(这里是这个函数,这里并没有很深的含义,仅为方便取用)得到A1,最利用sigmoid函数来取A2由于是二分类问题需要得到一个确定的概率所以是用这个并不改变,数据的大小格式。

计算完前向传播接着是成本函数的计算。这里值得注意的是从单个逻辑回归中计算的叫做损失函数,但一旦向量化,就变成成本函数的计算,值得注意的是成本函数和损失函数并不完全相同,其中有一个求和还有一个1/m的差别。

反向传播

反向传播是利用先前已经得到的六个公式,如图所示。

其中一式利用链式法则可得,LOSS函数对Z求导等于LOSS函数对A求导再乘上A对Z求导,由于LOSS函数的导数为-y/a+(1-y)/(1-a),A为sigmoid函数,他对Z求导又等于a(1-a)因此可以得到dZ=A-Y。

其中二式可以由矩阵的逆求导可以得出。值得注意的是四式,四式也是由于链式法则求得,其中LOSS函数对Z2求导再乘以dZ2对dA1求导再乘以dA1对dZ1求导即可得到所求解。

其他公式均可以较为简单求到,这里并不在做过多阐述。

更新权重


在先前的基础之上,以及得到各个参数的梯度,下面所要进行的就是对这些所求的参数进行一定的更新迭代。主要利用公式为如下:

 

拼装好前面上述几个操作:

首先定义好初始的权重和偏置,接着进入循环,这里的循环代数可以自己定义,在这里我们假设为初始值。在一次循环中神经网络的计算过程如下。首先是进行前向传播可以参考前面前向传播的公式,接着是计算成本函数,也可以参考前面的计算公式,然后是计算反向传播,计算该变量的各个梯度,最后是权重更新,利用之前的梯度对每个变量进行更新。以此往复直到达到最后的循环代数

预测

以上的循环其实就是为了获得最后的权值和偏置,这些权重和偏置定义了一个神经网络所以显得十分重要,现在我们可以利用这个确定的神经网络来进行预测了。

预测的过程可以先利用前向传播然后求的A2这里的A2就是预测值,由于只有一层隐藏层,然后通过判断A2是否大于0.5来判断是否是蓝色或者是红色。其中为什么是0.5
因为我们在这里选择的激活函数是sigmoid函数。

超参数优化

在超参数优化的过程中我们可以选择很多超参数,例如学习率、隐含层大小、层数、以及其他激活函数等,这里我们主要是起到一个启发式的思路,利用隐含层的大小作为优化的超参数进行优化。如下图所示可以看出当隐含层的大小为4到5左右的时候神经网络表现最佳。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值