excel手撕BP神经网络(只需高中数学基础)

神经网络最基础部分是由神经元组成,一个神经元相当于是一个一次函数,y=ax+b
即在已知x,和y情况下,怎么使用神经网络求解a和b

如下是使用excel求解的神经网络,可以方便理解神经网络运行原理
excel BP神经网络下载地址

0 excel数据及任务

  • 构造了如下数据,x0,x1,x2和y_true。其中x0,x1,x2对应真实wTrue(w0,w1,w2)如表格所示(表格数据都可以修改,公式已经编辑好),
    即 y=x0 * wt0 + x1 * wt1 + x2 * wt2
  • 任务;需要使用神经网络计算出真实的w

1 神经网络求解步骤:

已知 x 和y

  • 1 随机初始化wi
    初始化w全为0, w00=0,w01=0,w02=0 (为了简化,只考虑w,不考虑b)
  • 2 将x带入 a和b参数函数,得到y的预测值y_pred
    y_pred=x0w00+x1w01+x2*w02
  • 3 将预测y_pred与真实值y进行对比,构建损失函数(刚开始,随机的w误差肯定很大)
    loss= ( y _ p r e d − y _ t r u e ) 2 (y\_pred-y\_true)^2 (y_predy_true)2
  • 4 对损失函数求导,使用梯度下降更新参数w.
    导数
    w00导数:dy_dw00: 2*(y_pred-y_true)x0
    w01导数:dy_dw01: 2
    (y_pred-y_true)x1
    w02导数:dy_dw02: 2
    (y_pred-y_true)*x2
    步长:lr=0.001
    新的 w00= w00-lr * dy_dw00
    新的 w01= w01-lr * dy_dw01
    新的 w02= w02-lr * dy_dw01
  • 5 循环上面2~4步,直到收敛

2 反向传播公式推导

上面第3步,损失函数为loss= ( y _ p r e d − y _ t r u e ) 2 (y\_pred-y\_true)^2 (y_predy_true)2
其中w00,w01,w02倒数如下。导数公式证明见2.1或者2.2小节,其中用到了 x 2 x^2 x2 的导数为2x, x 2 x^2 x2的倒数证明见第4小节。
在这里插入图片描述

2.1 根据链式法则求导

若链式法则求导无法理解见 2.2节直接求导
loss= ( y _ p r e d − y _ t r u e ) 2 (y\_pred-y\_true)^2 (y_predy_true)2 对w的导数为
∂ ( y _ p r e d − y _ t r u e ) 2 ∂ w 0 = 2 ( y _ p r e d − y _ t r u e ) ∗ x 0 \frac{\partial(y\_pred-y\_true)^2}{\partial w0}=2(y\_pred-y\_true)*x0 w0(y_predy_true)2=2(y_predy_true)x0
∂ ( y _ p r e d − y _ t r u e ) 2 ∂ w 1 = 2 ( y _ p r e d − y _ t r u e ) ∗ x 1 \frac{\partial(y\_pred-y\_true)^2}{\partial w1}=2(y\_pred-y\_true)*x1 w1(y_predy_true)2=2(y_predy_true)x1
∂ ( y _ p r e d − y _ t r u e ) 2 ∂ w 2 = 2 ( y _ p r e d − y _ t r u e ) ∗ x 2 \frac{\partial(y\_pred-y\_true)^2}{\partial w2}=2(y\_pred-y\_true)*x2 w2(y_predy_true)2=2(y_predy_true)x2

2.2 直接求导

若不知道x^2的倒数,见第4小节

  • loss展开
    y_pred=x0w00+x1w01+x2*w02
    ( y _ p r e d − y _ t r u e ) 2 = ( x 0 ∗ w 00 + x 1 ∗ w 01 + x 2 ∗ w 02 − y _ t r u e ) 2 (y\_pred-y\_true)^2=(x0*w00+x1*w01+x2*w02-y\_true)^2 (y_predy_true)2=(x0w00+x1w01+x2w02y_true)2
  • 如上,如果对w00求导,则其他项可以看成常数
    ( y _ p r e d − y _ t r u e ) 2 = ( x 0 ∗ w 00 ) 2 + 2 ( x 0 ∗ w 00 ) ∗ ( x 1 ∗ w 01 + x 2 ∗ w 02 − y _ t r u e ) + ( x 1 ∗ w 01 + x 2 ∗ w 02 − y _ t r u e ) 2 (y\_pred-y\_true)^2=(x0*w00)^2+2(x0*w00)*(x1*w01+x2*w02-y\_true)+(x1*w01+x2*w02-y\_true)^2 (y_predy_true)2=(x0w00)2+2(x0w00)(x1w01+x2w02y_true)+(x1w01+x2w02y_true)2
  • 则对w00的倒数为
    2 ∗ x 0 2 ∗ w 00 + 2 x 0 ∗ ( x 1 ∗ w 01 + x 2 ∗ w 02 − y _ t r u e ) 2*x0^2*w00+2x0*(x1*w01+x2*w02-y\_true) 2x02w00+2x0(x1w01+x2w02y_true)
    = 2 ∗ x 0 ∗ ( x 0 ∗ w 00 + x 1 ∗ w 01 + x 2 ∗ w 02 − y _ t r u e ) 2*x0*(x0*w00+x1*w01+x2*w02-y\_true) 2x0(x0w00+x1w01+x2w02y_true)
    = 2 ∗ x 0 ∗ ( y _ p r e d − y _ t r u e ) 2*x0*(y\_pred-y\_true) 2x0(y_predy_true)
  • 同理w01,w02的倒数都可以求出
    分别为
    2 ∗ x 1 ∗ ( y _ p r e d − y _ t r u e ) 2*x1*(y\_pred-y\_true) 2x1(y_predy_true)
    2 ∗ x 2 ∗ ( y _ p r e d − y _ t r u e ) 2*x2*(y\_pred-y\_true) 2x2(y_predy_true)

直接求导与链式求导结果一样

3 结果展示

如下所示,数据在进行了两轮更新(共计20步)后,已从初始值0,0,0逐步收敛到真实值wTrue.
excel下载地址

在这里插入图片描述

4 x^2导数公式推导

  • x^2倒数证明如下
    在这里插入图片描述
经典卷积神经网络是指使用numpy纯写的卷积神经网络代码,该代码可以帮助理解卷积神经网络的原理。它不使用任何神经网络框架,适合那些有意愿深入理解卷积神经网络的人群。这个的代码相对简单,但是通过研究它,可以充分理解卷积神经网络的工作原理。 卷积神经网络(CNN)是一种常用于图像处理和识别的深度学习模型。它通过卷积、池化和全连接等组成,实现了对图像特征的提取和分类。在卷积神经网络中,卷积通过滤波器(卷积核)对输入图像进行卷积操作,以提取图像的局部特征。池化则通过降采样的方式,减少特征图的尺寸,同时保留重要的特征信息。全连接将特征图转化为一维向量,并通过神经网络的计得出最终的分类结果。 通过经典卷积神经网络的代码,我们可以更加深入地了解卷积神经网络的计过程。该代码中的全连接实际上就是指上述提到的全连接神经网络,它将最后一次卷积操作的输出作为输入,并通过神经网络的计产生最终的输出结果。 总之,经典卷积神经网络可以帮助我们更好地理解卷积神经网络的原理和计过程。通过研究这个代码,我们可以深入了解卷积操作、池化操作和全连接操作在卷积神经网络中的应用,从而更好地应用和设计卷积神经网络模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值