机器人中的数值优化(十一)——高斯牛顿法、LMF方法、Dogleg方法

   本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例




   十五、高斯牛顿法

   1、最小二乘问题

   最小二乘(Least Squares,LS)问题的定义如下:

   min ⁡ f ( x ) = 1 2 ∑ i = 1 m r i 2 ( x ) = 1 2 r ( x ) T r ( x ) , x ˙ ∈ R n , m ⩾ n , \min f(x)=\dfrac{1}{2}\sum_{i=1}^{m}r_i^2(x)=\dfrac{1}{2}r(x)^{\mathrm T}r(x),\quad\dot x\in\mathbb R^n,m\geqslant n, minf(x)=21i=1mri2(x)=21r(x)Tr(x),x˙Rn,mn,

   这里 r ( x ) = ( r 1 ( x ) , r 2 ( x ) , ⋅ . . , r m ( x ) ) T r(x)=(r_1(x), r_2(x),· .. ,r_m(x))^T r(x)=(r1(x),r2(x)..,rm(x))T称为剩余函数。点α处剩余函数的值称为剩余量。若 r i ( x ) ( i = l , . . . , m ) r_i(x)(i = l,... ,m) ri(x)(i=l,...,m)均为线性函数,则称为线性最小二乘问题;若至少有一个 r i ( x ) r_i(x) ri(x)为非线性函数,则称为非线性最小二乘问题。

   最小二乘问题大量产生于数据拟合问题:给定一组试验数据(ti,yi) (i = 1,… , m)和一函数模型f(x; t),我们要确定x,使得f(x; t)在剩余量平方和意义下尽可能好地拟合给定的数据,其中剩余量 r i ( x ) r_i(x) ri(x)

   r i ( x ) = y i − f ~ ( x ; t i ) , i = 1 , ⋯ , m , r_i(x)=y_i-\tilde{f}(x;t_i),\quad i=1,\cdots,m, ri(x)=yif~(x;ti),i=1,,m,
   由此得到最小二乘问题,此外,最小二乘问题亦可用于解非线性方程组

   r i ( x ) = 0 , i = 1 , ⋯ , m , r_i(x)=0,\quad i=1,\cdots,m, ri(x)=0,i=1,,m,

   当m=n时,方程组称为适定方程组;当m >n时,方程组称为超定方程组。

   最小二乘问题固然可以用前面讲过的一般无约束最优化方法去求解,然而由于该问题的目标函数有特殊结构,我们可以利用问题的结构对某些已讲过的方法进行改造,使之对最小二乘问题更简单或更有效.
此外,最小二乘问题亦可用于解非线性方程组


   2、最小二乘问题分类

   下面我们来看最小二乘问题的目标函数f(x)的一、二阶导数的形式.设J(x)是r(x)的雅可比矩阵:

   J ( x ) = [ ∇ r 1 T ⋮ ∇ r m T ] ∈ R m × n , J(x)=\left[\begin{array}{c}\nabla r_1^{\mathrm{T}}\\ \vdots\\ \nabla r_m^{\mathrm{T}}\end{array}\right]\in\mathbb{R}^{m\times n}, J(x)= r1TrmT Rm×n,

   则,f(x)的梯度和Hessian矩阵分别为:

   g ( x ) = ∑ i = 1 m r i ( x ) ∇ r i ( x ) = J ( x ) T r ( x ) , g(x)=\sum\limits_{i=1}^m r_i(x)\nabla r_i(x)=J(x)^\mathrm{T}r(x), g(x)=i=1mri(x)ri(x)=J(x)Tr(x),
   G ( x ) = ∑ i = 1 m ∇ r i ( x ) ∇ r i ( x ) T + ∑ i = 1 m r i ( x ) ∇ 2 r i ( x ) = J ( x ) T J ( x ) + S ( x ) , \begin{aligned}G(x)&=\sum\limits_{i=1}^m\nabla r_i(x)\nabla r_i(x)^{\mathrm{T}}+\sum\limits_{i=1}^m r_i(x)\nabla^2r_i(x)\\ &=J(x)^{\mathrm{T}}J(x)+S(x),\end{aligned} G(x)=i=1mri(x)ri(x)T+i=1mri(x)2ri(x)=J(x)TJ(x)+S(x),

   其中:

   S ( x ) = ∑ i = 1 m r i ( x ) ∇ 2 r i ( x ) . S(x)=\sum\limits_{i=1}^m r_i(x)\nabla^2r_i(x). S(x)=i=1mri(x)2ri(x).

   为方便描述,我们对上述符号进行如下的简记:

   J ⋆ = J ( x ⋆ ) , J k = J ( x k ) , S ⋆ = S ( x ⋆ ) , S k = S ( x k ) . \begin{array}{c}J^{\star}=J(x^{\star}),\quad J_k=J(x_k),\\ \\ S^{\star}=S(x^{\star}),\quad S_k=S(x_k).\end{array} J=J(x),Jk=J(xk),S=S(x),Sk=S(xk).


   在点x * 处,||S * || 的大小取决于剩余量与问题的非线性性.对零剩余或线性最小二乘问题||S * || = 0 . 随着剩余量的增大或 r i ( x ) ( i = l , . . . , m ) r_i(x)(i = l,... ,m) ri(x)(i=l,...,m)的非线性的增强,||S * ||的值变大.根据问题的这种特点,我们的算法将分为小剩余算法与大剩余算法.小剩余算法处理||S * ||为零或不太大的问题,大剩余算法处理||S * ||较大的问题.


   3、牛顿方法解最小二乘问题

   解最小二乘问题的Newton方程为

   ( J k T J k + S k ) d k = − J k T r k (J_k^\mathrm{T}J_k+S_k)d_k=-J_k^\mathrm{T}r_{k} (JkTJk+Sk)dk=JkTrk

   对最小二乘问题,Newton方法的缺点是每次迭代都要求 S k S_k Sk,即计算m个nxn对称矩阵.显然,对一个算法而言, S k S_k Sk的计算是一个沉重的负担.解决这个问题的方法是或者在Newton方程中忽略 S k S_k Sk,或者用一阶导数信息近似 S k S_k Sk.而要忽略 S k S_k Sk,则应在 r i ( x ) r_i(x) ri(x)接近于0或接近于线性时进行,即下面我们要讲的小剩余算法。


   4、高斯牛顿法

   在方程 ( J k T J k + S k ) d k = − J k T r k (J_k^\mathrm{T}J_k+S_k)d_k=-J_k^\mathrm{T}r_{k} (JkTJk+Sk)dk=JkTrk中忽略 S k S_k Sk就可以得到Gauss-Newton (GN)方法,该方法以也可以理解为在点 x k x_k xk处,线性化剩余函数 r i ( x k + d ) , r_{i}(x_{k}+d), ri(xk+d),,线性化后 S k S_k Sk的值即为0。

   忽略 S k S_k Sk后得到的Gauss-Newton (GN)方程如下:

   J k T J k d = − J k T r k . J_k^\mathrm{T}J_k d=-J_k^\mathrm{T}r_k. JkTJkd=JkTrk.

   上述方程的解等价于求下述关于d的线性最小二乘问题的极小值问题。

   min ⁡ d ∈ R n q k ( d ) = 1 2 ∥ J k d + r k ∥ 2 2 , \min\limits_{d\in\mathbb{R}^n}q_k(d)=\dfrac{1}{2}\|J_k d+r_k\|_2^2, dRnminqk(d)=21Jkd+rk22,

   其中:
   q k ( d ) = 1 2 ( J k d + r k ) T ( J k d + r k ) = 1 2 d T J k T J k d + d T ( J k T r k ) + 1 2 r k T r k . \begin{aligned}q_k(d)&=\frac{1}{2}(J_k d+r_k)^{\mathrm{T}}(J_k d+r_k)\\ &=\frac{1}{2}d^{\mathrm{T}}J_k^{\mathrm{T}}J_k d+d^{\mathrm{T}}(J_k^{\mathrm{T}}r_k)+\frac{1}{2}r_k^{\mathrm{T}}r_k.\end{aligned} qk(d)=21(Jkd+rk)T(Jkd+rk)=21dTJkTJkd+dT(JkTrk)+21rkTrk.

   这里 q k ( d ) q_k(d) qk(d)是对 f ( x k + d ) f(x_k+d) f(xk+d)的一种二次近似,它与 f ( x k + d ) f(x_k+d) f(xk+d)的二次Taylor近似的差别在于二次项中少了 S k S_k Sk


   用Gauss-Newton方法求解最小二乘问题的算法如下:

在这里插入图片描述


   基本Gauss-Newton方法是指 α k α_k αk = 1的 Gauss-Newton方法,带线搜索的 Gauss-Newton方法称为阻尼 Gauss-Newton方法.

   Gauss-Newton方法的优点在于它无须计算r(z)的二阶导数. 另外,当 J k J_k Jk满秩, g k g_k gk不为零的时候,可以保证 d k d_k dk是下降方向。


   基本Gauss-Newton方法有如下两种情形的收敛速度:

·    (1)二阶收敛速度:若||S(x*)||= 0,即在零剩余问题或是线性最小二乘问题的情形,则方法在x * 附近具有Newton方法的收敛速度。

   (2)线性收敛速度:若||S(x*)||≠0,则方法的收敛速度是线性的。收敛速度随||S(x*)||的增大而变慢.

   由此可见,基本Gauss-Newton方法的收敛速度是与x*处剩余量的大小及剩余函数的线性程度有关的,即剩余量越小或剩余函数越接近线性,它的收敛速度就越快;反之就越慢,甚至对剩余量很大或剩余函数的非线性程度很强的问题不收敛。

   此外,高斯牛顿法要求矩阵J(x)列满秩.如若不然,则矩阵 J ( x ) T J ( x ) J(x)^{\mathrm{T}}J(x) J(x)TJ(x)奇异,我们不能从Gauss-Newton方程求得 d k d_k dk


   十六、LMF方法

   Gauss-Newton方法在迭代中会出现 J k T J k J_k^\mathrm{T}J_k JkTJk为奇异的情形.为了克服这个困难,Levenberg在 1944年提出由下面的方程求解 d k d_k dk,其中 v k ≥ 0 v_k ≥ 0 vk0。这个方法由于1964年时Marquardt的努力而得到广泛应用,故称为LM (Levenberg-Marquardt)方法,下式称为LM方程.

   ( J k T J k + ν k I ) d = − J k T r k (J_k^\mathrm{T}J_k+\nu_kI)d=-J_k^\mathrm{T}r_k (JkTJk+νkI)d=JkTrk

   在上述方程中,对任意 v k ≥ 0 v_k ≥ 0 vk0 J k T J k + ν k I J_k^\mathrm{T}J_k+\nu_kI JkTJk+νkI正定。从计算的角度出发,为保证该矩阵充分正定, v k v_k vk可能需要取得适当的大, J k T J k + ν k I J_k^\mathrm{T}J_k+\nu_kI JkTJk+νkI的正定性保证了由上述方程得到的方向是下降方向。

   LM 方法是一种信赖域型方法, v k v_k vk的值可以用信赖域方法的思想在迭代中修正得到,前文中我们介绍过信赖域方法中信赖域半径是如何修正的,现在只要找出 LM 方程与信赖域问题的关系,就可以根据修正信赖域半径的方法修正 v k v_k vk的值。

   LM方程与信赖域问题的关系:

   min ⁡ d 1 2 ∥ J k d + r k ∥ 2 , \min\limits_d\dfrac12\|J_k d+r_k\|^2, dmin21Jkd+rk2,
   s.t.   ∥ d ∥ 2 ⩽ Δ k 2 , Δ k > 0 \text{s.t.}~~\|d\|^2\leqslant\Delta^2_k,~\Delta_k>0 s.t.  d2Δk2, Δk>0

   上式为信赖域子问题, d k d_k dk其全局极小解的充分必要条件是,对满足上式的的 d k d_k dk,存在 v k ≥ 0 v_k≥0 vk0,使得

   ( J k T J k + ν k I ) d k = − J k T r k ˉ , ν k ( Δ k 2 − ∥ d k ∥ 2 ) = 0. \begin{array}{l}(J_{k}^{\mathrm T}J_{k}+\nu_{k}I)d_{k}=-J_{k}^{\mathrm T}r_{\bar k},\\ \nu_{k}(\Delta_{k}^{2}-\|d_{k}\|^{2})=0.\end{array} (JkTJk+νkI)dk=JkTrkˉ,νk(Δk2dk2)=0.


   LM 方程与信赖域问题的关系是 Fletcher在1981年提出的.故由此建立起来的方法称为LMF (Levenberg-Marquardt-Fletcher)方法.

   下面我们来考虑 v k v_k vk的修正方法,它与信赖域半径△k的修正是相关的.在信赖域方法中,从 x k x_k xk x k + d k x_k+ d_k xk+dk , f(x)的实际减少量为

   Δ f k = f ( x k ) − f ( x k + d k ) , \Delta f_k=f(x_k)-f(x_k+d_k), Δfk=f(xk)f(xk+dk),

   上文给出的近似函数
   q k ( d ) = 1 2 ( J k d + r k ) T ( J k d + r k ) = 1 2 d T J k T J k d + d T ( J k T r k ) + 1 2 r k T r k . \begin{aligned}q_k(d)&=\frac{1}{2}(J_k d+r_k)^{\mathrm{T}}(J_k d+r_k)\\ &=\frac{1}{2}d^{\mathrm{T}}J_k^{\mathrm{T}}J_k d+d^{\mathrm{T}}(J_k^{\mathrm{T}}r_k)+\frac{1}{2}r_k^{\mathrm{T}}r_k.\end{aligned} qk(d)=21(Jkd+rk)T(Jkd+rk)=21dTJkTJkd+dT(JkTrk)+21rkTrk.

   的减少量为:

   Δ q k = q k ( 0 ) − q k ( d k ) , \Delta q_k=q_k(0)-q_k(d_k), Δqk=qk(0)qk(dk),

   其中 q k ( 0 ) = f k q_{k}(0)=f_{k} qk(0)=fk,另外,由LM方程与 d k T g k < 0 d_{k}^{\mathrm{T}}g_{k}<0 dkTgk<0

   Δ g k = g k ( 0 ) − g k ( d k ) = − 1 2 d k T J k T J k d k − d k T ( J k T r k ) = 1 2 d k T ( − J k T J k d k − ν k d k + ν k d k − 2 J k T r k ) = 1 2 d k T ( − ( J k T J k + ν k ) d k + ν k d k − 2 J k T r k ) = 1 2 d k T ( v k d k − g k ) > 0 , \begin{aligned}\Delta g_k&=g_k(0)-g_k(d_k)\\ &=-\frac{1}{2}d_k^{T}J_k^{T}J_k d_k-d_k^{T}(J_k^{T}r_k)\\ &=\frac{1}{2}d_k^{T}(-J_k^{T}J_k d_k-\nu_k d_k+\nu_k d_k-2J_k^{T}r_k)\\ &=\frac{1}{2}d_k^{T}(-(J_k^{T}J_k+\nu_k)d_k+\nu_k d_k-2J_k^{T}r_k)\\ &=\frac{1}{2}d_k^{T}(v_k d_k-g_k)>0,\end{aligned} Δgk=gk(0)gk(dk)=21dkTJkTJkdkdkT(JkTrk)=21dkT(JkTJkdkνkdk+νkdk2JkTrk)=21dkT((JkTJk+νk)dk+νkdk2JkTrk)=21dkT(vkdkgk)>0,

   其中 g k = J k T r k . g_k=J_k^{\mathrm{T}}r_k. gk=JkTrk.

   进行如下定义:

   γ k = Δ f k Δ q k . \gamma_k=\dfrac{\Delta f_k}{\Delta q_k}. γk=ΔqkΔfk.

   在第k步迭代, γ k \gamma_{k} γk的值可以反映出 q k ( d k ) q_k(d_k) qk(dk)近似f(.zck + dk)的好坏.关于yxe的值如何反映 q(d)近似 f ( x k + d k ) f(x_{k}+d_{k}) f(xk+dk)的好坏,以及如何由此修正△k的问题。

   由LM 方程知, v k v_{k} vk可以控制 ∣ ∣ d k ∣ ∣ ||d_k|| ∣∣dk∣∣的大小,从而可以控制信赖域的大小.若 v k v_{k} vk变大的话, ∣ ∣ d k ∣ ∣ ||d_k|| ∣∣dk∣∣会变小,反之亦然,所以对, v k v_{k} vk大小的修正,应该与信赖域方法中对△k大小的修正相反。

   下面给出 LMF方法的步骤:

在这里插入图片描述

   上述算法中 v 0 v_{0} v0 >0可以任取. Fletcher指出该算法对0.25、0.75等常数并不敏感。LMF方法可以用于求解一般无约束最优化问题。在修正Newton方法中,我们曾经提到过这个方法。修正Newton方程与信赖域问题的关系如下:

在这里插入图片描述

  
  


   十七、Dogleg方法

   Dogleg方法是一种非线性最小化的数值优化方法,用于寻找函数的最小值。它的基本思想是将当前迭代点处的函数模型分为两部分:一部分是线性模型,另一部分是二次模型。在每次迭代中,该方法会将搜索方向限制在两个较小的半径内,以保证在可接受误差范围内找到局部极小值。

   具体来说,Dogleg方法的实现分为以下几步:

   构建当前迭代点处的函数模型,并计算其梯度和Hessian矩阵;

   计算当前迭代点处的两个半径:一是当函数模型为线性时的半径,另一个是当函数模型为二次时的半径;

   计算在两个半径内的最优搜索方向。当搜索方向在线性半径内时,直接沿着负梯度方向进行搜索;当搜索方向在二次半径内时,计算二次模型的极小值点,并将搜索方向设置为连接当前迭代点和极小值点的线段;

   如果最优搜索方向在线性半径内,直接更新迭代点;如果最优搜索方向在二次半径内,则需要计算更新点,以确保搜索方向在两个半径之间。

   与其他优化方法相比,Dogleg方法具有收敛速度快和收敛精度高的优点。但它也存在一些缺点,例如无法处理约束条件等。在实际应用中,需要根据具体问题选择合适的优化方法。


   算法流程如下所示:

在这里插入图片描述

   其中, Gauss-Newton方向 d k G N d^{GN}_k dkGN由Gauss-Newton方程给出, d k S D = − J k T r k d^{SD}_k=-J_{k}^{\mathrm{T}}r_{k} dkSD=JkTrk,最速下降方法的步长为:

   α k = arg ⁡ min ⁡ q k ( α d k S D ) = ∥ d k S D ∥ 2 ∥ J k d k S D ∥ 2 , \alpha_k=\arg\min q_k(\alpha d_k^{\mathrm{SD}})=\frac{\|d_k^{\mathrm{SD}}\|^2}{\|J_k d_k^{\mathrm{SD}}\|^2}, αk=argminqk(αdkSD)=JkdkSD2dkSD2,

   其中:
   q k ( α d k S D ) ≜ 1 2 ∥ α J k d k S D + r k ∥ 2 = 1 2 ∥ J k d k S D ∥ 2 α 2 − ∥ d k S D ∥ 2 α + f k . q_{k}(\alpha d_{k}^{\mathrm{SD}})\triangleq\frac{1}{2}\|\alpha J_{k}d_{k}^{\mathrm{SD}}+r_{k}\|^{2}=\frac{1}{2}\|J_{k}d_{k}^{\mathrm{SD}}\|^{2}\alpha^{2}-\|d_{k}^{\mathrm{SD}}\|^{2}\alpha+f_{k}. qk(αdkSD)21αJkdkSD+rk2=21JkdkSD2α2dkSD2α+fk.



   参考资料:

   1、数值最优化方法(高立 编著)

   2、机器人中的数值优化



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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【FPGA零基础学习之旅#11】数码管动态扫描

&#x1f389;欢迎来到FPGA专栏~数码管动态扫描 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能指正…

HarmonyOS—UI开发性能提升的推荐方法

注&#xff1a;本文转载自HarmonyOS官网文档 开发者若使用低性能的代码实现功能场景可能不会影响应用的正常运行&#xff0c;但却会对应用的性能造成负面影响。本章节列举出了一些可提升性能的场景供开发者参考&#xff0c;以避免应用实现上带来的性能劣化。 使用数据懒加载 开…

如何熟练使用vector?

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f…

Blender 围绕自身的原点旋转与游标旋转

默认情况下的旋转是&#xff0c;R后旋转是物体自身的原点旋转 可以修改为围绕游标旋转&#xff0c;通过旋转R时 局部与全局坐标 全局的坐标不会变 局部的会随着物体的旋转变化 如果平稳时GZZ会在全局到局部坐标之间切换 或在局部到全局之间的切换 学习视频&#xff1a;【基础…

PaddleNLP使用Vicuna

LLaMA 模型 LLaMa 是一个大型语言模型&#xff0c;由 Meta 开源。它的全称是 Large Language Model Meta AI&#xff0c;参数量从 70 亿到 650 亿不等。例如&#xff0c;130 亿参数的 LLaMA 模型在大多数基准上可以胜过参数量达 1750 亿的 GPT-3&#xff0c;而且可以在单块 V1…

go语言-channel

环形缓存可以降低GC得开销 channel使用得是mutex锁 互斥锁并不是排队发送/接收数据 互斥锁保护的hchan结构体本身 Channel并不是无锁的 底层发送原理 c<- 关键字是一个语法糖 编译阶段&#xff0c;会把 c<- 转化为 runtime.chansend10 chansend10会调用 charsend0 方法…

使用 FastChat 运行 CodeLlama-7b-Instruct-hf

使用 FastChat 运行 CodeLlama-7b-Instruct-hf 1. 确认 FactChat 支持的 Model2. 升级依赖3. 启动 controller4. 启动 CodeLlama5. 启动 api server6. VSCode 中使用 CodeLlama 1. 确认 FactChat 支持的 Model 访问 model_support.md&#xff0c;确认 codellama/CodeLlama-7b-…

【100天精通Python】Day53:Python 数据分析_NumPy数据操作和分析进阶

目录 1. 广播 2 文件输入和输出 3 随机数生成 4 线性代数操作 5 进阶操作 6 数据分析示例 1. 广播 广播是NumPy中的一种机制&#xff0c;用于在不同形状的数组之间执行元素级操作&#xff0c;使它们具有兼容的形状。广播允许你在不显式复制数据的情况下&#xff0c;对不同…

小程序数据导出文件

小程序josn数据生成excel文件 先从下载传送门将xlsx.mini.min.js拷贝下来&#xff0c;新建xlsx.js文件放入小程序项目文件夹下。 const XLSX require(./xlsx)//在需要用的页面中引入// 定义导出 Excel 报表的方法exportData() {const that thislet newData [{time:2021,val…

用XSIBackup为VMware ESXi打造完美备份方案

文章目录 VMware ESXi 备份方案引言XSIBackup安装步骤1. XSIBackup软件安装2. SSH连接3. 定位到xsibackup目录4. 修改文件权限5. 安装cron查看crontab列表6. 配置备份任务结论VMware ESXi 备份方案 引言 数据就像是我们的生命线,一旦丢失,可能会带来无法挽回的损失。对于那…

AI绘画:StableDiffusion实操教程-斗罗大陆2-江楠楠-常服(附高清图下载)

前段时间我分享了StableDiffusion的非常完整的教程&#xff1a;“AI绘画&#xff1a;Stable Diffusion 终极宝典&#xff1a;从入门到精通 ” 尽管如此&#xff0c;还有读者反馈说&#xff0c;尽管已经成功安装&#xff0c;但生成的图片与我展示的结果相去甚远。真实感和质感之…

uniapp微信小程序用户隐私保护

使用wx.requirePrivacyAuthorize实现微信小程序用户隐私保护。 一、前言 微信小程序官方出了一个公告《关于小程序隐私保护指引设置的公告》。不整的话&#xff0c;后果很多授权无法使用&#xff0c;详见《小程序用户隐私保护指引内容介绍》 。 二、隐私相关设置 1、在 微信…

关于大模型参数微调的不同方法

Adapter Tuning 适配器模块&#xff08;Adapter Moudle&#xff09;可以生成一个紧凑且可扩展的模型&#xff1b;每个任务只需要添加少量可训练参数&#xff0c;并且可以在不重新访问之前任务的情况下添加新任务。原始网络的参数保持不变&#xff0c;实现了高度的参数共享 Pa…

CSS中如何隐藏元素但保留其占位空间(display:nonevsvisibility:hidden)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 隐藏元素但保留占位空间⭐ display: none;⭐ visibility: hidden;⭐ 总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&a…

基于Django的博客管理系统

1、克隆仓库https://gitee.com/lylinux/DjangoBlog.git 若失效&#xff1a;https://gitee.com/usutdzxy/DjangoBlog.git 2、环境安装 pip install -Ur requirements.txt3、修改djangoblog/setting.py 修改数据库配置&#xff0c;其他的步骤就按照官方文档。 DATABASES {def…

dubbo服务管控

我们已经介绍了Dubbo在服务治理方面提供的特性&#xff0c;今天我们一起来看看Dubbo在其它方面提供的特性。同服务治理篇一样&#xff0c;本文的目的在于学会使用Dubbo在服务管控方面提供的特性&#xff0c;依旧不涉及任何实现原理。 工程结构 嗯~~ 是这样的&#xff0c;因为…

登录校验的相关知识点

登录校验的相关知识点 【1】会话技术1)会话:2)会话跟踪:3)常见的几种会话跟踪&#xff1a; 【2】JWT令牌1)定义解释2&#xff09;测试生成Jwt令牌并解析3&#xff09;注意事项 【3】过滤器Filter1)过滤器工作原理如下&#xff1a;2)简单使用示例3)自定义拦截路径4)疑问5)过滤器…

【Linux】简单的小程序:进度条

在学习进度条之前&#xff0c;需要学一点预备知识。 1. 预备知识 回车换行 现在的换行符&#xff08;\n&#xff09;其实就是回车式换行符&#xff0c;另起一行&#xff0c;光标指向最新一行的开头。回车符&#xff08;\r&#xff09;是光标指向这一行的开头。 缓冲区 &a…

VR全景对行业发展有什么帮助?VR全景制作需要注意什么?

引言&#xff1a; 虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;早已不再是科幻电影的概念&#xff0c;而是在以惊人的速度改变着我们的世界。VR全景&#xff0c;作为其中的重要组成部分&#xff0c;正为多个行业带来了全新的机遇。 一、VR全景的应用领…

WebGL Varing变量的作用和内插过程,及执行Varing时涉及的图形装配、光栅化、颜色插值、片元着色器执行机制等详解

目录 前言 在 WebGL 或 OpenGL 中&#xff0c;“varying” 是一种用于在顶点着色器和片元着色器之间传递数据的特殊类型的变量。它允许在顶点着色器对数据进行处理后&#xff0c;在片元着色器中使用该处理后的数据进行进一步计算。 彩色三个点 ​编辑 彩色三个点示例代码…