【强化学习的数学原理】课程笔记--3(蒙特卡洛方法)

目录

蒙特卡洛方法

第二节 推导贝尔曼最优公式中的:
q π k ( s , a ) = ∑ r P ( r ∣ s , a ) r + γ ∑ s ′ P ( s ′ ∣ s , a ) v π k ( s ′ ) q_{\pi_k}(s,a) = \sum_{r} P(r|s,a)r + \gamma \sum_{s'} P(s'|s,a) v_{\pi_k}(s') qπk(s,a)=rP(rs,a)r+γsP(ss,a)vπk(s)
时提到过,其中的 P ( r ∣ s , a ) , P ( s ′ ∣ s , a ) P(r|s,a), P(s'|s,a) P(rs,a),P(ss,a) 都认为是已知的,这种也被称为 model-based 强化学习。而这一节中,我们要考虑 model-free 的强化学习形式。此时 P ( r ∣ s , a ) , P ( s ′ ∣ s , a ) P(r|s,a), P(s'|s,a) P(rs,a),P(ss,a) 不再是已知的,那么为了“估计”这些信息,我们需要使用到蒙特卡洛方法。简单来说,就是 通过大量的模拟实验,用大量的实验的结果来估测模型参数,蒙特卡洛方法的可行性由 大数定律 保证:

对一个随机变量 X X X,假设 { x i } \{x_i\} {xi} 是独立同分布的样本,记 x ˉ = 1 n ∑ i n x i \bar{x} = \frac{1}{n} \sum_{i}^n x_i xˉ=n1inxi,则:
E ( x ˉ ) = E [ X ] v a r [ x ˉ ] = 1 n v a r [ X ] \begin{aligned}E(\bar{x}) &= E[X]\\ var[ \bar{x}] &= \frac{1}{n} var[X]\end{aligned} E(xˉ)var[xˉ]=E[X]=n1var[X]
因此 x ˉ \bar{x} xˉ E [ X ] E[X] E[X] 的无偏估计,且由于 lim ⁡ n → ∞ v a r [ x ˉ ] = 0 \lim_{n \rightarrow \infin} var[ \bar{x}] = 0 limnvar[xˉ]=0,因此当 n 足够大, x ˉ \bar{x} xˉ 趋于 E [ X ] E[X] E[X]

事实上,用蒙特卡洛方法来估计 q π k ( s , a ) q_{\pi_k}(s,a) qπk(s,a),用其原始的定义更易理解和使用:
q π k ( s , a ) = E [ G t ∣ S t = s , A t = a ] q_{\pi_k}(s,a) = E[G_t | S_t =s, A_t =a] qπk(s,a)=E[GtSt=s,At=a]


MC Basic算法

回忆 第二节 中策略迭代的步骤:

已知 π k → ( v π k ( 0 ) → v π k ( 1 ) → . . . → v π k ( ∞ ) = v π k ) → 求解 q π k ( s , a ) → π k + 1 = { 1 , a = a ∗ ( s ) 0 , a ≠ a ∗ ( s ) → . . . 已知 \pi_k \rightarrow (v_{\pi_k}^{(0)} \rightarrow v_{\pi_k}^{(1)} \rightarrow ... \rightarrow v_{\pi_k}^{(\infin)} = v_{\pi_k}) \rightarrow 求解 q_{\pi_k}(s,a) \rightarrow \pi_{k+1}= \begin{cases} 1, \quad a = a^*(s)\\ 0, \quad a \neq a^*(s) \end{cases} \rightarrow ... 已知πk(vπk(0)vπk(1)...vπk()=vπk)求解qπk(s,a)πk+1={1,a=a(s)0,a=a(s)...
上面跟值迭代相比最主要的不同是 ( v π k ( 0 ) → v π k ( 1 ) → . . . → v π k ( ∞ ) = v π k ) (v_{\pi_k}^{(0)} \rightarrow v_{\pi_k}^{(1)} \rightarrow ... \rightarrow v_{\pi_k}^{(\infin)} = v_{\pi_k}) (vπk(0)vπk(1)...vπk()=vπk),将其展开:
v π k ( 1 ) = r π k + γ P π k v π k ( 0 ) v π k ( 2 ) = r π k + γ P π k v π k ( 1 ) … v π k ( ∞ ) = r π k + γ P π k v π k ( ∞ ) \begin{aligned} v_{\pi_k}^{(1)} &= r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(0)}\\ v_{\pi_k}^{(2)} &= r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(1)}\\ & \dots \\ v_{\pi_k}^{(\infin)} &= r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(\infin)}\\ \end{aligned} vπk(1)vπk(2)vπk()=rπk+γPπkvπk(0)=rπk+γPπkvπk(1)=rπk+γPπkvπk()

这里由于 P ( r ∣ s , a ) , P ( s ′ ∣ s , a ) P(r|s,a), P(s'|s,a) P(rs,a),P(ss,a) 未知,我们 不再通过迭代的方式求解 v π k v_{\pi_k} vπk,再来求解 q π k ( s , a ) q_{\pi_k}(s,a) qπk(s,a) 了,而是直接根据一些 experiment (即样本) 来估计 q π k ( s , a ) q_{\pi_k}(s,a) qπk(s,a) ,上述算法变成:

已知 π k → 从 ( s , a ) 出发,做 n 次实验,有 n 个结果 g π k ( i ) ( s , a ) → 估计 q π k ( s , a ) = 1 n ∑ i g π k ( i ) ( s , a ) → π k + 1 = { 1 , a = a π k ( s ) 0 , a ≠ a π k ( s ) → . . . 已知 \pi_k \rightarrow 从 (s,a) 出发,做n次实验,有n个结果 g_{\pi_k}^{(i)}(s,a) \rightarrow 估计 q_{\pi_k}(s,a) = \frac{1}{n}\sum_i g_{\pi_k}^{(i)}(s,a) \rightarrow \pi_{k+1}= \begin{cases} 1, \quad a = a_{\pi_k}(s)\\ 0, \quad a \neq a_{\pi_k}(s) \end{cases} \rightarrow ... 已知πk(s,a)出发,做n次实验,有n个结果gπk(i)(s,a)估计qπk(s,a)=n1igπk(i)(s,a)πk+1={1,a=aπk(s)0,a=aπk(s)...
其中 a π k ( s ) = arg max ⁡ a ∈ A q π k ( s , a ) a_{\pi_k}(s) = \argmax_{a \in A} q_{\pi_k}(s,a) aπk(s)=aAargmaxqπk(s,a)

下面可以看一些例子:

对于上图这样一个 grid-world 而言,一共有9个 state,每个 state 都有五种 action,假设对于每个 q π k ( s , a ) q_{\pi_k}(s,a) qπk(s,a) 需要找 n n n 个样本来做估计,那么一共需要 45 ∗ n 45*n 45n 个样本。下面我们仅以 s 1 s_1 s1 为例来拆解一下:

由于上述 grid-world 是确定形式的,因此每个 ( s , a ) (s,a) (s,a) 实际不论采多少次样,结果都是相同的,即 g π k ( i ) ( s , a ) , i = 1 , 2 , 3... g_{\pi_k}^{(i)}(s,a), i = 1,2,3... gπk(i)(s,a),i=1,2,3... 都相同。(对于概率形式的 policy 而言,就可以进行大量不同的采样)

  • ( s 1 , a 1 ) (s_1, a_1) (s1,a1),路径总为 s 1 → a 1 s 1 → a 1 s 1 → a 1 . . . s_1 \overset{a_1} \rightarrow s_1 \overset{a_1} \rightarrow s_1 \overset{a_1} \rightarrow ... s1a1s1a1s1a1... q π 0 ( s 1 , a 1 ) = − 1 + γ ( − 1 ) + γ 2 ( − 1 ) + . . . = − 1 1 − γ q_{\pi_0}(s_1, a_1) = -1 + \gamma (-1) + \gamma^2 (-1) + ... = \frac{-1}{1-\gamma} qπ0(s1,a1)=1+γ(1)+γ2(1)+...=1γ1
  • ( s 1 , a 2 ) (s_1, a_2) (s1,a2),路径总为 s 1 → a 2 s 2 → a 3 s 5 → a 3 . . . s_1 \overset{a_2} \rightarrow s_2 \overset{a_3} \rightarrow s_5 \overset{a_3} \rightarrow ... s1a2s2a3s5a3... q π 0 ( s 1 , a 2 ) = 0 + γ ( 0 ) + γ 2 ( 0 ) + γ 3 ( 1 ) + γ 4 ( 1 ) + . . . = γ 3 1 − γ q_{\pi_0}(s_1, a_2) = 0 + \gamma (0) + \gamma^2 (0) + \gamma^3 (1) + \gamma^4 (1) + ... = \frac{\gamma^3}{1-\gamma} qπ0(s1,a2)=0+γ(0)+γ2(0)+γ3(1)+γ4(1)+...=1γγ3
  • ( s 1 , a 3 ) (s_1, a_3) (s1,a3),路径总为 s 1 → a 3 s 4 → a 2 s 5 → a 3 . . . s_1 \overset{a_3} \rightarrow s_4 \overset{a_2} \rightarrow s_5 \overset{a_3} \rightarrow ... s1a3s4a2s5a3... q π 0 ( s 1 , a 2 ) = 0 + γ ( 0 ) + γ 2 ( 0 ) + γ 3 ( 1 ) + γ 4 ( 1 ) + . . . = γ 3 1 − γ q_{\pi_0}(s_1, a_2) = 0 + \gamma (0) + \gamma^2 (0) + \gamma^3 (1) + \gamma^4 (1) + ... = \frac{\gamma^3}{1-\gamma} qπ0(s1,a2)=0+γ(0)+γ2(0)+γ3(1)+γ4(1)+...=1γγ3
  • ( s 1 , a 4 ) (s_1, a_4) (s1,a4),路径总为 s 1 → a 4 s 1 → a 1 s 1 → a 1 . . . s_1 \overset{a_4} \rightarrow s_1 \overset{a_1} \rightarrow s_1 \overset{a_1} \rightarrow ... s1a4s1a1s1a1... q π 0 ( s 1 , a 1 ) = − 1 + γ ( − 1 ) + γ 2 ( − 1 ) + . . . = − 1 1 − γ q_{\pi_0}(s_1, a_1) = -1 + \gamma (-1) + \gamma^2 (-1) + ... = \frac{-1}{1-\gamma} qπ0(s1,a1)=1+γ(1)+γ2(1)+...=1γ1
  • ( s 1 , a 5 ) (s_1, a_5) (s1,a5),路径总为 s 1 → a 5 s 1 → a 1 s 1 → a 1 . . . s_1 \overset{a_5} \rightarrow s_1 \overset{a_1} \rightarrow s_1 \overset{a_1} \rightarrow ... s1a5s1a1s1a1... q π 0 ( s 1 , a 1 ) = 0 + γ ( − 1 ) + γ 2 ( − 1 ) + . . . = − γ 1 − γ q_{\pi_0}(s_1, a_1) = 0 + \gamma (-1) + \gamma^2 (-1) + ... = \frac{-\gamma}{1-\gamma} qπ0(s1,a1)=0+γ(1)+γ2(1)+...=1γγ

因此 a π 0 ( s ) = arg max ⁡ a ∈ A q π 0 ( s 1 , a ) = 2  或  3 a_{\pi_0}(s) = \argmax_{a \in A} q_{\pi_0}(s_1,a) = 2 \text{ 或 } 3 aπ0(s)=argmaxaAqπ0(s1,a)=2  3。实时上我们也可直观看到,将 s 1 s_1 s1 处的 action 改成 a 2 a_2 a2 或者 a 3 a_3 a3 均可将 s 1 s_1 s1 处的 action 调整至最优。

NOTE: 上述例子中,是为了方便理解,所以相当于是把 model (即 P ( r ∣ s , a ) P(r|s,a) P(rs,a) P ( s ′ ∣ s , a ) P(s'|s,a) P(ss,a) )都展示出来了,但实际的情况应该是:我们并不知道 model 是怎样的,但是从每个 ( s 1 , a i ) (s_1, a_i) (s1,ai) 出发采样 n n n 次,会发现每次采出来的 trajectory 都是相同的,然后我们依然按 q π 0 ( s 1 , a ) = 1 n ∑ i g π 0 ( i ) ( s 1 , a ) q_{\pi_0}(s_1,a) = \frac{1}{n}\sum_i g_{\pi_0}^{(i)}(s_1,a) qπ0(s1,a)=n1igπ0(i)(s1,a) 来估计 q π 0 ( s 1 , a ) q_{\pi_0}(s_1,a) qπ0(s1,a),其实就还是上述的结果。

另一个更有意思的例子是:

前一个例子,我们采样的 trajectory 是无限长的,但在这个例子中,我们将采样的 trajectory 的长度从1开始逐渐递增,然后可以观察到一个有趣的现象:当采样的 trajectory 的长度比较小时,只有更靠近 target state的 state,其 state value 才能算到为正,而更远的 state,其 state value 都为0。从公式上来说也很好理解,由于: v π ( s ) = ∑ a π ( a ∣ s ) q π ( s , a ) v_{\pi}(s) = \sum_a \pi(a|s) q_{\pi}(s,a) vπ(s)=aπ(as)qπ(s,a) ,因此贪婪policy下, v π ( s ) = max ⁡ a q π ( s , a ) v_{\pi}(s) = \max_{a}q_{\pi}(s,a) vπ(s)=amaxqπ(s,a),而从上一个例子不难得知 q π ( s , a ) q_{\pi}(s,a) qπ(s,a) 要能走到 target state,才能开始拿到正的分数,因此如果 trajectory 的长度太短,以至于甚至走不到 target state,那么 q π ( s , a ) = 0 q_{\pi}(s,a) = 0 qπ(s,a)=0,因此 v π ( s ) v_{\pi}(s) vπ(s) 也为0。

sparse reward

上述现象也称为 sparse reward,因为其 reward 是稀疏的,即前面走对很多步都没有reward,必须到 target state 开始才有 reward。对于特别大的 state space 来说, sparse reward 会导致模型效率低下,因为每个样本的计算量都大大提升。有一些方法可以缓解这样的问题,例如:如果能走到离 target state 比较近的 state,那么也可以拿到一定的 reward,离得越近,reward 越大。更多可见 Reference


MC Greedy 算法

上述 MC Basic 方法在实际使用时,还有很多地方需要改进:

样本使用效率

以上面第一个例子为例:

当从 ( s 1 , a 2 ) (s_1, a_2) (s1,a2) 出发,其实计算其 action state 时,还同时可以算到很多后面的 state 的 action state
s 1 → a 2 s 2 → a 4 s 1 → a 2 s 2 → a 3 s 5 → a 1 ⋯ [ ( s 1 , a 2 )  的样本 ] s 2 → a 4 s 1 → a 2 s 2 → a 3 s 5 → a 1 ⋯ [ ( s 2 , a 4 )  的样本 ] s 1 → a 2 s 2 → a 3 s 5 → a 1 ⋯ [ ( s 1 , a 2 )  的样本 ] s 2 → a 3 s 5 → a 1 ⋯ [ ( s 2 , a 3 )  的样本 ] s 5 → a 1 ⋯ [ ( s 5 , a 1 )  的样本 ] \begin{aligned} s_1 \xrightarrow{a_2} s_2 \xrightarrow{a_4} s_1 \xrightarrow{a_2} s_2 \xrightarrow{a_3} s_5 \xrightarrow{a_1}& \cdots \quad [(s_1, a_2)\text{ 的样本}]\\ \quad\\ s_2 \xrightarrow{a_4} s_1 \xrightarrow{a_2} s_2 \xrightarrow{a_3} s_5 \xrightarrow{a_1}& \cdots \quad [(s_2, a_4)\text{ 的样本}]\\ \quad\\ s_1 \xrightarrow{a_2} s_2 \xrightarrow{a_3} s_5 \xrightarrow{a_1}& \cdots \quad [(s_1, a_2)\text{ 的样本}]\\ \quad\\ s_2 \xrightarrow{a_3} s_5 \xrightarrow{a_1}& \cdots \quad [(s_2, a_3)\text{ 的样本}]\\ \quad\\ s_5 \xrightarrow{a_1}& \cdots \quad [(s_5, a_1)\text{ 的样本}] \end{aligned} s1a2 s2a4 s1a2 s2a3 s5a1 s2a4 s1a2 s2a3 s5a1 s1a2 s2a3 s5a1 s2a3 s5a1 s5a1 [(s1,a2) 的样本][(s2,a4) 的样本][(s1,a2) 的样本][(s2,a3) 的样本][(s5,a1) 的样本]

因此我们会发现:可能不需要从每一个 state 出发,而只要从一些比较前面的 state 出发,就有可能给后面的 (state, action) 也得到足够多的样本。

顺便再介绍两个相关的概念,从上例也能发现,即使是同一条 trajectory ,也可能经过某对 (state, action) 好几次 (eg:上面的 ( s 1 , a 2 ) (s_1, a_2) (s1,a2)) :

  1. first-visit strategy:如果采样时,只采第一次出现的样本
  2. every-visit strategy:如果采样时,采全部出现的样本

MC ϵ \epsilon ϵ-Greedy 算法

上面我们已经探讨了 MC Basic 的一个改进方向,就是不用真的对每一个 (state, action) 进行遍历,而是可以选几个 state ,然后进行足够长的探索。那么问题来了:需要选怎样的 state,多长的 trajectory ,才能让每对 (state, action) 都采到足够的样本呢?

这里就来到了 exploration 和 exploitation 的balanceexploitation:很好理解,就是要选取最优的 Policy,而前面我们已经证明过,最优的 Policy 就是贪婪形式的: π k + 1 ( a ∣ s ) = { 1 , a = a k ∗ ( s ) 0 , a ≠ a k ∗ ( s ) \pi_{k+1}(a|s) = \begin{cases} 1, \quad a = a^*_k(s)\\ 0, \quad a \neq a^*_k(s) \end{cases} πk+1(as)={1,a=ak(s)0,a=ak(s)

那既然能找到最优策略,又扯到 exploration 什么事呢?这是因为 a k ∗ ( s ) = arg max ⁡ a ∈ A q π k ( s , a ) a^*_k(s) = \argmax_{a \in A} q_{\pi_k}(s,a) ak(s)=aAargmaxqπk(s,a) 实际是求不到的。因为 第一节 就提到过: 为了一般性,我们后面讨论的都是 continuing task,将 target state 也看作普通的 state,可以离开,只是每次进入 target state 时 ,reward 加 1 。所以每个 q π k ( s , a ) q_{\pi_k}(s,a) qπk(s,a) 对应的都是一个无限长的 trajectory ,上例中可以把值求出来,是因为它刚好是一个收敛的级数,但不是所有的情况我们都保证 reward 级数可以收敛。这样就会导致一个问题:我们不能直接信任贪婪形式的结果。与此同时,贪婪形式带来的坏处是:它的每一条 trajectory 能覆盖的样本比较有限,所以需要的 trajectory 会比较多,计算量也比较大。既然反正都无法保证得到的策略是最优的,还不如为了更快得得到一个可用的策略,再保留一些探索性,因此提出了 MC ϵ \epsilon ϵ-Greedy 算法 :

π k + 1 ( a ∣ s ) = { 1 − ∣ A ∣ − 1 ∣ A ∣ ϵ , a = a k ∗ ( s ) 1 ∣ A ∣ ϵ , a ≠ a k ∗ ( s ) \pi_{k+1}(a|s) = \begin{cases} 1 - \frac{|A|-1}{|A|} \epsilon, \quad a = a^*_k(s)\\ \frac{1}{|A|} \epsilon, \quad a \neq a^*_k(s) \end{cases} πk+1(as)={1AA1ϵ,a=ak(s)A1ϵ,a=ak(s)

其中 ∣ A ∣ |A| A 是 action 的种数。即对每个非最优的 action,仍然给一点点的概率,使得 trajectory 仍有可能往这个方向走。 (这里与深度学习中 “贪婪搜索会导致局部最优,所以用 beam search 来增大一些探索的空间” 形似而神不似,因为对于很多的序列学习任务,它的长度是 有限且已知 的,因此它的最优解是可以求到的,只是计算量过大实际不太可行。而这里的最优解,是理论都不可知的 (model-free 时,前面 model-based 的情况,理论上还是可以用贝尔曼最优公式求解的),增大搜索的目的是为了减少计算量,而 beam search 是为了得到更好的结果而增加计算量 )。以下是 exploration 和 exploitation 的balance 的总结:

  • ϵ \epsilon ϵ + 短&少的 trajectory,偏向于 exploration。样本量少,计算快,但找到的策略差
  • ϵ \epsilon ϵ + 长&多的 trajectory,偏向于 exploitation。样本量大,计算慢,但找到的策略更优

一些例子

还是看一些例子来加深理解:

  1. ϵ \epsilon ϵ 的影响

从 (a) 到 (d), ϵ \epsilon ϵ 从0开始逐渐增大,可以看到 state value 也在逐渐变小,说明策略在逐渐变“差”,但 (b) 至少跟 (a) 还是 consistent 的,即最大概率的 action 和 (a) 还是相同,而 © 和 (d),甚至有的 state 最优 action 已经变了。这其中的原因,可以以 target value 为例讨论一下: ϵ \epsilon ϵ 比较大时,从 target state 出发,往各个方向探索的概率都比较大了,但是 target value 周围大部分都是 forbidden state,因此总是会拿到负分,尽管我们希望的结果是:在 target state 学会呆在原地,但呆在原地就有比较大的几率拿负分,相反往下走出去了,反而不容易拿负分,因此它最后学到的是在 target state 要往下走出去。

  1. ϵ \epsilon ϵ 的大小与所需 trajectory 条数的关系

左边一列是 ϵ = 1 \epsilon =1 ϵ=1 时,表明各个方向探索的概率相等。右边一列是 ϵ = 0.5 \epsilon =0.5 ϵ=0.5 时,表明探索性弱一些。可以看到:

  • ϵ \epsilon ϵ 较大时,同样长度的 trajectory 探索到的 (state,action) 种数更多,甚至长度较长时,一条 trajectory 就足以产生所有 (state,action) 的样本了
  • ϵ \epsilon ϵ 较大时,一条 trajectory 产生的样本在不同 (state,action) 的分布也比较均匀,即采样比较均匀;而 ϵ \epsilon ϵ 较小时,会出现大部分 (state,action) 采样比较少,而个别 (state,action) 采样多得多的情况

结论: ϵ \epsilon ϵ 和 trajectory 的条数,均为MC ϵ \epsilon ϵ-Greedy 算法的超参数,需要根据实验来调整,更大的 ϵ \epsilon ϵ 可以减少马尔可夫模拟次数,但是得到的策略效果也会更差一些,而更小的 ϵ \epsilon ϵ 计算量更大,结果也更好。一般可以前期采用大的 ϵ \epsilon ϵ ,加大探索空间,快速找到一个差不多的策略,后期再改成小的 ϵ \epsilon ϵ ,找更好的策略。


Reference:
1.强化学习的数学原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/779121.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CMS Made Simple v2.2.15 远程命令执行漏洞(CVE-2022-23906)

前言 CVE-2022-23906 是一个远程命令执行(RCE)漏洞,存在于 CMS Made Simple v2.2.15 中。该漏洞通过上传头像功能进行利用,攻击者可以上传一个经过特殊构造的图片文件来触发漏洞。 漏洞详情 CMS Made Simple v2.2.15 中的头像上…

NAS 必备导航页 Homepage 外观简约但功能丰富

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 NAS 上的应用部署多了之后,不同的服务对应的端口很难记住,在内网中使用,一般也不会绑定域名。 此时就需要有一个导航页将 NAS 上部署的所有服务都罗列出来,方便我们直接点击访问对应的服务。 今天给大家介绍的…

电商利器——淘宝商品月销量API接口解析

在电商时代,数据就是金钱。对于淘宝商家而言,掌握商品的销量数据无异于掌握了市场的脉搏。如今,淘宝商品月销量API接口的出现,联讯数据让商家如虎添翼,能够更加精准地把握市场动态,优化商品策略。 淘宝商…

强技能 展风采 促提升——北京市大兴区餐饮行业职工技能竞赛精彩呈现

6月19日,由大兴区总工会、区商务局、青云店镇人民政府联合主办,区服务工会、区餐饮行业协会承办的“传承中国技艺,打造新一代餐饮工匠”2024年大兴区餐饮行业职工职业技能竞赛决赛在北京华联创新学习中心隆重开幕。区总工会副主席郝泽宏&…

力扣5----最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。示例 2: 输入:s "cbbd" 输出…

均匀采样信号的鲁棒Savistky-Golay滤波(MATLAB)

S-G滤波器又称S-G卷积平滑器,它是一种特殊的低通滤波器,用来平滑噪声数据。该滤波器被广泛地运用于信号去噪,采用在时域内基于多项式最小二乘法及窗口移动实现最佳拟合的方法。与通常的滤波器要经过时域-频域-时域变换…

Docker:Docker网络

Docker Network 是 Docker 平台中的一项功能,允许容器相互通信以及与外界通信。它提供了一种在 Docker 环境中创建和管理虚拟网络的方法。Docker 网络使容器能够连接到一个或多个网络,从而使它们能够安全地共享信息和资源。 预备知识 推荐先看视频先有…

ABAP 生成word文档

1.创建模板 通过开发工具->空间->格式文本为word添加变量 选中要设为变量的文本,点击格式文本,然后在属性页签设置变量名 模板使用示例参考ZABAPDOCX包下的模板 2. 代码生成 参考ZABAPDOCX包下示例程序,可直接执行下载word文档 如果…

分支与循环(二)

目录 1.switch语句 1)switch语法形式 2)if语句和switch语句的对比 3) switch语句中的break 4) switch语句中的default 5) switch语句中的case和default的顺序问题 2.while循环 1) if 和 while的对比 2) while语句的执行流程​编辑 3)while循环的…

76 4G模组 境外拨号入网注意

1 引言 最近朋友把国内的设备拿到新加坡了,然后发现原本国内可以使用的设备无法在异国他乡联网,所以就叫我来看看,发现是附网返回状态、入网APN发生了改变导致的。另外,如果在境外使用国产4G模组拨号入网,也需要关注4G…

大语言模型与知识图谱结合发展方向

引言 在人工智能的发展历程中,大语言模型(LLM)的出现标志着一个重要的转折点。随着深度学习技术的突破和计算能力的提升,LLM以其前所未有的规模和复杂性,开启了迈向人工通用智能(AGI)的新浪潮。…

FastAPI+vue3+Primeflex教学20240706,渲染阶乘案例

子绝父相 相对定位是相对于自己原本的位置定位。 绝对定位,如果父元素设置了相对定位,则相对于父元素进行绝对定位,否则相对于最近的设置了相对定位的元素进行绝对定位,或者相对于根元素进行绝对定位。 定位有四个方向&#xff0…

Coze:如何开发你的第一个聊天机器人?

你好,我是三桥君。 我们要学习如何创建第一个聊天机器人?让AI工具成为我们的得力助手,帮助我们的工作。 如何创建Bot? 首先,点击首页里面的“创建Bot”按钮。 ​ “工作空间”我们选择个人空间。接下来是“Bot名称”…

【C++:内联】

内联 关键字:inline 用inline修饰的函数叫做内联函数。 优点:内联不会开辟函数栈帧缺点:内联不适合代码量多且频繁调用的函数 代码量比较大且频繁调用的函数使用内联会导致代码膨胀(举个例子:本来是五行代码&#xff…

泛微开发修炼之旅--32ecology对接海康威视综合安防管理系统,人脸识别机器数据同步代码方案及源码

文章链接:32ecology对接海康威视综合安防管理系统,人脸识别机器数据同步代码方案及源码

Latex--制作幻灯片

目录 1.基本介绍 (1)案例引入 (2)相关说明 (3)控制顺序 (4)帧环境的创建 (5)内置主题 (6)生成标题页面 1.基本介绍 &#xff0…

支持Llama3、Baichuan2、Qwen1.5等模型私有化部署,英智让生成式AI开箱即用

AI大模型的崛起,无疑是技术革新的一次伟大飞跃。从最初的概念构想到逐步落地应用,如今已经广泛应用在各行各业,尽管通用大模型的功能非常全面,但在具体的企业场景中仍然存在局限。 对于服务行业来说,客户对于企业提供…

C语言 do while 循环语句练习 中

练习: 4.编写代码,演示多个字符从两端移动,向中间汇聚 // 编写代码,演示多个字符从两端移动,向中间汇聚 //welcome to china!!! //w ! //we !! //wel !!! //.... //welco…

AI老照片生成视频

地址:AI老照片 让你的图片动起来, 老照片修复与动态化

TSINGSEE智能分析网关V4人员区域徘徊AI检测:算法原理介绍及技术应用场景

一、引言 在现代社会,随着科技的不断发展,视频监控系统已广泛应用于各个领域,如公共安全、商业管理、交通监控等。其中,区域徘徊检测算法作为一种重要的视频分析技术,能够有效地识别出特定区域内人员的徘徊行为&#…