前言:
之前精读了两篇参数学习的文章, 算法的运行效果不尽人意, 并且最终也没有得出最佳参数. 这篇文章提出用优化算法来直接计算出, 因此特地读来看看.
主要参考文献:
Jha, S., Tiwari, A., Seshia, S. A., Sahai, T., & Shankar, N. (2017). TeLEx: Passive STL Learning Using Only Positive Examples. In Runtime Verification (pp. 208–224). https://doi.org/10.1007/978-3-319-67531-2_13
本文定义了tightness函数, 将求解临界robustness转换为了求解tightness最大值问题. 并且利用了基于梯度的优化方法提高了运算效率. 最终形成软件成果Python工具包TeLEx.
对STL特性的研究主要分为两种:
本文研究的是第一类, 但是只是用正例样本. 这与实际的生产场景是一致的, 因为实际获取反例代价太高, 例如飞机坠毁、汽车追尾等等.
本研究的主要问题就是, 在没有负例的情况下如何避免对正例的过度泛化.
本文提出了一种用于量化tightness的指标, 并且用平滑函数来使得基于梯度的优化算法成为可能.
介绍了什么是区间、时间域、STL公式以及STL公式的布尔语义及量化语义.
要学习的公式如下:
ϕ = ∣ ang ∣ ≥ 0.2 ⇒ F [ 0 , 6 ] spd ≤ α \phi=|\text{ang}|\geq 0.2 \Rightarrow F_{[0,6]}\text{spd}\leq \alpha ϕ=∣ang∣≥0.2⇒F[0,6]spd≤α
其中只有一个参数变量 α \alpha α, 此公式表示: 如果汽车方向盘转角超过0.2, 则6秒内速度能够达到的最小值.
ϵ \epsilon ϵ-邻域:
N ϵ ( ϕ ( v 1 , v 2 , . . . , v k ) ) = { ϕ ( v 1 ′ , v 2 ′ , . . . , v k ′ ) s . t . ∣ v i − v 1 ′ ∣ ≤ ϵ i f o r 1 ≤ i ≤ k } \mathcal{N}_\epsilon(\phi(v1,v2,...,v_k))=\{\phi(v_1',v_2',...,v_k') s.t. |v_i-v_1'|\leq \epsilon_i for 1\leq i\leq k\} Nϵ(ϕ(v1,v2,...,vk))={ϕ(v1′,v2′,...,vk′)s.t.∣vi−v1′∣≤ϵifor1≤i≤k}
ϵ \epsilon ϵ-tight STL公式:
∀ τ ∈ T : τ ⊨ ϕ ( v 1 ∗ , v 2 ∗ , . . . , v k ∗ ) a n d ∃ τ ∈ T : τ ⊭ ϕ ( v 1 , v 2 , . . . , v k ) \forall \tau \in \mathcal{T}: \tau\models\phi(v_1^*,v_2^*,...,v_k^*)\\ and\\ \exists \tau \in \mathcal{T}: \tau \not\models \phi(v_1,v_2,...,v_k) ∀τ∈T:τ⊨ϕ(v1∗,v2∗,...,vk∗)and∃τ∈T:τ⊨ϕ(v1,v2,...,vk)
越tight的参数选择, 其 ϵ \epsilon ϵ邻域越小, 因此求解tightest公式的问题转换为了以下问题:
minimize { ∣ ϵ 1 ∣ , ∣ ϵ 2 ∣ , … , ∣ ϵ k ∣ } s.t. ϵ 1 = p 1 − p 1 ′ , ϵ 2 = p 2 − p 2 ′ , … , ϵ k = p k − p k ′ ∀ τ ∈ T τ ⊨ ϕ ( p 1 , p 2 , … , p k ) , ∃ τ ′ ∈ T τ ′ ⊨ ϕ ( p 1 ′ , p 2 ′ , … , p k ′ ) \begin{gathered} \operatorname{minimize}\left\{\left|\epsilon_{1}\right|,\left|\epsilon_{2}\right|, \ldots,\left|\epsilon_{k}\right|\right\} \text { s.t. } \\ \epsilon_{1}=p_{1}-p_{1}^{\prime}, \epsilon_{2}=p_{2}-p_{2}^{\prime}, \ldots, \epsilon_{k}=p_{k}-p_{k}^{\prime} \\ \forall \tau \in \mathcal{T} \tau \models \phi\left(p_{1}, p_{2}, \ldots, p_{k}\right), \exists \tau^{\prime} \in \mathcal{T} \tau^{\prime} \models \phi\left(p_{1}^{\prime}, p_{2}^{\prime}, \ldots, p_{k}^{\prime}\right) \end{gathered} minimize{∣ϵ1∣,∣ϵ2∣,…,∣ϵk∣} s.t. ϵ1=p1−p1′,ϵ2=p2−p2′,…,ϵk=pk−pk′∀τ∈Tτ⊨ϕ(p1,p2,…,pk),∃τ′∈Tτ′⊨ϕ(p1′,p2′,…,pk′)
那么问题就变成了一个多参数的优化问题, 在现实中很难进行求解. 并且约束中需要验证是否满足的计算是一个NP难问题, 因此用STL的鲁棒语义替换:
minimize { ∣ ϵ 1 ∣ , ∣ ϵ 2 ∣ , … , ∣ ϵ k ∣ } s.t. ϵ 1 = p 1 − p 1 ′ , ϵ 2 = p 2 − p 2 ′ , … , ϵ k = p k − p k ′ ∀ τ ∈ T ρ ( ϕ ( p 1 , p 2 , … , p k ) , τ , 0 ) ≥ 0 , ∃ τ ′ ∈ T ρ ( ϕ ( p 1 ′ , p 2 ′ , … , p k ′ ) , τ ′ , 0 ) < 0 \begin{gathered} \text { minimize }\left\{\left|\epsilon_{1}\right|,\left|\epsilon_{2}\right|, \ldots,\left|\epsilon_{k}\right|\right\} \quad \text { s.t. } \\ \epsilon_{1}=p_{1}-p_{1}^{\prime}, \epsilon_{2}=p_{2}-p_{2}^{\prime}, \ldots, \epsilon_{k}=p_{k}-p_{k}^{\prime} \\ \forall \tau \in \mathcal{T} \rho\left(\phi\left(p_{1}, p_{2}, \ldots, p_{k}\right), \tau, 0\right) \geq 0, \exists \tau^{\prime} \in \mathcal{T} \rho\left(\phi\left(p_{1}^{\prime}, p_{2}^{\prime}, \ldots, p_{k}^{\prime}\right), \tau^{\prime}, 0\right)<0 \end{gathered} minimize {∣ϵ1∣,∣ϵ2∣,…,∣ϵk∣} s.t. ϵ1=p1−p1′,ϵ2=p2−p2′,…,ϵk=pk−pk′∀τ∈Tρ(ϕ(p1,p2,…,pk),τ,0)≥0,∃τ′∈Tρ(ϕ(p1′,p2′,…,pk′),τ′,0)<0
然而现在还是一个多变量优化问题, 还需要进一步转化. 由于鲁棒性在参数空间是连续的, 因此 ϵ \epsilon ϵ越小就是鲁棒性越低. 问题进一步简化为以下:
minimize e p 1 , p 2 , … , p k min τ ∈ T ∣ ρ ( ϕ ( p 1 , p 2 , … , p k ) , τ , 0 ) ∣ \operatorname{minimize} e_{p_{1}, p_{2}, \ldots, p_{k}} \min _{\tau \in \mathcal{T}}\left|\rho\left(\phi\left(p_{1}, p_{2}, \ldots, p_{k}\right), \tau, 0\right)\right| minimizeep1,p2,…,pkτ∈Tmin∣ρ(ϕ(p1,p2,…,pk),τ,0)∣
简化到现在还存在一个问题, 上式中的 ∣ ⋅ ∣ |\cdot| ∣⋅∣把鲁棒度的符号消去了, 即使最终得到的鲁棒性接近于零, 只要其符号是负的 (如下图 (a) ) , 那么信号还是不能满足所求STL公式. 我们希望找到的参数应该使得鲁棒度无限接近零但是稍微大于零.
因此进行最后一步转化: 定义tightness指标 θ ( μ , τ , t ) \theta(\mu,\tau,t) θ(μ,τ,t), 将鲁棒度 r r r进行非线性映射, 强行把两种情况分开, 理想的tightness函数如上图 (b) 所示, 但是只能用类似于图 © 的函数来近似.
最后选择的 θ ( r ) \theta(r) θ(r)如上图所示, 其函数定义为:
1 r + e − β r − e − r \frac{1}{r+e^{-\beta r}}-e^{-r} r+e−βr1−e−r
其中 β \beta β是决定曲线陡峭度的参数, β ≥ 1 \beta\geq 1 β≥1, 取不同数值具体效果如Fig.2所示. 由于 r ( α , τ , 0 ) r(\alpha,\tau,0) r(α,τ,0)连续, θ ( r ) \theta(r) θ(r)平滑, 因此复合函数 θ ( α , τ , t ) \theta(\alpha,\tau,t) θ(α,τ,t)也是平滑的, 因此就可以使用基于梯度的优化方法来求解最大值.
上面演示的是不包含时序操作子的公式的处理方式, 当包含时序操作子时,
对于 G [ t 2 − t 1 ] ϕ G_{[t_2-t_1]\phi} G[t2−t1]ϕ, 时间间隔 t 2 − t 1 t_2-t_1 t2−t1越大, robustness越小; 对于 F [ t 2 − t 1 ] ϕ F_{[t_2-t_1]\phi} F[t2−t1]ϕ, 时间间隔 t 2 − t 1 t_2-t_1 t2−t1越大, robustness越大. 为了抵消这样的影响, 要乘以一个系数消除一下.
其中, globally操作子的系数函数为 C ( γ , t 1 , t 2 ) = 2 1 + e γ ( t 2 − t 1 + 1 ) C(\gamma,t_1,t_2)=\frac{2}{1+e^{\gamma(t_2-t_1+1)}} C(γ,t1,t2)=1+eγ(t2−t1+1)2, finally操作子的系数函数为 E ( γ , t 1 , t 2 ) = 2 1 + e − γ ( t 2 − t 1 + 1 ) E(\gamma,t_1,t_2)=\frac{2}{1+e^{-\gamma(t_2-t_1+1)}} E(γ,t1,t2)=1+e−γ(t2−t1+1)2. 其中 γ ≥ 0 \gamma \geq 0 γ≥0的数值体现了对时间参数的偏好. C C C使得tightness更小, 因此更容易得到更大的时间间隔 t 2 − t 1 t_2-t_1 t2−t1; 相反 E E E使得tightness更大, 容易得到更大的时间间隔 t 2 − t 1 t_2-t_1 t2−t1.
最终, 我们的问题转换为了:
对于单个信号:
( v 1 ∗ , v 2 ∗ , … , v k ∗ ) = arg max p 1 , p 2 , … , p k θ ( ϕ ( p 1 , p 2 , … , p k ) , τ , 0 ) \left(v_{1}^{*}, v_{2}^{*}, \ldots, v_{k}^{*}\right)=\arg \max _{p_{1}, p_{2}, \ldots, p_{k}} \theta\left(\phi\left(p_{1}, p_{2}, \ldots, p_{k}\right), \tau, 0\right) (v1∗,v2∗,…,vk∗)=argp1,p2,…,pkmaxθ(ϕ(p1,p2,…,pk),τ,0)
对于整个数据集:
( v 1 ∗ , v 2 ∗ , … , v k ∗ ) = arg max p 1 , p 2 , … , p k [ min τ ∈ T θ ( ϕ ( p 1 , p 2 , … , p k ) , τ , 0 ) ] \left(v_{1}^{*}, v_{2}^{*}, \ldots, v_{k}^{*}\right)=\arg \max _{p_{1}, p_{2}, \ldots, p_{k}}\left[\min _{\tau \in \mathcal{T}} \theta\left(\phi\left(p_{1}, p_{2}, \ldots, p_{k}\right), \tau, 0\right)\right] (v1∗,v2∗,…,vk∗)=argp1,p2,…,pkmax[τ∈Tminθ(ϕ(p1,p2,…,pk),τ,0)]
这篇文章选择了拟牛顿法来求解优化问题, 这是一个基于梯度的优化算法差分进化法. 同时还用了不基于梯度的算法差分进化法来验证效果.
尝试学习公式: ⋀ i = 0 k ( G [ i , i + 1 ] ( x ≤ p 2 i ∧ x ≥ p 2 i + 1 ) ) , k = 0 , 1 , . . . , 11 \bigwedge_{i=0}^{k}\left(G_{[i, i+1]}\left(x \leq p_{2 i} \wedge x \geq p_{2 i+1}\right)\right), k=0,1,...,11 ⋀i=0k(G[i,i+1](x≤p2i∧x≥p2i+1)),k=0,1,...,11
由于优化算法有随机性, 因此每个算法跑10遍, 下面的图像记录了实验结果. 图 (b) © 中的误差柱表示runtime的标准差.
上图显示, 基于梯度的方法提速了30-100倍. 并且, 基于梯度方法学习到的公式的robustness更小.
下面给了两个卫兵巡逻的例子. 两个卫兵的初始位置在左下角和右上角. 在每个时刻, 卫兵会计算从他们当前位置到入侵者的距离,然后他们选择离他们最近的入侵者作为目标并朝着它移动. 如果移动的过程中冒出来一个新的入侵者, 那么卫兵的目标可能因为距离这个新的入侵者而变化. 当卫兵移动到入侵者的位置时, 入侵者被消灭,之后卫兵就一定停留到新的入侵者出现. 同一时刻最多只有两个入侵者.
取仿真1000步进行训练, 学到两条STL特性:
这个案例不是特别懂, 作者也没有将具体的公式写出来.
这个案例使用了Udacity智能驾驶公共数据集. 使用的HMB-1数据集包括了13205个长度为221s的信号样本, 使用了方向盘转角、扭矩和速度三个维度的数据. 学习了以下STL公式:
模板: G [ 0 , 2.2 e 11 ] ( ( ( G[0,2.2 e 11]((( G[0,2.2e11]((( angle ≥ 0.2 ) ∣ ( \geq 0.2) \mid( ≥0.2)∣( angle ≤ − 0.2 ) ) ⇒ ( \leq-0.2)) \Rightarrow( ≤−0.2))⇒( speed ≤ a ? 15 ; 25 ) ) \leq a ? 15 ; 25)) ≤a?15;25))
结果: G [ 0.0 , 2.2 e 11 ] ( ( ( G[0.0,2.2 e 11]((( G[0.0,2.2e11]((( angle ≥ 0.2 ) ∣ ( \geq 0.2) \mid( ≥0.2)∣( angle ≤ − 0.2 ) ) ⇒ ( \leq-0.2)) \Rightarrow( ≤−0.2))⇒( speed ≤ 22.01 ) ) \leq 22.01)) ≤22.01))
Tightness=0.067, robustness=0.004, runtime=8.64s
模板: G [ 0 , 2.2 e 11 ] ( ( ( G[0,2.2 e 11]((( G[0,2.2e11]((( torque ≥ 1.6 ) ∣ ( \geq 1.6) \mid( ≥1.6)∣( torque ≤ − 1.6 ) ) ⇒ ( \leq-1.6)) \Rightarrow( ≤−1.6))⇒( speed ≤ a ? 15 ; 25 ) ) \leq a ? 15 ; 25)) ≤a?15;25))
结果: G [ 0.0 , 2.2 e 11 ] ( ( ( G[0.0,2.2 e 11]((( G[0.0,2.2e11]((( torque ≥ 1.6 ) ∣ ( \geq 1.6) \mid( ≥1.6)∣( torque ≤ − 1.6 ) ) ⇒ ( \leq-1.6)) \Rightarrow( ≤−1.6))⇒( speed ≤ 23.64 ) ) \leq 23.64)) ≤23.64))
Tightness=0.221, robustness=0.005, runtime=10.12s
模板: G [ 0 , 2.2 e 11 ] ( ( G[0,2.2 e 11](( G[0,2.2e11](( angle ≥ 0.06 ) ⇒ ( \geq 0.06) \Rightarrow( ≥0.06)⇒( torque ≥ b ? − 2 ; − 0.5 ) ) \geq b ?-2 ;-0.5)) ≥b?−2;−0.5))
结果: G [ 0.0 , 2.2 e 11 ] ( ( G[0.0,2.2 e 11](( G[0.0,2.2e11](( angle ≥ 0.06 ) ⇒ ( \geq 0.06) \Rightarrow( ≥0.06)⇒( torque ≥ − 1.06 ) ) \geq-1.06)) ≥−1.06))
Tightness=0.113, robustness=0.003, runtime=7.30s
模板: G [ 0 , 2.2 e 11 ] ( ( G[0,2.2 e 11](( G[0,2.2e11](( angle ≤ − 0.06 ) ⇒ ( \leq-0.06) \Rightarrow( ≤−0.06)⇒( torque ≤ b ? 0.5 ; 2 ) ) \leq b ? 0.5 ; 2)) ≤b?0.5;2))
结果: G [ 0.0 , 2.2 e 11 ] ( ( G[0.0,2.2 e 11](( G[0.0,2.2e11](( angle ≤ − 0.06 ) ⇒ ( \leq-0.06) \Rightarrow( ≤−0.06)⇒( torque ≤ 1.25 ) ) \leq 1.25)) ≤1.25))
Tightness=0.472, robustness=0.002, runtime=5.00s
模板: G [ 0 , 2.2 e 11 ] ( ( G[0,2.2 e 11](( G[0,2.2e11](( torque ≤ 0.0 ) ⇒ F [ 0.0 , 1.2 e 8 ] ( \leq 0.0) \Rightarrow F[0.0,1.2 e 8]( ≤0.0)⇒F[0.0,1.2e8]( angle ≤ a ? − 1 ; 1 ) ) \leq a ?-1 ; 1)) ≤a?−1;1))
结果: G [ 0.0 , 2.2 e 11 ] ( ( G[0.0,2.2 e 11](( G[0.0,2.2e11](( torque ≤ 0.0 ) ⇒ F [ 0.0 , 1.2 e 8 ] ( \leq 0.0) \Rightarrow F[0.0,1.2 e 8]( ≤0.0)⇒F[0.0,1.2e8]( angle ≤ 0.01 ) ) \leq 0.01)) ≤0.01))
Tightness=0.727, robustness=0.002, runtime=46.59s
从上面可以看到得到的robustness都非常低, 运行时间也可以接受. 最后一个可能是因为有两个时序操作子, 所以计算时间明显变长. 上面的公式可以作为判别安全行为的标准, 也可以用来比较不同的自动驾驶策略.