机器学习——概率图模型

  • 有向图-贝叶斯网络
  • 无向图—马尔科夫网络(马尔科夫随机场)
  • 两种图的转换-道德图
  • 更精细的分解-因子图
  • 推断
    • 推断-变量消除(VE)
    • 推断-信念传播(BP)
    • 推断-Max-Product算法

概率图模型使用的图的方式表示概率分布。为了在图中添加各种概率,首先总结一下随机变量分布的一些规则:
S u m R u l e : p ( x 1 ) = ∫ p ( x 1 , x 2 ) d x 2 P r o d u c t R u l e : p ( x 1 , x 2 ) = p ( x 1 ∣ x 2 ) p ( x 2 ) C h a i n R u l e : p ( x 1 , x 2 , ⋯ , x p ) = ∏ i = 1 p p ( x i ∣ x i + 1 , x i + 2 ⋯ x p ) B a y e s i a n R u l e : p ( x 1 ∣ x 2 ) = p ( x 2 ∣ x 1 ) p ( x 1 ) p ( x 2 ) Sum\ Rule:p(x_1)=\int p(x_1,x_2)dx_2\\ Product\ Rule:p(x_1,x_2)=p(x_1|x_2)p(x_2)\\ Chain\ Rule:p(x_1,x_2,\cdots,x_p)=\prod\limits_{i=1}^pp(x_i|x_{i+1,x_{i+2} \cdots}x_p)\\ Bayesian\ Rule:p(x_1|x_2)=\frac{p(x_2|x_1)p(x_1)}{p(x_2)} Sum Rule:p(x1​)=∫p(x1​,x2​)dx2​Product Rule:p(x1​,x2​)=p(x1​∣x2​)p(x2​)Chain Rule:p(x1​,x2​,⋯,xp​)=i=1∏p​p(xi​∣xi+1,xi+2​⋯​xp​)Bayesian Rule:p(x1​∣x2​)=p(x2​)p(x2​∣x1​)p(x1​)​
可以看到,在链式法则中,如果数据维度特别高,那么的采样和计算非常困难,我们需要在一定程度上做出简化,在朴素贝叶斯中,作出了条件独立性假设。在Markov假设中,给定数据的维度是以时间顺序出现的,给定当前的时间维度,那么下一个维度与之前的维度独立。在HMM中,采用了齐次Markov假设。在Markov假设之上,更一般的,加入条件独立性假设,对维度划分集合A,B,C,使得 X A ⊥ X B ∣ X C X_A\perp X_B|X_C XA​⊥XB​∣XC​
概率图模型采用图的特点表示上述的条件独立性假设,节点表示随机变量,边表示条件概率。、概率图模型可以分为三大理论部分:

  1. 表示:
  • 有向图(离散):贝叶斯网络
  • 高斯图(连续):高斯贝叶斯和高斯马尔科夫网络
  • 无向图(离散):马尔科夫网络
  1. 推断
  • 精确推断
  • 近似推断
    • 确定性近似(变分推断)
    • 随机近似(MCMC)
  1. 学习
  • 参数学习
    • 完备数据
    • 隐变量:E-M算法
  • 结构学习

有向图-贝叶斯网络

已知联合分布中,各个随机变量之间的依赖关系,那么可以通过拓扑排序(根据依赖关系)可以获得一个有向图。而如果已知一个图,也可以直接得到联合概率分布的因子分解:
p ( x 1 , x 2 , ⋯ , x p ) = ∏ i = 1 p p ( x i ∣ x p a r e n t ( i ) ) p(x_1,x_2,\cdots,x_p)=\prod\limits_{i=1}^pp(x_i|x_{parent(i)}) p(x1​,x2​,⋯,xp​)=i=1∏p​p(xi​∣xparent(i)​)
那么实际的图中条件独立性是如何体现的呢?在局部任何三个节点,可以有三种结构:


  1. p ( A , B , C ) = p ( A ) p ( B ∣ A ) p ( C ∣ B ) = p ( A ) p ( B ∣ A ) p ( C ∣ B , A ) ⟹ p ( C ∣ B ) = p ( C ∣ B , A ) ⇔ p ( C ∣ B ) p ( A ∣ B ) = p ( C ∣ A , B ) p ( A ∣ B ) = p ( C , A ∣ B ) ⟹ C ⊥ A ∣ B p(A,B,C)=p(A)p(B|A)p(C|B)=p(A)p(B|A)p(C|B,A)\\ \Longrightarrow p(C|B)=p(C|B,A)\\ \Leftrightarrow p(C|B)p(A|B)=p(C|A,B)p(A|B)=p(C,A|B)\\ \Longrightarrow C\perp A|B p(A,B,C)=p(A)p(B∣A)p(C∣B)=p(A)p(B∣A)p(C∣B,A)⟹p(C∣B)=p(C∣B,A)⇔p(C∣B)p(A∣B)=p(C∣A,B)p(A∣B)=p(C,A∣B)⟹C⊥A∣B


p ( A , B , C ) = p ( A ∣ B ) p ( B ) p ( C ∣ B ) = p ( B ) p ( A ∣ B ) p ( C ∣ A , B ) ⟹ p ( C ∣ B ) = p ( C ∣ B , A ) ⇔ p ( C ∣ B ) p ( A ∣ B ) = p ( C ∣ A , B ) p ( A ∣ B ) = p ( C , A ∣ B ) ⟹ C ⊥ A ∣ B p(A,B,C)=p(A|B)p(B)p(C|B)=p(B)p(A|B)p(C|A,B)\\ \Longrightarrow p(C|B)=p(C|B,A)\\ \Leftrightarrow p(C|B)p(A|B)=p(C|A,B)p(A|B)=p(C,A|B)\\ \Longrightarrow C\perp A|B p(A,B,C)=p(A∣B)p(B)p(C∣B)=p(B)p(A∣B)p(C∣A,B)⟹p(C∣B)=p(C∣B,A)⇔p(C∣B)p(A∣B)=p(C∣A,B)p(A∣B)=p(C,A∣B)⟹C⊥A∣B
3.
p ( A , B , C ) = p ( A ) p ( C ) p ( B ∣ C , A ) = p ( A ) p ( C ∣ A ) p ( B ∣ C , A ) ⟹ p ( C ) = p ( C ∣ A ) ⇔ C ⊥ A p(A,B,C)=p(A)p(C)p(B|C,A)=p(A)p(C|A)p(B|C,A)\\ \Longrightarrow p(C)=p(C|A)\\ \Leftrightarrow C\perp A\\ p(A,B,C)=p(A)p(C)p(B∣C,A)=p(A)p(C∣A)p(B∣C,A)⟹p(C)=p(C∣A)⇔C⊥A
对于这种结构,A,C不与B条件独立。
从整体的图来看,可以引入D划分的概念。对于类似上面图1和图2的关系,引入集合A,B,那么满足 A ⊥ B ∣ C A\perp B|C A⊥B∣C的C集合中的点与A,B中的点的关系都满足图1,2,满足图3关系的点都不在C中。D划分应用在贝叶斯定理中:
p ( x i ∣ x − i ) = p ( x ) ∫ p ( x ) d x i = ∏ j = 1 p p ( x j ∣ x p a r e n t s ( j ) ) ∫ ∏ j = 1 p p ( x j ∣ x p a r e n t s ( j ) ) d x i p(x_i|x_{-i})=\frac{p(x)}{\int p(x)dx_{i}}=\frac{\prod\limits_{j=1}^pp(x_j|x_{parents(j)})}{\int\prod\limits_{j=1}^pp(x_j|x_{parents(j)})dx_i} p(xi​∣x−i​)=∫p(x)dxi​p(x)​=∫j=1∏p​p(xj​∣xparents(j)​)dxi​j=1∏p​p(xj​∣xparents(j)​)​
可以发现,上下部分可以分为两部分,一部分是和 x i x_i xi​相关的,另一部分是和 x i x_i xi​无关的,而这个无关的部分可以相互约掉。于是计算只涉及和 x i x_i xi​相关的部分。
与 x i x_i xi​相关的部分可以写成:
p ( x i ∣ x p a r e n t s ( i ) ) p ( x c h i l d ( i ) ∣ x i ) p(x_i|x_{parents(i)})p(x_{child(i)}|x_i) p(xi​∣xparents(i)​)p(xchild(i)​∣xi​)
这些相关的部分又叫做Markov毯。
实际应用的模型中,对这些条件独立性作出了假设,从单一到混合,从有限到无限(时间,空间)可以分为:

  • 朴素贝叶斯,单一的条件独立性假设 p ( x ∣ y ) = ∏ i = 1 p p ( x i ∣ y ) p(x|y)=\prod\limits_{i=1}^pp(x_i|y) p(x∣y)=i=1∏p​p(xi​∣y),在D划分后,所有条件依赖的集合就是单个元素。
  • 高斯混合模型:混合的条件独立。引入多类别的隐变量 z 1 , z 2 , . . . , z k z_1,z_2,...,z_k z1​,z2​,...,zk​, p ( x ∣ z ) = N ( μ , Σ ) p(x|z)=\mathcal{N}(\mu,\Sigma) p(x∣z)=N(μ,Σ),条件依赖集合为多个元素。
  • 与时间相关的条件依赖
    • Markov链
    • 高斯过程
  • 连续:高斯贝叶斯网络
  • 组合上面的分类

无向图—马尔科夫网络(马尔科夫随机场)

无向图没有了类似有向图的局部不同结构,在马尔科夫网络中,也存在D划分的概念。直接将条件独立的集合 x A ⊥ x B ∣ x C x_A\perp x_B|x_C xA​⊥xB​∣xC​划分为三个集合。这个也叫全局Markov。对于局部的节点, x ⊥ ( X − N e i g h b o u r ( x ) ) ∣ N e i g h b o u r ( x ) x\perp (X-Neighbour(\mathcal{x}))|Neighbour(x) x⊥(X−Neighbour(x))∣Neighbour(x)。这也叫做局部Markov。对于成对的节点: x i ⊥ x j ∣ x − i − j x_i\perp x_j|x_{-i-j} xi​⊥xj​∣x−i−j​,其中 i , j i,j i,j不能相邻。这也叫成对Markov。事实上上面三个点局部全局成对是相互等价的。
有了这个条件独立性的划分,还需要因子分解来实际计算。引入团的概念:
团,最大团:图中节点的集合,集合中的节点之间相互都是连接的叫做团,如果不能再添加节点,那么叫做最大团。
利用这个定义进行的x所有维度的联合概率分布的因子分解为,假设有K个团,Z就是对所有可能取值求和:
p ( x ) = 1 Z ∏ i = 1 K ϕ ( x c i ) Z = ∑ x ∈ X ∏ i = 1 K ϕ ( x c i ) p(x)=\frac{1}{Z}\prod\limits_{i=1}^{K}\phi(x_{ci})\\ Z=\sum\limits_{x\in\mathcal{X}}\prod\limits_{i=1}^{K}\phi(x_{ci}) p(x)=Z1​i=1∏K​ϕ(xci​)Z=x∈X∑​i=1∏K​ϕ(xci​)
其中 ϕ ( x c i ) \phi(x_{ci}) ϕ(xci​)叫做势函数,它必须是一个正值,可以记为:
ϕ ( x c i ) = exp ⁡ ( − E ( x c i ) ) \phi(x_{ci})=\exp(-E(x_{ci})) ϕ(xci​)=exp(−E(xci​))这个分布叫做Gibbs分布(玻尔兹曼分布)。于是也可以记为: p ( x ) = 1 Z exp ⁡ ( − ∑ i = 1 K E ( x c i ) ) p(x)=\frac{1}{Z}\exp(-\sum\limits_{i=1}^KE(x_{ci})) p(x)=Z1​exp(−i=1∑K​E(xci​))。这个分解和条件独立性等价(Hammesley-Clifford定理),这个分布的形式也和指数族分布形式上相同,于是满足最大熵原理。

两种图的转换-道德图

我们常常想将有向图转为无向图,从而应用更一般的表达式

  1. 链式:

    直接去掉箭头, p ( a , b , c ) = p ( a ) p ( b ∣ a ) p ( c ∣ b ) = ϕ ( a , b ) ϕ ( b , c ) p(a,b,c)=p(a)p(b|a)p(c|b)=\phi(a,b)\phi(b,c) p(a,b,c)=p(a)p(b∣a)p(c∣b)=ϕ(a,b)ϕ(b,c)
  2. V形:

    由于 p ( a , b , c ) = p ( b ) p ( a ∣ b ) p ( c ∣ b ) = ϕ ( a , b ) ϕ ( b , c ) p(a,b,c)=p(b)p(a|b)p(c|b)=\phi(a,b)\phi(b,c) p(a,b,c)=p(b)p(a∣b)p(c∣b)=ϕ(a,b)ϕ(b,c),直接去掉箭头:
  3. 倒V形:

    由于 p ( a , b , c ) = p ( a ) p ( c ) p ( b ∣ a , c ) = ϕ ( a , b , c ) p(a,b,c)=p(a)p(c)p(b|a,c)=\phi(a,b,c) p(a,b,c)=p(a)p(c)p(b∣a,c)=ϕ(a,b,c),于是在a,c之间添加线:

    观察着三种情况可以概括为:
  • 将每个节点的父节点两两相连
  • 将有向边替换为无向边

更精细的分解-因子图

对于一个有向图,可以通过引入环的方式,可以将其转换为无向图(Tree-like graph),这个图就叫做道德图。但是我们上面的BP算法只对无环图有效,通过因子图可以变为无环图。
考虑一个无向图:

可以将其转为:

其中 f = f ( a , b , c ) f=f(a,b,c) f=f(a,b,c)。因子图不是唯一的,这是由于因式分解本身就对应一个特殊的因子图,将因式分解: p ( x ) = ∏ s f s ( x s ) p(x)=\prod\limits_{s}f_s(x_s) p(x)=s∏​fs​(xs​)可以进一步分解得到因子图。

推断

推断的主要目的是求各种概率分布,包括边缘概率,条件概率,以及使用MAP来求得参数,通常推断可以分为:

  • 精确推断
    Variable Elimination(VE)
    Belief Propagation (BP, SUM-Product Algo),从VE发展而来
    Junction Tree, 上面两种在树结构上应用,Junction Tree在图结构上应用
  • 近似推断
    Loop Belief Propagation (针对有环图)
    Mente Carlo Interference: 例如Importance Sampling, MCMC
    Variational inference

推断-变量消除(VE)

变量消除的方法是在求解概率分布的时候,将相关的条件概率先行求和或积分,从而一步步地消除变量,例如在马尔科夫链中:

p ( d ) = ∑ a , b , c p ( a , b , c , d ) = ∑ c p ( d ∣ c ) ∑ b p ( c ∣ b ) ∑ a p ( b ∣ a ) p ( a ) p(d)=\sum\limits_{a,b,c}p(a,b,c,d)=\sum\limits_cp(d|c)\sum\limits_bp(c|b)\sum\limits_ap(b|a)p(a) p(d)=a,b,c∑​p(a,b,c,d)=c∑​p(d∣c)b∑​p(c∣b)a∑​p(b∣a)p(a)
变量消除的缺点很明显:

  • 计算步骤无法存储
  • 消除的最优次序是一个NP-hard问题

推断-信念传播(BP)

为了克服VE的第一个缺陷-计算步骤无法存储。我们进一步地对上面的马尔科夫链进行观察:

要求 p ( e ) p(e) p(e),当然使用VE,从a一直消除到d,记 ∑ a p ( a ) p ( b ∣ a ) = m a → b ( b ) \sum\limits_ap(a)p(b|a)=m_{a\to b(b)} a∑​p(a)p(b∣a)=ma→b(b)​,表示这是消除a后的关于b的概率,类似地,记 ∑ b p ( c ∣ b ) m a → b ( b ) = m b → c ( c ) \sum\limits_bp(c|b)m_{a\to b}(b)=m_{b\to c}(c) b∑​p(c∣b)ma→b​(b)=mb→c​(c).于是 p ( e ) = ∑ d p ( e ∣ d ) m b → c ( c ) p(e)=\sum\limits_dp(e|d)m_{b\to c}(c) p(e)=d∑​p(e∣d)mb→c​(c)。进一步观察,对 p ( c ) p(c) p(c):
p ( c ) = [ ∑ b p ( c ∣ b ) ∑ a p ( b ∣ a ) p ( a ) ] ⋅ [ ∑ d p ( d ∣ c ) ∑ e p ( e ) p ( e ∣ d ) ] p(c)=[\sum\limits_bp(c|b)\sum\limits_ap(b|a)p(a)]\cdot[\sum\limits_dp(d|c)\sum\limits_ep(e)p(e|d)] p(c)=[b∑​p(c∣b)a∑​p(b∣a)p(a)]⋅[d∑​p(d∣c)e∑​p(e)p(e∣d)]
我们发现了和上面计算 p ( e ) p(e) p(e)类似的结构,这个式子可以分成两个部分,一部分是从a传播过来的概率,第二部分是从e传播过来的概率。
一般地,对于图(只对树形状的图):

这四个团(对于无向图是团,对于有向图就是概率为除了根的节点为1),有四个节点,三个边:
p ( a , b , c , d ) = 1 Z ϕ a ( a ) ϕ b ( b ) ϕ c ( c ) ϕ d ( d ) ⋅ ϕ a b ( a , b ) ϕ b c ( c , b ) ϕ b d ( d , b ) p(a,b,c,d)=\frac{1}{Z}\phi_a(a)\phi_b(b)\phi_c(c)\phi_d(d)\cdot\phi_{ab}(a,b)\phi_{bc}(c,b)\phi_{bd}(d,b) p(a,b,c,d)=Z1​ϕa​(a)ϕb​(b)ϕc​(c)ϕd​(d)⋅ϕab​(a,b)ϕbc​(c,b)ϕbd​(d,b)
套用上面关于有向图的观察,如果求解边缘概率 p ( a ) p(a) p(a),定义
m c → b ( b ) = ∑ c ϕ c ( c ) ϕ b c ( b c ) m_{c\to b}(b)=\sum\limits_c\phi_c(c)\phi_{bc}(bc) mc→b​(b)=c∑​ϕc​(c)ϕbc​(bc), m d → b ( b ) = ∑ d ϕ d ( d ) ϕ b d ( b d ) m_{d\to b}(b)=\sum\limits_d\phi_d(d)\phi_{bd}(bd) md→b​(b)=d∑​ϕd​(d)ϕbd​(bd), m b → a ( a ) = ∑ b ϕ b a ( b a ) ϕ b ( b ) m c → b ( b ) d → b m ( b ) m_{b\to a}(a)=\sum\limits_b\phi_{ba}(ba)\phi_b(b)m_{c\to b}(b)_{d\to b}m(b) mb→a​(a)=b∑​ϕba​(ba)ϕb​(b)mc→b​(b)d→b​m(b),这样概率就一步步地传播到了 a a a:
p ( a ) = ϕ a ( a ) m b → a ( a ) p(a)=\phi_a(a)m_{b\to a}(a) p(a)=ϕa​(a)mb→a​(a)
写成一般的形式,对于相邻节点i,j:
m j → i ( i ) = ∑ j ϕ j ( j ) ϕ i j ( i j ) ∏ k ∈ N e i g h b o u r ( j ) − i m k → j ( j ) m_{j\to i}(i)=\sum\limits_j\phi_j(j)\phi_{ij}(ij)\prod\limits_{k\in Neighbour(j)-i}m_{k\to j}(j) mj→i​(i)=j∑​ϕj​(j)ϕij​(ij)k∈Neighbour(j)−i∏​mk→j​(j)
这个表达式,就可以保存计算过程了,只要对每条边的传播分别计算,对于一个无向树形图可以递归并行实现:

  • 任取一个节点a作为根节点
  • 对这个根节点的邻居中的每一个节点,收集信息(计算入信息)
  • 对根节点的邻居,分发信息(计算出信息)

推断-Max-Product算法

在推断任务中,MAP也是常常需要的,MAP的目的是寻找最佳参数:
( a ^ , b ^ , c ^ , d ^ ) = a r g m a x a , b , c , d p ( a , b , c , d ∣ E ) (\hat{a},\hat{b},\hat{c},\hat{d})=\mathop{argmax}_{a,b,c,d}p(a,b,c,d|E) (a^,b^,c^,d^)=argmaxa,b,c,d​p(a,b,c,d∣E)
类似BP,我们采用信息传递的方式来求得最优参数,不同的是,我们在所有信息传递中,传递的是最大化参数的概率,而不是将所有可能求和:
m j → i = max ⁡ j ϕ j ϕ i j ∏ k ∈ N e i g h b o u r ( j ) − i m k → j m_{j\to i}=\max\limits_{j}\phi_j\phi_{ij}\prod\limits_{k\in Neighbour(j)-i}m_{k\to j} mj→i​=jmax​ϕj​ϕij​k∈Neighbour(j)−i∏​mk→j​
于是对于上面的图:
max ⁡ a p ( a , b , c , d ) = max ⁡ a ϕ a ϕ a b m c → b m d → b \max_a p(a,b,c,d)=\max_a\phi_a\phi_{ab}m_{c\to b}m_{d\to b} amax​p(a,b,c,d)=amax​ϕa​ϕab​mc→b​md→b​
这个算法是Sum-Product算法的改进,也是在HMM中应用给的Viterbi算法的推广。

机器学习——概率图模型相关推荐

  1. [机器学习]概率图模型

    本文档记录了<机器学习>第 14 章概率图模型相关内容 概率图模型 模型 有向图/无向图 判别式/生成式 逻辑回归 无向图 判别式 朴素贝叶斯 有向图 生成式 HMM 有向图 生成式 马尔 ...

  2. 深入理解机器学习——概率图模型(Probabilistic Graphical Model):条件随机场(Conditional Random Field,CRF)

    分类目录:<深入理解机器学习>总目录 条件随机场(Conditional Random Field,CRF)是一种判别式无向图模型,在<概率图模型(Probabilistic Gra ...

  3. 机器学习 —— 概率图模型(学习:CRF与MRF)

    在概率图模型中,有一类很重要的模型称为条件随机场.这种模型广泛的应用于标签-样本(特征)对应问题.与MRF不同,CRF计算的是"条件概率".故其表达式与MRF在分母上是不一样的. ...

  4. 机器学习 —— 概率图模型(推理:连续时间模型)

    有一种很重要的概率图模型用于SLAM,视觉追踪,识别,传感融合等领域,称为为Template Model. 其特征是每个状态具有多个随机变量,下个状态随机变量的取值受到上个状态的影响.并且随机变量之间 ...

  5. 机器学习 —— 概率图模型(Homework: CRF Learning)

    概率图模型的作业越往后变得越来越有趣了.当然,难度也是指数级别的上涨啊,以至于我用了两个周末才完成秋名山神秘车牌的寻找,啊不,CRF模型的训练. 条件随机场是一种强大的PGM,其可以对各种特征进行建模 ...

  6. 机器学习 —— 概率图模型(推理:采样算法)

    基于采样的推理算法利用的思想是  概率 = 大样本下频率.故在获得图模型以及CPD的基础上,通过设计采样算法模拟事件发生过程,即可获得一系列事件(联合概率质量函数)的频率,从而达到inference的 ...

  7. 深入理解机器学习——概率图模型(Probabilistic Graphical Model):马尔可夫随机场(Markov Random Field,MRF)

    分类目录:<深入理解机器学习>总目录 马尔可夫随机场(Markov Random Field,MRF)是典型的马尔可夫网,这是一种著名的无向图模型,图中每个结点表示一个或一组变量,结点之间 ...

  8. 机器学习 —— 概率图模型(学习:贝叶斯估计)

    之前谈到学习就是利用数据集对参数进行最大似然估计.本质上是获取一组有效的参数.然而如果考虑一个这样的问题:一枚硬币扔10次有7次朝上:扔1000次有700次朝上.显然对于二者而言,对参数的估计都是0. ...

  9. 机器学习 —— 概率图模型(学习:对数线性模型)

    对数线性模型是无向图中经常使用的一种模型.其利用特征函数以及参数的方式对势函数进行定义,可获得较好的效果.在之前有向图的学习中,我们发现可以利用d-seperet,充分统计,狄利克雷函数等方式来很优雅 ...

最新文章

  1. 没项目经验,如何砍下字节算法岗40万offer
  2. python基础(7)-函数命名空间作用域闭包
  3. yii 全选 php,Yii2.0实现的批量更新及批量插入功能示例
  4. php,Allowed memory size of 8388608 bytes exhausted (tried to allocate 1298358 bytes)
  5. Remon Spekreijse CSerialPort串口类的修正版2014-01-10
  6. Oracle用rowid删除同一张表的重复记录
  7. 软件工程开发之道:了解能力和复杂度是前提
  8. 改SB训练数据的名字
  9. 百万 Go TCP 连接的思考: epoll方式减少资源占用
  10. 那些让人惊叹的命令执行效果
  11. Office Tool Plus v8.2.4.0 安装Office组件小工具
  12. es6 嵌套数组循环_[js]从 ES3 到 ES6 教你如何数组去重
  13. 使用计算机能播放音乐也能观看视频,我电脑可以放歌有声音。怎么播放视频没声音啊?给我解决方案...
  14. 那些不回你微信的人都在看什么?
  15. 软件行业英雄们的离世
  16. Ubuntu发烧友三部曲 进阶篇
  17. 轻松理解LTE网规网优FAQ基本概念
  18. 【SSLGZ 2134】猫猫的小鱼
  19. 算法入门经典模板总结
  20. 多智能体仿真环境NetLogo介绍之导入外部数据

热门文章

  1. 【Electron-vue】构建桌面应用(25)- Ubuntu安装deb文件任务栏不显示应用图标
  2. Android下的串口开发
  3. JavaWeb---HTTP与Request
  4. 【后端教程】京东API网关实践之路!
  5. 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include pch.h”?
  6. VVC/VTM:帧间预测——Combined inter and intra prediction (CIIP)
  7. CX32l003 点亮0.96寸OLED屏幕
  8. gsoc 任务_黑客#GSOC:如何获得现实生活经验并支持开源
  9. Tomcat部署Web项目
  10. hadoop各版本下载地址