循环神经网络(二)-极其详细的推导BPTT – 努力的孔子


循环神经网络(二)-极其详细的推导BPTT

首先明确一下,本文需要对RNN有一定的了解,而且本文只针对标准的网络结构,旨在彻底搞清楚反向传播和BPTT。

 

反向传播形象描述

什么是反向传播?传播的是什么?传播的是误差,根据误差进行调整。

举个例子:你去买苹果,你说,老板,来20块钱苹果(目标,真实值),老板开始往袋子里装苹果,感觉差不多了(预测),放称上一称,还差点(误差),又装了一个,还差点(调整一次之后的误差),又装了一个...迭代,直到20块钱。

注意每次都是根据误差来进行调整,这点谨记。

 

BPTT 剖析

RNN网络结构比较复杂,BPTT在梯度计算时也不同于常规。

 

不同1:权重共享,多个误差

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

常规是误差分两条路传递,然后每条路分别算w,很容易理解

而权重共享时,一个权重,生成了2个误差,还有个总误差,到底用哪个?怎么反向?假设能反向回去,2个w,怎么处理?咋一想,好乱,

其实是这样的

1. 总误差,分误差,其实是一样的

2. 2个w,需要求和。

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

一个权重,多个误差,求和

 

不同2:权重共享,链式传递

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

也是2个w,咋一看,不知道咋算。

其实是这样的

链式法则

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

一个权重,多次传递,其梯度中含有w,且容易看出,传递次数越多,w的指数越大

 

其实rnn比这些不同点更复杂

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

图不解释了,直接上干货。

 

首先对网上各种坑爹教程进行补充和完善,总结,当然虽然坑爹,但是对我们理解也是有帮助的。

教程1:教程描述ly1的误差来自ly2 和 next_ly1两个方向(下图),其实说法不错,只是不完整。

 

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

 补充:

1. ly1的误差来自两个方向,ly2和next_ly1,这两条路都要从各自的误差开始算起。(这里体现了我上面例子里提醒谨记的话)

2. 这里计算的是“单层”的梯度,即单个w的梯度,实际计算BPTT梯度时并不是这样。

这里的公式应该是这样子

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

 

教程2:教程定义了中间变量,并用中间变量来表示梯度

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

 各种δ,完全搞不清,公式也没有推导过程。

 

补充:这里针对单个节点自定义了变量,然后把每个节点直接相加得到总梯度。

总结:这里定义了中间变量δ,之所以定义这个,是因为这个计算比较麻烦,而且要经常用到,这样会很好地简化运算。

这里的公式应该是这样子

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

 

这些教程加上我的补充,其实已经可以算出梯度了。

 

下面我再系统的讲一遍BPTT

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

还是用这张图,这张图在整个网络架构上比较完整,但是缺乏完整的cell,我在前向传播中标记一下。

前向传播

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

wi 表示输入权重,wh表示隐层权重

 

反向传播

首先理解如下公式

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

 

1. v 和 c并没有多路传递误差,和普通的梯度计算无差别

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

2. wi wh b都有多路传播

同样设定中间变量,注意这个变量最好是个递推公式,能够大大简化运算,且容易得到规律

初步设定

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

 

优化

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

 

再优化

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

 

这样貌似好多了,递推下去

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

 

注意到这里还是传递误差,从上式大概可以看出

1. 这是t时刻隐层cell的误差 ,当然要乘以总误差

2. t时刻的误差是t时刻到T的一个和,也就是说是从终点一步一步传过来的

3. 每步传递都是从t时刻到传递时刻的连乘,w指数。

4. 大概是这样 w * losst1 + ww * losst2 + www * losst3 + wwww * losst4 + wwwww * losst5 ,越往前传这个式子越长,损失也越传越小

5. 加上激活函数的搅和,其导数经常小于1

 

循环神经网络(二)-极其详细的推导BPTT - 努力的孔子

 

wi同理

 

发表于
2019-03-06 12:53 
努力的孔子 
阅读(2996
评论(0
编辑 
收藏 
举报
 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:循环神经网络(二)-极其详细的推导BPTT – 努力的孔子 - Python技术站

(0)
上一篇 2023年4月6日 上午1:38
下一篇 2023年4月6日 上午1:39

相关文章

  • 【DL论文精读笔记】Object Detection in 20 Y ears: A Survey目标检测综述

    【DL论文精读笔记】Object Detection in 20 Y ears: A Survey目标检测综述 目标检测20年综述(2019)? 摘要 Abstract 该综述涵盖了400篇目标检测文章,时间跨度将近四分之一世纪。包括目标检测历史上的里程碑检测器、数据集、衡量指标、基本搭建模块、加速技术,最近的sota检测模型。还引入了一些重要的目标检测应用…

    2023年4月5日
    00
  • 生成式对抗网络(GAN)学习笔记

    图像识别和自然语言处理是目前应用极为广泛的AI技术,这些技术不管是速度还是准确度都已经达到了相当的高度,具体应用例如智能手机的人脸解锁、内置的语音助手。这些技术的实现和发展都离不开神经网络,可是传统的神经网络只能解决关于辨识的问题,并不能够为机器带来自主创造的能力,例如让机器写出一篇流畅的新闻报道,生成一副美丽的风景画。但随着GAN的出现,这些都成为了可能。…

    2023年4月5日
    00
  • 详解常用的机器学习专业术语!

    机器学习是个复杂性、专业性很强的技术领域,它大量应用到了概率论、统计学、逼近论、算法复杂度等多门学科的知识,也因此会出现很多专业性很强的词汇。 在我们探索机器学习的初级阶段,理解这些专业术语是学习过程中第一件重要任务,所以本章将详细介绍机器学习中常用的术语以及它的基本概念,为我们在后续的知识学习打下坚实的基础。 在此之前,建议大家收藏本章内容,以便在后续学习…

    2022年11月12日
    00
  • 【目标检测】:SPP-Net深入理解(从R-CNN到SPP-Net)

    一. 导论 SPP-Net是何凯明在基于R-CNN的基础上提出来的目标检测模型,使用SPP-Net可以大幅度提升目标检测的速度,检测同样一张图片当中的所有目标,SPP-Net所花费的时间仅仅是RCNN的百分之一,而且检测的准确率甚至会更高。那么SPP-Net是怎么设计的呢?我们要想理解SPP-Net,先来回顾一下RCNN当中的知识吧。下图为SPP-Net的结…

    2023年4月6日
    00
  • win10下caffe+anaconda+python+Jupyter Notebooks安装流程

    python3.5(推荐)或者python2.7 CUDA 8+ cuDNN5.1  python环境不能单独配置,必须先编译caffe,才能编译python环境。 下载caffe prebuild版本免去自行编译的繁琐。https://github.com/BVLC/caffe/tree/windows  链接:https://pan.baidu.com/…

    Caffe 2023年4月6日
    00
  • 加快pytorch训练速度

    num_workers num_worker=0表示只用主进程读取数据, num_worker=4/8表明使用额外的4/8子进程读取数据 一般来说,增大num_worker可以增加GPU的利用率,从而加快训练的速度。 但是有时候即使增大num_worker也无法提高GPU利用率,这是因为训练的瓶颈在IO 多个小文件->单个大文件 使用hdf5文件:缺点…

    PyTorch 2023年4月8日
    00
  • caffe 在 windows 下的配置(scripts\build_win.cmd)

    官网配置文档见:GitHub – BVLC/caffe at windows 1. windows 设置 requirements: visual studio 2013/2015 CMake >= 3.4(注意添加 cmake 的 bin 路径到 Path 环境变量中,保证命令行可以找到 cmake.exe) 2. 配置和编译 caffe 进入 wi…

    Caffe 2023年4月8日
    00
  • LSTM循环神经网络理解

    1.循环神经网络 A是一组神经网络(可以理解为一个网络的自循环),它的工作是不停的接收并且输出。从图中可以看出A允许将信息不停的再内部循环,这样使得它可以保证每一步的计算都保存以前的信息  

    2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部