识别数字0和1的简单网络

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

《深度学习的数学》给予了我极大的启发,作者阐述的神经网络的思想和数学基础令我受益颇多,但是由于书中使用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^2i=112w1i2xi+b12
z22z_2^2z22=∑i=112w2i2xi+b22\sum_{i=1}^{12}w_{2i}^2x_i+b_2^2i=112w2i2xi+b22
z32z_3^2z32=∑i=112w3i2xi+b32\sum_{i=1}^{12}w_{3i}^2x_i+b_3^2i=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^3i=13w1i3ai2+b13
z23z_2^3z23=∑i=13w2i3ai2+b23\sum_{i=1}^{3}w_{2i}^3a_i^2+b_2^3i=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((t1a13)2+(t2a23)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=ajLCa(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=<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值