前面讲了梯度下降法、次梯度下降法,并分析了他们的收敛性。上一节讲了近似梯度算子,我们说主要是针对非光滑问题的,这一节就要讲近似梯度算子在非光滑优化问题中的应用。先回顾一下上一节最重要的一部分内容:对于指示函数 δC\delta_CδC​ 来说近似梯度算子得到的实际上就是向集合 CCC 的投影。

1. 近似点梯度下降

这一部分考虑的问题主要是
minimize f(x)=g(x)+h(x)\text{minimize } f(x)=g(x)+h(x) minimize f(x)=g(x)+h(x)
这里面 ggg 是全空间可导的凸函数,dom g=Rn\text{dom }g=R^ndom g=Rn,hhh 是存在不可导部分的凸函数,并且一般需要 hhh 的近似点计算较为简单。近似点梯度下降算法是什么呢?
xk+1=proxth(xk−tk∇g(xk))x_{k+1}=\text{prox}_{th}(x_k-t_k\nabla g(x_k)) xk+1​=proxth​(xk​−tk​∇g(xk​))
这里跟之前的梯度下降(GD)和次梯度下降(SD)的形式都不太一样,实际上看了后面的推导会发现经过转换他们还是很像的。不过怎么理解这个式子呢?举一个例子,假如 hhh 是集合 CCC 的指示函数,那么这个式子实际上是先沿着 ggg 的梯度走步长 tkt_ktk​,然后再投影到集合 CCC 里面,可以看下面这张图。而考虑原始优化问题,min⁡f=g+h\min f=g+hminf=g+h 本身是一个无约束优化问题,但实际上把 hhh 用一个约束函数表示,他就是一个带约束的优化问题 min⁡g(x),s.t. x∈C\min g(x),\text{ s.t. }x\in Cming(x), s.t. x∈C,而近似点梯度下降方法要做的事情就是先优化 ggg,然后投影到约束区域 CCC 中,可以参考下图。

根据 proxth\text{prox}_{th}proxth​ 的定义,我们把上面的式子展开可以得到
x+=argmin⁡u(h(u)+12t∥u−x+t∇g(x)∥22)=argmin⁡u(h(u)+g(x)+∇g(x)T(u−x)+12t∥u−x∥22)\begin{aligned} x^{+} &=\underset{u}{\operatorname{argmin}}\left(h(u)+\frac{1}{2 t}\|u-x+t \nabla g(x)\|_{2}^{2}\right) \\ &=\underset{u}{\operatorname{argmin}}\left(h(u)+g(x)+\nabla g(x)^{T}(u-x)+\frac{1}{2 t}\|u-x\|_{2}^{2}\right) \end{aligned} x+​=uargmin​(h(u)+2t1​∥u−x+t∇g(x)∥22​)=uargmin​(h(u)+g(x)+∇g(x)T(u−x)+2t1​∥u−x∥22​)​
可以发现括号里面的式子实际上就是在 xxx 附近对光滑的 ggg 进行了二阶展开,而 x+x^+x+ 就是对近似后函数取最小值点。再进一步地
0∈t∂h(x+)+(x+−x+t∇g(x))⟹Gt(x):=x−x+t∈∂h(x+)+∇g(x)0\in t\partial h(x^+) + (x^+-x+t\nabla g(x)) \\ \Longrightarrow G_t(x):=\frac{x-x^+}{t}\in \partial h(x^+)+\nabla g(x) 0∈t∂h(x+)+(x+−x+t∇g(x))⟹Gt​(x):=tx−x+​∈∂h(x+)+∇g(x)
可以发现 Gt(x)=∂h(x+)+∇g(x)G_t(x)=\partial h(x^+)+\nabla g(x)Gt​(x)=∂h(x+)+∇g(x) 实际上就近似为函数 fff 的次梯度,但并不严格是,因为 ∂f(x)=∂h(x)+∇g(x)\partial f(x)=\partial h(x)+\nabla g(x)∂f(x)=∂h(x)+∇g(x)。而此时我们也可以将 x+x^+x+ 写成比较简单的形式
x+=x−tGt(x)x^+ = x-tG_t(x) x+=x−tGt​(x)
这跟之前的梯度下降法就统一了,并且也说明了 Gt(x)G_t(x)Gt​(x) 就相当于是 fff 的梯度。

这里还需要说明的一点是 Gt(x)=(1/t)(x−proxth(x−t∇g(x))G_t(x)=(1/t)(x-\text{prox}_{th}(x-t\nabla g(x))Gt​(x)=(1/t)(x−proxth​(x−t∇g(x)) 这是一个连续函数,这是因为近似点算子是 Lipschitz 连续的(在下面一小节中会解释说明),又由于 Gt(x)=0⟺x=arg⁡min⁡f(x)G_t(x)=0\iff x=\arg\min f(x)Gt​(x)=0⟺x=argminf(x),因此 ∥x−x+∥≤ε\Vert x-x^+\Vert\le \varepsilon∥x−x+∥≤ε 就可以作为 stopping criterion。与之成对比的是非光滑函数的次梯度下降,∥x−x+∥\Vert x-x^+\Vert∥x−x+∥ 就不是一个很好的 stopping criterion,因为即使 ∥x−x+∥\Vert x-x^+\Vert∥x−x+∥ 很小,也可能离最优解比较远。

2. 收敛速度分析

在分析收敛速度之前,我们需要首先分析一下 g(x)g(x)g(x) 和 h(x)h(x)h(x) 这两部分函数的性质。

首先是 hhh,如果 hhh 为闭的凸函数,那么 proxh(x)=arg⁡min⁡u(h(u)+(1/2)∥u−x∥2)\text{prox}_h(x)=\arg\min_u\left(h(u)+(1/2)\Vert u-x\Vert^2\right)proxh​(x)=argminu​(h(u)+(1/2)∥u−x∥2) 对每个 xxx 一定存在唯一的解。并且 u=proxh(x)⟺x−u∈∂h(u)u=\text{prox}_h(x) \iff x-u\in \partial h(u)u=proxh​(x)⟺x−u∈∂h(u),那么我们就可以得到 firmly nonexpansive(co-coercivite) 性质:
(prox⁡h(x)−prox⁡h(y))T(x−y)≥∥prox⁡h(x)−prox⁡h(y)∥22\left(\operatorname{prox}_{h}(x)-\operatorname{prox}_{h}(y)\right)^{T}(x-y) \geq\left\|\operatorname{prox}_{h}(x)-\operatorname{prox}_{h}(y)\right\|_{2}^{2} (proxh​(x)−proxh​(y))T(x−y)≥∥proxh​(x)−proxh​(y)∥22​
证明过程可以取 u=proxh(x),v=proxh(y)u=\text{prox}_h(x),v=\text{prox}_h(y)u=proxh​(x),v=proxh​(y),然后根据 x−u∈∂h(u),y−v∈∂h(v)x-u\in \partial h(u),y-v\in \partial h(v)x−u∈∂h(u),y−v∈∂h(v),再利用次梯度算子的单调性质就可以得到。之前在梯度下降法中第一次讲到 co-coercive 性质的时候也提到,他跟 Lipschitz continuous 性质实际上是等价的,因此我们也有(nonexpansiveness性质)
∥prox⁡h(x)−prox⁡h(y)∥2≤∥x−y∥2\left\|\operatorname{prox}_{h}(x)-\operatorname{prox}_{h}(y)\right\|_2 \le \left\|x-y\right\|_2 ∥proxh​(x)−proxh​(y)∥2​≤∥x−y∥2​
然后我们再来看函数 ggg 的性质,类似前面梯度下降法中的两个重要性质:

  1. L-smooth:L2xTx−g(x)\frac{L}{2}x^Tx-g(x)2L​xTx−g(x) convex
  2. m-strongly convex:g(x)−m2xTxg(x)-\frac{m}{2}x^Txg(x)−2m​xTx convex

然后就可以得到两个二次的界
mt22∥Gt(x)∥22≤g(x−tGt(x))−g(x)+t∇g(x)TGt(x)≤Lt22∥Gt(x)∥22\frac{m t^{2}}{2}\left\|G_{t}(x)\right\|_{2}^{2} \leq g\left(x-t G_{t}(x)\right)-g(x)+t \nabla g(x)^{T} G_{t}(x) \leq \frac{L t^{2}}{2}\left\|G_{t}(x)\right\|_{2}^{2} 2mt2​∥Gt​(x)∥22​≤g(x−tGt​(x))−g(x)+t∇g(x)TGt​(x)≤2Lt2​∥Gt​(x)∥22​
如果取 0<t≤1/L0< t\le 1/L0<t≤1/L,那么就有 Lt≤1,mt≤1Lt\le1,mt\le 1Lt≤1,mt≤1。

结合上面对 ggg 和 hhh 性质的分析,就能得到下面这个非常重要的式子:

f(x−tGt(x))≤f(z)+Gt(x)T(x−z)−t2∥Gt(x)∥22−m2∥x−z∥22(★)f\left(x-t G_{t}(x)\right) \leq f(z)+G_{t}(x)^{T}(x-z)-\frac{t}{2}\left\|G_{t}(x)\right\|_{2}^{2}-\frac{m}{2}\|x-z\|_{2}^{2} \qquad (\bigstar) f(x−tGt​(x))≤f(z)+Gt​(x)T(x−z)−2t​∥Gt​(x)∥22​−2m​∥x−z∥22​(★)

证明
f(x−tGt(x))≤g(x)−t∇g(x)TGt(x)+t2∥Gt(x)∥22+h(x−tGt(x))≤g(z)−∇g(x)T(z−x)−m2∥z−x∥22−t∇g(x)TGt(x)+t2∥Gt(x)∥22+h(x−tGt(x))≤g(z)−∇g(x)T(z−x)−m2∥z−x∥22−t∇g(x)TGt(x)+t2∥Gt(x)∥22+h(z)−(Gt(x)−∇g(x))T(z−x+tGt(x))=g(z)+h(z)+Gt(x)T(x−z)−t2∥Gt(x)∥22−m2∥x−z∥22\begin{aligned} f\left(x-t G_{t}(x)\right) & \\ \leq & g(x)-t \nabla g(x)^{T} G_{t}(x)+\frac{t}{2}\left\|G_{t}(x)\right\|_{2}^{2}+h\left(x-t G_{t}(x)\right) \\ \leq & g(z)-\nabla g(x)^{T}(z-x)-\frac{m}{2}\|z-x\|_{2}^{2}-t \nabla g(x)^{T} G_{t}(x)+\frac{t}{2}\left\|G_{t}(x)\right\|_{2}^{2} \\ &+h\left(x-t G_{t}(x)\right) \\ \leq & g(z)-\nabla g(x)^{T}(z-x)-\frac{m}{2}\|z-x\|_{2}^{2}-t \nabla g(x)^{T} G_{t}(x)+\frac{t}{2}\left\|G_{t}(x)\right\|_{2}^{2} \\ &+h(z)-\left(G_{t}(x)-\nabla g(x)\right)^{T}\left(z-x+t G_{t}(x)\right) \\ =& g(z)+h(z)+G_{t}(x)^{T}(x-z)-\frac{t}{2}\left\|G_{t}(x)\right\|_{2}^{2}-\frac{m}{2}\|x-z\|_{2}^{2} \end{aligned} f(x−tGt​(x))≤≤≤=​g(x)−t∇g(x)TGt​(x)+2t​∥Gt​(x)∥22​+h(x−tGt​(x))g(z)−∇g(x)T(z−x)−2m​∥z−x∥22​−t∇g(x)TGt​(x)+2t​∥Gt​(x)∥22​+h(x−tGt​(x))g(z)−∇g(x)T(z−x)−2m​∥z−x∥22​−t∇g(x)TGt​(x)+2t​∥Gt​(x)∥22​+h(z)−(Gt​(x)−∇g(x))T(z−x+tGt​(x))g(z)+h(z)+Gt​(x)T(x−z)−2t​∥Gt​(x)∥22​−2m​∥x−z∥22​​
其中第一个不等号用到了 g(x)g(x)g(x) 凸函数以及 Lipschitz 连续的性质,第二个不等号用到了 g(x)g(x)g(x) 凸函数的性质,第三个不等号用到了 h(x)h(x)h(x) 凸函数的性质。

有了上面这个式子就可以分析收敛性了。

如果我们取 z=xz=xz=x,那么就有下面的式子,说明序列 {f(xk}\{f(x_k\}{f(xk​} 总是在减小的,如果 f(x)f(x)f(x) 存在下界,那么 f(xk)f(x_k)f(xk​) 将趋向于这个下界。
f(x+)≤f(x)−t2∥Gt(x)∥2f(x^+)\le f(x)-\frac{t}{2}\Vert G_t(x)\Vert^2 f(x+)≤f(x)−2t​∥Gt​(x)∥2
如果我们取 z=x⋆z=x^\starz=x⋆,那么就有
f(x+)−f⋆≤Gt(x)T(x−x⋆)−t2∥Gt(x)∥22−m2∥x−x⋆∥22=12t(∥x−x⋆∥22−∥x−x⋆−tGt(x)∥22)−m2∥x−x⋆∥22=12t((1−mt)∥x−x⋆∥22−∥x+−x⋆∥22)≤12t(∥x−x⋆∥22−∥x+−x⋆∥22)\begin{aligned} f\left(x^{+}\right)-f^{\star} & \leq G_{t}(x)^{T}\left(x-x^{\star}\right)-\frac{t}{2}\left\|G_{t}(x)\right\|_{2}^{2}-\frac{m}{2}\left\|x-x^{\star}\right\|_{2}^{2} \\ &=\frac{1}{2 t}\left(\left\|x-x^{\star}\right\|_{2}^{2}-\left\|x-x^{\star}-t G_{t}(x)\right\|_{2}^{2}\right)-\frac{m}{2}\left\|x-x^{\star}\right\|_{2}^{2} \\ &=\frac{1}{2 t}\left((1-m t)\left\|x-x^{\star}\right\|_{2}^{2}-\left\|x^{+}-x^{\star}\right\|_{2}^{2}\right) \\ & \leq \frac{1}{2 t}\left(\left\|x-x^{\star}\right\|_{2}^{2}-\left\|x^{+}-x^{\star}\right\|_{2}^{2}\right) \end{aligned} f(x+)−f⋆​≤Gt​(x)T(x−x⋆)−2t​∥Gt​(x)∥22​−2m​∥x−x⋆∥22​=2t1​(∥x−x⋆∥22​−∥x−x⋆−tGt​(x)∥22​)−2m​∥x−x⋆∥22​=2t1​((1−mt)∥x−x⋆∥22​−∥∥​x+−x⋆∥∥​22​)≤2t1​(∥x−x⋆∥22​−∥∥​x+−x⋆∥∥​22​)​
从这个式子就可以看出来很多有用的性质了:

  1. ∥x+−x⋆∥22≤(1−mt)∥x−x⋆∥22\left\|x^{+}-x^{\star}\right\|_{2}^{2}\le (1-m t)\left\|x-x^{\star}\right\|_{2}^{2}∥x+−x⋆∥22​≤(1−mt)∥x−x⋆∥22​,如果满足强凸性质的话,也即 m>0m>0m>0,就有 ∥x+−x⋆∥22≤ck∥x−x⋆∥22,c=1−m/L\left\|x^{+}-x^{\star}\right\|_{2}^{2}\le c^k\left\|x-x^{\star}\right\|_{2}^{2},c=1-m/L∥x+−x⋆∥22​≤ck∥x−x⋆∥22​,c=1−m/L;
  2. ∑ik(f(xi)−f⋆)≤12t∥x+−x⋆∥22\sum_i^k (f(x_i)-f^\star) \le \frac{1}{2t}\left\|x^{+}-x^{\star}\right\|_{2}^{2}∑ik​(f(xi​)−f⋆)≤2t1​∥x+−x⋆∥22​,由于 f(xi)f(x_i)f(xi​) 不增,因此 f(xk)−f⋆≤12kt∥x+−x⋆∥22f(x_k)-f^\star \le \frac{1}{2kt}\left\|x^{+}-x^{\star}\right\|_{2}^{2}f(xk​)−f⋆≤2kt1​∥x+−x⋆∥22​,因此收敛速度也是 O(1/k)O(1/k)O(1/k)。

注意到前面的分析是针对固定步长 t∈(0,1/L]t\in(0,1/L]t∈(0,1/L] 的,如果我们想走的更远一点,下降的快一点呢?就可以用前几节提到的线搜索方法。也就是说每次选择步长 tkt_ktk​ 的时候需要迭代 t:=βtt:=\beta tt:=βt 来进行搜索,使得满足下面的式子
g(x−tGt(x))≤g(x)−t∇g(x)TGt(x)+t2∥Gt(x)∥22g\left(x-t G_{t}(x)\right) \leq g(x)-t \nabla g(x)^{T} G_{t}(x)+\frac{t}{2}\left\|G_{t}(x)\right\|_{2}^{2} g(x−tGt​(x))≤g(x)−t∇g(x)TGt​(x)+2t​∥Gt​(x)∥22​
这个式子就是 Lipschitz 连续导出的二次上界,注意应用线搜索的时候,每次迭代我们都要额外计算一次 ggg 和 proxth\text{prox}_{th}proxth​,这个计算可能并不简单,因此不一定会使算法收敛更快,需要慎重考虑。另外为了保证能在有限步停止搜索 tkt_ktk​,还需要加入最小步长的约束 t≥tmin⁡=min⁡{t^,β/L}t\ge t_{\min}=\min \{\hat{t},\beta/L\}t≥tmin​=min{t^,β/L}。线搜索直观理解可以如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZkJVmrlK-1587117296421)(E:\Study\凸优化\img\19-line-search.PNG)]

我们再来分析一下收敛性,跟前面固定步长很像,只需要将原来的式子中 ttt 替换为 tit_iti​,就可以得到
ti(f(xi+1)−f⋆)≤12(∥xi−x⋆∥22−∥xi+1−x⋆∥22)t_{i}\left(f\left(x_{i+1}\right)-f^{\star}\right) \leq \frac{1}{2}\left(\left\|x_{i}-x^{\star}\right\|_{2}^{2}-\left\|x_{i+1}-x^{\star}\right\|_{2}^{2}\right) ti​(f(xi+1​)−f⋆)≤21​(∥xi​−x⋆∥22​−∥xi+1​−x⋆∥22​)
于是有

  1. ∥x+−x⋆∥22≤(1−mti)∥x−x⋆∥22≤(1−mtmin⁡)∥x−x⋆∥22\left\|x^{+}-x^{\star}\right\|_{2}^{2}\le (1-m t_i)\left\|x-x^{\star}\right\|_{2}^{2}\le (1-m t_{\min})\left\|x-x^{\star}\right\|_{2}^{2}∥x+−x⋆∥22​≤(1−mti​)∥x−x⋆∥22​≤(1−mtmin​)∥x−x⋆∥22​,如果满足强凸性质的话,也即 m>0m>0m>0,就有 ∥x+−x⋆∥22≤ck∥x−x⋆∥22,c=1−mtmin⁡=max⁡{1−βm/L,1−mt^}\left\|x^{+}-x^{\star}\right\|_{2}^{2}\le c^k\left\|x-x^{\star}\right\|_{2}^{2},c=1-mt_{\min}=\max \{1-\beta m/L,1-m\hat{t}\}∥x+−x⋆∥22​≤ck∥x−x⋆∥22​,c=1−mtmin​=max{1−βm/L,1−mt^};
  2. ∑ikti(f(xi)−f⋆)≤12∥x+−x⋆∥22\sum_i^k t_i(f(x_i)-f^\star) \le \frac{1}{2}\left\|x^{+}-x^{\star}\right\|_{2}^{2}∑ik​ti​(f(xi​)−f⋆)≤21​∥x+−x⋆∥22​,由于 f(xi)f(x_i)f(xi​) 不增,因此 f(xk)−f⋆≤12ktmin⁡∥x+−x⋆∥22f(x_k)-f^\star \le \frac{1}{2kt_{\min}}\left\|x^{+}-x^{\star}\right\|_{2}^{2}f(xk​)−f⋆≤2ktmin​1​∥x+−x⋆∥22​,因此收敛速度也是 O(1/k)O(1/k)O(1/k)。

最后给我的博客打个广告,欢迎光临
https://glooow1024.github.io/
https://glooow.gitee.io/

前面的一些博客链接如下
凸优化专栏
凸优化学习笔记 1:Convex Sets
凸优化学习笔记 2:超平面分离定理
凸优化学习笔记 3:广义不等式
凸优化学习笔记 4:Convex Function
凸优化学习笔记 5:保凸变换
凸优化学习笔记 6:共轭函数
凸优化学习笔记 7:拟凸函数 Quasiconvex Function
凸优化学习笔记 8:对数凸函数
凸优化学习笔记 9:广义凸函数
凸优化学习笔记 10:凸优化问题
凸优化学习笔记 11:对偶原理
凸优化学习笔记 12:KKT条件
凸优化学习笔记 13:KKT条件 & 互补性条件 & 强对偶性
凸优化学习笔记 14:SDP Representablity
最优化方法 15:梯度方法
最优化方法 16:次梯度
最优化方法 17:次梯度下降法
最优化方法 18:近似点算子 Proximal Mapping
最优化方法 19:近似梯度下降
最优化方法 20:对偶近似点梯度下降法
最优化方法 21:加速近似梯度下降方法
最优化方法 22:近似点算法 PPA
最优化方法 23:算子分裂法 & ADMM
最优化方法 24:ADMM

最优化方法 19:近似梯度下降相关推荐

  1. 回归算法-线性回归分析-正规方程和梯度下降

    1.分类和回归最本质的区别 定量输出称为回归,或者说是连续变量预测:     定性输出称为分类,或者说是离散变量预测. 举个特别好理解的例子: 预测明天的气温是多少度,这是一个回归任务: 预测明天是阴 ...

  2. 最优化方法之梯度下降法和牛顿法

    大部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优化,从而训练出最好的模型.最常见的最优化方法有梯度下降法.牛顿法. 最优化方法: 最优化方法,即寻找函数极值点的 ...

  3. 最优化方法:梯度下降(批梯度下降和随机梯度下降)

    http://blog.csdn.net/pipisorry/article/details/23692455 梯度下降法(Gradient Descent) 梯度下降法是一个一阶最优化算法,通常也称 ...

  4. 强化学习(七) - 函数近似方法 - 随机梯度下降, 半梯度下降,及瓦片编码(Tile Coding)实例

    函数近似方法 7.1 目标预测(VE‾\overline{VE}VE) 7.2 随机梯度下降和半梯度下降 例7.1: 1000态随机行走的状态收敛 7.3 线性近似 7.4 线性方法的特征构造 7.4 ...

  5. 深度学习与计算机视觉系列(4)_最优化与随机梯度下降\数据预处理,正则化与损失函数

    1. 引言 上一节深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器中提到两个对图像识别至关重要的概念: 用于把原始像素信息映射到不同类别得分的得分函数/score function 用 ...

  6. 《机器学习》 梯度下降

     <机器学习> 梯度下降 2012-09-21 17:46 2712人阅读 评论(0) 收藏 举报 matrixc 参照<机器学习>这本书的第4.4.3节. 一.解决目标及 ...

  7. 梯度下降与delta法则

    delta法则 尽管当训练样例线性可分时,感知器法则可以成功地找到一个权向量,但如果样例不是线性可分时它将不能收敛. 因此,人们设计了另一个训练法则来克服这个不足,称为 delta 法则(delta ...

  8. 梯度下降法和随机梯度下降法的区别

    这几天在看<统计学习方法>这本书,发现 梯度下降法 在 感知机 等机器学习算法中有很重要的应用,所以就特别查了些资料.  一.介绍 梯度下降法(gradient descent)是求解无约 ...

  9. 深度学习与计算机视觉(三)最优化与梯度下降

    三.最优化与梯度下降 上一节深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器中提到两个对图像识别至关重要的概念: 用于把原始像素信息映射到不同类别得分的得分函数/score funct ...

  10. 随机梯度下降的实现细节

    http://www.miaoerduo.com/deep-learning/%E5%9F%BA%E4%BA%8Ecaffe%E7%9A%84deepid2%E5%AE%9E%E7%8E%B0%EF% ...

最新文章

  1. Java实现网页截屏功能(基于phantomJs)
  2. python手机版iphone-Python编程神器
  3. python入门之函数调用第二关_猪行天下之Python基础——5.1 函数(上)
  4. sparkmllib scala GBDT Demo
  5. 第二届Byte Cup来袭,赢得2万美元奖金,登上字节跳动面试直通车
  6. WCF入门到精通(二)——契约
  7. C# 自定义箭头组件
  8. Android之context相关类图
  9. 另一个SqlParameterCollection 中已包含 SqlParameter[解决方案]
  10. zigbee协议栈 任务、事件与轮询机制
  11. 步骤安装Ubuntu 11.04用五笔
  12. 【愚公系列】2022年10月 微信小程序-电商项目-收货地址功能实现
  13. javascript 分割字符串
  14. STM32F4最小系统硬件设计
  15. Linux系列八-type、alias与history
  16. ICP备案教程-图文详细流程适合新手小白(Chinar出品)
  17. [RK3399][Android7.1] Display中的VOP模块介绍
  18. 化工厂人员定位详细解决方案
  19. 7. Components
  20. 相机内参模型Mei/omni-directional详解

热门文章

  1. 女诗经,男楚辞
  2. Linux-开启Apache的虚拟主机功能(基于IP地址、基于主机域名、基于IP:端口号)
  3. 复习一下forearch
  4. 从零开始iOS8编程【HelloWorld】
  5. excel如何批量查询ip归属地?
  6. day09 文件操作相关
  7. 电池SOC仿真系列-基于遗传算法的电池参数辨识
  8. 支付宝支付服务端对接记录(小程序/APP 预支付统一下单及回调处理)
  9. 有道云笔记·协作android版,【每天一品】有道云笔记协作
  10. mysql analyze_MySQL中的analyze与optimize