反馈神经网络:反向传播算法与简单的反馈神经网络算法python实现,在脱离api的路上越走越远。。。

您所在的位置:网站首页 神经网络反馈算法实验报告 反馈神经网络:反向传播算法与简单的反馈神经网络算法python实现,在脱离api的路上越走越远。。。

反馈神经网络:反向传播算法与简单的反馈神经网络算法python实现,在脱离api的路上越走越远。。。

2024-07-17 18:02| 来源: 网络整理| 查看: 265

本文就数学原理,思想基础,python实现几个角度讲解反向传播的实现,需要部分基础,可能跟我差不多的小白会看的有点吃力。。。

文章目录 一. 深度学习基础1. 深度学习2. 反向传播算法3. 梯度下降算法与链式求导法则①. 链式求导法则②. 梯度向量③. 梯度下降算法 4. 最小二乘法 二. 反馈神经网络1. 反馈神经网络原理与具体过程2. 反馈神经网络的激活函数3. 代码:

一. 深度学习基础 1. 深度学习

深度学习是统计学的应用,属于机器学习基础之后的内容。它的任务其实与机器学习殊途同归,都是在寻找数据与数据的关系,结果与影响因素的一一对应关系。就像是寻找x,y的关系,建立一个模型,这里将狭义的x,y拓展到了向量,矩阵,等张量。而随着数据复杂度的增加,也不能在用一个简单的函数,对输入做映射了。 在数学中,通过各种复杂的多元函数,高阶函数解决复杂模型的拟合问题。但是过于复杂的函数式求解本身存在很大的难度,想要获取其公式更是难上加难。 经过前人的研究,发现可以通过神经网络表示这样一个一一对应的关系。而神经网络的本质也就是一个多元复合函数。通过增加网络的层次和神经元,可以更好的表达函数的复合关系。

2. 反向传播算法

众所周知,反向传播算法是神经网络的核心与精髓😂,好吧,开玩笑。反向传播算法在训练中确实占据了举足轻重的地位。它到底是个什么? 其实反向传播算法并不复杂,就像是,更像是字面意思,反向,传播。它是高数中链式求导法则的一个强大的应用。接下来回讲到一个反向传播算法应用的基础。

3. 梯度下降算法与链式求导法则

梯度下降算法是链式求导法则的一个应用,梯度下降算法属于BP神经网路的经典算法,我们先来说链式求导法则。

①. 链式求导法则

链式求导法则是高数中的一种求导方法。 在这里插入图片描述 上图为公式的整个过程,在本例中我们要求得e对各个点的梯度。需要将每个点与e连接起来,比如我们要求e对输入点a的梯度。那么我们需要。

在这里插入图片描述

这样我们就将e和b梯度联系起来了。于是通过同理推导,可以得到e对b求偏导。 在这里插入图片描述

显然,e对a求偏导就是建立了一条路径,这样就很容易求偏导,这也就是链式求导的强大应用。

②. 梯度向量

梯度向量:

如果将神经网络数学公式按向量的形式去写: 在这里插入图片描述 那么梯度向量就是如下: 在这里插入图片描述

所谓的梯度向量其实就是求出函数在每个向量的偏导数之和,这也正是链式法则解决的问题了。

③. 梯度下降算法

梯度下降原理:将函数比作一座山,我们站在某个山坡上,往四周看,从哪个方向向下走一小步,能够下降的最快,这也正是梯度下降名字的由来,其原先的故事是道士下山,不过读者们可自己去了解。 从函数的角度来看,对于一个函数J(θ)来说,无非就是求它的偏导。但偏导却不一定负数,因此我们要求的是这个偏导的相反数,视为它的反梯度。其求解过程如下: 这里的J(θ)复合了f(θ)和y

首先我们要定义f(θ): 在这里插入图片描述

h本质上是f,只是为了表现出θ将其改写为这种格式。

在这里插入图片描述

具体过程建议自己字草稿纸上上推导。

求得梯度之后就可以,用如下公式不断迭代求θ 在这里插入图片描述 其中a为学习率,就是代表没每一步固定要走多远,这样的话就很容易想到,如果a设置很大的话,很有可能会走不到局部最小点。从公式来看的话,也容易分析得到,该公式本质是求局部极小点的,这是它的优点,也是它的致命缺点。导致了后来,如果一个函数曲线的极小点过多,那么它的效果很差,因为往往在某个极小点迭代就会停止。产从实际角度来看就是,从山上往下走,走到某个坑,看到对面已经是上坡了,就认为自己已经下山了,殊不知,自己只是在山上的一个坑洞中。

python代码:

x=[(2,0,3),(1,0,3),(1,1,3),(1,4,2),(1,2,4)] y=[5,6,8,10,11] epsilon=0.002 alpha=0.002 diff=[0,0] max_itor=1000 error0=0 error1=0 cnt=0 m=len(x) theta0=0 theta1=0 theta2=0 while True: cnt+=1 for i in range(m): diff[0]=(theta0*x[i][0]+theta1*x[i][1]+theta2*x[i][2])-y[i] theta0-=alpha*diff[0]*x[i][0] theta1-=alpha*diff[0]*x[i][1] theta2-=alpha*diff[0]*x[i][2] error1=0 for lp in range(len(x)): error1+=(y[lp]-(theta0*x[lp][0]+theta1*x[lp][1]+theta2*x[lp][2]))**2/2 if abs(error1-error0)


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3