前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BP神经网络-ANN发展

BP神经网络-ANN发展

作者头像
企鹅号小编
发布2018-01-03 09:51:47
1.6K0
发布2018-01-03 09:51:47
举报
文章被收录于专栏:人工智能人工智能

Dear junqiang:

Hello

今天是“一天一文”的第18天。继续关于AI里面最重要的神经网络的知识分享。

昨天的文章说了关于ANN的基础 —— 单层感知器 ,以及它的进化版 —— 线性神经网络。也知道了“权重、激活函数、偏置X0、学习信号r、代价函数E”等最基本的知识。同时也学习了“sign()激活函数 和 purelin()线性激活函数”。

昨天,也留下了一个疑问:单层感知器和线性神经网络无法解决“异或问题”,也就是通过计算,无法区分下面这个图:

那么,如何解决呢?单层感知器发展就有了后来的多层“BP神经网络”。

———— BP神经网络 ————

BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。

BP神经网络与前面说到的单层感知器和线性神经网络最大的不同有两点:

(1) 激活函数;

(2)层数增加;

BP神经网络有三种激活函数,分别为Sigmoid函数、Tanh函数、Softsign函数。

Sigmoid激活函数(早期BP使用):

Tanh函数:

Softsign函数:

下面说一下BP网络的网络模型,这也是其与单层感知器最大的不同。因为用户看不见这些层,所以见做隐藏层。

对于输出层:Ok = f(netk)

netk = ∑WjkYj (从第j个到第k个)

对于隐层: Yj = f(netj)

netk = ∑WijXj (从第i个输入点到第j个隐层结点)

以上就是BP神经网络的基本输出向量。在神经网络中最重要的也就是激活函数了,BP网络的激活函数最常用的是Sigmoid函数,由于其是单极性,同时其导数也是单极性的,故用于BP网络。

我们直接看百度百科的解释:

sigmoid的这种特性很好地适合于“人工神经网络中激活函数的阀值激活特点”。

———— BP学习算法 ————

下面以三层感知器为例描述BP学习算法。

首先,计算代价函数。这是神经网络得以迭代逼近期望值的最根本原因和方式,重要性不言而喻。

输出层:如同前面的线性神经网络,BP网络也有代价函数E。

E(向量) = 1/2*[ d(向量) - o(向量) ] ^2 = 1/2 * ∑(dk - ok)^2

隐层:这是最终的E向量的式子,把其展开成为中间隐层的式:

E = 1/2 * ∑[ dk - f(netk) ]^2

= 1/2*∑[ dk - f( ∑WjkYj ) ]^2

输入层:将这个式子进一步展开到输入层:

E = 1/2*∑ ( dk - f[ ∑Wjk · f( netj ) ] )^2

= 1/2*∑( dk - f[ ∑Wjk · f[ ∑Wjk · f( ∑Wij Xi ) ] ] )^2

看不懂?没事,我们不是AI工程师,不必要了解全部的推导过程,只需要知道这个结果怎么用就好,上述的过程以及中间加入部分的偏导,最后计算权值:

w jk = η * δk-o * Yj =η*(dk - ok)*(1-ok)*yj

v ij =η * δj-y * Xi =η *( ∑δk-o *wjk)*yj*(1-yj)*xi

这个就是基本的权值调整公式,W是最后隐层连接输出层的那个连接组的权值向量。V是输入串连接隐层的那个连接组的权值向量。

按照这个公式进行W和V的迭代,最终使得激活函数输出的值之和能逼近期望值。

当然,这样能拟合(逼近的高大上叫法)到最终期望值,但也存在这过度你和的问题。

———— 拟合与过拟合 ————

拟合就是用f()函数去近似匹配和逼近期望值,拟合也就是把一连串的点用一条光滑的曲线连接起来的过程。

BP神经网络会存在过拟合的情况。为了防止过拟合,需要用一些手段来解决。

过拟合简单来说就是所有的点都被连入了这条光滑曲线,即使有些点是无用且干扰的点。

如何解决这个问题,就需要:(1)增大数据集;(2)正则化方法来处理代价函数。

现在的大数据也是通过庞大的数据量来使得复杂的“点集合”能被拟合出来,来适合各种场景。

———— 玩耍时间 ————

以下是用google的playgroud.tensorflow来模拟:

学习率:开始为0.3(加快拟合速度),后期为0.003(精确拟合)

激活函数:Sigmoid函数

正则化:无正则化

我们会发现,每一层的每一个单元(神经元)存储记录着的是一种分类形式,我们把它形象地比做“这个单元认识这种分类”(如果你是在识别人脸,你可以说这个单元能认出你的鼻子)

X1单元:

X2单元:

中间第一隐层第三个单元:

中间第二隐层单元:

这样每一个单元记录着这个“拟合函数”的一部分(就如同某一单元记录这你脸上的某一部分),最终一起合作,拟合出了改函数(合作识别出来了你的脸)。

神奇~

明天我会来说一下Hopfield神经网络,该网络与BP网络一样,都为单层感知器的下一阶段的发展。该Hopfield网络能“知道如何自行压缩信息”。

over.

Sincerely

俊强

2017年12月9日

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档