那些关于bp神经网络的一些不为人知的秘密

341 阅读3分钟

简介

本文已参与「新人创作礼」活动,一起开启掘金创作之路。大家好,首次在掘金平台上跟大家见面,希望这篇文章可以帮助那些学习BP神经网络的同学更加了解神经网络的原理,以及实现过程。

对于神经网络这个词语大家肯定都不陌生,他强大的计算能力和广泛的应用范围让他得到了许多人的关注。例如在NLP(Natural Language Processing)领域中,可以通过基于文本的卷积神经网络对自然语言进行处理,使机器不仅可以理解像0,1这样的二进制计算机语言,还可以理解我们人类的日常语言,除此之外卷积神经网络在计算机视觉领域可以对输入的图像进行判别,或者对利用BP神经网络对股票的发展趋势进行预测。在学习过程中,发现很多同学对BP神经网络都十分感兴趣,其实实现简单的Bp神经网络并不难,但是,作为一个将来的算法工程师,总不能一直调用别人的代码吧,哈哈哈,论一个算法工程师的基本素养,我还是决定自己去实现一下BP神经网络,也当是对自己的一个挑战!

Bp神经网络

如果大家只想快速的实现BP神经网络的功能,大家可以参看下面的两个博客,很快就可以实现预测的功能:

[1]((131条消息) 数学建模-BP神经网络简介_臭小子222的博客-CSDN博客_bp神经网络模型)

[2]((131条消息) 【MATLAB】简单的BP神经网络实例_Wendy冬雪飘的博客-CSDN博客_bp神经网络matlab代码实例)

大家如果对BP神经网络的数学原理,那么就听我开始细细道来吧!

Bp神经网络可以通过反向传播误差来调整预测值和真实值之间的误差大小,主要就是通过调节各层之间的权重使真实值和预测值之间的误差逐渐变小,理论上来讲,如果给BP神经网络足够的隐层数目和隐层节点数目,BP神经网络可以使预测值与真实值之间的误差无限小!但实际是不可能的,至少我觉得是不可能,因为大家可能知道,在BP神经网络传播的过程中可能会陷入局部最优这个情况。

废话说了这么多,那到底怎样才能使误差最小呢?其实说到底这便是一个极值问题,求解极值问题最简单的方法便是求导,简单通过教材上的公式对求导过程进行介绍:

image.png 这是对最简单单隐层神经网络进行求解,稍微了解过神经网络的同学都知道,神经网路中的激活函数是必不可少的,当隐层数目过多时,我们再通过求导的方法进行求解便牵扯到数学中的链式法则,而且层数比较多时,求导越复杂!大家可以先通过一个比较具体的函数做例题,可以帮助大家求解复杂的复合函数求导,比如f(x)=sin(sin(x1+.....+xn))对xi求导。

我自己用matlab简单模拟了一下bp神经网络的计算过程,大家可以参考:

结语

BP神经网络是很基本的神经网络,不过希望大家能多去动手推到一下他的过程,不明白的可以随时讨论,有错误欢迎纠正!