MAKE YOUR OWN NEURAL NETWORK 阅读笔记
最终成果:实现一个简单的BP三层的神经网络,实例为识别mnist上面的数字数据集
1.首先简短介绍一下神经网络的样子
生物里学到是这样的
然后用在计算机里面就是这样的了,生物当中的神经元会有一个阈值,达到阈值之后神经元被激活再向后传播,模型当中会有一个阈值函数,本书当中使用sigmoid函数将输出控制在0~1之间
之后,我们要用这个模型做分类
2.再讲一下信号源如何在神经元当中传输
用一个简单的两层,每层两个的神经元做介绍
从上到下分别输入1.0, 0.5,每一层神经元到下一层每一个神经元的连接的阈值随机分配值,值分布在0~1之间,可以得到以下的简单模型:
然后我们把值带进去计算,模拟一下,计算的模型如下:
我们就可以得到sum input的结果
得到sum之后通过sigmoid函数得到最终的output y
但是这样计算表示起来过于复杂,引入矩阵的运算
通过这样运算达到了效果,也更加简介,方便调用后面代码中numpy矩阵运算的库
3.我们正向传播描述结束,接下来要讲述一下如何反向传播,修正神经元之间连接的权重
我们首次随机权重,定会有很大的错误,权重更大的需要更改的更多,所以我们把错误按照权重占比反向传播,最终每一条边都会分到错误的份额。接着会汇聚到神经元上,神经元得到错误的综合,然后向后继续按照权重传播。
到此,我们已经完成错误的分配,下面要开始update神经元之间连接的权重了
4. 使用梯度下降确定神经元之间的权重
书中的插图非常的形象,当我们要找一条下山的路时候,就是走到最低的地方,这里就类似于我们要找cost函数的最小值,我们每一次向下迈出一步的时候都会选择最陡的路。
我们学过如何找最陡的路,就是求偏导。在我们的反向传播的神经网络中损失函数为:
(目前还不会用latex写数学公式,使用截图和拍照)
手动推导了一下,最终得到结果
我们拿到这个式子之后已经知道如何更新神经元之间的权值了,接下来就是写代码实现了,之后再更。
需要英文版书的call我。