博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
神经网络学习 BP RBF
阅读量:5017 次
发布时间:2019-06-12

本文共 1845 字,大约阅读时间需要 6 分钟。

最近学习了一下神经网络,主要是学习了BP和RBF,下面时本人的学习笔记(原文我曾经发表在了上,都是本人)

学习尚浅,望指正.....

 

本篇介绍BP神经网络,下一篇介绍RBF神经网络

BP神经网络就是Back Propagation(反向传播)的神经网络。

线性感知机

首先,向介绍一下非反向传播的神经网络,其实也就是感知机,本质上就是一个线性分类器。

如下:x1*w1+x2*w2+x3*w3..... xn*wn+b= y      (1)

(1)式我们也可以表示为 tr(X)*W+b = y(2)(粗体表示向量)

当把x1,x2,x3..xn(一个样例)代入时,得到一个y,也就是分类的结果,其实也就是一个点在直线X*W+b = 0的左边还是右边决定了

y的正负,依据正负已经可以判断分类了,当然y的值还有很多其他作用。

这个函数已经可以用于分割两类,当然是线性的,也就是使用超平面分割了样例,但有时候样例并不总是线性可分(多数情况下都是非线性可分的),不过线性感知机是很多高级模型的基础,我们先讨论线性感知机。

求解感知机

求解感知机的过程就是求解(1)式中 w1,w2,w3...wn,b 的过程,以下表示为[W,b]

一般都是利用样例数据进行训练,再使用测试数据检验正确率

可以使用的方法有很多,最原始的求解感知机的算法(抱歉,名字我忘了)

实际上,我们的求得的[W,b]不仅要对训练数据有用,而且要对测试数据有效(也就是泛化性)

很多时候,我们希望求得[W,b]是测试数据的两个类别的最小代价的平面(简单地说——中间垂直面),

最小代价定义为(实际上是一种经验公式)

J =  Σ(Xi*W+b-yi)^2

Xi∈所有样例

yi为目标结果

很容易看出,希望超平面[W,b],能够使得代价J最小,其实这个代价公式很普通,就是求偏差加个平方,我感性得觉得也许还可以用别的公式表示类似的代价。

求解最小代价

自然是对J求导,将J看成J(W),d J(W) / d W = 0 (3)

求解的方法称为最小二乘法,证明比较繁琐,

解:

当(tr(M)*M)^-1存在时   W = (tr(M)*M)^-1*tr(M)*YY为目标值的集合向量)

M = tr[X1,X2...,Xn]     (X为一个样本向量)

可见由于逆不一定总是存在,所以此方法未必可行。

还可以采用的方法有:

最速梯度下降法,widrow-hoff算法(也叫LMS算法——最小均方算法)

这些方法的核心思想都是先求了J(W)的梯度,然后使用梯度与样本的乘积进行迭代更新W的权值,但是具体方法不同。

(所谓梯度下降,顾名思义就是指向梯度小的方向前进)

阈值单元

之前使用感知器可以求得y值,但是这种方法,使得感知在层数增加后仍然被证明为是一个线性的感知机,

于是有了阈值单元,用于使得感知机变得不那么线性,比较实用的有sigmoid单元,能够将数据都压缩再(0,1)中,

并且它是可导函数,这在BP神经网络中非常重要。

具体使用阈值单元 y` = sigmoid(y),其实就是代入函数进行计算,将其作为感知机的一部分

单层的神经网络(也称感知机)

其实就是一个线性感知机加一个阈值单元(比如sigmoid)

不过能力是有限的

多层神经网络

也就是前一层感知机的输出作为后一层感知机每个单元的输入之一,每层若干节点。

但是此时存在一个问题,就是如何求得需要的W的值 ,之前由于是单层,所以更新一层的W非常容易,

但此时,W不止一层,内层(隐含层)的W不好计算,所以提出了BP算法(1986年由Rumelhart和McCelland为首的科学家小组提出)。

具体推导以后补上。

给出具体更新公式:

定义每一个单元的误差项为ei  ,每个节点的输出为oi,每个边的权重为wij

对于每个输出单元ek    (i=k)

ek = ok(1-ok)(yk-ok)

对于每个隐藏层单元eh      (i = h)

eh = oh(1-oh)*  Σwbh*eb

b为h点的前一层节点编号

更行每个wji

wji = wji + u*ej*oji

此更行针对每个训练样例都执行,所有样例遍历一次称为一遍,往往需要多遍执行,

在测试 异或 逻辑(需要1层隐含节点)时,我大约使用了1000多次遍历,结果才满意。

 

参考:《机器学习》

 

转载于:https://www.cnblogs.com/liyitan/archive/2012/03/04/2379278.html

你可能感兴趣的文章
HTTP(一)工作机制
查看>>
条形码扫描枪数据读取的问题
查看>>
健壮的 Java 基准测试
查看>>
phpstorm查看类的继承关系
查看>>
git create clone(仓库)
查看>>
矩阵求逆
查看>>
在 Windows 8、Windows 10 桌面模式下的 .NET Framework 程序中,引用 Windows.Runtime 的 API。...
查看>>
2015 8月24号 工作计划与实行
查看>>
Google Map API V3开发(6) 代码
查看>>
Kafka初入门简单配置与使用
查看>>
第三章Git使用入门
查看>>
Amd,Cmd, Commonjs, ES6 import/export的异同点
查看>>
cocos2dx-Lua与Java通讯机制
查看>>
上下文管理器之__enter__和__exit__
查看>>
winform文件迁移工具
查看>>
paip.输入法编程----删除双字词简拼
查看>>
or1200下raw-os学习(任务篇)
查看>>
Ubuntu 18.04安装arm-linux-gcc交叉编译器
查看>>
.net core i上 K8S(一)集群搭建
查看>>
django drf 深入ModelSerializer
查看>>