变点问题的公式推导

在这里插入图片描述

背景与关键定义

  1. 变点检测问题
    变点检测的目标是在给定的观测序列 y 1 , y 2 , … , y T y_1, y_2, \dots, y_T y1,y2,,yT 中,找到一个或多个点(变点),使得每段子序列(即变点划分的区间)能被一个较简单的模型(比如常数均值模型)很好地拟合。

  2. 代价函数 C \mathcal{C} C
    C \mathcal{C} C 表示给定一段子序列(如 y ( t + 1 ) : s y_{(t+1):s} y(t+1):s)的拟合代价(cost)。代价越小,说明这段序列被拟合得越好。

  3. 引入变点的目标
    通常我们希望通过引入变点,使得划分后的子序列总代价减少。公式 (2) 的假设反映了这一点:
    C ( y ( t + 1 ) : s ) + C ( y ( s + 1 ) : T ) + K ≤ C ( y ( t + 1 ) : T ) , \mathcal{C}\left(y_{(t+1): s}\right)+\mathcal{C}\left(y_{(s+1): T}\right)+K \leq \mathcal{C}\left(y_{(t+1): T}\right), C(y(t+1):s)+C(y(s+1):T)+KC(y(t+1):T),
    表示将序列 y ( t + 1 ) : T y_{(t+1): T} y(t+1):T 划分成两段(用变点 s s s 分开)后,总代价会减少。

  4. 动态规划框架
    动态规划求解变点检测问题时,我们递归计算:
    F ( T ) = min ⁡ τ { F ( τ ) + C ( y ( τ + 1 ) : T ) + β } , F(T) = \min_{\tau} \{ F(\tau) + \mathcal{C}(y_{(\tau+1):T}) + \beta \}, F(T)=τmin{F(τ)+C(y(τ+1):T)+β},
    其中:

    • F ( τ ) F(\tau) F(τ):序列 y 1 : τ y_{1:\tau} y1:τ 的最优划分代价。
    • β \beta β:引入一个变点的固定代价(penalty)。
    • τ \tau τ:候选的上一个变点。

    因为枚举所有可能的 τ \tau τ 代价很高,我们希望通过数学分析提前剔除一些不可能成为最优解的候选变点


定理 3.1 的主要内容

目标:如果某个点 t t t 不可能成为未来某个时间点 T > s T>s T>s 的最优变点,我们希望尽早把它剔除,从而减少动态规划的计算量。

定理的核心思想:如果 t t t 满足:
F ( t ) + C ( y ( t + 1 ) : s ) + K ≥ F ( s ) , F(t) + \mathcal{C}\left(y_{(t+1):s}\right) + K \geq F(s), F(t)+C(y(t+1):s)+KF(s),
那么对于所有未来的 T > s T > s T>s t t t 不可能是最优变点。

直观解释

  • 变点 t t t 的分段代价(加上 K K K)已经超过从 s s s 开始分段的代价 F ( s ) F(s) F(s)
  • 这说明从 t t t 开始分段的效果不如从 s s s 开始分段,因此 t t t 永远不会成为未来的最优选择。

证明的关键步骤

  1. 假设 (3) 成立
    F ( t ) + C ( y ( t + 1 ) : s ) + K ≥ F ( s ) . F(t) + \mathcal{C}\left(y_{(t+1):s}\right) + K \geq F(s). F(t)+C(y(t+1):s)+KF(s).
    我们在 t t t s s s 两种可能分段中,发现 t t t s s s 的代价更大。

  2. 添加未来段的代价
    考虑 T > s T>s T>s,加入 C ( y ( s + 1 ) : T ) \mathcal{C}(y_{(s+1):T}) C(y(s+1):T)
    F ( t ) + C ( y ( t + 1 ) : s ) + K + C ( y ( s + 1 ) : T ) ≥ F ( s ) + C ( y ( s + 1 ) : T ) . F(t) + \mathcal{C}\left(y_{(t+1):s}\right) + K + \mathcal{C}\left(y_{(s+1):T}\right) \geq F(s) + \mathcal{C}\left(y_{(s+1):T}\right). F(t)+C(y(t+1):s)+K+C(y(s+1):T)F(s)+C(y(s+1):T).
    这说明即使考虑未来序列,选择 t t t 作为变点的代价依然不如选择 s s s 的代价。

  3. 结合动态规划公式
    根据动态规划的递归公式:
    S T = { F ( τ ) + C ( y ( τ + 1 ) : T ) + β , τ = 0 , 1 , … , T − 1 } . S_T = \{F(\tau) + \mathcal{C}(y_{(\tau+1):T}) + \beta, \tau = 0, 1, \dots, T-1\}. ST={F(τ)+C(y(τ+1):T)+β,τ=0,1,,T1}.
    t t t 的值不会比 s s s 小,因此 t t t 永远不会成为集合 S T S_T ST 的最优解。

  4. 结论
    t t t 可以从候选集合中剔除。


定理的重要意义

  1. 加速动态规划
    在变点检测的动态规划算法中,通过剔除不可能的候选变点,可以减少计算量,显著加快算法。

  2. 数学条件的合理性
    定理基于变点的代价函数 C \mathcal{C} C 满足一定的“单调性”假设,这在实际问题中是常见的。

  3. 适用范围广
    这种剔除策略不仅限于特定代价函数或数据集,具有通用性。


总结

  • 定理 3.1 提供了一个数学工具,用于在变点检测问题中高效筛选候选变点。
  • 证明利用了动态规划的递归公式,结合代价函数的性质,展示了某些变点在特定条件下无法成为最优解。
  • 实际应用中,这一结果能显著优化计算效率,尤其是当数据规模较大时。

我们详细推导定理 3.1 的证明。目标是从假设 F ( t ) + C ( y ( t + 1 ) : s ) + K ≥ F ( s ) F(t) + \mathcal{C}(y_{(t+1):s}) + K \geq F(s) F(t)+C(y(t+1):s)+KF(s) 出发,证明 t t t 无法成为未来时间 T > s T > s T>s 的最优变点。


前置公式和假设

  1. 动态规划的核心公式是:
    F ( T ) = min ⁡ τ = 0 , 1 , … , T − 1 { F ( τ ) + C ( y ( τ + 1 ) : T ) + β } , F(T) = \min_{\tau=0,1,\ldots,T-1} \{ F(\tau) + \mathcal{C}(y_{(\tau+1):T}) + \beta \}, F(T)=τ=0,1,,T1min{F(τ)+C(y(τ+1):T)+β},
    其中:

    • F ( T ) F(T) F(T):从起点到时间 T T T 的最优代价。
    • C ( y ( τ + 1 ) : T ) \mathcal{C}(y_{(\tau+1):T}) C(y(τ+1):T):从 τ + 1 \tau+1 τ+1 T T T 的拟合代价。
    • β \beta β:添加一个变点的固定代价。
    • τ \tau τ:候选变点。
  2. 假设 (3) 是:
    F ( t ) + C ( y ( t + 1 ) : s ) + K ≥ F ( s ) , F(t) + \mathcal{C}(y_{(t+1):s}) + K \geq F(s), F(t)+C(y(t+1):s)+KF(s),
    表示在时间 s s s,从 t t t s s s 的分段代价(加上 K K K)不小于从 s s s 开始分段的代价 F ( s ) F(s) F(s)

  3. 从 (2) 可知,引入变点的代价函数是非增的,即:
    C ( y ( t + 1 ) : s ) + C ( y ( s + 1 ) : T ) + K ≤ C ( y ( t + 1 ) : T ) . \mathcal{C}(y_{(t+1):s}) + \mathcal{C}(y_{(s+1):T}) + K \leq \mathcal{C}(y_{(t+1):T}). C(y(t+1):s)+C(y(s+1):T)+KC(y(t+1):T).


证明步骤

第一步:结合假设 (3) 和未来代价

我们希望证明 t t t 无法成为未来时间 T > s T>s T>s 的最优变点。

  1. 从假设 (3) 出发,加入固定的惩罚项 β \beta β
    F ( t ) + C ( y ( t + 1 ) : s ) + K + β ≥ F ( s ) + β . F(t) + \mathcal{C}(y_{(t+1):s}) + K + \beta \geq F(s) + \beta. F(t)+C(y(t+1):s)+K+βF(s)+β.
    这表示在时间 s s s,以 t t t 为变点的代价高于以 s s s 为变点的代价。

  2. 考虑 T > s T > s T>s,加入从 s + 1 s+1 s+1 T T T 的代价 C ( y ( s + 1 ) : T ) \mathcal{C}(y_{(s+1):T}) C(y(s+1):T)
    F ( t ) + C ( y ( t + 1 ) : s ) + K + β + C ( y ( s + 1 ) : T ) ≥ F ( s ) + β + C ( y ( s + 1 ) : T ) . F(t) + \mathcal{C}(y_{(t+1):s}) + K + \beta + \mathcal{C}(y_{(s+1):T}) \\ \geq F(s) + \beta + \mathcal{C}(y_{(s+1):T}). F(t)+C(y(t+1):s)+K+β+C(y(s+1):T)F(s)+β+C(y(s+1):T).
    这是因为两边都添加了同样的项 C ( y ( s + 1 ) : T ) \mathcal{C}(y_{(s+1):T}) C(y(s+1):T)


第二步:利用代价的可加性

我们使用代价函数的可加性性质(公式 (2)):
C ( y ( t + 1 ) : s ) + C ( y ( s + 1 ) : T ) + K ≤ C ( y ( t + 1 ) : T ) . \mathcal{C}(y_{(t+1):s}) + \mathcal{C}(y_{(s+1):T}) + K \leq \mathcal{C}(y_{(t+1):T}). C(y(t+1):s)+C(y(s+1):T)+KC(y(t+1):T).
将其代入左边的不等式:
F ( t ) + C ( y ( t + 1 ) : T ) + β ≥ F ( s ) + β + C ( y ( s + 1 ) : T ) . F(t) + \mathcal{C}(y_{(t+1):T}) + \beta \geq F(s) + \beta + \mathcal{C}(y_{(s+1):T}). F(t)+C(y(t+1):T)+βF(s)+β+C(y(s+1):T).

这表示,加入从 t t t T T T 的代价后,总代价依然大于从 s s s T T T 的代价。


第三步:动态规划公式中的推论

根据动态规划公式:
S T = { F ( τ ) + C ( y ( τ + 1 ) : T ) + β , τ = 0 , 1 , … , T − 1 } . S_T = \{F(\tau) + \mathcal{C}(y_{(\tau+1):T}) + \beta, \tau = 0, 1, \ldots, T-1\}. ST={F(τ)+C(y(τ+1):T)+β,τ=0,1,,T1}.

  • t t t 对应的代价是 F ( t ) + C ( y ( t + 1 ) : T ) + β F(t) + \mathcal{C}(y_{(t+1):T}) + \beta F(t)+C(y(t+1):T)+β
  • s s s 对应的代价是 F ( s ) + C ( y ( s + 1 ) : T ) + β F(s) + \mathcal{C}(y_{(s+1):T}) + \beta F(s)+C(y(s+1):T)+β

由前面的推导可知:
F ( t ) + C ( y ( t + 1 ) : T ) + β ≥ F ( s ) + C ( y ( s + 1 ) : T ) + β . F(t) + \mathcal{C}(y_{(t+1):T}) + \beta \geq F(s) + \mathcal{C}(y_{(s+1):T}) + \beta. F(t)+C(y(t+1):T)+βF(s)+C(y(s+1):T)+β.
因此, t t t 对应的代价比 s s s 大, t t t 不可能是 S T S_T ST 的最优解。


第四步:剔除 t t t

因为 t t t 的代价在所有 T > s T > s T>s 的情况下都比 s s s 大,因此 t t t 不可能成为未来任何时间点的最优变点。

结论是:

  • 在动态规划中, t t t 可以从候选集合中剔除。
  • 这减少了后续计算的复杂度。

关键逻辑总结

  1. 假设 F ( t ) + C ( y ( t + 1 ) : s ) + K ≥ F ( s ) F(t) + \mathcal{C}(y_{(t+1):s}) + K \geq F(s) F(t)+C(y(t+1):s)+KF(s) 表示 t t t 的代价在 s s s 处已经不如 s s s
  2. 使用代价函数的可加性,将 t t t 的代价扩展到未来时间 T > s T > s T>s
  3. 结合动态规划公式,说明 t t t 在所有未来时间 T > s T > s T>s 的代价都不如 s s s
  4. 结论是 t t t 无法成为未来的最优变点,动态规划时可以剔除 t t t
### DeepFool算法公式详细推导过程及原理 #### 一、DeepFool基本概念 DeepFool是一种迭代方法,用于寻找最小的扰动使得输入样本被错误分类。其核心在于通过线性化决策边界来估计最接近当前类别的其他类别之间的距离。 对于给定的一个初始图像\(x\)属于真实标签\(y\),目标是最小化添加到此图像上的噪声大小,使网络将其预测为另一个不同的类别\[ \min_{r} \| r \|_2 : f(x+r) ≠ y \][^1] #### 二、多分类情况下的DeepFool实现 考虑一个多分类问题,假设存在C个可能的目标类别,则可以构建一个超平面方程组表示各个类间的分隔面: \[ w_i·x+b_i=0,\quad i∈{1,...,C}\] 这里\(w_i\)代表第i个类对应的权重向量而bi则是偏置项。当面对非线性的神经网路时,这些参数来自于softmax层之前的激活值。 为了简化计算,通常会采用局部近似的方式处理复杂的非线性映射关系。具体来说就是把每一个类视作是由前一层特征空间里的加权求和所形成的简单仿射换结果。因此,在每一步迭代过程中都可以得到一组新的\(W=[w_1;... ;w_C]\),以及相应的b向量[b1;…;bc]。 此时,如果要找到离原始最近的那个误分类区域的话,就需要解下面这个优化问题: \[ min ||δ||_p s.t.\space sign(f(x))≠sign(f(x+δ)), p≥1\] 即寻找能够改模型输出符号所需的最小范数扰动δ。由于直接解决上述约束条件较为困难,所以转而去寻求满足下述不等式的最小正实数值ε : \[ (f_j(x)-f_k(x))^T δ ≥ ε , j,k ∈ {1,…, C},j≠k\] 这实际上意味着我们要找的是那个能使任意两个不同类别得分差得尽可能大的方向。进一步地,考虑到实际情况中我们更关心L2范数形式下的最优解,于是乎就得到了最终版本的DeepFool更新规则: \[ δ^{(t)}=\frac{|f_k(x_t)-max_{j≠k}(f_j(x_t))|}{\|\nabla_xf_k(x_t)-∇xf_l(x_t)\|^2 }(\nabla_xf_k(x_t)-∇xf_l(x_t))\] 其中l是指除开最大响应外第二高的分数对应的位置索引号。随着循环次数增加,累加每次产生的微调增量直到成功翻越某个临界阈值为止即可完成整个攻击流程的设计[^2]. ```python def deepfool(image, net): """ Implementation of the DeepFool algorithm. Parameters: image: Input image to be attacked net: Pre-trained neural network model Returns: perturbed_image: Adversarial example generated from input image """ num_classes = 10 # Number of classes in classification task max_iter = 50 # Maximum number of iterations allowed x = Variable(image.clone(), requires_grad=True).cuda() f_image = net.forward(x).data.cpu().numpy().flatten() I = (np.array(f_image)).argsort()[::-1] label = I[0] input_shape = image.size() pert_image = image.clone() r_tot = np.zeros(input_shape) k_i = label for ii in range(max_iter): x = Variable(pert_image.clone(), requires_grad=True).cuda() fs = net.forward(x) fs_list = [fs[0,I[k]] for k in range(num_classes)] _, grads = torch.autograd.grad(fs_list[I], inputs=x,retain_graph=True, create_graph=False) grad_orig = grads.data.cpu().numpy().copy() target_class = None w = np.squeeze(grads.data.cpu().numpy().copy()) f_multiclass = fs.data.cpu().numpy().flatten() I_new = np.argsort(f_multiclass)[::-1] if(I_new[0]!=I[0]): break else: for j in range(len(I)): if(j==0):continue w_k = w[I[j]] dist = abs((f_multiclass[I[j]]-f_multiclass[label]))/np.linalg.norm(w_k-w[I[0]]) if(target_class is None or dist<dist_min): dist_min = dist closest = w_k r_i = (closest - w[I[0]]) * dist_min r_tot += r_i pert_image = image + (1+epsilon)*torch.from_numpy(r_tot).cuda() pert_image =Variable(pert_image,requires_grad=False) return pert_image ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高山莫衣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值