云风的Blog 学习神经网络的一点笔记

云风的 BLOG: 学习神经网络的一点笔记 (codingnow.com)

一开始,我是从维基百科的 Machine learning 开始读的。顺着看了一整天,了解了近年发展的脉络。好多词条,乱七八糟的笔记记了一大堆,感觉快消化不了了。疑问也积累了很多,觉得看下去效率会越来越低。不如换一条路。

然后我开始读 Neural Networks and Deep Learning 这本书。读了两章后,我想,手写数字识别看起来是一个非常好的实践手段,不如自己写一遍最快。有这么一个基础,后面可以继续修修补补,沿着前人的轨迹走一下,可以更好的理解为什么。

 

现在的条件远超 20 年前,训练这么一个简单的前馈神经网络估计在我的机器只要不到一分钟,可以很快得到反馈。有很多现成的代码可以比对,出了 bug 容易查。练习需要的数据也是唾手可得:THE MNIST DATABASE of handwritten digits 。虽然神经网络到底怎么工作的,人类恐怕还无法弄清楚每个神经元传递的信号的意义。这会导致程序出了 bug 很容易被掩盖起来,但有了数据库里的数据,我们还是可以从结果的正确率推测自己有没有实现对。所以用这个手写数字识别这个课题来学习是非常好的。

 

我在一开始觉得 backpropagation 的细节很难理解。后来看了另一篇文章 How Does Backpropagation in a Neural Network Work? 就明白了。原来,现在用的方法并不是人们一开始都知道的。现在我们用的从结果的差异反推来源的 delta ,公式非常简单,但数学原理并不简单。感谢 Andrew Ng 的公式 delta_0 = w . delta_1 . f'(z) ,我们只需要对正向信号传播时,每个神经元上得到的值求导,乘上该神经元输出端的神经元上的 delta 和输出权重就可以得到它的 delta 。总 delta 就是所有输出侧用该公式计算出的 delta 累积量。

 

我写程序的过程中,一共出过两个 bug。其中一个就是在 backpropagation 过程的,主要还是理解不到位引起的手误。花了两个小时重新读书、理解、再审查代码才找出来。

我将代码提交到了 github ,有兴趣的同学可以参考。https://github.com/cloudwu/neuralnet 。

 

书本推荐。深度学习入门,应该是最开始需要看的书

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章