《深度学习的数学》给予了我极大的启发,作者阐述的神经网络的思想和数学基础令我受益颇多,但是由于书中使用Excel作为示例向读者展示神经网络,这对我这样一个不精通Excel的人来说很头疼,因此我打算使用Python来实现书中的一个简单网络模型,即识别数字0和1的模型。
这个网络模型极其简单,比号称机器学习中的“Hello World”的手写数字识别模型更简单,它基本没有实用价值,但是我之所以推崇它,只因为它褪去了神经网络的复杂性,展示了神经网络中最基本、最根本的东西。
模型总共分为三层,第一层为输入层,第二层为隐藏层,第三层为输出层。输入层包括12个输入输出变量xi(i=1,2,...,12)x_i (i=1,2,...,12)xi(i=1,2,...,12),隐藏层包括三个神经单元,输出层包括两个神经单元。
下面是涉及到的数学知识。
神经网络的参数是通过将代价函数(损失函数)最小化来确定的,本文所使用的的最小化方法是梯度下降法,但是直接计算梯度是很困难的,因此引入了误差反向传播法,通过计算出输出层的误差,然后通过误差的递推公式计算出隐藏层的误差。
<隐藏层>
z12z_1^2z12=∑i=112w1i2xi+b12\sum_{i=1}^{12}w_{1i}^2x_i+b_1^2∑i=112w1i2xi+b12
z22z_2^2z22=∑i=112w2i2xi+b22\sum_{i=1}^{12}w_{2i}^2x_i+b_2^2∑i=112w2i2xi+b22
z32z_3^2z32=∑i=112w3i2xi+b32\sum_{i=1}^{12}w_{3i}^2x_i+b_3^2∑i=112w3i2xi+b32
ai2=a(zi2)(i=1,2,3)a_i^2=a(z_i^2) (i=1,2,3)ai2=a(zi2)(i=1,2,3)
<输出层>
z13z_1^3z13=∑i=13w1i3ai2+b13\sum_{i=1}^{3}w_{1i}^3a_i^2+b_1^3∑i=13w1i3ai2+b13
z23z_2^3z23=∑i=13w2i3ai2+b23\sum_{i=1}^{3}w_{2i}^3a_i^2+b_2^3∑i=13w2i3ai2+b23
ai3=a(zi3)(i=1,2)a_i^3=a(z_i^3) (i=1,2)ai3=a(zi3)(i=1,2)
C=1/2∗((t1−a13)2+(t2−a23)2)C=1/2*((t_1-a_1^3)^2+(t_2-a_2^3)^2)C=1/2∗((t1−a13)2+(t2−a23)2),其中zjlz_j^lzjl为层l的第j个神经单元的加权输入的值,wijl+1w_{ij}^{l+1}wijl+1为层l的第j个神经单元指向层l+1的第i个神经单元的箭头的权重,bjlb_j^lbjl表示层l的第j个神经单元的偏置,ajla_j^lajl为层l的第j个神经单元的输出,a(z)为激活函数,C为平均误差,
| 含义 | 图像为0 | 图像为1 | |
|---|---|---|---|
| t1t_1t1 | 0的正解变量 | 1 | 0 |
| t2t_2t2 | 1的正解变量 | 0 | 1 |
| 图像为0 | 图像为1 | |
|---|---|---|
| a13a_1^3a13 | 接近1的值 | 接近0的值 |
| a23a_2^3a23 | 接近0的值 | 接近1的值 |
输出层L的误差公式
δjL=∂C∂ajLa′(zjL)δ_j^L= \frac{\partial C}{\partial a_j^L}a'(z_j^L)δjL=∂ajL∂Ca′(zjL)
中间层的递推关系式
δil=∑k=1mδkl+1wkil+1a′(zil)δ_i^l={\sum_{k=1}^{m}δ_k^{l+1}w_{ki}^{l+1}}a'(z_i^l)δil=<

本文介绍了一个使用Python实现的简单神经网络模型,用于识别数字0和1。该模型包含输入、隐藏和输出三层,通过梯度下降法和误差反向传播法训练权重和偏置。经过50次训练后,得到了隐藏层和输出层的权重与偏置值,并展示了如何用训练得到的网络进行图像预测。
最低0.47元/天 解锁文章
2113

被折叠的 条评论
为什么被折叠?



