您的位置:首页 > 游戏 > 游戏 > 公司职务名称大全_新媒体营销课程个人总结_企业网站模板图片_推广方案的推广内容怎么写

公司职务名称大全_新媒体营销课程个人总结_企业网站模板图片_推广方案的推广内容怎么写

2025/3/4 11:38:20 来源:https://blog.csdn.net/fansv587/article/details/145854142  浏览:    关键词:公司职务名称大全_新媒体营销课程个人总结_企业网站模板图片_推广方案的推广内容怎么写
公司职务名称大全_新媒体营销课程个人总结_企业网站模板图片_推广方案的推广内容怎么写

Deep Learning - Lecture 9 Simple Recurrent Networks

  • 序列数据
    • 序列数据与非序列数据的区别
  • 简单循环网络模型
    • 计算效率比较
      • 与深度前馈网络的比较
      • 与深度卷积网络比较
  • 序列问题的类型
      • 多对多 ( I型)
      • 多对多(II型)
      • 多对一型
      • 一对多型
  • 训练循环网络
    • 循环网络中的自动微分(auto-diff)的应用
    • 循环网络的时间反向传播(backpropagation through time)
  • 总结
  • 引用

本节目标:

  • 解释循环网络的关键要素
  • 解释循环网络的训练过程

序列数据

为什么我们要先说序列数据这个东西?

  • 循环网络非常适合对数据的输入输出序列进行建模,例如像多关节机器人这类非线性动态系统的数据输入输出序列。
    在这里插入图片描述
  • 自然语言处理是另一个领域,在这个领域中,序列对于理解语义来说非常重要。

在这里插入图片描述

现在我们回答上面那个问题。

答:自然是因为多种任务涉及数据序列。许多任务中,数据是以序列格式存在的。
涉及序列数据的常见机器学习问题,包括语音识别、机器翻译、语音合成、音乐生成、视频分析、图像描述、非线性系统识别、故障检测与诊断。

以让AI描述图像生成语言为例,前文的单词对于预测后续单词至关重要。
在这里插入图片描述

序列数据与非序列数据的区别

序列数据本质上也是数据,但数据的顺序特性在处理、分析、理解和预测输出时非常重要。

  • 非序列数据的例子 —— 图像分类,如下为一张橘猫和一张小狗的图片。在图像分类任务中,数据元素的顺序通常不影响分类结果。
    • 在图像分类任务中,模型关注的是图像整体所包含的特征,如物体的形状、颜色、纹理等,而不是图像中像素的排列顺序。
    • 例如,一张猫的图片,无论从左到右还是从右到左扫描像素,图片中猫的形状特征(耳朵的形状、身体轮廓等)、颜色特征(毛发颜色) 以及纹理特征(毛发纹理)都不会改变。卷积神经网络(CNN)等常用的图像分类模型,通过卷积层提取这些局部和全局特征,再进行分类。在这个过程中,数据元素(像素)的顺序不会影响模型对图像特征的提取和最终分类结果。 所以说在图像分类任务中,数据元素的顺序通常不影响分类结果。
      在这里插入图片描述
  • 序列数据的例子 —— 音乐生成,以贝多芬《C 小调第五交响曲》(Symphony No. 5 in C Minor)第一乐章(First Movement)的乐谱为例。在音乐生成中,音符的顺序至关重要,决定了音乐的旋律和节奏。
    在这里插入图片描述
    • 这个我相信很好理解,一个曲子顺着弹好听,逆着弹可能屁都不是。学术一点说:音乐生成中,音符、节奏、和声以及整体结构等各个方面都高度依赖数据的序列关系,所以它是典型的序列数据应用场景。

我们可以用一个数据集来形式化地表示输入 - 输出数据序列。
假设我们要对一个数据序列建模,使用符号 D = { ( u t , y t ) : 1 ≤ t ≤ N } D = \{(\boldsymbol{u}_t,\boldsymbol{y}_t): 1 \leq t \leq N\} D={(ut,yt):1tN} 表示数据集,其中 t t t代表时间步,从 1 1 1 N N N

  • u t ∈ R n u \boldsymbol{u}_t \in \mathbb{R}^{n_u} utRnu表示在时间步 t t t的输入, n u n_u nu是输入的维度数量。在左侧的图像中,点和折线表示随着时间推移,输入数据的变化情况 。
  • y t ∈ R n y \boldsymbol{y}_t \in \mathbb{R}^{n_y} ytRny表示在时间步 t t t的输出, n y n_y ny是输出的维度数量。右侧图像表示数据随着时间变化的波动。
  • 中间的红色箭头表示输入序列和输出数据序列之间存在的映射关系,体现数据序列建模中,输入如何影响输出 。

在这里插入图片描述

OK,那么这个红色的箭头到底是一种什么样的映射关系呢?看下面。

简单循环网络模型

在这里插入图片描述

  • 递归网络模型属于状态空间模型,这种模型在工程领域有广泛应用,并且具有内部隐藏状态 x t x_t xt
  • 简单循环网络的更新公式为 x t = tanh ⁡ ( A x t − 1 + B u t ) x_t = \tanh(Ax_{t - 1}+Bu_t) xt=tanh(Axt1+But),其中 x t x_t xt t t t时刻的隐藏状态, x t − 1 x_{t - 1} xt1是上一时刻的隐藏状态, u t u_t ut t t t时刻的输入, A A A B B B是神经网络的权重矩阵, tanh ⁡ \tanh tanh是激活函数。
  • 输出公式为 y ^ t = C x t \hat{y}_t = Cx_t y^t=Cxt C C C是另一个权重矩阵,用于将隐藏状态转换为输出 。
  • 此处图片中的状态空间模型就可以是上一张图片中红色箭头的一种解释。

示例
汽车的纵向动力学可以被看作是一个状态空间模型(或线性循环模型),通过输入、内部状态和输出之间的关系来描述。
在这里插入图片描述

  • 状态更新与输出公式 x t = A x t − 1 + B u t − 1 y ^ t = C x t x_t = Ax_{t - 1}+Bu_{t - 1} \\ \hat{y}_t = Cx_t xt=Axt1+But1y^t=Cxt
    (注意这个例子变成了 B u t − 1 Bu_{t - 1} But1和上面不一样)
    其中 A A A是状态转移矩阵, B B B是输入矩阵, C C C为输出矩阵 在这个示例中,C矩阵为[1,0,0]。
  • 这个示例就是想清晰的展示一下,当前时刻内部状态 [ x 1 , x 2 , x 3 ] t [x_1, x_2, x_3]_t [x1,x2,x3]t与上一时刻内部状态 [ x 1 , x 2 , x 3 ] t − 1 [x_1, x_2, x_3]_{t - 1} [x1,x2,x3]t1和上一时刻输入 [ u 1 ] t − 1 [u_1]_{t - 1} [u1]t1的关系,另外输出 y t y_t yt由内部状态 [ x 1 , x 2 , x 3 ] t [x_1, x_2, x_3]_t [x1,x2,x3]t计算得出。

计算效率比较

与深度前馈网络的比较

在这里插入图片描述

  • 比较关系:前馈网络没有内部状态,也就没有记忆能力;而循环网络具有内部状态,能够处理序列数据中的时间依赖关系。
  • 左侧(前馈网络)
    • 前馈网络没有内部状态和记忆。标准前馈网络的计算公式为 y ^ t = f ( W u t ) \hat{y}_t = f(Wu_t) y^t=f(Wut),其中 u t u_t ut是输入, W W W是权重矩阵, f f f是激活函数, y ^ t \hat{y}_t y^t是输出。
    • 图中输入 u t u_t ut经过绿色模块(代表网络层)直接产生输出 y ^ t \hat{y}_t y^t的过程,没有反馈连接。
  • 右侧(简单循环网络RNN)
    • 简单循环网络的状态更新公式为 x t = tanh ⁡ ( A x t − 1 + B u t ) x_t = \tanh(Ax_{t - 1}+Bu_t) xt=tanh(Axt1+But),表示当前时刻的隐藏状态 x t x_t xt依赖于上一时刻的隐藏状态 x t − 1 x_{t - 1} xt1和当前输入 u t u_t ut A A A B B B是权重矩阵, tanh ⁡ \tanh tanh是激活函数。
    • 输出公式为 y ^ t = g ( C x t ) \hat{y}_t = g(Cx_t) y^t=g(Cxt) C C C是权重矩阵, g g g是激活函数。
    • 图中除了输入 u t u_t ut进入绿色模块外,还有内部状态 x t x_t xt的反馈连接,体现了循环网络的特点。

除此之外,循环网络的效率也比深度前馈网络更高。
循环网络的状态更新过程如下图所示。
在这里插入图片描述

细心的同学估计早就发现了,这个状态更新方程应该比深度前馈计算量大吧。

没错,深度前馈网络计算时, y ^ t = f ( W u t ) \hat{y}_t = f(Wu_t) y^t=f(Wut)只用处理一个输入即可。不用想上面这样处理两个矩阵(一个输入u,一个隐藏状态x)。

那么这里就有一个比较反常识的点:为什么循环网络的计算更多了,处理数据的速度反而更快了?

  • 处理序列数据的优势:循环网络(如RNN)特别适合处理像时间序列、文本这样的序列数据,因为其结构自带记忆功能,隐藏状态在不同时间步之间传递,能有效捕捉序列中的时间依赖关系和上下文信息。相比之下,若用前馈网络处理序列数据,需要对每个时间步独立建模,难以直接利用前后时间步的关联信息,可能需要更复杂的设计和更多计算资源来达到类似效果。从这个角度看,在处理序列数据任务上,循环网络相对高效。
  • 权重共享机制:在循环网络中,权重矩阵(如公式中的 A A A B B B C C C)在不同时间步是共享的 ,这减少了模型需要学习的参数数量。较少的参数意味着在训练和预测过程中,需要计算和存储的量也相应减少,一定程度上提高了计算效率。
    • 在传统的深度前馈网络中,权重通常是不共享的,每一层的每个连接都有独立的权重参数 。比如在多层感知机(MLP)这种典型的深度前馈网络中,不同神经元之间的连接权重是根据输入数据的维度和网络结构独立设置的,不同位置的权重不共享。
  • 实际情况:实际情况中存在梯度消失或梯度爆炸的问题,那样的话计算效率会大幅度降低。这种特殊情况先不做讨论,先说一般情况下。

与深度卷积网络比较

这不简单?肯定还是深度循环网络快啊,不然学他干嘛?

  • 为表示相同的序列关系,卷积网络所需的参数通常比循环网络多得多。
  • 同时,卷积网络将输入与(非线性)脉冲响应 ( w j w_j wj) 进行卷积来预测输出。

在这里插入图片描述

  • 卷积网络部分:上方蓝色框标注“Convolutional Net”,表示卷积网络。输入为 u t u_t ut,经过卷积网络后,输出公式为 y ^ t = ∑ j = 1 m w j u t − j \hat{y}_t = \sum_{j = 1}^{m} w_j u_{t - j} y^t=j=1mwjutj, 这里 w j w_j wj 是权重, m m m 是求和的上限,该公式表示通过对输入 u t u_t ut 及其过去时间步的加权求和得到输出。
  • 循环网络部分:下方蓝色框标注“Recurrent Net”,表示循环网络。输入同样为 u t u_t ut,循环网络的状态更新公式为 x t = tanh ⁡ ( A x t − 1 + B u t ) x_t = \tanh(Ax_{t - 1} + Bu_t) xt=tanh(Axt1+But),只需特别说明 x t ∈ R n x x_t \in \mathbb{R}^{n_x} xtRnx,其他的含义跟上面一样。
  • 对比结论:通常情况下,卷积网络公式中的 m m m(求和项数)远大于循环网络中隐藏状态 x t x_t xt 的维度 n x n_x nx,这也是为什么循环网络计算更快。

MATLAB代码示例

% initialise simulation parameters
ts=0.1;
maxT=1000;
time = 0:ts:maxT;
N = length(time);
% network parameters
nx = 10; % number of hidden units
ny = 1; % number of outputs
nu = 2; % number of inputs
% initialise signals
x = zeros(nx,N); % initial state
u = [sin(0.1*time); ones(1,N)]; % network input
yhat = zeros(ny,N); % initial output
% randomly generate simple recurrent model
A = randn(nx); % state transition matrix
B = randn(nx,nu); ones(nx,nu); % input matrix
C = randn(ny,nx); % output matrix
% simulate recurrent network - forward propagation
for t = 2:N
x(:,t) = tanh(A*x(:,t-1) + B*u(:,t));
yhat(:,t) = C*x(:,t);
end

输出如下:
在这里插入图片描述

序列问题的类型

多对多 ( I型)

多对多 I 型序列问题指的是输入序列和输出序列之间存在一一对应的关系。

以语言翻译为例,将英文句子 “Where is the restaurant” 翻译成法文 “Où est le restaurant” 的过程。每一个英文单词(输入)都对应着一个法文单词(输出),体现了一一对应的特点。
在这里插入图片描述

多对多(II型)

多对多II型序列问题是指输入和输出之间并非始终存在一一对应的关系。

同样以语言翻译为例,图中展示将英文句子“The past few days”翻译成法文“les derniers jours”的过程。从输入和输出的单词数量及对应关系来看,并不一一对应,体现了这类问题的特点。

在这里插入图片描述

多对一型

多对一序列问题指的是网络接收一个输入序列,但仅产生一个输出,例如一个分类标签。

以根据文本输入对天气进行分类为例,输入序列包含描述天气状况的词汇,如“wind”(风)、“rain”(雨)、“flooding”(洪水)、“lightning”(闪电),而输出只有一个,表示天气类别的标签,如“thunderstorm”(雷暴)。

在这里插入图片描述

  • 状态更新公式 x t = tanh ⁡ ( A x t − 1 + B u t ) x_t = \tanh(Ax_{t - 1} + Bu_t) xt=tanh(Axt1+But) ,与常规循环网络的状态更新公式一致。
  • 输出:多对一这里的输出和之前不一样。其公式是 y ^ N = g ( C x N ) \hat{y}_N = g(Cx_N) y^N=g(CxN) ,这里只有在最后一个时间步 N N N时才有输出。 g g g 在这里是softmax函数,这是分类器输出的标准设置,用于将隐藏状态转换为概率分布,从而得到最终的分类结果。

一对多型

一对多序列问题是指只有一个输入,但会产生一个输出序列的情况。

以图像描述(Image captioning)任务为例,输入是一张图片,而输出是描述这张图片的一系列词汇,如“Person”(人)、“riding”(骑)、“motorcycle”(摩托车)、“”(结束标识) 。

模型及处理流程

  • 首先,图片输入到卷积网络(Convolutional network,蓝色方块)中,提取特征并得到初始隐藏状态 x 0 x_0 x0
  • 然后,进入循环网络部分(绿色方块),初始输入 u 1 u_1 u1为“”(起始标识)。状态更新公式为 x t = tanh ⁡ ( A x t − 1 + B y ^ t − 1 ) x_t = \tanh(Ax_{t - 1} + B\hat{y}_{t - 1}) xt=tanh(Axt1+By^t1) ,在这个过程中,当前时间步的输入是上一个时间步的输出。 图示中蓝色圆圈表示输入,紫色圆圈表示输出 。
    在这里插入图片描述

一个输入的解释
在这个示例的一对多序列问题(图像描述任务)中,其实有两个阶段的“输入”:

  • 初始输入:最开始的输入是图片,这张图片进入卷积网络进行特征提取 ,得到的特征信息用于初始化后续循环网络的隐藏状态 x 0 x_0 x0。可以理解为,图片的信息是整个生成描述序列的基础来源。
  • 循环输入:在循环网络部分,第一个输入 u 1 u_1 u1是“”起始标识 。从第二个时间步开始,每个时间步的输入 u t u_t ut是上一个时间步的输出 y ^ t − 1 \hat{y}_{t - 1} y^t1 。所以,“”是循环网络开始生成描述序列的触发信号,后续通过不断将上一步的输出作为当前输入,逐步生成完整的描述序列。

但是,严格来说,从整个任务流程角度,“一个输入”指的是图片 。因为图片是整个图像描述任务信息的源头,决定了最终输出的描述内容。而“”标识以及后续每个时间步用上一步输出作为输入,是在基于图片提取特征后的循环网络生成序列过程中的操作,它们是为了构建输出序列而设定的机制,并非核心的“信息输入源” 。

训练循环网络

当循环网络在时间维度上展开时,它类似于非常深的前馈网络,每个时间步就相当于前馈网络的一层。
状态和输出方程同上

  • 状态更新方程 x t = tanh ⁡ ( A x t − 1 + B u t ) x_t = \tanh(Ax_{t - 1} + Bu_t) xt=tanh(Axt1+But),其中 x t x_t xt t t t时刻的隐藏状态, x t − 1 x_{t - 1} xt1是上一时刻的隐藏状态, A A A B B B是权重矩阵, u t u_t ut t t t时刻的输入, tanh ⁡ \tanh tanh是激活函数。
  • 输出方程 y ^ t = g ( C x t ) \hat{y}_t = g(Cx_t) y^t=g(Cxt) C C C是权重矩阵, g g g为激活函数 , y ^ t \hat{y}_t y^t t t t时刻的输出。

损失函数

  • 公式为 J ( θ ) = ∑ t = 1 N L t ( y ^ t , y t ) J(\theta) = \sum_{t = 1}^{N} L_t(\hat{y}_t, y_t) J(θ)=t=1NLt(y^t,yt) ,表示将每个时间步 t t t上的损失 L t ( y ^ t , y t ) L_t(\hat{y}_t, y_t) Lt(y^t,yt)进行求和,其中 y ^ t \hat{y}_t y^t是模型预测值, y t y_t yt是真实值, N N N是时间步的总数。
  • 损失可以根据需求选择均方误差(squared error)或分类交叉熵(categorical cross entropy)。
    • 均方误差(MSE,Mean Squared Error):常用于回归任务,衡量的是预测值与真实值之间差值的平方的平均值。假设模型有 N N N个样本,对于每个样本 i i i y ^ i \hat{y}_i y^i 是模型的预测值, y i y_i yi 是真实值。
      • 单个样本的均方误差 L i = 1 2 ( y ^ i − y i ) 2 L_{i} = \frac{1}{2}(\hat{y}_i - y_i)^2 Li=21(y^iyi)2,前面乘 1 2 \frac{1}{2} 21 主要是为了在求梯度时方便计算(求导后系数会消去)。
      • 整个数据集的均方误差损失函数 J ( θ ) = 1 N ∑ i = 1 N 1 2 ( y ^ i − y i ) 2 J(\theta) = \frac{1}{N}\sum_{i = 1}^{N}\frac{1}{2}(\hat{y}_i - y_i)^2 J(θ)=N1i=1N21(y^iyi)2,其中 θ \theta θ 表示模型的参数。在循环网络的场景中,若有 T T T个时间步,每个时间步看作一个样本,那么 N = T N=T N=T J ( θ ) = 1 T ∑ t = 1 T 1 2 ( y ^ t − y t ) 2 J(\theta) = \frac{1}{T}\sum_{t = 1}^{T}\frac{1}{2}(\hat{y}_t - y_t)^2 J(θ)=T1t=1T21(y^tyt)2
    • 分类交叉熵(Categorical Cross Entropy):主要用于分类任务,尤其是当类别是互斥的情况下。假设样本有 C C C个类别,对于样本 i i i ,其真实标签可以用独热编码(one - hot encoding)向量 y i = [ y i 1 , y i 2 , . . . , y i C ] \mathbf{y}_i = [y_{i1}, y_{i2}, ..., y_{iC}] yi=[yi1,yi2,...,yiC] 表示(只有一个位置为1,其余为0),模型预测的概率分布为 y ^ i = [ y ^ i 1 , y ^ i 2 , . . . , y ^ i C ] \mathbf{\hat{y}}_i = [\hat{y}_{i1}, \hat{y}_{i2}, ..., \hat{y}_{iC}] y^i=[y^i1,y^i2,...,y^iC] ,其中 y ^ i j \hat{y}_{ij} y^ij 表示样本 i i i 属于类别 j j j 的预测概率,且 ∑ j = 1 C y ^ i j = 1 \sum_{j = 1}^{C}\hat{y}_{ij} = 1 j=1Cy^ij=1
      • 单个样本的分类交叉熵 L i = − ∑ j = 1 C y i j log ⁡ ( y ^ i j ) L_{i} = -\sum_{j = 1}^{C}y_{ij}\log(\hat{y}_{ij}) Li=j=1Cyijlog(y^ij),因为真实标签只有一个位置为1,所以实际上就是对真实类别对应的预测概率取对数后取负。
      • 整个数据集的分类交叉熵损失函数 L = − 1 N ∑ i = 1 N ∑ j = 1 C y i j log ⁡ ( y ^ i j ) L = -\frac{1}{N}\sum_{i = 1}^{N}\sum_{j = 1}^{C}y_{ij}\log(\hat{y}_{ij}) L=N1i=1Nj=1Cyijlog(y^ij)。在循环网络处理分类问题时,同样若有 T T T个时间步, J ( θ ) = 1 T ∑ t = 1 T − ∑ j = 1 C y t j log ⁡ ( y ^ t j ) J(\theta) = \frac{1}{T}\sum_{t = 1}^{T}-\sum_{j = 1}^{C}y_{tj}\log(\hat{y}_{tj}) J(θ)=T1t=1Tj=1Cytjlog(y^tj) 。 (嘿嘿,其实就是把N都换成T)
        在这里插入图片描述

上图展示了循环网络展开后的结构,绿色方块代表网络层,蓝色圆圈 u 1 u_1 u1 u 2 u_2 u2 u 3 u_3 u3表示不同时间步的输入,紫色圆圈 y ^ 1 \hat{y}_1 y^1 y ^ 2 \hat{y}_2 y^2 y ^ 3 \hat{y}_3 y^3是对应时间步的输出。黄色圆圈 L 1 L_1 L1 L 2 L_2 L2 L 3 L_3 L3表示每个时间步的损失,红色圆圈 J J J表示总损失,由各时间步损失相加得到 。

循环网络中的自动微分(auto-diff)的应用

在现代软件中,循环网络的实现会使用自动微分来获取损失函数的梯度,就如同处理其他网络层一样。自动微分能高效准确地计算梯度,对训练循环网络至关重要。

随机梯度下降(Stochastic gradient descent)的参数更新公式: w j i ( l ) ← w j i ( l ) − ϵ ∂ J ∂ w j i ( l ) w_{ji}^{(l)} \leftarrow w_{ji}^{(l)} - \epsilon \frac{\partial J}{\partial w_{ji}^{(l)}} wji(l)wji(l)ϵwji(l)J
其中, w j i ( l ) w_{ji}^{(l)} wji(l) 表示第 l l l层中从神经元 j j j 到神经元 i i i 的权重; ϵ \epsilon ϵ 是学习率,控制每次参数更新的步长; ∂ J ∂ w j i ( l ) \frac{\partial J}{\partial w_{ji}^{(l)}} wji(l)J 是损失函数 J J J 关于权重 w j i ( l ) w_{ji}^{(l)} wji(l) 的梯度,通过自动微分来计算。

上面那个随机梯度下降的公式已经出现过很多次了,里面说的更新的权重在这里是A、B、C这三个矩阵。

更加详细的解释如下:

  • 前向传播
    在循环网络中,数据按照时间步依次输入。以简单循环网络(RNN)为例,每个时间步 t t t,根据状态更新公式 x t = tanh ⁡ ( A x t − 1 + B u t ) x_t = \tanh(Ax_{t - 1} + Bu_t) xt=tanh(Axt1+But) 计算隐藏状态 x t x_t xt ,再通过输出公式 y ^ t = g ( C x t ) \hat{y}_t = g(Cx_t) y^t=g(Cxt) 得到输出 y ^ t \hat{y}_t y^t 。这个过程从输入数据开始,逐步计算出网络在每个时间步的输出,就像水流沿着管道流动一样,数据在网络中依次传递,这就是前向传播。

  • 反向传播与自动微分

  • 构建计算图:自动微分基于计算图来工作,计算图是对计算过程的图形化表示。在循环网络中,每个时间步的计算(如矩阵乘法、激活函数运算等)都是计算图上的节点和边。例如, x t = tanh ⁡ ( A x t − 1 + B u t ) x_t = \tanh(Ax_{t - 1} + Bu_t) xt=tanh(Axt1+But) 这个计算过程, A x t − 1 + B u t Ax_{t - 1} + Bu_t Axt1+But 是一个节点操作, tanh ⁡ \tanh tanh 又是另一个节点操作,它们在计算图中相互连接。

  • 计算梯度:反向传播时,自动微分从损失函数 J J J 开始,沿着计算图的边反向计算梯度。根据链式法则(复合函数求导法则),自动微分可以高效地计算出损失函数关于网络中每个参数(如权重矩阵 A A A B B B C C C )的梯度。比如,为了更新权重矩阵 A A A ,就需要计算 ∂ J ∂ A \frac{\partial J}{\partial A} AJ ,自动微分能通过在计算图上反向传递梯度信息,准确地算出这个值。

  • 参数更新
    得到损失函数关于各个参数的梯度后,就可以利用随机梯度下降等优化算法来更新网络参数。如公式 w j i ( l ) ← w j i ( l ) − ϵ ∂ J ∂ w j i ( l ) w_{ji}^{(l)} \leftarrow w_{ji}^{(l)} - \epsilon \frac{\partial J}{\partial w_{ji}^{(l)}} wji(l)wji(l)ϵwji(l)J 所示,根据计算得到的梯度和设定的学习率 ϵ \epsilon ϵ ,对权重 w j i ( l ) w_{ji}^{(l)} wji(l) 进行更新,使损失函数逐步减小,从而让网络的预测结果越来越接近真实值。

现代深度学习框架(如TensorFlow、PyTorch 等)内置了自动微分机制,用户无需手动编写复杂的求导代码,只需定义好网络结构和损失函数,框架就能自动完成梯度计算,大大简化了循环网络的训练过程。

几个常用的深度学习计算框架:
在这里插入图片描述

循环网络的时间反向传播(backpropagation through time)

现代软件中的循环网络通过自动微分来获取损失函数的梯度,这在传统上被称为时间反向传播算法。该算法用于在循环网络中有效地计算梯度,以更新网络参数。

关键步骤

  • 步骤1:可以构建一个计算图(computational graph),用节点 v i v_i vi来描述循环网络中的损失函数。计算图将网络中的各种运算和变量以图形化的方式表示出来,方便后续计算梯度。
  • 步骤2:在节点处定义“伴随量(adjoint)”。公式 v ˉ i = ∂ f ∂ v i = ∑ j : child of  i v ˉ j ∂ v j ∂ v i \bar{v}_i = \frac{\partial f}{\partial v_i} = \sum_{j: \text{child of } i} \bar{v}_j \frac{\partial v_j}{\partial v_i} vˉi=vif=j:child of ivˉjvivj 表示节点 i i i处的伴随量 v ˉ i \bar{v}_i vˉi是其所有子节点 j j j的伴随量 v ˉ j \bar{v}_j vˉj与子节点 j j j关于节点 i i i的偏导数 ∂ v j ∂ v i \frac{\partial v_j}{\partial v_i} vivj 乘积的总和。这里的 f f f代表损失函数。
  • 步骤3:反向模式的自动微分先正向遍历计算图,记录计算过程中的中间结果,然后反向遍历计算图来计算伴随量。通过这种方式,可以高效地计算出损失函数关于网络中各个参数的梯度。

下图展示了循环网络的结构,绿色方块代表网络层,蓝色圆圈 u 1 u_1 u1 u 2 u_2 u2 u 3 u_3 u3表示不同时间步的输入,紫色圆圈 y ^ 1 \hat{y}_1 y^1 y ^ 2 \hat{y}_2 y^2 y ^ 3 \hat{y}_3 y^3是对应时间步的输出。黄色圆圈 L 1 L_1 L1 L 2 L_2 L2 L 3 L_3 L3表示每个时间步的损失,红色圆圈 J J J表示总损失。

红色箭头表示反向传播的过程,即从总损失 J J J开始,沿着计算图反向计算梯度。这个也就是刚才关键步骤里第一步提到的那个计算图。
在这里插入图片描述

总结

  • 循环网络可以对处理序列数据的系统进行建模,并且具有随时间变化的内部状态和记忆能力。
  • 循环网络在捕捉序列数据中不同时间步之间的关系时,计算效率较高。
  • 存在多种序列数据问题:
    • 多对多I型(一一对应);
    • 多对多II型;
    • 多对一;
    • 一对多。
  • 循环网络通常使用时间反向传播算法(BPTT)进行训练 。

引用

  • (多对多II型示例)Cho, K., Gulcehre, B. V. M. C., Bahdanau, D., Schwenk, F. B. H., & Bengio, Y. Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation. Proc. Empirical Methods in Natural Language Processing, pages 1724–1734, 2014. https://arxiv.org/abs/1406.1078
  • (一对多示例)O. Vinyals, A. Toshev, S. Bengio and D. Erhan, "Show and Tell: Lessons Learned from the 2015 MSCOCO Image Captioning Challenge,“ (2017) IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 39, no. 4, pp. 652-663. doi: 10.1109/TPAMI.2016.2587640.
  • (循环网络中的反向传播)Baydin, A. G., Pearlmutter, B. A., Radul, A. A., & Siskind, J. M. (2018).
    Automatic differentiation in machine learning: a survey. Journal of
    Machine Learning Research, 18, 1-43.

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com