一、变量定义

  此文是我学习BFTT算法的笔记,参考了雷明《机器学习与应用》中的BFTT算法推导,将该本书若干个推导串联起来,下列所有公式都是结合书和资料,手动在PPT上码的,很费时间,但是也加深了自己的理解。

                

                 

二、几个预备知识

  (1) 乘法⊙为向量对应元素相乘

  (2) 复合函数求导:

    a.   假设有函数,假设有f(y),如果把x看成常数,y看成W的函数,则有:

      

      b.   如果将将W看成常数,y将看成x的函数,则有:

      

          c. 如果有向量到向量的映射:

      

      对于函数 f(y), 有

      

三、完整的算法推导

  首先,只有一个循环层和一个输出层的循环神经网络正向传播时的变化为:  

     

  

  损失函数的定义和全连接网络、卷积网络不同。全连接网络和卷积网络的各个训练样本之间没有关系,损失函数是所有样本损失的均值。循环神经网络的单个样本是一个时间序列,每个时刻都有损失,T 为时间序列的长度,因此损失函数定义为沿着时间轴累加:

  

  上式中的 Lt 为 t 时刻的损失函数,定义为:

  

  循环神经网络的反向传播时基于时间轴进行的,我们需要计算所有时刻的总损失函数对所有参数的梯度,然后用梯度下降法进行更新。另外需要注意的事循环神经网络在各个时刻的权重,偏置都是相同。

  由式(3)结合中复合函数求导,首先计算输出层偏置项的梯度:

     

  由式(3)结合复合函数求导,如果选择 softmax 作为输出层的激活函数,交叉熵作为损失函数,上面的梯度为:

     

  由式(3)结合复合函数求导,对权重矩阵的梯度为:

     

  下面考虑循环层。由(1)式+(2)式,得到:

  

  由推导3 + 式(1)的结论,有:

   

   由此建立了 与  之间的递推关系。定义误差项为:

  在整个损失函数 L 中,比 t 更早的时刻1,2,…,t - 1 的损失函数不含有 u因此与它无关; Lt 由  ut  决定,和它直接相关;比 t 晚的时刻的  ut+1  ,ut+2,…,  ut+n 都与  ut  有关。因此有:

 

   而

   

  把 式15 代入 式14)得到:

  

  由此建立了误差项沿时间轴的递推公式。可以类比前馈型神经网络,在前馈型神经网络中,通过后面的误差项计算本层误差项。在循环神经网络中,通过后一个时刻的误差项来计算当前时刻的误差项。递推的终点是最后一个时刻的误差:

  

  根据误差项可以计算出损失函数对权重的偏置的梯度。整个损失函数是 u ,u2,…,  uT  的函数,而它们都是权重和偏置的函数。根据链式法则,结合式10、12,有:

 

  类似地:

  对偏置项的梯度为:

  

四、BFTT算法流程

  计算出对所有权重和偏置的梯度之后,由此可以得到BPTT算法的流程:

  循环,对 t = 1,2,…,T

    对(xt ,yt)进行正向传播

  结束循环

  计算出输出层权重和偏置的梯度

  用梯度下降法更新输出层权重和偏置的值

  循环,反向传播,对 t = T,…,2 , 1

    计算误差项 δt

    根据误差项计算循环层权重和偏置的梯度

    用梯度下降法更新循环层权重和偏置的值

  结束循环

 

循环神经网络中BFTT的公式推导的更多相关文章

  1. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  2. 深度学习之循环神经网络(RNN)

    循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络,适合用于处理视频.语音.文本等与时序相关的问题.在循环神经网络中,神经元不但可以接收其他神经元 ...

  3. 循环神经网络之LSTM和GRU

    看了一些LSTM的博客,都推荐看colah写的博客<Understanding LSTM Networks> 来学习LSTM,我也找来看了,写得还是比较好懂的,它把LSTM的工作流程从输入 ...

  4. 循环神经网络(Recurrent Neural Network,RNN)

    为什么使用序列模型(sequence model)?标准的全连接神经网络(fully connected neural network)处理序列会有两个问题:1)全连接神经网络输入层和输出层长度固定, ...

  5. Recurrent Neural Networks(RNN) 循环神经网络初探

    1. 针对机器学习/深度神经网络“记忆能力”的讨论 0x1:数据规律的本质是能代表此类数据的通用模式 - 数据挖掘的本质是在进行模式提取 数据的本质是存储信息的介质,而模式(pattern)是信息的一 ...

  6. TensorFlow——循环神经网络基本结构

    1.导入依赖包,初始化一些常量 import collections import numpy as np import tensorflow as tf TRAIN_DATA = "./d ...

  7. TensorFlow学习笔记(六)循环神经网络

    一.循环神经网络简介 循环神经网络的主要用途是处理和预测序列数据.循环神经网络刻画了一个序列当前的输出与之前信息的关系.从网络结构上,循环神经网络会记忆之前的信息,并利用之前的信息影响后面节点的输出. ...

  8. TensorFlow框架(6)之RNN循环神经网络详解

    1. RNN循环神经网络 1.1 结构 循环神经网络(recurrent neural network,RNN)源自于1982年由Saratha Sathasivam 提出的霍普菲尔德网络.RNN的主 ...

  9. 从网络架构方面简析循环神经网络RNN

    一.前言 1.1 诞生原因 在普通的前馈神经网络(如多层感知机MLP,卷积神经网络CNN)中,每次的输入都是独立的,即网络的输出依赖且仅依赖于当前输入,与过去一段时间内网络的输出无关.但是在现实生活中 ...

随机推荐

  1. copy&mutableCopy 浅拷贝(shallow copy)深拷贝 (deep copy)

    写在前面 其实看了这么多,总结一个结论: 拷贝的初衷的目的就是为了:修改原来的对象不能影响到拷贝出来得对象 && 修改拷贝出来的对象也不能影响到原来的对象 所以,如果原来对象就是imm ...

  2. 380. Insert Delete GetRandom O(1) 设计数据结构:在1的时间内插入、删除、产生随机数

    [抄题]: Design a data structure that supports all following operations in average O(1) time. insert(va ...

  3. 面向对象 继承 抽象类 接口 static 权限修饰符

    Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...

  4. SQL Pretty Printer不错的sql格式化工具

    之前使用过sql server 2000的查询设计器和Toad for oracle 都有格式化Sql语句的功能,感觉很方便,尤其对于我这种有着轻微强迫症的人来说.当最近把SQL Server Man ...

  5. [C++] c pointer

    the nature of pointer const keyword const int*  p int const *p int*  const p int const a const int a ...

  6. mongodb 更新操作

    db.aaaa.update({},{$push:{money:{$each:[8,9,10],$slice:-4}}}) db.aaaa.update({},{$addToSet:{money:{$ ...

  7. 【Head First Java 读书笔记】(七)继承

    继承与多态 了解继承 继承的关系意味着子类继承了父类的实例变量和方法.父类比较抽象,子类比较具体. 继承层次的设计 找出具有共同属性和行为的对象(用继承来防止子类中出现重复的程序代码) 设计代表共同状 ...

  8. T Fiddler 教程 _转

    阅读目录 Fiddler的基本介绍 Fiddler的工作原理 同类的其它工具 Fiddler如何捕获Firefox的会话 Fiddler如何捕获HTTPS会话 Fiddler的基本界面 Fiddler ...

  9. 阿里云ECS搭建开源跳板机jumpserver无法获取验证邮件的问题及解决办法

    这段时间自己在阿里云上搭建了jumpserver3.0,在安装过程中需要输入邮箱smtp地址,输入之后会有一封验证邮件的,但是在阿里云ECS服务器上却无法收到邮件.查阅了阿里云官方的说明: 为什么无法 ...

  10. python变量和简单的数据类型

    1.运行hello_world.py时发生的情况 运行hello_world.py时,Python都做了些什么呢?实际上,即便是运行简单的程序,Python所做的工作也相当多: #!/usr/bin/ ...