bp算法和nlp算法_西瓜书5.5 编程实现BP神经网络——标准BP算法、累积BP算法

这里照着书上的公式,实现了一下标准BP算法,和累积BP算法,BP是error Back Propagation的意思,误差逆传播。BP网络通常是指用BP算法训练的多层前馈神经网络。代码是照着书本公式自己写的,没有参考网上的其他版本。

数据和代码地址:https://github.com/qdbszsj/BP

具体的理论证明和公式推导,见西瓜书P101-104。这里重点说一下我的数据处理和一些代码细节,以及一些重点知识。

西瓜数据集3.0,里面有离散属性,也有连续属性,除了密度、含糖量这样的属性,还有一些文字性描述的离散属性,因此我们先把离散属性转化为数字表示的属性。比如“色泽”这个属性下有三种属性:浅白、青绿、乌黑,我认为这三个属性有递进关系,类似于低中高,瘦均胖,因此就用一个值来表示他们,{0,0.5,1}这三个值表示这三个属性。同理,其他属性都用这种方法处理成0~1之间的小数。这里的属性都是有序的,没有无序的属性,如果有无序的属性,那么通常就要用一个K维的向量来表示,比如属性“瓜类”下分为“西瓜”、“黄瓜”、“南瓜”,显然这三个瓜是无序的,因此就用(0,0,1)、(0,1,0)、(0,0,1)这样的值来表示他们,其实就相当于把数据集拓宽了几列,列名由一个“瓜类”变为“是西瓜?”、“是黄瓜?”、“是南瓜?”,然后元素值是1和0。这里跟NLP的词向量处理方法有些接近,很多做NLP的词向量都是这样的。

然后是根据书P104的伪代码,先初始化了两组权值(输入->隐层、隐层->输出)和两组阈值(隐层、输出),都是随机的0-1的小数,这里命名方式我都是按照书本上的变量名,P101都有。然后书上有一个公式没写出来,那就是b=f(alpha-gamma),这个跟公式5.3道理是一样的,自己的输出=sigmoid(自己接受到的输入-自己的阈值),这个“自己”可以是隐层或者是输出层。

这里标准BP和累积BP我都实现了一下,区别很小,标准BP就是对于每一个输入的X个体,都更新一下网络,而累积BP就是把整个X集合都跑一遍,把各种要变化的值累加起来,再更新,累积BP类似于随机梯度下降法,每跑一遍整个集合

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值