2022 年 8 月论文笔记

这个月主要是刚刚进入流媒体相关的方向,需要阅读一些论文来了解目前的发展。

Stick - A Harmonious Fusion of Buffer-based and Learning-based Approach for Adaptive Streaming

Introduction

首先考虑到现实应用背景,视频流传输已经占据了大部分的网络传输带宽。但视频传输的问题在于视频内容的多样性和可能的网络波动。一种可能的解决方案是使用 Adaptive bitrate (ABR) 算法,这些算法已经被证实可以提供高 QoE 的传输服务。

传统的 ABR 算法往往是 buffer-based 的(例如 BBA 和 BOLA),这些算法通过固定的 buffer 和参数来选定下一个视频块的码率,这可能难以在波动网络环境下保证 QoE。

另一方面,基于深度强化学习(DRL)的 ABR 算法 Pensieve 却给出了 state-of-the-art 的表现。在实践上,这类算法也常常部署在服务器侧以避免客户端的高计算开销。但是考虑到 ABR 算法往往需要部署在前端以避免连接后端的网络延迟,这使得这类算法理论可用但是并不实际。

那么我们可以将这两种方法结合起来,使用 DRL 来强化 buffer-based 的方法,同时使用固定的缓冲区限制来限制计算开销。从而该论文提出了 Stick 框架,该框架将 QoE 参数、网络状态、视频特征作为输入参数,而缓冲区限制(连续的标量)作为其输出。

考虑到连续的动作空间,我们计划使用 Deep deterministic policy gradient (DDPG) 来从头开始训练模型。此外,Stick 在无假设条件下通过和 ABR 环境交互来学习策略。

为了保证计算效率,我们进一步提出了 Trigger。Trigger 会观测当前和先前的缓冲区限制,只在必要的时候激活 Stick 来更新缓冲区限制。Trigger 使用 imitation learing 方法来学习专家行为。同时,为了克服数据的无偏分布【Question #1】,我们使用了 prioritized experience replay 来存储专家策略。同时,该论文还提出了一种可以让其他 ABR 算法框架接入 Trigger 的方法。

这篇论文的重点在于:

  • 首次提出结合 buffer-based 方法和 learning-based 方法
  • 通过 Stick,可以使用更小的模型实现比已有方法更好的效果
  • 通过 Trigger,证明轻量级模型可以有效降低计算开销

Buffer-based & learning-based ABR algorithm

BBA 只根据当前缓冲区限制来选定下一个视频块的码率。具体而言,其将对吞吐量的估计固定为启动态额吞吐量以克服吞吐量的波动,之后在稳定态时,使用缓冲区限制 \(\{B_{\rm min}, B_{\rm max}\}\) 来获取块映射,块映射的作用是将缓冲区占用情况映射为码率。

而这个映射也是简单的分块线性映射,缓冲区占用低于 \(B_{\rm min}\) 时下一个视频块码率为低码率 \(R_{\rm min}\),缓冲区占用高于 \(B_{\rm max}\) 时下一个视频块码率为高码率 \(R_{\rm max}\),位于这两者之间的时候使用线性函数决定。

这个方法大部分情况下简单且有效,但是也在许多条件下效果不理想。原因是 BBA 使用的固定参数应当根据应用环境做出相应的调整。

而 learning-based ABR,例如 Pensieve 则给出了较好的理论结果,但是该方案并不容易应用到现实中。此外,Pensieve 也在部分应用环境下效果不理想。

Key ideas

总结起来是这样的几点:

  • 使用 DRL 的方法调整 ABR 的参数,避免使用查表或者预训练模型造成的过大存储和计算成本
  • 模型的状态空间需要考虑全面,不仅包括当前缓冲区限制,还要包括网络状况和视频特征
    • 此外,实验发现 Stick 可以仅使用一个参数控制缓冲区,而非两个参数
  • QoE 要求会被作为 goal 输入模型,该参数会随机初始化,这会让模型意识到 QoE 参数和 feedback reward 之间的关系
  • 使用轻量级的 Trigger 来决定是否需要通过 Stick 更新缓冲区限制,以降低计算成本

System overview

整体的框架可以表现为:

Stick mechanism

Stick 的结构图可以表示为:

Design

首先叙述状态空间的构造:

  • \(T\) 为由客户端测量的前 \(k\) 个序列的吞吐量
  • \(d\) 为前 \(k\) 个序列的下载时间
  • \(q\) 为上一个视频块选定的码率
  • \(r\) 为视频剩余播放时间
  • \(b\) 为当前缓冲区占有情况
  • \(S\) 为表示下一个视频块大小的向量
  • \(g\) 为 QoE goal 参数,由 \(\mu, \tau\) 构成

动作空间则是一个连续标量 \(B \in [0, {\rm buffer}_{\rm max}]\),用于控制缓冲区限制。

奖励函数则根据不同的 \(g\),使用经典的线性 QoE 指标来构造。

Training methodology & Implementation

【这一部分在阅读完 DPG 相关论文之后再具体展开】

Trigger

Trigger 的一个核心思想在于,如果 Stick 在连续两个视频块上给出相同的结果,那么其第二次计算是无用的。而实验证明,无用操作可能占比达到 30%,所以我们的目标就是用 Trigger 去判别哪些操作是无用的。

现在考量 Trigger 的状态空间。根据 Related work,网络吞吐量是我们需要考虑的重要参数。但是我们也发现了,先前的缓冲区占用情况也是一个重要特征,其可以揭示网络环境状态和视频块大小之间的隐藏关系。

所以我们最终令 Trigger 的输入是先前的网络吞吐量、缓冲区大小和现在的缓冲区限制。而输出是一个二维向量,表示 Stick 保持或者改变当前缓冲区限制的概率。


使用 imitation learning 来训练 Trigger,这种方法能够根据 expert demonstration 给出预期的结果。训练的算法可以表示为:


另外,我们需要关注训练数据集分布的问题。论文使用的数据集中有 83% 的操作是无用操作,这种分布不均匀的数据集和理想的 50%-50% 数据集差距过大,可能导致特征训练不均衡。所以这里使用了 Prioritized experience replay 方法来重新平衡数据集。

关于这个方法的介绍可以参考 这篇文章

之后讨论如何将 Trigger 应用到其他的 ABR 算法上。

【这一部分在阅读完 DPG 相关论文之后再具体展开】

Evaluation

介绍了使用的实验环境、数据集、训练方式、Baseline 的选取、QoE 指标的计算公式等等。

首先在一个数据集上,实验证明了 Stick 输出单参数的表现并不比双参数差很多,甚至在一些条件下能得到更好的 QoE 指标。

之后通过实验说明了 Stick 在各种数据集上都表现出了比 buffer-based 方法更为优秀的性能。

有关比较性能,论文里面有这样一句被强调的话:

Note that Stick only utilize onequarter number of neurons that of Pensieve.

感觉是一种简单的强大。

之后还探讨了不同 QoE 指标下 Stick 的表现,探讨了 Trigger 的网络结构(全连接、LSTM 还是 CNN),做了一些进一步的 Evaluation,这里就不具体展开了。

Neural Adaptive Video Streaming with Pensieve

Introduction

现行的 ABR 算法在选择下一个视频块的码率的时候往往面临下述四个问题:

  • 网络吞吐量的不稳定
  • 部分 QoE 指标内存在相互矛盾的要求(如高质量和尽可能减少缓冲)
  • 当前码率选择可能对未来的选择产生影响
  • ABR 的决策可能是粗粒度的

现行的大部分 ABR 方法都依赖于对网络吞吐的估计或者对缓冲区大小的估计,所以其难以应对网络吞吐的不稳定。比如说 SOTA 方法 MPC 依赖于对网络吞吐量的预估,原文:

However, MPC’s performance relies on an accurate model of the system dynamics - particularly, a forecast of future network throughput.

这样的限制使得 MPC 对预测结果的偏差十分敏感。

从而本文提出了 Pensieve,该方法会自动学习 ABR 算法,而不需要任何的预训练的控制规则或者对运行环境的假设条件。Pensieve 是基于强化学习的,其完全通过其与环境交互的经验学习。Pensieve 的核心为一个神经网络,该神经网络代表了 Pensieve 所采取的针对网络环境的策略。该网络接受的输入为各种对网络环境的原始观测数据(吞吐量采样、回放缓冲区占用率、视频块尺寸等),而其输出则为下一个视频块应当采取的码率。该网络的训练方式为 A3C。

Pensieve 的训练方式的核心则是一个模拟器,用于将大规模的网络跟踪信息数据库回放给 Pensieve,其划分粒度可以是块级别的,也可以是包级别的或者其他。Pensieve 的评测方式为将算法部署在一个 ABR 服务器上,令算法不断给出下一个视频块应当采取的码率,这样做可以避免在客户端上进行繁重的神经网络计算。

最后 Pensieve 在几乎所有的网络环境和 QoE 指标上持平或超过现有最佳的 ABR 算法。

Background

当前占主导地位的视频分发策略为 HTTP-based adaptive streaming,而其标准化技术为 DASH,即 Dynamic Adaptive Streaming over HTTP。而 DASH 的流程可以大致描述为下图:

  • 首先播放器向服务器获得认证
  • 服务器应答一个保存有实际视频数据的 CDN 地址,并且列出所有可选码率
  • 播放器使用 ABR 算法逐个请求视频块,视频块下载完成后渲染到屏幕上播放

这里 ABR 算法几乎决定了整体的视频传输性能,其面临的若干挑战已经在 Introduction 部分给出了基本的介绍,这里稍加详细叙述。

  1. ABR 算法并不能仅考虑网络情况,因为在类似蜂窝移动网络等不稳定网络条件下,我们难以预测未来的网络吞吐,最后往往仅能够获取到保守估计导致性能浪费,或者过高估计导致传输延迟。从而 ABR 也应当考虑缓冲区占有率等更为稳定的参数。

  2. QoE 指标可能是相互冲突的。在带宽有限的网络环境中持续以最高码率请求视频可以保证视频质量,但是会升高缓冲率。相反,在不稳定的网络环境中,在任何时候选取当前网络环境能提供的最高码率会导致视频播放不平滑。

  3. 当前视频块的选择会对后续视频块的码率选择产生影响。其一,高码率视频块常常会导致后续视频块难以维持该高码率,因为可能导致缓冲。其二,为了保证视频播放平滑,ABR 算法不倾向于突然改变码率,所以后续视频块的码率并不会在当前码率基础上改变很大。

  4. 由于 ABR 算法能选择的码率范围被服务器给出的 Manifest file 限制,所以其选择往往是粗粒度的。有时网络环境会恰好落在某一个低码率过于浪费资源而稍高的码率就会导致缓冲的临界区域。

Learning ABR Algorithms

其首先将 Pensieve 和 Robust MPC 进行了对比,指出了 Robust MPC 的部分缺陷(基本还是先前部分提到的缺陷,只是使用了实验数据做了支持)。

这一部分似乎并没有写出很多新东西,还是先前部分的重复。

Design

Training Methodology

训练策略的核心是一个模拟视频下载流程的模拟器。其对于每一个视频块,模拟器会根据该视频块的码率以及网络状况生成下载耗时。在这一段时间,模拟器会缓慢消耗缓冲区内已经存在的视频块以模拟视频播放,之后再将该视频块压入缓冲区。模拟器会跟踪所有可能导致重新缓冲的事件,比如缓冲区剩余视频块长度小于正在下载的视频块需要的时间(这会导致已经缓冲的视频播放完成后新的视频块还未下载完毕)。另外一方面,如果当前缓冲区无法容纳新的视频块,那么模拟器会暂停下载 500 毫秒,之后重新开始请求。

在完成下载之后,模拟器会给出若干参数,比如当前缓冲区占有率、重新缓冲时间、视频块下载时间、(在所有可选码率下)下一个视频块的大小、该视频剩余的视频块数量等。这些参数的具体使用方式见后。

基于该模拟器,Pensieve 可以在很短的时间内学习一个本应占用长时间的视频下载流程。

虽然上述基于应用层行为的建模简单直接,但是实际上由于传输层复杂的行为,上述建模有可能并不精确。例如,播放器在缓冲区已满的条件下可能并不会在视频块下载完成后立刻请求下一个视频块,这可能导致传输层 TCP 回退到慢启动状态,这样可能并不能充分利用带宽。该问题实际上让 ABR 算法需要考虑的方面增多了,因为通常意义上快速填满缓冲区的策略会导致 TCP 慢启动从而造成事实上的低效率。

为了了解 TCP 慢启动造成的影响,设计的实验为在带宽 6 Mbps 的条件下不断以某一个恒定的码率请求视频块。得出的结论为,在启用 TCP 慢启动的条件下请求的码率越低带宽利用率越低,而不启用 TCP 慢启动的条件下所有码率均充分利用了带宽。

所以为了让模拟贴合现实,我们可以关闭服务器的 TCP 慢启动。虽然这可能导致流量的突变,但目前可以有其他的解决方案解决这一问题而不需要 Pensieve 来处理。

事实上上述模拟依然是不精确的,但是我们发现 Pensieve 依然可以通过上述不完整的模拟学习到高质量的 ABR 算法,这可能是由于 Pensieve 强大的泛用能力。