热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

20160103最大熵模型

最大熵模型熵的定义联合熵、相对熵、条件熵、互信息最大熵模型Maxent在NLP中应用Maxent与MLE关系1.一个问题谈一个问题:扔骰子N次结果平均是5.5

最大熵模型
熵的定义
联合熵、相对熵、条件熵、互信息
最大熵模型
Maxent在NLP中应用
Maxent与MLE关系

1. 一个问题

谈一个问题:扔骰子N次结果平均是5.5,问6个面概率。
可以凸优化,可以极大似然估计。
minimize: \(S\left( p \right)=- \sum_i {p_i \ln(p_i)} \)
subject to: \(\sum_i{p_i}=1\)
\(\sum_{i}{i*p_i}=\mu\)
Lagrange函数:\(\zeta = -\sum_{i}{p_i\ln p_i}+\lambda_0 \left( 1-\sum_i{p_i} \right)+\lambda_1 \left( \mu - \sum_i{p_i*i} \right)\)
令\(\frac{\partial S}{\partial p_i}=0\),可得:
\(p_i=e^{-1-\lambda_0-i \lambda_1}\)
\(\lambda_0=5.932,\lambda_1=-1.087\)


熵定义:\(H\left( x \right) = -\sum_{x \in X}{p \left( x \right) \ln p \left( x \right) }\)
底数e,nat,底数2,单位是bit。


熵的理解:
1.不确定性的度量,成正比。
2.概率分布函数到值的映射。
3.个人理解:自然界总是向熵增的方向运动(大爆炸理论)和这里的最大熵模型挺类似的。


联合熵和条件熵:
两个随机变量XY联合分布可以形成联合熵Joint Entropy,用H(x,y)表示。
\(H \left( X,Y \right) -H \left( Y \right)\)
\(=-\sum_{x,y}{p \left( x,y \right) \log p \left( x,y \right) } + \sum_{y}{ p \left( y \right) \log p \left( y \right) }\)
\(=-\sum_{x,y}{p \left( x,y \right) \log p \left( x,y \right) } + \sum_{y} \sum_{x}{ p \left( x,y \right) \log p \left( y \right) }\)
\(=-\sum_{x,y}{p \left( x,y \right) \log p \left( x \mid y \right)}=H\left ( X \mid Y \right )\)


相对熵(互熵,交叉熵,鉴别信息,KL熵)
设p(x),q(x)是X中取值的两个概率分布,则p对q的相对熵是:
\(D\left( p \parallel q \right) = \sum_{x}{p\left( x \right) \log \frac{p\left( x \right)}{q\left( x \right)}}=E_{p\left ( x \right )} \log \frac{p\left( x \right)}{q\left( x \right)}\)
很明显\(D\left ( p \parallel q \right )\)与\(D\left ( q \parallel p \right )\)不一定相等。


互信息:
两个随机变量X,Y互信息,定义为X,Y联合分布和对立分布乘积的相对熵。
\(I\left ( X,Y \right )=D\left ( p\left ( X,Y \right ) \parallel p\left ( X \right ) p\left ( Y \right )\right )\)
\(I\left ( X,Y\right )= \sum_{x,y}{p\left ( x,y \right ) \log \frac{p\left ( x,y \right )}{p\left ( x\right )}p\left ( y \right )}\)


\(H\left ( X \right )-I\left ( X,Y \right )=H\left ( X \mid Y \right )=H\left ( X,Y \right )-H\left ( Y \right )\)
\(H\left ( X \mid Y \right )\leqslant H\left ( X \right )\)


最大熵模型原则:
1.承认已知的事物。
2.对未知事物不做任何假设,没有偏见。


MaxEnt 一般式:
\(\underset{p \in P}{\max} H\left (Y\mid X \right) = -\sum_{x,y} p\left ( x,y \right ) \log p\left (y \mid x \right )\)
\(P=\left \{ p \mid p是X上满足条件的概率分布 \right \}\)


最大熵模型总结
目的:\(p^{*} \left ( y \mid x \right )= arg \max H\left ( y \mid x \right )\)
定义特征函数:\(f_i \left( x,y \right) \in \left\{ 0,1 \right\},i=1,2,L,m\)
约束条件:\(\sum_{y \in Y} p\left( y \mid x \right)=1\)1①
\(E\left ( f_i \right ) = \widetilde{E}\left ( f_i \right ) i =1,2,\cdots ,m\)②
\(\tilde{E}\left ( f_i \right )= \sum_{\left ( x,y \right ) \in z} \hat{p}\left ( x,y \right ) f_i\left ( x,y \right )= \frac{1}{N} \sum_{\left ( x,y \right ) \in T} f_i\left ( x,y \right )\),其中\(N=\left | T \right |\)
\(E\left ( f_i \right )=\sum_{\left ( x,y \right ) \in z }p\left ( x,y \right )f_i \left ( x,y \right )= \sum_{\left ( x,y \right ) \in z} p \left ( x\right )\)


求解Maxent模型:
Lagrange函数:
\(\Lambda \left ( p,\vec{\lambda} \right )=H\left ( y \mid x \right )+\sum_{i=1}^{m}\lambda_i \left ( E\left ( f_i \right )-\tilde{E}\left ( f_i \right ) \right )+\lambda_{m+1}\left ( \sum_{y \in Y}p\left ( y \mid x \right )-1 \right )\)
\(\Rightarrow L=\sum_{\left ( x,y \right )}p\left ( y \mid x \right )\bar{p}\left ( x \right ) \log \frac{1}{p\left ( y \mid x \right )} + \sum_i \lambda_i \sum_{\left ( x,y \right )}f_i\left ( x,y \right )\left [ p\left ( y \mid x \right ) \tilde{p} \left ( x \right ) - \tilde{p} \left ( x,y \right )\right ] + \lambda_0 \left[ \sum_y p \left( y \mid x \right) -1 \right]\)
\(\frac{\partial L }{\partial p \left (y \mid x \right ) } = \bar{p} \left ( x \right )\left ( -\log p\left ( y \mid x \right ) -1 \right ) + \sum_i \lambda_i \bar{p} \left ( x \right )f_i\left ( x,y \right )+\lambda_0 \triangleq 0\)
\(\Rightarrow p^{*}\left ( y \mid x \right )=e^{\sum_i \lambda_i f_i\left ( x,y \right )+\frac{\lambda_0}{\bar{p}\left ( x \right )}-1}=\frac{1}{e^\left ( 1-\frac{\lambda_0}{\bar{p}\left ( x \right )} \right)}e^\left ( \sum_i \lambda_i f_i \left ( x,y \right ) \right )\)
将\(p^*\)归一化:
\(p^*\left( y \mid x \right)=1\)
\(\frac{1}{Z_\lambda \left ( x \right )} e^{\sum_i \lambda_i f_i \left ( x,y \right )}=1\)
\(\therefore Z_\lambda \left ( x \right )= e^{\sum_i \lambda_i f_i\left ( x,y \right )}\)


此时\(\lambda\)未知,并且Maxent模型即为\(p^*\left( y \mid x \right)=\frac{1}{Z_\lambda \left ( x \right )} e^{\sum_i \lambda_i f_i \left ( x,y \right )}\)


接下来解决两个问题:
1. 解释Maxent和MLE关系
2. 找到\(\lambda\)的求解算法


1.MLE
\(L_{\bar{p}}= \prod_x p \left ( x \right )^{\bar{p}\left ( x \right )}\)
其中\(p\left ( x \right )\)是估计概率分布,\(\bar{p}\left ( x \right )\)实验结果分布。
\(\log L\left ( \theta_1,\theta_2,\cdots, \theta_k \right )= \sum_{i=1}^n \log f\left ( x_i;\theta_1,\theta_2,\cdots ,\theta_k \right )\)
取对数:
\(L_{\bar{p}}=\log \left ( \prod _x p\left ( x \right ) ^{\bar{p}\left ( x \right )}\right )=\sum_x \bar{p}\left ( x \right )\log p\left ( x \right )\)
\(L_{\bar{p}}{\left(p\right)}=\sum _{x,y}{\bar{p}\left ( x,y \right ) \log p\left ( x,y \right )}=\sum_{x,y}{\bar{p}\left ( x,y \right ) \log \left [ \bar{p}\left ( x \right ) p\left ( y \mid x \right ) \right ]}\)
\(=\sum_{x,y} \bar{p}\left ( x,y \right )\log p\left ( y \mid x \right )+\sum_{x,y} \bar{p}\left ( x,y \right ) \log \bar{p}\left ( x \right )\)
前面部分与条件熵形式相同,后面是常数部分。
\(L=\sum_{x,y}p\left ( y \mid x \ \right ) \bar{p}\left ( x \right ) \log \frac{1}{p\left ( y \mid x \right )} + \sum_{i=1}^k {\lambda_i \sum_{x,y} f_i\left ( x,y \right ) \left [ p\left ( y \mid x \right ) \bar{p}\left ( x \right ) - \bar{p}\left ( x,y \right )\right ] + \lambda_0 \left [ \sum_y p\left ( y \mid x \right ) -1 \right ]}\)
将\(p_\lambda \left ( y \mid x \right )=\frac{1}{z_\lambda\left ( x \right )}e^{\sum_i \lambda_i f_i\left ( x,y \right )}\)代入L
\(\therefore L\left ( \lambda \right) = - \sum_{x,y} p\left ( y \mid x \right ) \bar{p}\left ( x \right ) \log p\left ( y \mid x \right ) + \sum_{i=1}^k \lambda_i \sum_{x,y} f_i\left (x,y \right )\left [ p \left ( y \mid x \right ) \bar{p} -\bar{p}\left ( x,y \right )\right ]+\lambda_0\left [ \sum_y p\left ( y \mid x \right ) -1 \right ]\)
\( = - \sum\limits_{x,y} {{p_\lambda }\left( {y\left| x \right.} \right)\bar {p} \left( x \right)\log {p_\lambda }\left( {y\left| x \right.} \right)} + \sum\limits_{i = 1}^k {{\lambda _i}\sum\limits_{x,y} {{f_i}\left( {x,y} \right)\left[ {{p_\lambda }\left( {y\left| x \right.} \right)\bar {p} \left( x \right) - \bar {p} \left( {x,y} \right)} \right]} }\)
\( = - \sum\limits_{x,y} {\bar {p} \left( x \right){p_\lambda }\left( {y\left| x \right.} \right)\log {p_\lambda }\left( {y\left| x \right.} \right) + \sum\limits_{x,y} {\bar {p} \left( x \right){p_\lambda }\left( {y\left| x \right.} \right)\sum\limits_{i = 1}^k {{\lambda _i}{f_i}\left( {x,y} \right) - \sum\limits_{i = 1}^k {\bar {p} \left( {x,y} \right){\lambda _i}\sum\limits_{x,y} {{f_i}\left( {x,y} \right)} } } } } \)
\( = \sum\limits_{x,y} {\bar {p} \left( x \right){p_\lambda }\left( {y\left| x \right.} \right)\log {z_\lambda }\left( x \right)} - \sum\limits_{i = 1}^k {\bar {p} \left( {x,y} \right)\sum\limits_{x,y} {{\lambda _i}{f_i}\left( {x,y} \right)} } \)
将最大熵最优解\({p_\lambda }^*\left( {y\left| x \right.} \right) = \frac{1}{{{z_\lambda }\left( x \right)}}{e^{\sum\limits_i {{\lambda _i}{f_i}\left( {x,y} \right)} }}\)
\(L_{\bar{p} }{\left( p \right)} = \sum\limits_{x,y} {\bar {p} \left( {x,y} \right)\log p\left( {y\left| x \right.} \right)}\)
\( = \sum\limits_{x,y} {\bar {p} \left( {x,y} \right)\left( {\sum\limits_{i = 1}^n {{\lambda _i}{f_i}\left( {x,y} \right) - \log {z_\lambda }\left( x \right)} } \right)} \)
\( = \sum\limits_{x,y} {\bar {p} \left( {x,y} \right)\sum\limits_{i = 1}^n {{\lambda _i}{f_i}\left( {x,y} \right)} - \sum\limits_{x,y} {\bar {p} \left( {x,y} \right)\log {z_\lambda }\left( x \right)} }\)
\( = \sum\limits_{x,y} {\bar {p} \left( {x,y} \right)\sum\limits_{i = 1}^n {{\lambda _i}{f_i}\left( {x,y} \right)} - \sum\limits_x {\bar {p} \left( x \right)\log {z_\lambda }\left( x \right)} } \)


\(\lambda\)的求解,使用IIS,改进迭代尺度算法。


IIS:假设最大熵模型当前参数向量是\(\lambda\),希望找到新参数向量\(\lambda+ \delta\),使模型对数似然函数L增加。repeat it。
\(L\left( {\lambda + \delta } \right) - L\left( \lambda \right) = \sum\limits_{x,y} {\bar {p} \left( {x,y} \right)\sum\limits_{i = 1}^n {{\delta _i}{f_i}\left( {x,y} \right) - \sum\limits_x {\bar {p} \left( x \right)\log \frac{{{z_{\lambda + \delta }}\left( x \right)}}{{{z_\lambda }\left( x \right)}}} } } \)
\( \ge \sum\limits_{x,y} {\bar {p} \left( {x,y} \right)\sum\limits_{i = 1}^n {{\delta _i}{f_i}\left( {x,y} \right) + 1 - \sum\limits_x {\bar {p} \left( x \right)\frac{{{z_{\lambda + \delta }}\left( x \right)}}{{{z_\lambda }\left( x \right)}}} } }\)
\(= \sum\limits_{x,y} {\bar {p} \left( {x,y} \right)\sum\limits_{i = 1}^n {{\delta _i}{f_i}\left( {x,y} \right) + 1 - \sum\limits_x {\bar {p} \left( x \right)\sum\limits_y {{p_\lambda }\left( {y\left| x \right.} \right){e^{\sum\limits_{i = 1}^n {{\delta _i}{f_i}\left( {x,y} \right)} }}} } } } \)
针对凸函数\( f\left( x \right) = {e^x} \)用Jensen不等式,\( {f^\# }\left( {x,y} \right) = \sum\limits_i {{f_i}\left( {x,y} \right)} \)
\( A\left( {\delta \left| \lambda \right.} \right) = \sum\limits_{x,y} {\bar {p} \left( {x,y} \right)\sum\limits_{i = 1}^n {{\delta _i}{f_i}\left( {x,y} \right) + 1 - \sum\limits_x {\bar {p} \left( x \right)} \sum\limits_y {{p_\lambda }\left( {y\left| x \right.} \right){e^{\sum\limits_{i = 1}^n {{\delta _i}{f_i}\left( {x,y} \right)} }}} } } \)
\( = \sum\limits_{x,y} {\bar {p} \left( {x,y} \right)\sum\limits_{i = 1}^n {{\delta _i}{f_i}\left( {x,y} \right)} } + 1 - \sum\limits_X {\bar {p} \left( x \right)\sum\limits_y {{p_\lambda }\left( {y\left| \lambda \right.} \right){e^{{f^\# }\left( {x,y} \right)\sum\limits_{i = 1}^n {\frac{{{\delta _i}{f_i}\left( {x,y} \right)}}{{{f^\# }\left( {x,y} \right)}}} }}} } \)
\( \ge \sum\limits_{x,y} {\bar {p} \left( {x,y} \right)\sum\limits_{i = 1}^n {{\delta _i}{f_i}\left( {x,y} \right)} } + 1 - \sum\limits_x {\bar {p} \left( x \right)\sum\limits_y {{p_\lambda }\left( {y\left| x \right.} \right)\sum\limits_{i = 1}^n {\frac{{{f_i}\left( {x,y} \right)}}{{{f^\# }\left( {x,y} \right)}}{e^{{\delta _i}{f^\# }\left( {x,y} \right)}}} } } \)
对上式求偏导,令其为0,求出\(\delta\)


\(B\left( {\delta \left| \lambda \right.} \right) = \sum\limits_{x,y} {\bar {p} \left( {x,y} \right)\sum\limits_{i = 1}^n {{\delta _i}{f_i}\left( {x,y} \right)} } + 1 - \sum\limits_x {\bar {p} \left( x \right)\sum\limits_y {{p_\lambda }\left( {y\left| x \right.} \right)\sum\limits_{i = 1}^n {\frac{{{f_i}\left( {x,y} \right)}}{{{f^\# }\left( {x,y} \right)}}{e^{{\delta _i}{f^\# }\left( {x,y} \right)}}} } }\)
\(\frac{{\partial B\left( {\delta \left| \lambda \right.} \right)}}{{\partial {\delta _i}}} = \sum\limits_{x,y} {\bar {p} \left( {x,y} \right){f_i}\left( {x,y} \right)} - \sum\limits_x {\bar {p} \left( x \right)} \sum\limits_y {{p_\lambda }\left( {y\left| x \right.} \right){f_i}\left( {x,y} \right){e^{{\delta _i}{f^\# }\left( {x,y} \right)}}} \)
\( = \sum\limits_{x,y} {\bar {p} \left( {x,y} \right){f_i}\left( {x,y} \right)} - \sum\limits_{x,y} {\bar {p} \left( x \right){p_\lambda }\left( {y\left| x \right.} \right){f_i}\left( {x,y} \right){e^{{\delta _i}{f^\# }\left( {x,y} \right)}}} \)
\( = {E_{\bar {p} }}\left( {{f_i}} \right) - \sum\limits_{x,y} {\bar {p} \left( x \right){p_\lambda }\left( {y\left| x \right.} \right)} {f_i}\left( {x,y} \right){e^{\delta {}_i{f^\# }\left( {x,y} \right)}}\)
令上式等于0,则有
\(\sum\limits_{x,y} {\bar {p} \left( x \right){p_\lambda }\left( {y\left| x \right.} \right){f_i}\left( {x,y} \right){e^{{\delta _i}{f^\# }\left( {x,y} \right)}}} - {E_{\bar {p} }}\left( {{f_i}} \right) = 0\)


\(\delta\)求法:
当\(f^\#\left( {x,y} \right)\)是常数时:
\({{\delta _i} = \frac{1}{M}\log \frac{{{E_{\bar {p} }}\left( {{f_i}} \right)}}{{{E_p}\left( {{f_i}} \right)}}}\)
当\(f^\#\left( {x,y} \right)\)不是常数时:
令\(g\left( {{\delta _i}} \right) = \sum\limits_{x,y} {\bar {p} \left( x \right){p_\lambda }\left( {y\left| x \right.} \right){f_i}\left( {x,y} \right){e^{{\delta _i}{f^\# }\left( {x,y} \right)}} - {E_p}\left( {{f_i}} \right){f^\# }\left( {x,y} \right)} \)
转换为\(g\left( \delta \right) = 0\)的根
Newton法:\({\delta _i}^{k + 1} = \delta _i^k - \frac{{g\left( {\delta _i^k} \right)}}{{g'\left( {\delta _i^k} \right)}}\)
此处求\(g\left( \delta \right) = 0\)的根,非极值,也可用BFGS,LBFGS
上式求出\(\lambda\)代到下式中,
\({p^*}\left( {y\left| x \right.} \right) = \frac{1}{{{z_\lambda }\left( x \right)}}{e^{\sum\limits_i {{\lambda _i}{f_i}\left( {x,y} \right)} }}\)
\({z_\lambda }\left( x \right) = \sum\limits_y {{e^{\sum\limits_i {{\lambda _i}{f_i}\left( {x,y} \right)} }}} \)

转:https://www.cnblogs.com/feitongxunke/p/20160103zui-da-shang-mo-xing.html



推荐阅读
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • Windows2003 IIS上设置301定向,实现不带www域名跳转带www域名的方法
    打开IIS,建一个网站,主机头用不带www的域名,随便指向一个目录。然后在这个网站上点右键,属性--主目录--重定向到URL如图ÿ ... [详细]
  • 网卡工作原理及网络知识分享
    本文介绍了网卡的工作原理,包括CSMA/CD、ARP欺骗等网络知识。网卡是负责整台计算机的网络通信,没有它,计算机将成为信息孤岛。文章通过一个对话的形式,生动形象地讲述了网卡的工作原理,并介绍了集线器Hub时代的网络构成。对于想学习网络知识的读者来说,本文是一篇不错的参考资料。 ... [详细]
  • 本文介绍了使用Python编写购物程序的实现步骤和代码示例。程序启动后,用户需要输入工资,并打印商品列表。用户可以根据商品编号选择购买商品,程序会检测余额是否充足,如果充足则直接扣款,否则提醒用户。用户可以随时退出程序,在退出时打印已购买商品的数量和余额。附带了完整的代码示例。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文讲述了CodeForces1016C题目的解法。文章首先介绍了一种错误的理解,然后给出了正确的解法。其中,当位于一个角上时,有两种选择,一种是先一直走一行再返回来走,另一种是走到这一列的另一行上然后再往右走一列。作者给出了两种解法,一种是直接计算,一种是动态规划。最后,取两种解法的最优解作为答案。文章附上了源代码。 ... [详细]
author-avatar
少伶围脖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有