首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2019首发推文——BP神经网络原理

2019首发推文

BP神经网络原理

2019年到来,让我们满怀信心和期待.....

不说了,先看篇推文先。

这次给大家介绍的是一种比较传统而又重要的神经网络,即BP(back propagation)神经网络,也就是我们平时说的反向传播神经网络,包含前向传播反向传播两个过程。

先来谈个轻松的话题

假如你在学习做红烧肉,第一次做时可能很咸,或者火太大烧焦了,没法吃;

第二次时,你有了经验,会少放一点盐,把火调小点,无奈还是有点焦,有点咸,很难吃;

第三次时,你根据以往两次经验,会把盐再放少点,火再小点,炒出来勉强能吃了。

当你做了几年的红烧肉,在一次次不断重复的过程中,你的经验会越来越丰富,经过不断调节,成为一名资深的红烧肉吃货。

其实,上面的过程,就类似于一个BP神经网络的运作过程。“做红烧肉”是前向传播;“做出来难吃”是输出结果;在下一次改进”是反向传播;而“盐太多、火太大”是误差。你在做红烧肉的循环中,根据结果,会不断收集“盐太多”、“火太大”这些误差信息,返回到下一次做红烧肉,通过这些误差来调整,学习出最优做红烧肉的方法,从而做一手美味的红烧肉。

所以,反向传播传回来的是什么呢?其实就是误差

下图为BP神经网络的模型

圆圈代表神经元,箭头表示传播的方向,相邻层的神经元之间互相连接,每根线可以给不同的权重。说白了就是三大件:输入层隐含层输出层

首先讲下激活函数,即activation function,我们一般用sigmoid函数:

我们可以用matlab把sigmoid图像画出来,z表示的是输入

syms z

z=-10:10

f=1./(1+exp(-z))

plot(net,f);

可以看到,它的形状很像“S”,我们又称之为“S”型函数,它能把函数值的值域限制在[0,1]。

下面讲述BP神经网络的运作原理,我们的目标很清晰——做最美味的红烧肉,学习出最优模型。

一、前向传播

(1)我们先定义一些参数和符号

我们假设输入层有n个神经元,隐含层有p个神经元,输出层有q个神经元

输入层与中间层、隐含层与输出层的连接权值分别为,

隐含层、输出层各神经元的偏置分别为,

首先,初始化权重。各连接的权重要初始化,一般用正态分布(-1,1)的随机数,若在MATLAB上直接用rand()函数即可

(2)计算出实际的输入和输出

二、反向传播

(1)引入误差函数,求偏导

这个时候,我们已经求出了实际的输出,这个时候我们要引用一种较常用的一种误差函数——均方误差:,通过真实值和实际输出值的数据,算出误差。前面我们提到了,反向传播传的是误差,那么,我们如何通过计算出的这个误差,去调整参数呢?

这个时候就要用到求偏导的知识了。

例如函数

。对x求偏导时,把y看作常数,所以结果是2x;同理,对y求偏导时,结果为2y。

在这里再说明一下各符号的含义:e是误差函数,是隐含层的权重,是输出层的输出,是隐含层的输出,b是偏置,是真实值

(2)根据算出的、,修正隐含层、输入层连接的权重

(3)计算全局误差

全局误差最大值我们可以提前设定好,在没有达到设定条件之前或者最大迭代学习次数之前,继续循环,得出最优模型。

这里,你可以当做是有评委品尝你的红烧肉,循环到直到评委对你做的红烧肉满意(假设评委对满意有个清晰的数值);当你学习最大次数达到,还是做不出评委满意的红烧肉,这时候是你的技术上限了,也会得出相对于你最好的做红烧肉模型。

看到这里,相信你对BP神经网络有一定的理解了,小编最近考试繁忙,可能有些地方写的不是很好,敬请指出,我们下次再见。

供稿:叶昌鑫 排版:大靖

关于图灵

我们是图灵智能创新团队,同时也是广东海洋大学第一个人工智能创新团队,我们的方向有:计算机视觉、自然语言处理、前端&后台。本公众号主要面向对人工智能感兴趣的读者,如果想了解更多,欢迎关注我们

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190104G0N3MB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券