目录
0前言
由于工作上的需要或是探索,想起了神经网络,神经网络是我研究生毕业论文选用的一个工具,用来识别旋转机械振动故障类型。那时候觉得神经网络很难,反复看一本神经网络的书,硬生生的用VB把程序给编出来了,当时以为得之已,现在看只涂于表面。这次由于疫情被困酒店,所有的时间都用来学习,本人愚钝,整整用了七天才又一次用LabVIEW把BP网络程序编出来,较十五年前也有了更深的感悟。
参考资料:
1.《一文搞定BP神经网络——从原理到应用(原理篇)》一文搞定BP神经网络——从原理到应用(原理篇)_痴澳超的博客-CSDN博客_bp神经网络应用于https://blog.csdn.net/u014303046/article/details/78200010
CSDN上的一篇文章,浏览量最高的一篇博文,对BP网络公式的进行了详细的推导,细致入微,可能每个人对问题理解和阐述的角度不一样,加之文中有些符号意义没有标注,我是反复看了好多遍才深得其法,文章还提供了Python程序,便于理解各变量之间的关系,由于以前没用过Python,在解读程序上耗费了大量时间,通过这次学习,Python也算是入门了。本文对BP网络的阐述也基于此文,加之个人的理解,公式符号,变量名称也以此文为主,便于读者互相参考。
2.视频:网易公开课昆明理工大学刘辉主讲的《智能控制导论》第五章《人工神经网络》
讲的比较浅显,便于理解反向传播过程的推导。
3.视频:网易公开课普林斯顿大学公开课《机器学习》吴恩达主讲
对反向传播从编程的角度用实例推演,便于理解。吴恩达是前百度首席科学家,人工智能和机器学习领域国际上最权威的学者之一,他还有个斯坦福大学讲课的公开视频,个人认为内容堪称经典。
吴恩达:机器学习-机器学习的动机与应用-网易公开课https://open.163.com/newview/movie/free?pid=IEU2H8NIJ&mid=VEU2H8NKA
4.从零零碎碎的文字中提及的参考资料,这两本书应当也不错:
《机器学习》,清华大学出版社,周志华
《PRML》,Springer,Bishop
以下内容按我自己的理解,讲述一下BP神经网络算法的推导及编程思路,有不妥之处欢迎指正。附LabVIEW程序及相关程序如下。
------------------------------------------------------------------------------------------
链接:https://pan.baidu.com/s/17JYW77A9uVrna5XCEdO3iA
提取码:9527
------------------------------------------------------------------------------------------
1 神经网络
神经网络顾名思义是模仿神经元传导信息的机制,其实神经网络难就难在“网络”上,单个神经元并不复杂,图1所示为单个神经元模型。有n个神经元将信息传递给当前神经元,神经元之间受连接权值w的作用,其中b是偏置节点,属于截距项,这些信息相加,共同作用的效果为z,z在神经元中受激活函数的作用后,形成新的信息y,再传递给其他神经元。神经元的信息来自多个神经元,也把信息传递给多个单元,最终形成了神经网络。
图1 典型神经元模型结构
激活函数的种类,以及为什么要用激活函数可参考此文:
神经网络中常用的几种激活函数的理解 - EEEEEcho - 博客园https://www.cnblogs.com/lliuye/p/9486500.html
简言之,如果没有激活函数,网络从前至后传导都是线性的,引入激活函数后就使神经网络有了非线性的特征。本文采用如下两个函数:
sigmoid函数:
函数曲线如图2,可见0<f(z)<1,如果f(z)最末层神经元,那么输出就是就在(0,1)。