前言:借这里汇报一下毕业论文的进度,结构学习部分的论文和代码已经完成98%,现在回头搞参数学习发现现在掌握的方法都不能很好地契合毕设的整体结构。因此现在飞速地多看几篇,争取本周完工。
主要参考文献:
Leung, K., Arechiga, N., & Pavone, M. (2019, June). Backpropagation for Parametric STL. 2019 IEEE Intelligent Vehicles Symposium (IV). https://doi.org/10.1109/ivs.2019.8814167
文章目录
概览
这篇文章结合了计算网络来完成了STL鲁棒度的计算,并且用近似方法平滑掉了鲁棒度计算中的min/max操作子,利用现有的机器学习库完成了pSTL参数的优化,优化了运算效率。
流水账笔记
1 Introduction
背景信息
由交通规则引入主题,驾驶行为可以用基于规则或基于逻辑的方式进行描述,因此可以用STL来描述驾驶行为中的高层特性。
本篇文章面对的依然是有复杂的时序信号中学习STL公式,从而解读系统行为。学习到的STL公式可以用于分类、预测或决策任务中。然而,由于STL空间无限大,且此任务的解并不唯一,于是借助PSTL来简化问题。
前人研究
文献[10],[13],[14]要求公式的鲁棒度函数随参数变量单调变化,且每个变量的单独分析并没有考虑到各个变量的相关性。
主要工作
本文的关键工作在于:
- 结合了运算图 (computation graph) 对鲁棒度进行计算
- 对min/max操作符进行了平滑近似
- 利用了现有的机器学习工具包中的autodifferentiation, batching, ease of parallelization等工具,通过反向传播,对pSTL参数进行优化
2 Problem Formulation
A. STL: Syntax and Semantics
信号表示
这里的信号表示有点不一样, 用 s i = ( s , t i ) s_i=(s,t_i) si=(s,ti)来表示信号 s s s从 t i t_i ti时刻的后缀. 对于一条给定的信号 s s s, 本文中利用上面的定义强行将 s s s拆分成了 N N N条序列 s 0 , s 1 , s 2 , . . . , s N s_0,s_1,s_2,...,s_N s0,s1,s2,...,sN, 其中 N N N为信号采样点的最大序号.
假设
- 采样是均匀的. 但是这里并没有说明这个假设的作用, 估计是想用序号来直接代表时间?
- 时序操作子的time window是闭区间 [ a , b ] [a,b] [a,b]或 [ a , ∞ ) [a,\infty) [a,∞)
STL的语法和语义
老生常谈了, 这里略过
定义
- STL ordering: 公式 ϕ \phi ϕ对应的解析树的逆序遍历排序 O ϕ = { φ 1 , φ 2 , . . . , φ k } \mathcal{O}_\phi=\{\varphi_1,\varphi_2,...,\varphi_k\} Oϕ={φ1,φ2,...,φk}
- Robustness Trace: 鲁棒度轨迹 τ ( s , t o , ϕ ) \tau(s,t_o,\phi) τ(s,to,ϕ)是鲁棒度随时间变化的轨迹
- Valid Robustness Trace: 通过方法C计算出来的鲁棒度轨迹成为有效鲁棒度轨迹
- Soundness: 稳健性, 如果方法C能够计算出所有公式 ϕ \phi ϕ以及所有信号 s s s的鲁棒度轨迹, 则称方法C是稳健的
B. PSTL
求解PSTL问题可以看作将一串时间序列映射为参数值, 这可以看作一种对不定长序列数据的特征提取。
处理不定长数据的方法, 尤其是比较不定长数据间相似度的方法有DWT和Skorokhod距离, 但是仍不足以用于逻辑结构的学习.
给定一条时序轨迹 s s s, 求解时序逻辑公式 ϕ P \phi_\mathcal{P} ϕP的最佳赋值 v ( P ) \mathcal{v(P)} v(P)等效于求解以下优化问题:
v ∗ ( P ) = arg P min ∣ ∣ ρ ( s , t , ϕ P ) ∣ ∣ 2 \mathcal{v^*(P)}=\arg \limits_\mathcal{P} \min ||\rho(s,t,\phi_{\mathcal{P}})||_2 v∗(P)=Pargmin∣∣ρ(s,t,ϕP)∣∣2
最理想的结果是找到使得鲁棒度为0的一组赋值.
3 Computation Graph Representation
A. Code Toolbox
工具包代码在这里.
依赖PyTorch.
B. Constructing the Computation Graph G \mathcal{G} G
伪代码
终于进入正题了, 那么这个计算图是怎么构建的呢? 这里给了一个仿佛没给的伪代码:
从上面我们知道了算法输入是时间序列
s
s
s和公式模板
ϕ
\phi
ϕ, 输出是鲁棒度
ρ
G
(
s
,
t
,
ϕ
)
\rho^{\mathcal{G}(s,t,\phi)}
ρG(s,t,ϕ)和鲁棒度轨迹
τ
G
(
s
,
t
,
ϕ
)
\tau^{\mathcal{G}(s,t,\phi)}
τG(s,t,ϕ).
可以看出来第二句是关键, 下面结合前面的定义来理解一下.
O ϕ = { φ 1 , φ 2 , . . . , φ k } \mathcal{O}_\phi=\{\varphi_1,\varphi_2,...,\varphi_k\} Oϕ={φ1,φ2,...,φk}是公式 ϕ \phi ϕ对应的解析树的逆序遍历排序. 但是解析树的构建是在算法中完成的吗? 总之解析树就长下面这样, 构建方式也比较好理解.
G
\mathcal{G}
G的构建需要将
G
φ
i
\mathcal{G}_{\varphi_i}
Gφi, 也就是
O
ϕ
\mathcal{O}_\phi
Oϕ列表中的子公式的计算图单元按照顺序连接起来, 遵循的规律就是序号大的子图只接受来自更小序号的子图的输出.
偏序操作符
那么子图又是如何构成的呢? 对于偏序操作符 ( > , < , ≤ , ≥ >,<,\leq,\geq >,<,≤,≥), 这里对是否包含等号不加以区分, 对应的子图如下:
布尔操作符
对于布尔逻辑操作符(
¬
,
∧
,
∨
\neg,\land, \lor
¬,∧,∨), 其计算子图如下:
上面的m根据定义是min/max函数.
时序操作符
接下来就要考虑更加复杂的时序操作符always和eventually. 这里使用了类似RNN的结构来计算eventually和always操作子的鲁棒度轨迹, 相同的结构也能够扩展至until和then操作子.
如何理解上图? 首先得明确
h
i
,
ρ
i
,
o
i
h_i,\rho_i,o_i
hi,ρi,oi的含义以及计算单元所做的运算:
- ρ i \rho_i ρi: s i s_i si相对于公式 ϕ \phi ϕ的鲁棒度
- h i h_i hi: 隐藏状态
- o i o_i oi: 每个计算单元的输出
- 结点: 分4种情况进行以下运算
定义鲁棒度轨迹 ρ N \rho_N ρN的逆序序列定义为 ρ ~ N \tilde{\rho}_N ρ~N, ρ ~ i \tilde{\rho}_i ρ~i指的是对逆序的 s s s计算 t i ′ t_i' ti′时的鲁棒度.
- 若 I = [ 0 , ∞ ) I=[0,\infty) I=[0,∞), 则 o i = m ( ρ ~ i , h i ) , h i + 1 = o i , i = 0 , 1 , . . . , N o_i=m(\tilde{\rho}_i,h_i), h_{i+1}=o_i, i=0,1,...,N oi=m(ρ~i,hi),hi+1=oi,i=0,1,...,N
- 若 I = [ a , ∞ ) I=[a,\infty) I=[a,∞), 则 o i = m ( ρ ~ i , h i ) , h i + 1 = o i , i = ┌ τ − 1 ( a ) ┐ , . . . , N o_i=m(\tilde{\rho}_i,h_i), h_{i+1}=o_i, i=\ulcorner \tau^{-1}(a)\urcorner,...,N oi=m(ρ~i,hi),hi+1=oi,i=┌τ−1(a)┐,...,N
- 若 I = [ 0 , b ] I=[0,b] I=[0,b], 则 m = └ τ − 1 ( b ) ┘ m=\llcorner\tau^{-1}(b)\lrcorner m=└τ−1(b)┘ (落在 [ 0 , b ] [0,b] [0,b]的采样点数), 状态向量 h i = [ h i 1 , h i 2 , . . . , h i m ] h_i=[h_{i_1},h_{i_2},...,h_{i_m}] hi=[hi1,hi2,...,him]的长度为 m m m, 其中, h 0 h_0 h0中每个元素的取值为 ± ρ max \pm \rho_{\max} ±ρmax, 输出为 o i = m ( ρ ~ i , h i 1 , h i 2 , . . . , h i m ) o_i=m(\tilde{\rho}_i,h_{i_1},h_{i_2},...,h_{i_m}) oi=m(ρ~i,hi1,hi2,...,him), 下一个状态变量取 h i h_i hi的后 m − 1 m-1 m−1项, 附加此时的鲁棒度 ρ ~ i \tilde{\rho}_i ρ~i, h i + 1 = [ h i 2 , . . . , h i m , ρ ~ i ] h_{i+1}=[h_{i_2},...,h_{i_m},\tilde{\rho}_i] hi+1=[hi2,...,him,ρ~i].
- 若 I = [ a , b ] I=[a,b] I=[a,b], 相对于上面那种情况只改变输出 o i = m ( ρ ~ i , h i 1 , h i 2 , . . . , h i k ) o_i=m(\tilde{\rho}_i,h_{i_1},h_{i_2},...,h_{i_k}) oi=m(ρ~i,hi1,hi2,...,hik), 其中 k = m − └ τ − 1 ( s ) ┘ k=m-\llcorner\tau^{-1}(s)\lrcorner k=m−└τ−1(s)┘, 即落在区间 [ a , b ] [a,b] [a,b]内的采样点数量.
C. Soundness of G \mathcal{G} G
这里证明了计算图的稳健性, 即可以计算任何信号、任何公式的鲁棒度. 具体见论文这里就不记录了.
4 Backpropagation on STL Robustness Formulas
min/max 近似
那么反向传播需要得到梯度下降所需要的梯度, 而min和max函数是非平滑的. 为了使用通用的计算图工具, 需要把min和max函数做一个平滑近似. 近似函数如下:
max ~ ( x ; w ) = ∑ i n x i exp ( w x i ) ∑ j n exp ( w x j ) min ~ ( x ; w ) = ∑ i n x i exp ( − w x i ) ∑ j n exp ( − w x j ) \widetilde{\max }(\mathbf{x} ; w)=\frac{\sum_{i}^{n} x_{i} \exp \left(w x_{i}\right)}{\sum_{j}^{n} \exp \left(w x_{j}\right)} \\ \widetilde{\min }(\mathbf{x} ; w)=\frac{\sum_{i}^{n} x_{i} \exp \left(-w x_{i}\right)}{\sum_{j}^{n} \exp \left(-w x_{j}\right)} max (x;w)=∑jnexp(wxj)∑inxiexp(wxi)min (x;w)=∑jnexp(−wxj)∑inxiexp(−wxi)
其中 w w w是一个缩放参数, 当 w → ∞ w \rightarrow \infty w→∞的时候, 上面计算出来的就是真实的 max \max max, min \min min. w = 0 w=0 w=0的时候上式就是一个取平均值的函数. 这样一来 w w w是不是越大越好呢? 其实不是的, 如果 w w w太大, 那么梯度就会变得太大, 也就失去了最初进行近似的初衷. 因此, 这里的trade-off要做好, w w w不能太大也不能太小.
当然还有其他的近似方法, 如logsumexp方法, 参照[9, 15].
上式的计算同样可以通过计算图, 用基本的计算单元进行构建. 之后 ρ ( s , t , ϕ ; w ) \rho(s,t,\phi;w) ρ(s,t,ϕ;w)就专门用来指代近似的鲁棒度.
反向传播算法
算法的终止条件分三种情况:
- 达到最大迭代次数 N N N
- 鲁棒度小于预期鲁棒度 ρ t o l \rho_{tol} ρtol
- 梯度小于预期梯度 g t o l g_{tol} gtol
每次循环中的 w i w_i wi都会适当退火缩小, 梯度计算使用现成的ML工具.
正确性
由于使用了近似算法, 那么必然不能保证结果的绝对正确. 作者做了这样的狡辩:
- 如果只是作为特征提取的一种方法的话, 后期的处理时能够容忍噪声的 (好家伙, 好一个甩锅)
- 近似算法实在是太香了:1) 不管多复杂的公式都能算(毕竟神经网络计算单元多了去了); 2) 可以直接用PyTorch或者TensorFlow类似的工具, 可以并行计算, 甚至还可以批处理多条信号.
但是呢, 上面的方法还不能求解时间参数… 作者的介绍是, 反正 a , b a,b a,b的取值都是离散域上的有限值, 大不了一个一个遍历… 还可以借鉴LSTM网络的方法, 这里没有继续展开.
5 Case Study: Systematic Scenario Generation for Autonomous Driving
使用的数据集是通过SUMO仿真的2500条变道轨迹以及1105条真人驾驶的变道数据.
学习的公式为 ϕ = in_start_lane U t t c < α \phi=\text{in\_start\_lane } \mathcal{U}\ ttc<\alpha ϕ=in_start_lane U ttc<α, 表示当车辆离开起始车道后, 相撞时间 t t c ttc ttc所允许的最大值, t t c ttc ttc的定义很好理解, 就是距离差除以速度差.
ttc ( x 1 , x 2 , v 1 , v 2 ) = − x 1 − x 2 v 1 − v 2 \operatorname{ttc}\left(x_{1}, x_{2}, v_{1}, v_{2}\right)=-\frac{x_{1}-x_{2}}{v_{1}-v_{2}} ttc(x1,x2,v1,v2)=−v1−v2x1−x2
实验中计算了对每条轨迹的最佳
α
\alpha
α, 对所有的结果进行了统计, 以频数的方式显示了结果. 两个数据集的运行结果如下图所示.
说实话这个实验数据的处理有点迷惑. 显然这里得到的STL公式不是为了描述系统的运行特征, 而是为了把
α
\alpha
α作为一个高层特性用作后续的聚类或预测操作中. 总之这里得到频数不是很理解.
6 Future Work and Conclusions
未来工作
- 拓展时序参数的学习
- 通过逻辑公式继续探索可解释AI
心得与笔记
- 如果将本文的算法与神经网络的训练作比较的话, 可以将计算网络的GT输出看做0, 因为理想的鲁棒度为0, 在实际计算的鲁棒度与理想的0之间做梯度下降.
- 与现有的机器学习公式结合起来了, 感觉还挺先进的.
- 针对不同的公式结构, 需要从0构建计算图, 有没有通用算法呢? 比如说 O P \mathcal{O_P} OP能不能自动计算出来呢?