A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【转载】https://blog.csdn.net/snowmanst/article/details/78638004
一、 神经网络的兴起

1、神经网络的发展史
很早之前就听过神经网络这个名词,感觉很神秘、很强大,但是具体是做什么的,怎么用,一无所知。其实,最初产生的是神经元模型MP,即一个具有输入、输出和计算功能的细胞单元:
Z = g(a1*w1+a2*w2+a3*w3)。此时,w1、w2、w3都是固定的。

后来,产生了含有两层神经元(输入层、输出层)的感知器,具备了识别简单图像的能力,这也是最初的神经网络的样子。与神经元模型不同,感知器模型的权重是经过训练得到的,感知器模型类似于逻辑回归模型,可以用作线性分类。
但是,感知器只能进行简单的分类任务,甚至连异或这样简单的逻辑运算都无法解决,所以,在之后的10年,其发展进入冰河期。

1986年,Rumelhart和Hinton等人提出了BP(BackPropagation)算法解决了训练两层神经网络(多层感知机)的所需要进行的复杂计算量的问题,于是又一次引发了人工神经网络ANN(Artificial Neural Network)研究的热潮,而实际上,像许多学术界经常发生的事一样,Werbos在1974年的博士论文中就提出了将BP算法应用于神经网路的训练过程中,只是当时咖位太小,科学圈里几乎没人知道他的研究。

2、为什么ANN会在机器学习中举足轻重?

强大啊。
相信阅读此文的人一定都或多或少的了解一些机器学习的算法,比如线性回归、逻辑回归、SVM等分类算法,这些算法都有其所适用的问题范畴,而且训练出来的模型准确性没有很高的保证,但是神经网络可以。笼统的说,其他算法可以做的神经网络可以做,其他模型做不到的神经网络也可以做。当然也有它自身的缺点,这里就不说了。

3、神经网络可以应用到哪些方面?

  • 图像处理
    -图像分割、压缩、边缘检测,图像恢复。
  • 信号处理
    -对语音分类,心电图、脑电图等信号分类
  • 模式识别
    -机器人传感器接收到的图像进行识别,识别汽车牌照…


现在,BP算法作为训练神经网络使用最广泛的一个算法,自然是学习神经网路以及进行深度学习的必学算法,所以本文就来介绍BP算法。


二、BP算法的推导过程

为什么需要BP算法?

要讲这个问题之前需要先讲一下神经网络的训练过程,这样再讲BP算法就说得过去了。

1、前向传播

假设,我们现在创建一个两层神经网络:

其中b1、b2为偏置单元。实际上每个神经元都有一个阈值,代表的意义是所有从树突输入的刺激乘以相应的权值之和如果大于该阈值则激励函数activation就会产生输出。而为了计算上的方便,我们通常将前面一层的输入多加一个输入恒为1,边上的权值由训练得到,这个权值就是阈值。

首先,需要解释的是一批参数的意义:
m:样本数量
input_nodes : 神经元的输入个数为 2
hidden_nodes: 神经网络的隐藏神经元个数为 2
output_nodes:神经网络的输出为 2
X:样本输入,input_nodes*1的矩阵
y:样本输出,{0,1}
out:训练模型输出0~1
W1:隐藏神经元的输入权值,hidden_nodes*(m+1)
W2:输出神经元的输入权值,output_nodes*(hidden_nodes+1)
图中:W1(1,1)=w3,W1(1,2) = w4;
W1(0,0) = w9 , W1(1,0) = w10.

每个神经元的输入为Z(L),输出为激励函数activation的值:
activation(Zi)= sigmoid(Zi)
Zi = W.dot(A(i-1)),
每层的输入中默认A0 = 1.

其中,由于神经元的输出性质类似阶跃函数,所以我们习惯上使用sigmoid函数来模拟activation:
**

sigmoid(z) = 1/(1+exp(-z))

**
前向传播过程的各个变量推导:

out就是此神经网络的预测结果。要使这个结果尽量准确就得优化该神经网络各层的权值,换一句话说就是最小化代价函数cost:

cost = -y*log(out)-(1-y)*log(1-out)

2、逆向传播
很明显cost是关于w的函数,所以问题就转化为当w取一组什么样的值时,cost函数最小。这就是梯度下降问题了。由梯度下降的优化公式:

其中是学习速率,那么这个偏导项该怎么求呢,显然对W1和W2求偏导是不同的过程。举个例子,对求偏导:

公式中,大小写字母代表矩阵,小写字母代表标量。

如果定义第L层误差为:
则:

一般化这个公式:

这就是误差逆传播!

当我们通过最后一层的误差,依次向前求出各层的误差之后,对于每一层的权值偏导,我们使用:

求出各层的偏导后,就可以更新权值了。当然,以上的举例只使用到了一个样本,所以读者可把其理解成是随机梯度下降算法求cost的最小值。当使用批量梯度下降时,可以求得m个样本偏导的平均值后再进行更新权值。

至此,逆向传播介绍完了,当然想要成功地构建一个神经网络还远远没有结束,依然有许多技术问题还需要讲解。

3、构造神经网络需要注意的问题

  • 搭建几层网络,每层多少节点
  • 网络间连接的权重如何初始化
  • 学习速率的设定
  • 正则化

未完,待续…….



2 个回复

倒序浏览

很不错,受教了
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马