深度学习视频理解之图像分类 | 文末送书

根据中国互联网络信息中心(CNNIC)第47次《中国互联网络发展状况统计报告》,截至2020年12月,中国网民规模达到9.89亿人,其中网络视频(含短视频)用户规模达到9.27亿人,占网民整体的93.7%,短视频用户规模为8.73亿人,占网民整体的88.3%。

回顾互联网近年来的发展历程,伴随着互联网技术(特别是移动互联网技术)的发展,内容的主流表现形式经历了从纯文本时代逐渐发展到图文时代,再到现在的视频和直播时代的过渡,相比于纯文本和图文内容形式,视频内容更加丰富,对用户更有吸引力。

随着近年来人们拍摄视频的需求更多、传输视频的速度更快、存储视频的空间更大,多种场景下积累了大量的视频数据,需要一种有效地对视频进行管理、分析和处理的工具。

视频理解旨在通过智能分析技术,自动化地对视频中的内容进行识别和解析。视频理解算法顺应了这个时代的需求。因此,近年来受到了广泛关注,取得了快速发展。

图像分类(Image Classification)是视频理解的基础,视频可以看作是由一组图像帧(Frame)按时间顺序排列而成的数据结构,RNN(Recurrent Neural Networks,循环神经网络)对时序数据(Sequential Data)有很强的建模能力。

本文将介绍 RNN和它的两个重要变种,即LSTM(Long Short-Term Memory,长短期记忆网络)(Hochreiter & Schmidhuber, 1997)和GRU(Gated Recurrent  Units,门控循环单元)(Cho et al., 2014)。

本文介绍的RNN 及其变种 LSTM和GRU 十分擅长处理时序数据,但是LSTM和GRU的结构和运行机理比较复杂,不好理解,因此这里会介绍一种通用的方法,通过对 LSTM和GRU 数学形式的3次简化并将数据流画成一张图,可以简洁、直观地对其中的原理进行理解与分析。

01
RNN

我们使用下标   表示输入时序序列的时序位置,即不同时刻,用  表示在  时刻的系统隐层状态(Hidden State)向量,用  表示  时刻的输入。  时刻的隐层状态向量  依赖于当前词  和前一时刻的隐层状态向量

其中,  是一个非线性映射函数。一种通常的做法是计算  和  的线性变换后经过一个非线性激活函数,例如:

其中,  和  是可学习的参数矩阵,激活函数  独立地应用到其输入的每个元素。

RNN的计算过程如图1所示,图中左边是输入  和  ,右边是输出  。计算从左向右进行,整个运算包括3步:输入  和  并分别乘以  和

,两者结果相加,以及最后经过  非线性变换输出。

图1  RNN的计算过程

我们可以认为  存储了网络中的记忆(Memory),RNN 学习的目标是使得  记录了在  时刻之前(包含  时刻)的输入信息

。在新词  输入到网络之后,之前的隐状态向量  就转换为和当前输入  有关的

02
梯度爆炸与梯度消失

虽然理论上 RNN 可以捕获长距离依赖,但实际应用中,RNN 将会面临两个挑战:梯度爆炸(Gradient Explosion)和梯度消失(Vanishing Gradient),这使得 RNN 实际学习长距离依赖很难(Bengio et al., 1994)。

我们考虑一种简单情况,即激活函数是恒等(Identity)变换,此时

在进行误差反向传播(Error Backpropagation)时,当我们已知损失函数  对  时刻隐状态向量  的偏导数  时,利用链式法则,我们计算损失函数  对初始时刻隐状态向量  的偏导数:

我们可以利用RNN的依赖关系,沿时间维度展开,来计算

其中,  表示矩阵  的  次幂,注意不是矩阵的转置。从上式可以看出,在误差反向传播时,我们需要反复乘以参数矩阵

由于矩阵  通常是由随机初始化训练得到的,所以  的特征向量(Eigenvector)通常是独立的。因此,可以对矩阵  进行对角化:

其中

表示对角矩阵,令

因此,

那么最后要计算的目标为:

当  很大时,该偏导数取决于矩阵  对应的对角矩阵的最大值  是大于1 还是小于1,要么结果太大,要么结果太小:

(1)梯度爆炸。当 1'> 时,

,那么

此时偏导数  将会变得非常大,在实际训练时将会遇到 NaN错误,会影响训练的收敛,甚至导致网络不收敛。这好比要把本国的产品卖到别的国家,结果被层层加了关税,等到了别国市场的时候,价格已经变得非常高,老百姓根本买不起。在RNN中,梯度(偏导数)就是价格,随着向前推移,梯度越来越大。这种现象称为梯度爆炸。

梯度爆炸相对比较好处理,可以用梯度裁剪(Gradient Clipping)(Goodfellow et al., 2016)来解决。当梯度的范数(Norm)大于某个阈值时,我们人为地给梯度乘以一个缩放系数,使得梯度的范数在我们希望的阈值内。这好比是不管前面的关税怎么加,设置一个最高市场价格,通过这个最高市场价格保证老百姓是买得起的。在RNN中,不管梯度回传的时候梯度范数大到什么程度,设置一个梯度的范数的阈值,梯度的范数最多是这么大。

(2)梯度消失。当  时,

,那么

此时偏导数  将会变得十分接近 0,从而使得参数在梯度更新前后没有什么区别,这会使得网络捕获长距离依赖的能力下降。这好比打仗的时候往前线送粮食,送粮食的队伍自己也得吃粮食。当补给点离前线太远时,还没等送到,粮食在半路上就已经被吃完了。在RNN中,梯度(偏导数)就是粮食,随着向前推移,梯度逐渐被消耗殆尽。这种现象称为梯度消失。

梯度消失现象解决起来要比梯度爆炸困难很多,如何缓解梯度消失是RNN 及几乎其他所有深度学习方法研究的关键所在。LSTM和GRU通过门控(Gate)机制控制 RNN中的信息流动,用来缓解梯度消失问题。其核心思想是有选择性地处理输入。比如我们看到一个商品的评论:

Amazing! This box of cereal gave me a perfectly balanced breakfast, as all things should be. In only ate half of it but will definitely be buying again!

我们会重点关注其中的一些词,对它们进行处理:

Amazing! This box of cereal gave me a perfectly balanced breakfast, as all things should be. In only ate half of it but will definitely be buying again!

LSTM和GRU的关键是会选择性地忽略其中一些词,不让其参与到隐层状态向量的更新中,最后只保留相关的信息进行预测。

03
LSTM

LSTM计算过程的数学形式如下:

其中,  表示逐元素相乘,

表示 Sigmoid 函数

。和RNN 相比,LSTM 多了一个隐状态变量  ,称为细胞状态(Cell State),用来记录信息。上式看起来似乎十分复杂,这是因为公式一次性把 LSTM的所有细节都展示出来了,但是突然暴露这么多细节会使读者眼花缭乱,从而无处下手。因此,本节提出的方法旨在简化门控机制中相对不重要的部分,从而更关注在LSTM的核心思想。整个过程称为“三次简化一张图”,具体流程如下。

(1)第1次简化:忽略门控单元  、  

、  的来源。3个门控单元的计算方法完全相同,都是由输入经过非线性变换得到的,区别只是计算的参数不同:

使用相同计算方式的目的是它们都扮演了门控的角色,而使用不同参数的目的是为了在误差反向传播阶段对3个门控单元独立地进行更新。在理解 LSTM 运行机制的时候,为了对图进行简化,我们不在图中标注3个门控单元的计算过程,并假定各门控单元是给定的。

(2)第2次简化:考虑一维门控单元  、  

、  。LSTM中对各维是独立进行门控的,所以为了表示和理解方便,我们只需要考虑一维情况,在理解 LSTM 原理之后,将一维推广到多维是很直接的。经过这两次简化,LSTM的数学形式只有下面3行:

由于门控单元变成了一维,所以向量和向量的逐元素相乘

变成了标量和向量相乘。

(3)第3次简化:各门控单元二值输出。门控单元  、  、  由于经过了Sigmoid 激活函数,输出范围是  。使用Sigmoid 激活函数的目的是为了近似 0/1 阶跃函数,这样 Sigmoid 实数值输出单调可微,可以基于误差反向传播进行更新,如图2所示。

图2  Sigmoid 函数和单位阶跃函数

既然 Sigmoid 激活函数是为了近似 0/1 阶跃函数,那么,在进行 LSTM 理解分析的时候,为了理解方便,我们认为各门控单元输出是  二值,即门控单元扮演了开关的角色,用于控制信息的通断。

(4)一张图。将3次简化的结果用图表示出来,左边是输入,右边是输出。在LSTM中,有一点需要特别注意,LSTM中的细胞状态  实质上起到了RNN中隐层单元  的作用,否则只看  的变化是很难看出 LSTM的原理的,这点在其他资料中不常被提到。因此,整个图的输入是  和  ,而不是  和

。为了方便画图,我们需要将公式做最后的调整:

最终画出的原理图如图3所示。和RNN 相同的是,网络接受两个输入,得到一个输出。其中使用了两个参数矩阵  和  ,以及  激活函数。不同之处在于,LSTM中通过 3 个门控单元  、  、  来对信息交互进行控制。当  (输入门开关闭合)、  (遗忘门开关打开)、  (输出门开关闭合)时,LSTM 退化为标准的RNN。

图3  LSTM 运行原理图

根据原理图,我们可以对 LSTM中各单元的作用进行分析。

  • 输出门   :输出门的目的是从细胞状态  产生隐层单元  。并不是  中的全部信息都和隐层单元  有关,  可能包含了很多对  无用的信息。因此,  的作用就是判断  中哪些部分是对  有用的,哪些部分是无用的。

  • 输入门  :  控制当前词  的信息融入细胞状态

    。在理解一句话时,当前词  可能对整句话的意思很重要,也可能并不重要。输入门的目的就是判断当前词  对全局的重要性。当  (输入门开关打开)的时候,网络将不考虑当前输入

  • 遗忘门  :  控制上一时刻细胞状态  的信息融入细胞状态  。在理解一句话时,当前词  可能继续延续上文的意思继续描述,也可能从当前词

    开始描述新的内容,与上文无关。和输入门  相反,  不对当前词  的重要性进行判断,而判断的是上一时刻的细胞状态  对计算当前细胞状态

    的重要性。当  (遗忘门开关打开)的时候,网络将不考虑上一时刻的细胞状态

  • 细胞状态  

    综合了当前词  和前一时刻细胞状态  的信息。这和ResNet中的残差逼近思想十分相似(见 2.1.6 节),通过从  到  的“短路连接”,梯度得已有效地反向传播。当  (遗忘门开关闭合)时,  的梯度可以直接沿着最下面这条短路线传递到  ,不受参数  和  的影响,这是LSTM 能有效地缓解梯度消失现象的关键所在。

05
GRU

GRU是另一种主流的RNN衍生物。RNN和LSTM 都是在设计网络结构用于缓解梯度消失问题,只不过网络结构有所不同。GRU在数学上的形式化表示如下:

为了理解 GRU的设计思想,我们再一次运用“三次简化一张图”的方法来进行分析:

(1)第1次简化:忽略门控单元  和  

的来源。

(2)考虑一维门控单元  和  。经过这两次简化,GRU的数学形式是以下两

(3)第3次简化:各门控单元二值输出。这里和 LSTM 略有不同的地方在于,当   时,

;当  时,

。因此,

扮演的角色是一个个单刀双掷开关。

(4)一张图。将3次简化的结果用图表述出来,左边是输入,右边是输出,如图4所示。

图4  GRU 运行原理图

与 LSTM 相比,GRU 将输入门  和遗忘门  融合成单一的更新门  ,并且融合了细胞状态  和隐层单元  。当

(重置门开关闭合)、  (更新门开关连通上面)时,GRU 退化为标准的RNN。

根据图4,我们可以对 GRU各单元的作用进行分析。

  • 重置门   :  用于控制前一时刻隐层单元  对当前词  的影响。如果

    对  不重要,即从当前词  开始表述了新的意思,与上文无关。那么开关  可以打开,使得  对  不产生影响;

  • 更新门  :  用于决定是否忽略当前词

    。类似于LSTM 中的输入门

    可以判断当前词  对整体意思的表达是否重要。当  开关接通下面的支路时,我们将忽略当前词  ,同时构成了从  到  的短路连接,这使梯度得已有效地反向传播。和 LSTM 相同,这种短路机制有效地缓解了梯度消失现象,这个机制与高速公路网络(Highway Networks)(Srivastava et al., 2015a)十分相似。

*本文节选自《深度学习视频理解》一书,作者张皓

本书重点介绍视频理解中的3大基础领域:动作识别(Action Recognition)、时序动作定位(Temporal Action Localization)和视频 Embedding。

  • 动作识别的目标是识别出视频中出现的动作,通常是视频中人的动作。动作识别是视频理解的核心领域,虽然动作识别主要是识别视频中人的动作,但是该领域发展出来的算法大多数不特定针对人,也可以用于其他视频分类场景;

  • 时序动作定位也称为时序动作检测(Temporal Action Detection),是视频理解的另一个重要领域。动作识别可以看作是一个纯分类问题,其中要识别的视频基本已经经过剪辑(Trimmed),即每个视频包含一段明确的动作,视频时长较短,且有唯一确定的动作类别。而在时序动作定位领域,视频通常没有被剪辑(Untrimmed),视频时长较长,动作通常只发生在视频中的一小段时间内,视频可能包含多个动作,也可能不包含动作,即为背景(Background)类。时序动作定位不仅要预测视频中包含了什么动作,还需要预测动作的起始和终止时刻;

  • 视频 Embedding的主要作用是从视频中得到一个低维、稠密、浮点的特征向量表示,这个特征向量是对整个视频内容的总结和概括,使得不同视频 Embedding之间的距离(如欧式距离或余弦距离)反映了对应视频之间的相似性。

粉丝福利
(0)

相关推荐

  • 神经网络RNN图解!

    方向:神经网络,来源:人工智能与算法学习 神经网络是深度学习的载体,而神经网络模型中,最经典非RNN模型所属,尽管它不完美,但它具有学习历史信息的能力.后面不管是encode-decode 框架,还是 ...

  • 循环神经网络 RNN、LSTM、GRU

    与传统的前向神经网络和卷积神经网络 (CNN) 不同,循环神经网络 (Recurrent Neural Networks,RNN)是一种擅于处理序列数据的模型,例如文本.时间序列.股票市场等.本文主要 ...

  • 也来谈谈RNN的梯度消失/爆炸问题

    设为 "星标",重磅干货,第一时间送达! 转载自 | PaperWeekly ©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 尽管 T ...

  • 文末送书 | 如何使用深度强化学习算法解决实际问题

    在使用深度强化学习(Deep Reinforcement Learning,DRL)算法解决实际问题的过程中,明确任务需求并初步完成问题定义后,就可以为相关任务选择合适的DRL算法了. 以DeepMi ...

  • 哪个项目经理不迷茫?(文末送书)

    很多圈友喜欢私信圈圈唠嗑 当然,都不是什么正经嗑-- 快黄的项目.看不顺眼的同事 难伺候的甲方和老板... 但是,当唠到关于自己的事儿的时候, 都老正经了. 迷茫是我们这个时代越演越烈的通病. 一个人 ...

  • 五分钟 掌握 原型模式 (文末送书)

    回复"000"获取程序员必备电子书 大家好,我是老田,今天我给大家分享设计模式中的原型模式.用贴切的生活故事,以及真实项目场景来讲设计模式,最后用一句话来总结这个设计模式. 关于设 ...

  • 一文总览计算机视觉关键技术与应用(OpenCV YOLO ...)| 文末送书

    介绍 计算机视觉是从新兴阶段发展起来的,其结果在各种应用中都非常有用.我们的手机摄像头可以识别人脸.自动驾驶汽车可以使用它来识别交通信号.标志和行人.此外,工业机器人还可以监控问题并进行导航. 计算机 ...

  • 如何搭建一支拖垮公司的技术团队?(文末送书)

    作者 l Mr.K   整理 l Emma 来源 l 经授权转载自公众号:技术领导力(ID:jishulingdaoli) 老读者知道,老K是程序员出身,经过好多年的努力奋斗,终于从一个懵懂无知的青年 ...

  • 5 个无聊透顶的Python 程序(文末送书)

    Python 能做很多无聊,但有意思的事情,例如接下来的一些案例. 以下程序,不要发代码,要不实现不了你整蛊的目的. 要打包成一个 exe 程序,发给朋友才有意思. 使用 pip install py ...

  • 【保姆级】Python项目(Flask网页)部署到Docker的完整过程(文末送书)

    大家好,我是辰哥~~~(文末包邮送三本数据类书籍) 前提:相信看到这篇文章的读者应该已经学会了Docker的安装以及Docker的基本使用,如果还不会的可以参考我之前的文章进行详细学习! 1.安装版: ...

  • 福利!华为数通设备基础命令大全,文末送书

    优质文章,及时送达 基本配置 Telnet配置 FTP配置 其它配置 路由IP配置 VLAN配置 端口类型配置 Eth-trunk配置 STP配置 STP配置 配置MSTP 查看STP DHCP配置 ...

  • 14个pandas神操作,手把手教你写代码(文末送书)

    导读:Pandas是Python数据分析的利器,也是各种数据建模的标准工具.本文带大家入门Pandas,将介绍Python语言.Python数据生态和Pandas的一些基本功能. 在Python语言应 ...