一、变量定义

  此文是我学习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. Lunix7 开放指定端口

    systemctl unmask firewalld.service 此时可以正常启动Firewall了. 接下来顺便讲述一下Firewall的安装,及一些简单配置.   查看状态,看电脑上是否已经安 ...

  2. centos6.5 svn服务端搭建

    一.前言 Subversion是一个免费的开源的版本管理系统,它是作为CVS(Concurrent Versions System)的取代品出现的.本文简单介绍了Subversion在centos上的 ...

  3. word 标题序号

    设置标题的序号. 1>设置二级标题的序号  步骤一: 步骤二: 步骤三: 步骤四: 2>设置三级标题的序号 程序员的基础教程:菜鸟程序员

  4. C#中接口声明属性,但是提示“接口”中不能有属性。

    C#中接口定义属性如下所示: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  5. nginx内置变量详解-乾颐堂

    nginx的配置文件中可以使用的内置变量以美元符$开始,也有人叫全局变量.其中,部分预定义的变量的值是可以改变的. $arg_PARAMETER 这个变量值为:GET请求中变量名PARAMETER参数 ...

  6. Java 程序员最喜欢的 11 款免费 IDE 编辑器

    Java开发人员需要花费大量的时间埋头于Java代码中,使用各种不同的IDE(Intergrated Development Environment)来开发Java代码,所以下面我将为大家介绍11个不 ...

  7. C# 基础连接已经关闭: 发送时发生错误

    在程序中获取某个https网址的源码,GetRespose()时 出现了“基础连接已经关闭: 发送时发生错误.”的错误提示. 翻了论坛后,有个仁兄说:                 //.net 4 ...

  8. Python3+Apache+Django+CentOS

    使用django开发的项目上到正式环境的环境搭建,系统软件版本: CentOS6. setuptools-.tar.gz pip-.tar.gz Python-.tgz pcre-8.39.tar.b ...

  9. 高并发Redis(Mac)环境配置(一)

    一.产生原因: SNS交互型网站的兴起,对于高并发,大负载数据的操作,海量数据的存储和访问 NoSql四种类型: 键值存储(Redis优点可以快速查询,缺点缺少存储的结构化)              ...

  10. URAL 1698. Square Country 5(记忆化搜索)

    题目链接 题意 : 自守数的定义:如果某个数的平方的末尾几位数等于这个数,那么就称这个数为自守数.例如5*5=25,则5就是自守数.让你求不超过n位的自守数有多少 思路 : 实际上,自守数还有两个性质 ...