多层神经网络反向传播推导过程详解——神经网络之softmax(8)

14 篇文章 3 订阅
12 篇文章 0 订阅

转载https://forecast.blog.csdn.net/article/details/97699884?spm=1001.2014.3001.5502

通过对本系列的学习,你可以全面的了解softmax的来龙去脉。如果你尚不了解神经网络,通过本系列的学习,你也可以学到神经网络反向传播的基本原理。学完本系列,基本神经网络原理就算式入门了,毕竟神经网络基本的网络类型就那几种,很多变种,有一通百通的特点。

网上对softmax或是神经网络反向传播知识的整理,基本都通过一个长篇大论堆积出来,一套下来面面俱到但又都不精细。本文将每个环节拆开,分别进行详细介绍,即清晰易懂,又减轻了阅读负担,增加可读性。本文也借鉴了其他作者的内容,并列举引用,希望大家在学习过程中能有所收获

本章内容提要:

高端玩家当然是越玩越复杂,简单的单层神经网络已经无法满足我们了,我们需要更多层的神经网络。由多个中间层构成的网络更深了,其实这也就是我们常说的另概念:“深度学习”。所以深度学习往往具有更加庞大和复杂的网络结构。

万里高山平地起,我们这一节就来学一学,如何解决多层神经网络反向传播的问题。

 

一、多层神经网络的概念

这里先讲一个重要概念。

多层神经网络神经网络不仅仅是简单的叠加很多线性层,层与层之间不是仅仅简单的做矩阵乘法。神经因为从数学的角度讲,多个线性计算归根到底可以合并成一个线性计算,那么多个网络层叠加进行线性变换就没有意义了。

多个层进行线性计算就好像是:1*2*3*4*5*6,完全可以简单的写成:24*30,由此可见,多层线性计算本质上没有意义,因此我们在每一层网络上动了“手脚”,就好像是将:1*2*3*4*5*6, 变成了:sin(1)*cos(2)*tan(3)*cot(4)*log(5)*e^(6)。

这样每层网络都变得独一无二,无可替代,我们在这每层中动的“手脚”,其实就是所谓的激活函数,激活函数的重要意义就是将线性网络变得不再线性,从而能构成更复杂的深度网络。

这部分作者整理了一篇文章,专门进行介绍。

 

二、多层神经网络的结构原理

我们现在看一看多层神经网络的结构图:

举个例子,图中的h1和h2代表两个网络层,在h1和h2层中各有一个激活函数,分别是φ11和φ21。

1.输入数据i1与权重W相乘,得Zin11,Zin11通过激活函数φ11得到Zout11.

2.Zout11继续与权重W相乘,得到Zin21,Zin21通过激活函数φ21得到Zout21.

3.Zout21通过分类函数softmax转换,成概率分布S1.

4.S1通过损失函数计算得到损失值Loss.

以上就是一个完整的数据流。

详细计算过程如下:

 

三、多层网络反向传播推导过程

我们在本系列的第五、六两篇文章中,学到了神经网络反向传播的意义和原理,知道神经网络通过一种链式求导的方法,一步步将误差从后向前传播。

同时前文也已经详细的描述了神经网络求导的本质是为了修改权重矩阵,所以我们可以得到如下链式求导公式,看起来很长,但是一个都不能少:

在笔记中给出两个公式,结合第二节中给出的神经网络结构图,可以看出在网络的最后有两个输出,分别为S1和S2,两个输出结果分别各得出一个损失函数,Loss1和Loss2.对于一个权重值来说,每个损失值都会对其产生影响,所以我们更新权重W1的时候,要分别考虑两个损失函数对其产生的影响,所以这就是笔记中出现两个求导公式原因。

接下来我们详细分析一下链式求导中的每个过程,笔记如下:

最终得出的结果,就是将这些求导过程相乘,根据本系列中第七篇文可知,此时得出的Δw是一个有符号的数字,Δ的正负符号告诉了我们沿着梯度更新的方向,此时将Δ乘以一个学习率η,得到的η·Δw,就是要更新的权重数值:

                                      W^{+} = W-\eta \Delta w

                                       W^{+} = W-\eta \frac{\partial Loss}{\partial W}

对于如本文中提到的,具有多个损失函数的网络来说,权重的更新形式为:

                                      W^{+} = W-\eta \Delta w_{1} - \eta \Delta w_{2} -......

 

四、总结

以上就是对于多层神经网络的链式求导过程,是不是觉得有点即复杂又简单,复杂是因为表达式很长,但分解开来每个过程都是很简单的。

现在你已经迈向了对深度神经网络或者说对深度学习探索的的第一步,是不是已经有点急不可耐的动手写代码了?还是说想继续巩固一下基础,深入去研究一下神经网络内部理论?亦或是想多学几种类型的网络,比如卷积网络?循环网络?还已经复制了别人的神经网络代码,但不知如何将其变成专属与自己的东西,不知如何去优化?

后续我们将去了解神经网络的一些优化手段:激活函数和神经网络间的关系详解——神经网络的数学基础原理(1)

 

五、附学习笔记如下:

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值