非常易懂的神经网络数学推导及Matlab源码

平时用python调包习惯了,最近正好有课程大作业,趁这个机会推导一下最简单的神经网络的传导过程。

输入 x x x的shape是(M,N)的,其中M为样本量,N为单个样本的特征维度。

输入 y y y的shape是(M,1)的,其中M为样本量,1为单个样本的标签。

隐藏层的神经元个数分别为N1和N2个。左下角有每个向量的shape,方便校正比对结果的正确性。

前向传播

前向传播比较好理解,就一步步推就好了,中间结果大概是这样变化的:

(M,N)—>(M,N1)—>(M,N2)—>(M,1)

z 1 = x w 1 + b 1 z_1=xw_1+b_1 z1=xw1+b1
(M,N1)=(M,N)(N,N1)+(1,N1)
a 1 = s i g m o i d ( z 1 ) a_1=sigmoid(z_1) a1=sigmoid(z1)
(M,N1)=(M,N1)
z 2 = a 1 w 2 + b 2 z_2=a_1w_2+b_2 z2=a1w2+b2
(M,N2)=(M,N1)(N1,N2)+(1,N2)
a 2 = s i g m o i d ( z 2 ) a_2=sigmoid(z_2) a2=sigmoid(z2)
(M,N2)=(M,N2)
z 3 = a 2 w 3 + b 3 z_3=a_2w_3+b_3 z3=a2w3+b3
(M,1)=(M,N2)(N2,1)+(1,1)
a 3 = s i g m o i d ( z 3 ) a_3=sigmoid(z_3) a3=sigmoid(z3)
(M,1)=(M,1)


反向传播

首先了解一个sigmoid激活函数求导的性质,这对于后面的理解有帮助。

这是单个变量的求导(极其简单):
a 3 i = s i g m o i d ( z 3 i ) = 1 1 + e − z 3 i a_{3i}=sigmoid(z_{3i})=\frac{1}{1+e^{-z_{3i}}} a3i=sigmoid(z3i)=1+ez3i1
∂ a 3 i ∂ z 3 i = e − z 3 i ( 1 + e − z 3 i ) 2 = a 3 i × ( 1 − a 3 i ) \frac{\partial a_{3i}}{\partial z_{3i}}=\frac{e^{-z_{3i}}}{(1+e^{-z_{3i}})^2}=a_{3i}\times(1-a_{3i})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值