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

yizhihongxing


循环神经网络(二)-极其详细的推导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

相关文章

  • 简单理解RNN循环神经网络

    简单理解RNN循环神经网络 RNN(Recurrent Neural Network)介绍 图说RNN宏观结构 图说RNN微观结构 RNN(Recurrent Neural Network)介绍 介绍: RNN,也就是循环神经网络,是用来建模序列化数据的一种主流的深度学习模型。传统的前馈神经网络处理的输入往往都是一个定长向量,较难应对变长的序列信息,就算把序…

    2023年4月6日
    00
  • Caffe使用CMake编译:Could Not find Boost

    参考链接:https://github.com/dividiti/ck-caffe/issues/114 [SOLUTION]自行下载Boost源码进行编译和安装 (注意,在公用服务器上此方法慎用;目前仅在Ubuntu 14.04下通过验证) #查看已安装Boost版本$ dpkg -S /usr/include/boost/version.hpp#卸载已安…

    2023年4月8日
    00
  • 深度学习中的Data Augmentation方法(转)基于keras

    在深度学习中,当数据量不够大时候,常常采用下面4中方法: 1. 人工增加训练集的大小. 通过平移, 翻转, 加噪声等方法从已有数据中创造出一批”新”的数据.也就是Data Augmentation 2. Regularization. 数据量比较小会导致模型过拟合, 使得训练误差很小而测试误差特别大. 通过在Loss Function 后面加上正则项可以抑制…

    2023年4月6日
    00
  • 机器学习1k近邻

    自己一直学习计算机视觉方面的东西,现在想学习一下数据挖掘跟搜索引擎,自己基础也有点薄弱,看朱明的那本数据挖掘,只能片面的了解这个数据挖掘。不过最近有一本书 机器学习实战,于是乎通过实战的形式了解一下基本的算法的执行过程。在算法当中,很多都是相通的,模式识别、机器学习、数据挖掘、自然语言处理等等这些算法归结起来其实差不了多少,题外话不多说了,好好学习。 k近邻…

    机器学习 2023年4月13日
    00
  • PyTorch和TensorFlow的区别

    PyTorch和TensorFlow都是目前深度学习领域常用的框架,它们都以静态计算图或动态计算图的方式实现了反向传播和梯度下降方法。但是,它们之间有一些重要的区别。 条件控制 TensorFlow采用静态计算图的方式,需要在组建计算图时就定义好结构,这意味着循环、条件语句等控制流结构是难以实现的。而PyTorch使用动态计算图的方式,允许用户在执行期间动态…

    artificial-intelligence 2023年3月27日
    00
  • AI中的爬山算法详解

    局部搜索策略用于定位一个潜在的解决方案,该解决方案优化了具有挑战性的优化问题的标准。爬山算法是一种局部搜索算法,不断向增加高度或值的方向前进,以找到山顶或问题的最佳解。当它达到一个峰值时,它的邻居都没有更高的值,它就结束了。 使用数学优化解决问题的技术是爬山算法。爬山算法最流行的例子之一是旅行推销员。问题:我们需要减少推销员的行进距离。 它也被称为贪婪的局部…

    2023年2月5日
    00
  • 使用pytorch完成kaggle猫狗图像识别

     kaggle是一个为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台,在这上面有非常多的好项目、好资源可供机器学习、深度学习爱好者学习之用。碰巧最近入门了一门非常的深度学习框架:pytorch(如果你对pytorch不甚了解,请点击这里),所以今天我和大家一起用pytorch实现一个图像识别领域的入门项目:猫狗图像识别。 深度学习的…

    2023年4月8日
    00
  • 什么是卷积convolution

    定义 卷积是两个变量在某范围内相乘后求和的结果。如果卷积的变量是序列x(n)和h(n),则卷积的结果 , 其中星号*表示卷积。 当时序n=0时,序列h(-i)是h(i)的时序i取反的结果;时序取反使得h(i)以纵轴为中心翻转180度,所以这种相乘后求和的计算法称为卷积和,简称卷积。 另外,n是使h(-i)位移的量,不同的n对应不同的卷积结果。   如果卷积的…

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