zoukankan      html  css  js  c++  java
  • softmax与sigmoid的关系&最大熵与极大似然估计的关系

    softmax与sigmoid的关系&最大熵与极大似然估计的关系

    softmax与sigmoid

    已知sigmoid的函数为:

    \[\begin{align} %\frac{1}{1+e^{-z^{[l](k)}}} sigmoid(z) &=\frac{1}{1+e^{-z}} =\frac{1}{1+\frac{1}{e^z}} =\frac{e^z}{e^z+1} =\frac{e^z}{e^z+e^0}\\ 1-sigmoid(z)&=1-\frac{e^z}{e^z+e^0}=\frac{e^0}{e^z+e^0} \end{align} \]

    已知softmax的函数为:

    \[\begin{align} softmax(Z)&=\left[ \begin{matrix} \frac{e^{z_1}}{\sum_{i=1}^ne^{z_i}}\\ \frac{e^{z_2}}{\sum_{i=1}^ne^{z_i}}\\ \vdots\\ \frac{e^{z_n}}{\sum_{i=1}^ne^{z_i}}\\ \end{matrix} \right] \end{align} \]

    当向量\(Z\)只有2维时:

    \[\begin{align} softmax(Z)&=\left[ \begin{matrix} \frac{e^{z_1}}{e^{z_1}+e^{z_2}}\\ \frac{e^{z_2}}{e^{z_1}+e^{z_2}}\\ \end{matrix} \right] \end{align} \]

    可以发现,sigmoid函数是一种特殊的softmax函数,此时\(z_1=z,z_2=0\)

    最大熵与极大似然估计

    最大熵模型的原理可以表述为在满足约束条件的模型集合中,在没有更多信息的情况下,那部分不确定的事件都是“等可能的”。

    特征函数

    在概率论中,任何随机变量的特征函数完全定义了它的概率分布。在实直线上,它由以下公式给出,其中X是任何具有该分布的随机变量:

    \[\begin{align} \varphi_X(t) = E\left[e^{itx}\right] \end{align} \]

    其中t是一个实数,i是虚数单位,E表示期望值。将\(e^{itx}\)进行泰勒展开:

    \[\begin{align} \varphi_X(t)&=E\left[1\right]+E\left[\frac{itX}{1!}\right]-E\left[\frac{t^2X^2}{2!}\right]+\dots+E\left[\frac{(it)^nX^n}{n!}\right]\\ &=1+\frac{it\color{red} {E[X]}}{1!}-\frac{t^2\color{red} {E[X^2]}}{2!}+\dots+\frac{(it)^n\color{red} {E[X^n]}}{n!} \end{align} \]

    可以看到,这个泰勒展开式是以下向量的一个线性表达(其中\(E[x^n]\)被称为\(n\)阶矩):

    \[\begin{align} \left[ \begin{matrix} E[X]\\ E[X^2]\\ \vdots\\ E[X^n]\\ \end{matrix} \right] \end{align} \]

    因此对于两个数据,想要知道两个数据的概率分布是否相同,只需要比较它们的一阶矩,二阶矩,...等是否相同即可:

    \[\begin{align} \text{若}f(X)=\left[ \begin{matrix} X\\ X^2\\ \vdots\\ X^n\\ \end{matrix} \right]\text{,对于两个概率分布P,Q,只需比较}E_P[f(X)],E_Q[f(X)]\text{是否相等即可} \end{align} \]

    最大熵在神经网络中的应用

    在神经网络中,因为训练数据集只是所有数据的一个子集,还有很大一部分是未知的,因此需要利用最大熵原理来补充训练数据集所缺失的信息。所以神经网络在训练模型时,有两个步骤:

    1. 首先通过训练数据集归纳出经验概率,通过特征函数表示出其概率分布
    2. 在上述基础上最大化\(P(y|x)\)的熵

    假设有\(n\)​​​​​个数据集\(\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),\dots,(x^{(n)},y^{(n)})\}\)​​​​​,\(x^{(i)}\)​​​​表示第\(i\)​​​​个数据集的输入向量,\(y^{(i)}\)​​​​表示第\(i\)​​​​​个数据集的标签向量​。定义\(\tilde P(X_i,Y_j)\)​​​​​表示输入向量\(X\)​​​的第\(i\)​​​个特征与输出向量\(Y\)​​​在第\(j\)​​​​​个特征组合在整个数据集上的经验概率。同理可定义\(\tilde P(X_i)\)​。即(假设所有的输入向量共有N个特征,所有的输出向量共有M个特征):

    \[\begin{align} \tilde P(X,Y)=\left[ \begin{matrix} \frac{count(X_1,Y_1)}{NM}\\ \frac{count(X_1,Y_2)}{NM}\\ \vdots\\ \frac{count(X_1,Y_M)}{NM}\\ \frac{count(X_2,Y_1)}{NM}\\ %\frac{count(X_2,Y_2)}{NM}\\ %\vdots\\ %\frac{count(X_2,Y_M)}{NM}\\ \vdots\\ \frac{count(X_N,Y_M)}{NM}\\ \end{matrix} \right] &&&&&&&\tilde P(X)=\left[ \begin{matrix} \frac{count(X_1)}{N}\\ \frac{count(X_2)}{N}\\ \vdots\\ \frac{count(X_N)}{N}\\ \end{matrix} \right] \end{align} \]

    而我们的目标是求输入X的情况下,是Y的概率是多少:

    \[\begin{align} P(Y|X)=\frac{P(Y)P(X|Y)}{P(X)}=\frac{P(X,Y)}{P(X)} \end{align} \]

    其中\(P(X,Y),P(X)\)​​是未知的,但是可以用上述经验概率\(\tilde P(X,Y),\tilde P(X)\)​​​代替,即:

    \[\begin{align} \tilde P(X,Y)\approx \tilde P(X)\cdot P(Y|X) \end{align} \]

    步骤一:

    为了通过特征函数表示数据的经验概率的概率分布,需要对其求期望,但是这里只有概率,没有随机变量,因此需要设计随机变量:

    \[\begin{align} X_m=\left\{\begin{matrix} 1, &(x,y)\text{满足第m个事实}\\ 0, &\text{否则} \end{matrix} \right . \end{align} \]

    其中\(m\)​个事实的并集覆盖了样本空间中所有可能的事件。

    又因为\(X_m\)​为伯努利分布,因此\(E[X_m]=p_m\)​,即第\(m\)​​​个事实发生的概率。此时\(f(x,y)=\left[\begin{matrix}X_1\\X_2\\\vdots\\X_m\end{matrix}\right]\),即将二维的数据映射到一维的随机变量。​

    步骤二:

    已知熵的定义为(m个数据集,n分类问题,求得是所有输入数据的输出的熵的和):

    \[\begin{align} H(Y):=-\sum_{i=1}^m\sum_{j=1}^nP(y_{ij})\cdot log_2(P(y_{ij})) \end{align} \]

    其中\(P(y_{ij})\)表示第i个输入数据是第j个分类的概率。

    条件熵的定义为(m个数据集,n分类问题,求得是):

    \[\begin{align} H(Y|X):=-\sum_{i=1}^mP(x_i)\cdot \sum_{j=1}^nP(y_{ij}|x_i)\cdot log(P(y_{ij}|x_i)) \end{align} \]

    其中\(P(x_i)\)​表示输入向量\(X\)的第i个特征所占总数据的比例。即可用上述\(\tilde P(x_i)\)代替。\(P(y_{ij}|x_i)\)表示在只输入 特征\(x_i\)时,有多大的概率是第\(j\)个分类。

    此时,我们的目标是:

    \[\begin{align} &max\;H(Y|X)\\ =&min_{P}\;\sum_{i=1}^m\tilde P(x_i)\cdot \sum_{j=1}^nP(y_{ij}|x_i)\cdot log(P(y_{ij}|x_i))\\ \text{并且满足:}\\ 1.\;&E_{\tilde P}[f(x,y)]-E_P[f(x,y)]=0\\ 2.\;&1-\sum_{j=1}^nP(y_j|x)=0 \end{align} \]

    由拉格朗日乘数法得:

    \[\begin{align} min_P\; max_{\lambda}\;L(P,\lambda)&=\sum_{i=1}^m\bigg(\tilde P(x_i)\cdot \sum_{j=1}^nP(y_{ij}|x_i)\cdot log(P(y_{ij}|x_i)) +\lambda_0\big(1-\sum_{j=1}^nP(y_{ij}|x_i)\big)\bigg) \\&+\sum_{i=1}^m\lambda_i\big(\Delta_i-E_P(f_i(x_i,y_i))\big) \end{align} \]

    其中\(\Delta_k=E_{\tilde P}[f_k(x,y)]\)​且是个常数。

    因为:

    \[\begin{align} E_P(f_k(x,y))&=P(x,y)\cdot f_k(x,y)=\tilde P(x)\color{blue}{P(y|x)}\color{black}f_k(x,y) \end{align} \]

    因此:

    \[\begin{align} min_P\; max_{\lambda}\;L(P,\lambda)&=\sum_{i=1}^m\bigg(\tilde P(x_i)\cdot \sum_{j=1}^nP(y_{ij}|x_i)\cdot log(P(y_{ij}|x_i)) +\lambda_0\big(1-\sum_{j=1}^nP(y_{ij}|x_i)\big)\bigg) \\&+\sum_{i=1}^m\lambda_i\bigg(\Delta_i-\sum_{j=1}^{n}\tilde P(x_i)\color{blue}{P(y_{ij}|x_i)}\color{black}f_i(x_i,y_{ij})\bigg) \end{align} \]

    考虑求其对偶问题\(max_{\lambda}\; min_P\;L(P,\lambda)\)​​,即先把\(\lambda\)​​当作常数,求当\(P\)为多少时,\(L(P,\lambda)\)最小。求得\(P\)之后,再去求\(\lambda\)

    \(P\)求导得:

    \[\begin{align} \frac{\varphi L(P,\lambda)}{\varphi(P(y_{ij}|x_i))}&=\sum_{i=1}^m\bigg(\sum_{j=1}^n\tilde P(x_i)\big(log(P(y_{ij}|x_i))+1\big)\bigg) -\lambda_0\cdot \color{red}{\sum_{i=1}^m\tilde P(x_i)}\color{black}\cdot\sum_{j=1}^n1 \\&-\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i)f_i(x_i,y_{ij})\bigg) \end{align} \]

    其中红色项的值为\(1\),是为了后续方便推导,凑出来的。合并同类项得:

    \[\begin{align} \frac{\varphi L(P,\lambda)}{\varphi(P(y_{ij}|x_i))}&=\sum_{i=1}^m\bigg(\sum_{j=1}^n\tilde P(x_i)\big(log(P(y_{ij}|x_i))+1\big) -\lambda_0\cdot \color{red}{\tilde P(x_i)}\color{black} -\lambda_i\cdot\tilde P(x_i)\cdot f_i(x_i,y_{ij})\bigg)\\ &=\sum_{i=1}^m\tilde P(x_i)\bigg(\sum_{j=1}^nlog\big(P(y_{ij}|x_i)\big)+1 -\lambda_0 -\lambda_i\cdot f_i(x_i,y_{ij})\bigg)\\ \end{align} \]

    \(\frac{\varphi L(P,\lambda)}{\varphi(P(y_{ij}|x_i))}=0\)​,即:

    \[\begin{align} log\big(P(y_{ij}|x_i)\big)+1 -\lambda_0 -\lambda_i\cdot f_i(x_i,y_{ij})=0\\ log(P(y_{ij}|x_i))=\lambda_0+\lambda_i\cdot f_i(x_i,y_{ij})-1\\ P(y_{ij}|x_i)=e^{\lambda_0-1}\cdot e^{\lambda_i\cdot f_i(x_i, y_{ij})}\\ P(y_{ij}|x_i)=\frac{e^{\lambda_i\cdot f_i(x_i, y_{ij})}}{e^{1-\lambda_0}} \end{align} \]

    前面说过,f(x,y)将数据映射到了随机变量X上,\(\lambda_i\)可以理解为网络中的参数。而:

    \[\begin{align} &\because \sum_{j=1}^nP(y_{ij}|x_i)=1=\sum_{j=1}^n\frac{e^{\lambda_i\cdot f_i(x_i, y_{ij})}}{e^{1-\lambda_0}}\\ &\therefore e^{1-\lambda_0}=\sum_{j=1}^ne^{\lambda_i\cdot f_i(x_i,y_{ij})} \end{align} \]

    再将\(e^{1-\lambda_0}\)代回式\(31\)可得:

    \[\begin{align} P(y_{ij}|x_i)=\frac{e^{\lambda_i\cdot f_i(x_i, y_{ij})}}{\sum_{j=1}^ne^{\lambda_i\cdot f_i(x_i,y_{ij})}} \end{align} \]

    到这里可以发现这个就是softmax的形式。也就说,在最后一层应用softmax函数,就代表了默认使用最大熵原则来求得最终的模型。并且可以知道,softmax并仅仅是为了归一化而凑出来的,而是应用最大熵原则时得出的一个结果。

    到这里,我们只是解决了下式的红色部分:

    \[max_{\lambda}\; \color{red}{min_P\;L(P,\lambda)} \]

    也就是确定了概率模型的形式,也就是式\(33\)的样子,它是属于指数族的一种概率分布,伯努利分布,正态分布,泊松分布等都属于这种类型。

    下一步就是将P代入上式,然后确定模型的参数\(\lambda\),确定参数其实就是通过梯度下降法。但是我要看一下最大熵与极大似然估计有什么关系,将\(P\)代入原式:

    \[\begin{align} max_{\lambda}\;L(P,\lambda)&=\sum_{i=1}^m\bigg(\tilde P(x_i)\cdot \sum_{j=1}^nP\cdot log(P)\bigg) +\color{lightgray}{\lambda_0\bigg(1-\sum_{j=1}^nP\bigg)} \\&+\sum_{i=1}^m\lambda_i\bigg(E_{\tilde P}[f_k(x_i,y_i)]-\sum_{j=1}^{n}\tilde P(x_i)Pf_i(x_i,y_{ij})\bigg)\\ &=\sum_{i=1}^m\bigg(\tilde P(x_i)\cdot \sum_{j=1}^nP\cdot log(P)\bigg) \\&+\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i,y_{ij})\cdot f_i(x,y)-\sum_{j=1}^{n}\tilde P(x_i)Pf_i(x_i,y_{ij})\bigg)\\ &=\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i, y_{ij})\cdot f_i(x,y)\bigg) +\sum_{i=1}^m\bigg(\tilde P(x_i)\cdot \sum_{j=1}^nP\cdot log(P)\bigg) \\&-\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i)Pf_i(x_i,y_{ij}) \bigg)\\ &=\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i, y_{ij})\cdot f_i(x,y)\bigg) +\sum_{i=1}^m\bigg(\tilde P(x_i)\cdot \sum_{j=1}^nP\cdot log(\frac{e^{\lambda_i\cdot f_i(x_i, y_{ij})}}{\sum_{j=1}^ne^{\lambda_i\cdot f_i(x_i,y_{ij})}})\bigg) \\&-\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i)Pf_i(x_i,y_{ij}) \bigg)\\ &=\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i, y_{ij})\cdot f_i(x,y)\bigg) \\&+\sum_{i=1}^m\bigg(\tilde P(x_i)\cdot \sum_{j=1}^nP\cdot {\lambda_i\cdot f_i(x_i, y_{ij})}-P\cdot log\big({\sum_{j=1}^ne^{\lambda_i\cdot f_i(x_i,y_{ij})}}\big)\bigg) \\&-\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i)Pf_i(x_i,y_{ij}) \bigg)\\ &=\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i, y_{ij})\cdot f_i(x,y)\bigg) -\sum_{i=1}^m\sum_{j=1}^n\bigg(\tilde P(x_i)\cdot P\cdot log\big(\sum_{j=1}^ne^{\lambda_i\cdot f_i(x_i,y_{ij})} \big)\bigg)\\ &=\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i, y_{ij})\cdot f_i(x,y)\bigg) -\sum_{i=1}^m\tilde P(x_i)\cdot log\big(\sum_{j=1}^ne^{\lambda_i\cdot f_i(x_i,y_{ij})} \big) \sum_{j=1}^nP\\ &=\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i, y_{ij})\cdot f_i(x,y)\bigg) -\sum_{i=1}^m\tilde P(x_i)\cdot log\big(\sum_{j=1}^ne^{\lambda_i\cdot f_i(x_i,y_{ij})} \big) \end{align} \]

    再来看看极大似然估计:

    \[\begin{align} max\;log(L)&=max\;\sum_{i=1}^m\sum_{j=1}^nP(x_{ij})\cdot log(\theta_{ij})\\ \end{align} \]

    其中\(\theta_i=Network_{W,b}(x_i)\)原本就是神经网络在数据\(x_i\)上的输出分布,这里可以将\(P\)代入。\(P(x_{ij})\)​表示第\(i\)个数据有多大的概率是属于\(j\)分类,也就是数据集的标签,可以用经验概率代替得到:

    \[\begin{align} log(L)&=\sum_{i=1}^m\sum_{j=1}^n\tilde P(x,y) log\bigg(\frac{e^{\lambda_i\cdot f_i(x_i, y_{ij})}}{\sum_{k=1}^ne^{\lambda_i\cdot f_i(x_i,y_{ij})}}\bigg)\\ &=\sum_{i=1}^m\sum_{j=1}^n\tilde P(x,y) {\cdot {\lambda_i\cdot f_i(x_i, y_{ij})}}-\sum_{i=1}^m\sum_{j=1}^n\tilde P(x,y)\cdot log({\sum_{i=1}^ne^{\lambda_k\cdot f_i(x_i,y_{ij})}})\\ &=\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i, y_{ij})\cdot f_i(x,y)\bigg) -\sum_{i=1}^m\tilde P(x_i)\cdot log\big(\sum_{j=1}^ne^{\lambda_i\cdot f_i(x_i,y_{ij})} \big) \sum_{j=1}^nP(y_{ij}|x_i)\\ &=\sum_{i=1}^m\lambda_i\bigg(\sum_{j=1}^n\tilde P(x_i, y_{ij})\cdot f_i(x,y)\bigg) -\sum_{i=1}^m\tilde P(x_i)\cdot log\big(\sum_{j=1}^ne^{\lambda_i\cdot f_i(x_i,y_{ij})} \big) \end{align} \]

    可以发现最大熵和极大似然估计最后的结果形式一模一样。

    因此得出结论极大似然估计与交叉熵与最大熵三种方法在形式上完全等价。

    推荐详细讲解视频:https://www.bilibili.com/video/BV1cP4y1t7cP

  • 相关阅读:
    STM32 F4 DAC DMA Waveform Generator
    STM32 F4 General-purpose Timers for Periodic Interrupts
    Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式
    Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块
    查看SQL Server服务运行帐户和SQL Server的所有注册表项
    Pycharm使用技巧(转载)
    SQL Server 2014内存优化表的使用场景
    Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和输入流 捕获sys.exit()调用 optparse argparse
    Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
    Python第六天 类型转换
  • 原文地址:https://www.cnblogs.com/Hi-Simon/p/15101289.html
Copyright © 2011-2022 走看看