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

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

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

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

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

前向传播

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

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

z1=xw1+b1z_1=xw_1+b_1z1=xw1+b1
(M,N1)=(M,N)(N,N1)+(1,N1)
a1=sigmoid(z1)a_1=sigmoid(z_1)a1=sigmoid(z1)
(M,N1)=(M,N1)
z2=a1w2+b2z_2=a_1w_2+b_2z2=a1w2+b2
(M,N2)=(M,N1)(N1,N2)+(1,N2)
a2=sigmoid(z2)a_2=sigmoid(z_2)a2=sigmoid(z2)
(M,N2)=(M,N2)
z3=a2w3+b3z_3=a_2w_3+b_3z3=a2w3+b3
(M,1)=(M,N2)(N2,1)+(1,1)
a3=sigmoid(z3)a_3=sigmoid(z_3)a3=sigmoid(z3)
(M,1)=(M,1)


反向传播

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

这是单个变量的求导(极其简单):
a3i=sigmoid(z3i)=11+e−z3ia_{3i}=sigmoid(z_{3i})=\frac{1}{1+e^{-z_{3i}}}a3i=sigmoid(z3i)=1+ez3i1
∂a3i∂z3i=e−z3i(1+e−z3i)2=a3i×(1−a3i)\frac{\partial a_{3i}}{\partial z_{3i}}=\frac{e^{-z_{3i}}}{(1+e^{-z_{3i}})^2}=a_{3i}\times(1-a_{3i})z3ia3i

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值