这周开始考虑在基于MP实现一些特定应用的时候,其实我心中是有几个雏形的,但是涉及到技术细节的时候,还是有些缺乏,所以就想找本书能提供些参考。巧合的是,发现了这本《神经网络与深度学习》,正好也是基于python的,有用武之地。
概念
本章通过神经网络来识别手写数字,在这一章中涉及到以下几个重要对象:
感知器,对特定输入向量输入0或者1,等效于与非门。
S神经元,激活函数为sigmoid函数的感知器。
为什么选用sigmod函数? 在现阶段看来,一是由于函数是平滑的,二是由于函数很好的收敛于0和1。
梯度下降法
Mathjax语法支持测试
这是一个很简单的算法,由于梯度方向是保证目标函数变小,被用来迭代寻找最优解。 由于每次迭代都要计算代价函数的变化,一种加速方法是随即梯度下降法,通过小批量数据(mini-batch)进行训练。
参考代码
相关python代码在代码仓库 主要用到了numpy的向量运算。
关于权重和偏置的合理解释
为什么要解释? 如果说现在拿到一个问题,马上就套用某某神经网络去训练,然后可能运气比较好,得到了正确率很高的结果,那么我们又如何看待这样的过程呢?其实神经网络也好,其他算法也好,说到底还是要从问题出发,去理解问题,理解问题是怎么在这个算法中逐步求解的,这样得到的结果才是可信的,这样的算法才是可持续的。所以对权重和偏置的解释能够帮助我们解答哪些问题适合通过感知器这样的网络来解决,哪些不适合。 目前文中的解释是带一些猜想性质的解释,例如把隐含层的神经元输出解释成组成数字的一部分图像。