首页 > 编程知识 正文

通俗易懂意思是什么,传播学符号分类结构图

时间:2023-05-06 04:03:26 阅读:32974 作者:4792

我最近在看深度学习的东西。 首先看到的jxdkfd的UFLDL教程,有中文版的话就直接看到了。 后来发现有些地方总是不明确,去看了英语版,然后找了一些资料看。 中文版译者补充翻译时省略的公式推导过程,但补充是错误的。 不足为奇。 反向传播法其实是神经网络的基础,但很多人在学习的时候总是遇到问题,或者看了长篇公式觉得很难就退缩,其实并不难。 连锁求导定律被反复使用。 不想看公式的话,直接输入数值,实际计算一下,在体会了这个过程之后再导出公式,我觉得很简单。

说到神经网络,你们应该看到这张图并不知道:

这是典型的三层神经网络的基本配置,其中第一层是输入层,第二层是隐含层,第三层是隐含层。 如果我们希望现在手上有很多数据{x1、x2、x3、xn},输出也是很多数据{y1、y2、y3、yn}的你的输出与原始输入相同,那么最一般可能会有人问,为什么输入输出相同? 有什么用? 其实应用很广泛,用于图像识别、文本分类等。 我特意再写一篇自动编码器的文章来说明。 也包括变种等。 如果你的输出与原始输入不同,那就是常见的人工神经网络。 相当于映射原始数据得到我们想要的输出数据。 也就是说,是今天要说的话题。

本文直接举一个例子,引入数值演示的反向传播法过程,公式推导要等到下次写自动编码器的时候再写,其实很简单。 感兴趣的学生可以试着自己导出:)

假设你有这样的网络层:

第一层是输入层,包含两个神经元i1、i2和截距项b1的第二层是抑制层,包含两个神经元h1、h2和截距项b2,第三层是输出o1、o2,各线上标的wi是连接层和层间的权重,激活函数默认为sigmmmi

现在,给他们初始值,如下图所示。

在此,输入数据i1=0.05、i2=0.10;

输出数据o1=0.01、o2=0.99;

初始权重w1=0.15、w2=0.20、w3=0.25、w4=0.30;

w5=0.40、w6=0.45、w7=0.50、w8=0.55

目标:给出输入数据i1、I2(0.05和0.10 ),使输出尽量接近原始输出o1、I2(0.05和0.99 )。

Step 1 前向传播

1 .输入层----隐含层:

计算神经元h1的输入加权和:

神经元h1的输出o1: (这里使用的激活函数是sigmoid函数) :

同样地,能够计算神经元h2输出o2 :

2 .隐含层----输出层:

计算输出层神经元o1和o2的值:

前向传播过程到此结束,输出值为[ 0.75136079,0.772928465 ],与实际值[ 0.01,0.99 ]相差甚远。 目前正在反向传播误差,更新权重,重新计算输出。

Step 2 反向传播

1 .计算总误差

总误差: (方形错误) ) ) ) ) )。

但是,由于有两个输出,如果分别计算o1和o2的误差,则总误差为两者之和:

2 .隐含层----输出层权重更新:

以权重参数w5为例,如果想知道w5对整体误差有多大影响,可以用偏导数根据整体误差求出w5。 ((连锁法则) )。

下图可以更直观地看到误差是如何反向传播的。

现在,让我们分别计算一下各式各样的值。

计算:

计算:

(这个步骤实际上是导出sigmoid函数,比较简单,请自己导出试试。)

计算:

把最后三个相乘:

由此,计算出整体误差E(total相对于w5的偏导数。

回顾一下上面的公式,就知道了以下内容。

为了方便表达,用于表示输出层的误差:

因此,整体误差e(total )相对于w5的偏导数可以写如下

如果输出电平误差计为负,也可以写如下。

最后更新w5的值吧:

(其中,是学习速度。 这里取0.5 )

同样,可以更新w6、w

7,w8:

 

3.隐含层---->隐含层的权值更新:

 方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏导时,是从out(o1)---->net(o1)---->w5,但是在隐含层之间的权值更新时,是out(h1)---->net(h1)---->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。

 

 

计算:

先计算:

同理,计算出:

          

两者相加得到总值:

再计算:

再计算:

最后,三者相乘:

 为了简化公式,用sigma(h1)表示隐含层单元h1的误差:

最后,更新w1的权值:

同理,额可更新w2,w3,w4的权值:

 

  这样误差反向传播法就完成了,最后我们再把更新的权值重新计算,不停地迭代,在这个例子中第一次迭代之后,总误差E(total)由0.298371109下降至0.291027924。迭代10000次后,总误差为0.000035085,输出为[0.015912196,0.984065734](原输入为[0.01,0.99]),证明效果还是不错的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。