本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
本文用于讲解《BP算法-自实现》系列文章的目标和意义
让读者在学习前了解本系列文章的内容和结构
本系列文章的目标
《BP算法重现》系列文章的目标主要是
👉1. 弄清楚matlab工具箱是怎么训练BP神经网络的
👉2. 自写代码重现与matlab工具箱的一模一样的效果
为什么要弄清楚工具箱的算法实现
一、验证自己是否掌握BP神经网络
要问“怎么才算学会BP神经网络”
那最好的证据就是“能写出与matlab工具箱一样的效果”!
笔者学习BP神经网络还是很多年前,很多资料说得模凌两可,抽象致极
即使整本书都看明了,却仍然不知道“BP神经网络是什么”
最后东拼西凑总算拼出了一个整体的轮廓
但又如何知道自己所认识的“BP神经网络”就是“BP神经网络”呢?!
那就自写代码实现来训练一个神经网络!
然而,按书本上的理论用代码实现后,
却发现实际应用的效果与matlab工具箱训练出来的效果差太多了!
最后,笔者只好硬着头皮,把matlab的源码一点一点扒出来
并找到相关的理论文档一点一点的研究,
才明白,原来BP神经网络比以前书上看到的要复杂多了,但又简单多了!
越合理的东西,虽然更加复杂,但理解起来却更加简单!
二、训练出更好的BP神经网络
如果使用工具箱就能训练出一个好结果 ,那就没什么事了,
但事实上往往效果并不是那么理想!
如果使用工具箱,几乎就只能不断调整参数盲目尝试
这种无力感,往往只有当事人才能理解
所以,如果你一定要在某个问题上训练出一个好的结果
那使用工具箱是远远不够的
为什么呢?
首先,你必须“懂”BP神经网络,才能思考和分析问题出现在哪里
其次,在分析问题的过程中,往往需要打印出一些中间的训练结果,或者进行断点调试
对于工具箱的高度封装,那是没有办法的
最后,在问题分析出来后,如果要针对问题自主修改一些训练机制,
使用工具箱显然是没办法的,所以,使用自写的代码,就非常必要,
爱怎么分析,爱怎么修改,自由自在
三、理论研究改进算法
如果有志于改进算法,
那无疑,站在matlab工具箱的效果基础上,进一步迭代会更为实际
如果仅是与书本上看到的“随机初始化,然后梯度下降迭代”进行比较
那是没有太大意义的,
经常看到有人在用工具箱训练效果不佳后,
企图“用遗传算法初始化权重阈值”这样的想法来改进效果
最后却发现是徒劳的,甚至也不知道为什么没有效果
我相信,
如果弄清楚matlab工具箱的训练机制后,
他如果要优化初始值,会有更多更好的想法
所以,
先弄清楚matlab工具箱是怎么训练BP神经网络的就极具意义
在这个前提下,能找到更好更准确的改进方向
本系列文章内容安排
👉一、回顾和总结BP神经网络的基本思想与原理
👉二、细讲初始化的理论
👉三、学习梯度下降算法实现BP神经网络的相关理论
👉四、自写代码实现matlab工具箱的traingd、traingda训练方法,并与工具箱的结果进行比较
👉五、学习trainlm算法相关的理论
👉六、自写代码实现matlab工具箱的trainlm训练方法,并与工具箱的结果进行比较
好了,让我们开始学习的旅程吧~
祝大家学习顺利!
End