内容简介:如果你已经读过了传统机器学习的书,相信你下一步就会对神经网络和深度学习产生兴趣,但却往往苦于不知道该从何入手。在这里我推荐给大家一本神经网络的好书给大家,对于没有任何数学基础的同学可以完全看懂整个数学证明原理,并且能实现出神经网络模型,而且本书非常轻薄,读起来就像故事一样:
如果你已经读过了传统机器学习的书,相信你下一步就会对神经网络和深度学习产生兴趣,但却往往苦于不知道该从何入手。
在这里我推荐给大家一本神经网络的好书给大家,对于没有任何数学基础的同学可以完全看懂整个数学证明原理,并且能实现出神经网络模型,而且本书非常轻薄,读起来就像故事一样:
《 Python神经网络编程 》。
推荐学习方法
先读附录,把其中的微积分知识学习一下,然后再开始从头学习。
对于书中所有的证明,务必争取看懂,不要跳过。
唯一绊住我的地方就是梯度下降的公式推导,其中有一处Σ求和公式略带误导性,其关键在于微分公式中唯一的变量只有Wij(特指某一个权重),而其他的权重都是已知量,因此可以消解。
实现关键
神经网络的训练分为3步:
- 信号前馈:根据权重矩阵,从输入层开始,逐层传递信号到输出层。
- 误差反向传播:先计算输出层的误差,然后根据权重矩阵,反向逐层传播误差到各个层的神经元。
- 梯度下降调整权重:因为计算出了所有层的每个神经元的误差,因此根据误差与权重之间的微分公式,可以根据误差值和当前权重算出此时的斜率,进而对权重进行一定的下降调整,这就是学习权重的过程,其目的就是误差最小化,当然这里需要通过学习率调节学习的速度。
我的实践
我的神经网络代码在这里: https://github.com/owenliang/NeuralNetwork
对于官方测试集的识别率接近97%左右,但对我个人手写的识别率要差很多,相信只有更高级的卷积模型才能进一步改善这个问题。
我另外改造了一版支持多个隐藏层的神经网络模型,但是发现增加更多的隐层并没有带来性能上升,反而精度下降了,据说这是因为模型过于复杂,而数据量太小并且过于简单,而这个更多隐层的神经网络应该就叫做深度神经网络了吧。
总结
读完这本书的感受是,理解神经网络一定要理解其数学原理,而如何把复杂的数学原理讲简单,这就是这本书的价值,可见作者水平之高。
博主无私的分享着知识,你愿意送他一顿热腾腾的早餐吗?
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- TensorFlow.js 卷积神经网络手写数字识别
- 手撸卷积神经网络之手写数字识别 (Java)
- matlab练习程序(神经网络识别mnist手写数据集)
- 卷积神经网络初探——LeNet-5的原理与手写数字识别的实现
- 手写一个解析器
- 手写一个webpack插件
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。