当前位置: 首页 > news >正文

琴生不等式 (Jensen‘s Inequality)

目录

    • 1. 凸函数
      • 直观理解
      • 定义
      • 证明
    • 2. Jensen's Inequality不等式
      • 直观理解
      • 定义
      • 证明
    • 3. 应用
      • ① 证明AM-GM inequality
      • ② 证明KL散度的非负性(信息论)
      • ③ 证明EM算法的证据下界ELBO(机器学习)
    • 最后
    • 参考

我们常能发现一些有趣的曲线形态:向上隆起的抛物线弧、饱满的椭圆轮廓,这些曲线都有一个共同特征 —— 任意两点连成的弦始终位于曲线的上方或下方。1906 年,丹麦数学家 Johan Jensen 正是从这种几何直观出发,首次系统阐述了凸函数的性质,并建立了以他名字命名的 Jensen 不等式。

In mathematics, Jensen’s inequality, named after the Danish mathematician Johan Jensen, relates the value of a convex function of an integral to the integral of the convex function. [1]

Jensen 不等式的强大之处在于它建立了 “函数值的平均” 与 “平均值的函数” 之间的序关系,这种关系本质上是凸性的量化表达。它不仅是一个数学定理,更是一种思维范式 —— 当我们需要比较复杂表达式的大小关系时,寻找合适的凸函数映射往往能化繁为简。

1. 凸函数

直观理解

如下图,直观对比convex function,concave function, Non-convex function这三者的区别。

在这里插入图片描述

定义

设函数 f : X → R f:X\rightarrow \mathbb{R} f:XR,对任意 x 1 , x 2 ∈ X x_1,x_2 \in X x1,x2X 0 ≤ t ≤ 1 0\leq t \leq1 0t1,恒有
f ( t x 1 + ( 1 − t ) x 2 ) ≤ t f ( x 1 ) + ( 1 − t ) f ( x 2 ) \boxed{f(tx_1+(1-t)x_2)\leq tf(x_1)+(1-t)f(x_2)} f(tx1+(1t)x2)tf(x1)+(1t)f(x2)
则称 f f f X X X上的凸函数。

证明

证明1:

已知 A ( x 1 , y 1 ) A(x_1,y_1) A(x1,y1) B ( x 2 , y 2 ) B(x_2,y_2) B(x2,y2),采用设直线的方程为 y = k x + b y=kx+b y=kx+b,即可推导出上述公式成立。(证明略)

证明2:

采用物理中的质心证明,设 A ( x 1 , y 1 ) A(x_1,y_1) A(x1,y1)的质量 m 1 m_1 m1 B ( x 2 , y 2 ) B(x_2,y_2) B(x2,y2)的质量 m 2 m_2 m2,线段直线AB的质心坐标 C ( x c , y c ) C(x_c,y_c) C(xc,yc),则有
x c = m 1 x 1 + m 2 x 2 m 1 + m 2 y c = m 1 y 1 + m 2 y 2 m 1 + m 2 = m 1 f ( x 1 ) + m 2 f ( x 2 ) m 1 + m 2 \begin{align} & x_c = \frac{m_1x_1+m_2x_2}{m_1+m_2}\\ & y_c= \frac{m_1y_1+m_2y_2}{m_1+m_2}= \frac{m_1f(x_1)+m_2f(x_2)}{m_1+m_2} \end{align} xc=m1+m2m1x1+m2x2yc=m1+m2m1y1+m2y2=m1+m2m1f(x1)+m2f(x2)
又因为 y c ≥ f ( x c ) y_c\geq f(x_c) ycf(xc),则有
m 1 f ( x 1 ) + m 2 f ( x 2 ) m 1 + m 2 ≥ f ( m 1 x 1 + m 2 x 2 m 1 + m 2 ) \frac{m_1f(x_1)+m_2f(x_2)}{m_1+m_2} \geq f(\frac{m_1x_1+m_2x_2}{m_1+m_2}) m1+m2m1f(x1)+m2f(x2)f(m1+m2m1x1+m2x2)
定义 t i = m i / ( m 1 + m 2 ) t_i=m_i/(m_1+m_2) ti=mi/(m1+m2),带入上式:
t 1 f ( x 1 ) + t 2 f ( x 2 ) ≥ f ( t 1 x 1 + t 2 x 2 ) t_1{f(x_1)+t_2f(x_2)} \geq f(t_1x_1+t_2x_2) t1f(x1)+t2f(x2)f(t1x1+t2x2)
t 2 = 1 − t 1 t_2=1-t_1 t2=1t1,则:
f ( t 1 x 1 + ( 1 − t 1 ) x 2 ) ≤ t 1 f ( x 1 ) + ( 1 − t 1 ) f ( x 2 ) f(t_1x_1+(1-t_1)x_2) \leq t_1{f(x_1)+(1-t_1)f(x_2)} f(t1x1+(1t1)x2)t1f(x1)+(1t1)f(x2)

2. Jensen’s Inequality不等式

直观理解

Quora上有个提问“What is an intuitive explanation of Jensen’s Inequality?”,看了前两名高赞的回答,我觉得还是不够Intuitive,暂且搬运过来辅助理解[2]。(翻了很多资料,确实没看到很amazing的解释)

高赞第一名:

这句话的意思其实是对维基百科[Jensen’s Inequality]中这句话"relates the value of a convex function of an integral to the integral of the convex function"的等价说法。

即,将“先变换数据,在平均”和“先平均,在变换数据”这两句话建立起了联系,这里的变换数据是采用凸函数进行变换。

Jensen’s inequality comes up when you are combining transformation with averaging. You usually have a choice between (a) transforming your data and then averaging the transformed values; or (b) averaging your data and then transforming the average.

If your transformation is linear, then (a) and (b) are the same, and it doesn’t matter which you do. If it’s not linear, they’re different. Jensen’s inequality says that if the transformation is convex, then (a) always gives you a bigger answer than (b).

这个高赞下有个评论“How is this answer intuitive?”,感觉很intuitive。

高赞第二名:

我认为算不上是直观的解释,作者引入质心来推导琴生不等式。

Many years ago someone showed me a very interesting and visual explanation of Jensen’s inequality. If you are aware of the notion of centre of mass, this is going to be a cakewalk.

定义

在理解了convex function之后,就很容易理解琴生不等式。因为convex function针对的是二维函数(两个点),而琴生不等式将这一概率推广到了更高的维度(大于两个点)。

离散型 Jensen 不等式

对于一个凸函数 f f f,其域中有 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1,x2,,xn,则有:
f ( t 1 x 1 + t 2 x 2 + ⋯ + t n x n ) ≤ t 1 f ( x 1 ) + t 2 f ( x 2 ) + ⋯ + t n f ( x n ) f(t_1x_1+t_2x_2+\cdots+t_nx_n)\leq t_1f(x_1)+t_2f(x_2)+\cdots+t_nf(x_n) f(t1x1+t2x2++tnxn)t1f(x1)+t2f(x2)++tnf(xn)
式中, t i ∈ [ 0 , 1 ] t_i\in[0,1] ti[0,1],且 t 1 + t 2 + ⋯ + t n = 1 t_1+t_2+\cdots+t_n=1 t1+t2++tn=1

连续型 Jensen 不等式

定义 t i = P ( X = x i ) t_i=P(X=x_i) ti=P(X=xi),则 t 1 x 1 + t 2 x 2 + ⋯ + t n x n = E [ X ] t_1x_1+t_2x_2+\cdots+t_nx_n=E[X] t1x1+t2x2++tnxn=E[X],上式可以写成
f ( E [ X ] ) ≤ E [ f ( X ) ] \boxed{f(E[X])\leq E[f(X)]} f(E[X])E[f(X)]

证明

证明1:

仍然采用质心证明,这里考虑四个点 A ( x 1 , y 1 ) A(x_1,y_1) A(x1,y1) B ( x 2 , y 2 ) B(x_2,y_2) B(x2,y2) C ( x 3 , y 3 ) C(x_3,y_3) C(x3,y3) D ( x 4 , y 4 ) D(x_4,y_4) D(x4,y4),线段四边形ABCD的质心坐标 O ( x c , y c ) O(x_c,y_c) O(xc,yc),则有
x c = m 1 x 1 + m 2 x 2 + m 3 x 3 + m 4 x 4 m 1 + m 2 + m 3 + m 4 y c = m 1 y 1 + m 2 y 2 + m 3 y 3 + m 4 y 4 m 1 + m 2 + m 3 + m 4 = m 1 f ( x 1 ) + m 2 f ( x 2 ) + m 3 f ( x 3 ) + m 4 f ( x 4 ) m 1 + m 2 + m 3 + m 4 \begin{align} & x_c = \frac{m_1x_1+m_2x_2+m_3x_3+m_4x_4}{m_1+m_2+m_3+m_4}\\ & y_c= \frac{m_1y_1+m_2y_2+m_3y_3+m_4y_4}{m_1+m_2+m_3+m_4}= \frac{m_1f(x_1)+m_2f(x_2)+m_3f(x_3)+m_4f(x_4)}{m_1+m_2+m_3+m_4} \end{align} xc=m1+m2+m3+m4m1x1+m2x2+m3x3+m4x4yc=m1+m2+m3+m4m1y1+m2y2+m3y3+m4y4=m1+m2+m3+m4m1f(x1)+m2f(x2)+m3f(x3)+m4f(x4)
又因为 y c ≥ f ( x c ) y_c\geq f(x_c) ycf(xc),则有…(证明同凸函数)。

在这里插入图片描述

3. 应用

在写这篇文章和查阅资料的过程中,大学期间的《线性代数》和《高等数学》反复萦绕在我脑海中,为什么就不能扩展介绍一下这条定理是怎么服务实际的?所谓学者/教授,肯定是知识渊博、见多识广、阅历丰富,如果能将枯燥的引理应用于解决实际问题,我想大家都愿意且有兴趣学习这个知识点。

我认为的理想教材应该是,在正式介绍数学定义之前需要做好足够多的铺垫,充分阐述其背景和问题来源;然后,不失一般性的给出数学证明(注意,不是"由此可得",“显然”,“限于版面限制”等等这类毫无分量的词把核心过程全部省略的谜之操作)。最后,应该是根据教授们大半辈子的教学经验总结我们这个定理有哪些推广和应用场景。

现实的一般流程却是:先给出假设条件-下定义-证明定义-做习题巩固定义。

下面引用马云的一句话表达我的感受:

不是让AI取代人类,而是让AI更懂人类、更好地服务人类。

① 证明AM-GM inequality

算数-几何均值不等式(inequality of arithmetic and geometric means,AM–GM inequality)表明非负的算数均值大于或等于其几何均值,即 ( a + b ) / 2 ≥ a b (a+b)/2\geq\sqrt{ab} (a+b)/2ab ,如下图所示:

在这里插入图片描述

通俗来说,“把数加起来求平均” 永远不会比 “把数相乘开 n n n次方根” 得到的结果小。只有当所有数都一样时,这两种平均才完全相同。

Theorem

给定正数 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1,x2,xn,它们的算数平均数为:
A M = x 1 + x 2 ⋯ + x n n AM=\frac{x_1+x_2\cdots+x_n}{n} AM=nx1+x2+xn
对应的几何平均值为:
G M = x 1 ⋅ x 2 ⋯ ⋅ x n n GM=\sqrt[n]{x_1\cdot x_2\cdots \cdot x_n} GM=nx1x2xn
则有:
x 1 + x 2 ⋯ + x n n ≥ x 1 ⋅ x 2 ⋯ ⋅ x n n \boxed{\frac{x_1+x_2\cdots+x_n}{n} \geq \sqrt[n]{x_1\cdot x_2\cdots \cdot x_n}} nx1+x2+xnnx1x2xn
x 1 = x 2 = ⋯ = x n x_1=x_2=\cdots=x_n x1=x2==xn时,等式成立。

Proof:

引入琴生不等式,令 f ( x ) = ln ⁡ ( x ) f(x)=\ln(x) f(x)=ln(x),因为 f ( x ) f(x) f(x)是偶函数,所以 f ( E [ X ] ) ≥ E [ f ( X ) ] f(E[X])\geq E[f(X)] f(E[X])E[f(X)],则有
f ( 1 n x 1 + 1 n x 2 + ⋯ + 1 n x n ) ≥ 1 n f ( x 1 ) + 1 n f ( x 2 ) + ⋯ + 1 n f ( x n ) f(\frac{1}{n}x_1+\frac{1}{n}x_2+\cdots+\frac{1}{n}x_n)\geq \frac{1}{n}f(x_1)+\frac{1}{n}f(x_2)+\cdots+\frac{1}{n}f(x_n) f(n1x1+n1x2++n1xn)n1f(x1)+n1f(x2)++n1f(xn)
代入 ln ⁡ ( x ) \ln(x) ln(x)
ln ⁡ x 1 + x 2 + ⋯ + x n n ≥ 1 n ln ⁡ ( x 1 ⋅ x 2 ⋯ ⋅ x n ) = ln ⁡ x 1 ⋅ x 2 ⋯ ⋅ x n n \ln\frac{x_1+x_2+\cdots+x_n}{n}\geq \frac{1}{n}\ln(x_1\cdot x_2\cdots \cdot x_n)=\ln\sqrt[n]{x_1\cdot x_2\cdots \cdot x_n} lnnx1+x2++xnn1ln(x1x2xn)=lnnx1x2xn
对上式不等式两边取指数 e e e,而 e ln ⁡ x = x e^{\ln x}=x elnx=x,所以
x 1 + x 2 + ⋯ + x n n ≥ x 1 ⋅ x 2 ⋯ ⋅ x n n \frac{x_1+x_2+\cdots+x_n}{n}\geq \sqrt[n]{x_1\cdot x_2\cdots \cdot x_n} nx1+x2++xnnx1x2xn
得证。

② 证明KL散度的非负性(信息论)

Theorem
D K L ( P ∣ ∣ Q ) = ∑ x ∼ P P ( x ) log ⁡ P ( x ) Q ( x ) = E x ∼ P [ log ⁡ P ( x ) Q ( x ) ] ≥ 0 \boxed{D_{KL}(P||Q)=\sum_{x\sim P}P(x) \log \frac{P(x)}{Q(x)}=\mathbb{E}_{x\sim P}[\log \frac{P(x)}{Q(x)}]\geq 0} DKL(P∣∣Q)=xPP(x)logQ(x)P(x)=ExP[logQ(x)P(x)]0
Proof:

,令 f ( x ) = log ⁡ ( x ) , X = Q ( x ) P ( x ) , x ∼ P f(x)=\log(x), X=\frac{Q(x)}{P(x)}, x\sim P f(x)=log(x),X=P(x)Q(x),xP,推导过程如下:
− D K L ( P ∣ ∣ Q ) = E x ∼ P [ log ⁡ Q ( x ) P ( x ) ] = E x ∼ P [ f ( X ) ] ≤ f ( E x ∼ P [ X ] ) = f ( E x ∼ P [ Q ( x ) P ( x ) ] ) = f ( ∑ x P ( x ) ⋅ Q ( x ) P ( x ) ) = f ( ∑ x Q ( x ) ) = log ⁡ ( 1 ) = 0 \begin{align} -D_{KL}(P||Q) &=\mathbb{E}_{x\sim P}[\log \frac{Q(x)}{P(x)}] \\ &=\mathbb{E}_{x\sim P}[f(X)] \\ & \leq f(\mathbb{E}_{x\sim P}[X])\\ &= f(\mathbb{E}_{x\sim P}[\frac{Q(x)}{P(x)}]) \\ &= f(\sum_{x}P(x)\cdot \frac{Q(x)}{P(x)}) \\ &= f(\sum_{x}Q(x)) \\ &= \log(1)=0 \\ \end{align} DKL(P∣∣Q)=ExP[logP(x)Q(x)]=ExP[f(X)]f(ExP[X])=f(ExP[P(x)Q(x)])=f(xP(x)P(x)Q(x))=f(xQ(x))=log(1)=0
得证。

注: f ( x ) 是凹函数 f(x)是凹函数 f(x)是凹函数,引入琴生不等式则有 E [ f ( X ) ] ≤ f ( E [ X ] ) E[f(X)]\leq f(E[X]) E[f(X)]f(E[X])

③ 证明EM算法的证据下界ELBO(机器学习)

EM算法的目标:在存在未知信息(隐变量 Z Z Z)的情况下,找到最优的模型 θ \theta θ使得观测数据的似然函数最大:
θ ∗ = arg ⁡ max ⁡ θ log ⁡ P ( X ∣ θ ) = arg ⁡ max ⁡ θ log ⁡ ∑ Z P ( X , Z ∣ θ ) \theta^*=\arg \max _{\theta} \log P(X|\theta)=\arg \max _{\theta}\log \sum_Z P(X,Z|\theta) θ=argθmaxlogP(Xθ)=argθmaxlogZP(X,Zθ)
式中, X X X是观测数据, θ \theta θ是模型的参数, Z Z Z是隐变量。

为了构造优化下界,引入变分分布 Q ( Z ) Q(Z) Q(Z)
log ⁡ P ( X ∣ θ ) = log ⁡ ∑ Z Q ( Z ) Q ( Z ) P ( X , Z ∣ θ ) = log ⁡ ∑ Z Q ( Z ) P ( X , Z ∣ θ ) Q ( Z ) ≥ ∑ Z Q ( Z ) log ⁡ P ( X , Z ∣ θ ) Q ( Z ) ( 凹函数,琴生不等式 ) \begin{align} \log P(X|\theta)&=\log \sum_Z \frac{Q(Z)}{Q(Z)} P(X,Z|\theta) \\ &=\log \sum_Z Q(Z)\frac{P(X,Z|\theta)}{Q(Z)} \\ &\geq \sum_Z Q(Z)\log \frac{P(X,Z|\theta)}{Q(Z)} \quad (凹函数,琴生不等式) \end{align} logP(Xθ)=logZQ(Z)Q(Z)P(X,Zθ)=logZQ(Z)Q(Z)P(X,Zθ)ZQ(Z)logQ(Z)P(X,Zθ)(凹函数,琴生不等式)
因此, log ⁡ P ( X ∣ θ ) \log P(X|\theta) logP(Xθ)证据下界(Evidence Lower Bound, ELBO)为
BELO = ∑ Z Q ( Z ) log ⁡ P ( X , Z ∣ θ ) Q ( Z ) = ∑ Z Q ( Z ) log ⁡ P ( X , Z ∣ θ ) − ∑ Z Q ( Z ) log ⁡ Q ( Z ) = E Q ( Z ) [ log ⁡ P ( X , Z ∣ θ ) ] − E Q ( Z ) [ log ⁡ Q ( Z ) ] \begin{align} \text{BELO} &=\sum_Z Q(Z)\log \frac{P(X,Z|\theta)}{Q(Z)} \\ &= \sum_Z Q(Z)\log P(X,Z|\theta)-\sum_Z Q(Z)\log Q(Z) \\ &= \mathbb{E}_{Q(Z)}[\log P(X,Z|\theta)]-\mathbb{E}_{Q(Z)}[\log Q(Z)] \end{align} BELO=ZQ(Z)logQ(Z)P(X,Zθ)=ZQ(Z)logP(X,Zθ)ZQ(Z)logQ(Z)=EQ(Z)[logP(X,Zθ)]EQ(Z)[logQ(Z)]
即证据下界:
BELO ( Q , θ ) = ∑ Z Q ( Z ) log ⁡ P ( X , Z ∣ θ ) − ∑ Z Q ( Z ) log ⁡ Q ( Z ) \boxed{\text{BELO}(Q,\theta)=\sum_Z Q(Z)\log P(X,Z|\theta)-\sum_Z Q(Z)\log Q(Z)} BELO(Q,θ)=ZQ(Z)logP(X,Zθ)ZQ(Z)logQ(Z)
又因为:
log ⁡ P ( X ∣ θ ) − BELO = log ⁡ P ( X ∣ θ ) − ∑ Z Q ( Z ) log ⁡ P ( X , Z ∣ θ ) Q ( Z ) = ∑ Z Q ( Z ) log ⁡ P ( X ∣ θ ) − ∑ Z Q ( Z ) log ⁡ P ( X , Z ∣ θ ) Q ( Z ) ( ∑ Z Q ( Z ) = 1 与 log ⁡ P ( X ∣ θ ) 无关 ) = ∑ Z Q ( Z ) ( log ⁡ P ( X ∣ θ ) − log ⁡ P ( X , Z ∣ θ ) Q ( Z ) ) = ∑ Z Q ( Z ) log ⁡ P ( X ∣ θ ) Q ( Z ) P ( X , Z ∣ θ ) = ∑ Z Q ( Z ) log ⁡ P ( X ∣ θ ) Q ( Z ) P ( X ∣ θ ) P ( Z ∣ θ , X ) 联合概率: P ( B , C ∣ A ) = P ( B ∣ A ) P ( C ∣ A , B ) = ∑ Z Q ( Z ) log ⁡ Q ( Z ) P ( Z ∣ θ , X ) = D K L ( Q ( Z ) ∣ ∣ P ( Z ∣ θ , X ) ) \begin{align} \log P(X|\theta)-\text{BELO} &= \log P(X|\theta) - \sum_Z Q(Z)\log \frac{P(X,Z|\theta)}{Q(Z)} \\ &=\sum_Z Q(Z)\log P(X|\theta) - \sum_Z Q(Z)\log \frac{P(X,Z|\theta)}{Q(Z)} \quad (\sum_Z Q(Z)=1与\log P(X|\theta)无关) \\ &= \sum_Z Q(Z)\left(\log P(X|\theta)-\log \frac{P(X,Z|\theta)}{Q(Z)}\right) \\ &= \sum_Z Q(Z)\log \frac{P(X|\theta)Q(Z)}{P(X,Z|\theta)} \\ &= \sum_Z Q(Z)\log \frac{P(X|\theta)Q(Z)}{P(X|\theta)P(Z|\theta,X)} \quad 联合概率:P(B,C|A)=P(B|A)P(C|A,B)\\ &= \sum_Z Q(Z)\log \frac{Q(Z)}{P(Z|\theta,X)} \\ &= D_{KL}(Q(Z)||P(Z|\theta,X)) \end{align} logP(Xθ)BELO=logP(Xθ)ZQ(Z)logQ(Z)P(X,Zθ)=ZQ(Z)logP(Xθ)ZQ(Z)logQ(Z)P(X,Zθ)(ZQ(Z)=1logP(Xθ)无关)=ZQ(Z)(logP(Xθ)logQ(Z)P(X,Zθ))=ZQ(Z)logP(X,Zθ)P(Xθ)Q(Z)=ZQ(Z)logP(Xθ)P(Zθ,X)P(Xθ)Q(Z)联合概率:P(B,CA)=P(BA)P(CA,B)=ZQ(Z)logP(Zθ,X)Q(Z)=DKL(Q(Z)∣∣P(Zθ,X))
所以,
log ⁡ P ( X ∣ θ ) = ELBO ( Q , θ ) + D K L ( Q ( Z ) ∣ ∣ P ( Z ∣ θ , X ) ) \boxed{\log P(X|\theta)=\text{ELBO}(Q,\theta)+D_{KL}(Q(Z)||P(Z|\theta,X))} logP(Xθ)=ELBO(Q,θ)+DKL(Q(Z)∣∣P(Zθ,X))
为了让证据下界EBLO尽可能逼近最大似然 log ⁡ P ( X ∣ θ ) \log P(X|\theta) logP(Xθ),以提升模型的准确率,即:

  • 最小化KL散度: D K L ( Q ( Z ) ∣ ∣ P ( Z ∣ θ , X ) ) D_{KL}(Q(Z)||P(Z|\theta,X)) DKL(Q(Z)∣∣P(Zθ,X))
  • 最大化EBLO: ∑ Z Q ( Z ) log ⁡ P ( X , Z ∣ θ ) \sum_Z Q(Z)\log P(X,Z|\theta) ZQ(Z)logP(X,Zθ)

最后

一直想系统的写一篇关于琴生不等式的介绍,拖了一年的时间,正好在五一假期前一天,手稿投出去了,花费两天时间形成此文。

以上每一节内容本该单独成为一篇,但考虑到内容的整体性,故放在一起。如前文所述,琴生不等式在VAE、EM、扩散模型等算法的推导中广泛应用,希望后面有深入的应用体会之后,可以将此文扩展,写一个系列。

欢迎批评指正!

参考

[1] Jensen’s inequality - Wikipedia

[2] https://www.quora.com/What-is-an-intuitive-explanation-of-Jensens-Inequality

[3] https://en.wikipedia.org/wiki/Convex_function

[4] https://maitbayev.github.io/posts/jensens-inequality/

[5] 6.2.5 Jensen’s Inequality

相关文章:

  • 【quantity】7 角度单位模块(angle.rs)
  • 论系统安全架构设计及其应用
  • Vibe Coding 新时代:AI 辅助编程完全指南
  • 从融智学视域快速回顾世界历史和主要语言文字最初历史证据(列表对照分析比较)
  • JavaScript中的AES加密与解密:原理、代码与实战
  • 一篇文章看懂web服务
  • C与指针4——指针
  • 04 基于 STM32 的时钟展示程序
  • js单调栈解题模板
  • [UVM]UVM中reg_map的作用及多个rem_map的使用案例
  • QNAP Duplicati 备份 123云盘
  • Learning vtkjs之Cutter
  • Spring AI 实战:第一章、Spring AI入门之DeepSeek调用
  • 深入解析高并发场景下分布式缓存优化实战:从原理到性能提升
  • MIT6.S081-lab8
  • 创建第一个简单cesium程序
  • Vscode+git笔记
  • 什么是 Redis?
  • PCIe | TLP | 报头 / 包格式 / 地址转换 / 配置空间 / 寄存器 / 配置类型
  • 叠层阻抗线框
  • 浙江一文旅局长五一亲自带团,去年专门考取了导游证
  • 巴菲特再谈投资日本:希望持有日本五大商社至少50年
  • 浙江“胖都来”开业多位明星祝贺,“胖东来”称已取证投诉,律师:碰瓷侵权
  • 长三角铁路今日预计发送390万人次,昨日客发量同比增长10.5%
  • 魔都眼|咖啡节上小孩儿忍不住尝了咖啡香,母亲乐了
  • 甘肃公布校园食品安全专项整治案例,有食堂涉腐败变质食物