机器学习模型自我代码复现:MLP多层感知机

numpy实现的MLP深度学习模型BP反向传播实战
本文介绍如何使用numpy从头实现一个多层感知机(MLP)的BP算法,通过数学原理和代码实例,探讨了前向传播、激活函数、损失函数及反向传播的过程。通过MNIST数据集测试了模型性能。

根据模型的数学原理进行简单的代码自我复现以及使用测试,仅作自我学习用。模型原理此处不作过多赘述,仅罗列自己将要使用到的部分公式。

如文中或代码有错误或是不足之处,还望能不吝指正。

 本文侧重于使用numpy重新写出一个使用BP算法反向传播的MLP模型,故而不像其他文章那样加入图片演示正向传播与反相传播的原理或是某个特定函数的求导过程以及结论。

深度学习的一个典型例子就是将多层感知机(由输入到输出映射的数学函数)叠加在一起,由多个简单的函数符合在一起去拟合真实的目标函数;每一层隐藏层用以提取数据中的抽象特征,并且加入激活函数以拟合非线性函数。

前向传播:

X_{out} = f(W\cdot X_{in} + b)

其中,X_{in}为输入层/隐藏层/输出层的输入;W为这一层每个神经元的权重,b为神经元的偏置,f为激活函数,X_{out}为这一层的输出。

我们训练的目标,就是通过梯度下降的思想,求出Wb的梯度方向,在那个方向上,进行参数更新。

BP算法:输出层到隐含层

根据链式法则,\frac{\partial E}{\partial w_k} = \frac{\partial E}{\partial out} * \frac{\partial out}{\partial net} * \frac{\partial net}{\partial w_k}

其中,\frac{\partial E}{\partial out}为损失值Loss的逆向梯度,可以根据损失函数进求导进行计算;\frac{\partial out}{\partial net}为从输出层到隐含层的梯度,可以根据最后一个隐含层的激活函数求得;\frac{\partial net}{\partial w_k}为隐含层输出到自身某个权重参数w_k的梯度,因为net = w_1 * last_1 + w_2 * last_2 +...+w_k * last_k+...(其中last_k为上一层隐含层的输出),所以\frac{\partial net}{\partial w_k} =last_k

隐含层到隐含层:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值