excel手撕神经网络(只需高中数学基础)
神经网络最基础部分是由神经元组成,一个神经元相当于是一个一次函数,y=ax+b
即在已知x,和y情况下,怎么使用神经网络求解a和b
如下是使用excel求解的神经网络,可以方便理解神经网络运行原理
excel玩具神经网络下载地址
百度网盘链接: https://pan.baidu.com/s/15DJ_NQS9W7A5glkVABltJQ?pwd=jwf4 提取码: jwf4
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_pred?y_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_pred?y_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_pred?y_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_pred?y_true)2?=2(y_pred?y_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_pred?y_true)2?=2(y_pred?y_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_pred?y_true)2?=2(y_pred?y_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_pred?y_true)2=(x0?w00+x1?w01+x2?w02?y_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_pred?y_true)2=(x0?w00)2+2(x0?w00)?(x1?w01+x2?w02?y_true)+(x1?w01+x2?w02?y_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) 2?x02?w00+2x0?(x1?w01+x2?w02?y_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) 2?x0?(x0?w00+x1?w01+x2?w02?y_true)
= 2 ? x 0 ? ( y _ p r e d ? y _ t r u e ) 2*x0*(y\_pred-y\_true) 2?x0?(y_pred?y_true) - 同理w01,w02的倒数都可以求出
分别为
2 ? x 1 ? ( y _ p r e d ? y _ t r u e ) 2*x1*(y\_pred-y\_true) 2?x1?(y_pred?y_true)
2 ? x 2 ? ( y _ p r e d ? y _ t r u e ) 2*x2*(y\_pred-y\_true) 2?x2?(y_pred?y_true)
直接求导与链式求导结果一样
3 结果展示
如下所示,数据在进行了两轮更新(共计20步)后,已从初始值0,0,0逐步收敛到真实值wTrue.
excel下载地址
百度网盘链接: https://pan.baidu.com/s/15DJ_NQS9W7A5glkVABltJQ?pwd=jwf4 提取码: jwf4
4 x^2导数公式推导
- x^2倒数证明如下
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!