softmax与sigmoid
已知sigmoid的函数为:
[egin{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的函数为:
[egin{align}
softmax(Z)&=left[ egin{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}
ight]
end{align}
]
当向量(Z)只有2维时:
[egin{align}
softmax(Z)&=left[ egin{matrix}
frac{e^{z_1}}{e^{z_1}+e^{z_2}}\
frac{e^{z_2}}{e^{z_1}+e^{z_2}}\
end{matrix}
ight]
end{align}
]
可以发现,sigmoid函数是一种特殊的softmax函数,此时(z_1=z,z_2=0)。
最大熵与极大似然估计
特征函数
在概率论中,任何随机变量的特征函数完全定义了它的概率分布。在实直线上,它由以下公式给出,其中X是任何具有该分布的随机变量:
[egin{align}
varphi_X(t) = Eleft[e^{itx}
ight]
end{align}
]
其中t是一个实数,i是虚数单位,E表示期望值。将(e^{itx})进行泰勒展开:
[egin{align}
varphi_X(t)&=Eleft[1
ight]+Eleft[frac{itX}{1!}
ight]-Eleft[frac{t^2X^2}{2!}
ight]+dots+Eleft[frac{(it)^nX^n}{n!}
ight]\
&=1+frac{itcolor{red} {E[X]}}{1!}-frac{t^2color{red} {E[X^2]}}{2!}+dots+frac{(it)^ncolor{red} {E[X^n]}}{n!}
end{align}
]
可以看到,这个泰勒展开式是以下向量的一个线性表达(其中(E[x^n])被称为(n)阶矩):
[egin{align}
left[
egin{matrix}
E[X]\
E[X^2]\
vdots\
E[X^n]\
end{matrix}
ight]
end{align}
]
因此对于两个数据,想要知道两个数据的概率分布是否相同,只需要比较它们的一阶矩,二阶矩,...等是否相同即可:
[egin{align}
ext{若}f(X)=left[
egin{matrix}
X\
X^2\
vdots\
X^n\
end{matrix}
ight] ext{,对于两个概率分布P,Q,只需比较}E_P[f(X)],E_Q[f(X)] ext{是否相等即可}
end{align}
]
最大熵在神经网络中的应用
在神经网络中,因为训练数据集只是所有数据的一个子集,因此需要利用最大熵原理来补充训练数据集所缺失的信息。所以神经网络在训练模型时,有两个步骤:
- 首先通过训练数据集归纳出经验概率,通过特征函数表示出其概率分布
- 在上述基础上最大化(P(y|x))的熵
假设有(n)个数据集({(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),dots,(x^{(n)},y^{(n)})}),(x^{(i)})表示第(i)个数据集的输入向量,(y^{(i)})表示第(i)个数据集的标签向量。定义( ilde P(X_i,Y_j))表示输入向量(X)的第(i)个特征与输出向量(Y)在第(j)个特征组合在整个数据集上的经验概率。同理可定义( ilde P(X_i))。即(假设所有的输入向量共有N个特征,所有的输出向量共有M个特征):
[egin{align}
ilde P(X,Y)=left[
egin{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}
ight]
&&&&&&& ilde P(X)=left[
egin{matrix}
frac{count(X_1)}{N}\
frac{count(X_2)}{N}\
vdots\
frac{count(X_N)}{N}\
end{matrix}
ight]
end{align}
]
而我们的目标是求输入X的情况下,是Y的概率是多少:
[egin{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))是未知的,但是可以用上述经验概率( ilde P(X,Y), ilde P(X))代替,即:
[egin{align}
ilde P(X,Y)approx ilde P(X)cdot P(Y|X)
end{align}
]
步骤一:
为了通过特征函数表示数据的经验概率的概率分布,需要对其求期望,但是这里只有概率,没有随机变量,因此需要设计随机变量:
[egin{align}
X_m=left{egin{matrix}
1, &(x,y) ext{满足第m个事实}\
0, & ext{否则}
end{matrix}
ight .
end{align}
]
其中(m)个事实的并集覆盖了样本空间中所有可能的事件。
又因为(X_m)为伯努利分布,因此(E[X_m]=p_m),即第(m)个事实发生的概率。此时(f(x,y)=left[egin{matrix}X_1\X_2\vdots\X_mend{matrix}
ight]),即将二维的数据映射到一维的随机变量。
步骤二:
已知熵的定义为(m个数据集,n分类问题,求得是所有输入数据的输出的熵的和):
[egin{align}
H(Y):=-sum_{i=1}^msum_{j=1}^nP(y_{ij})cdot log_2(P(y_{ij}))
end{align}
]
其中(P(y_{ij}))表示第i个输入数据是第j个分类的概率。
条件熵的定义为(m个数据集,n分类问题,求得是):
[egin{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个特征所占总数据的比例。即可用上述( ilde P(x_i))代替。(P(y_{ij}|x_i))表示在只输入 特征(x_i)时,有多大的概率是第(j)个分类。
此时,我们的目标是:
[egin{align}
&max_{x,y};H(Y|X)\
=&min_{x,y};sum_{i=1}^m ilde P(x_i)cdot sum_{j=1}^nP(y_{ij}|x_i)cdot log(P(y_{ij}|x_i))\
ext{并且满足:}\
1.;&E_{ ilde P}[f(x,y)]-E_P[f(x,y)]=0\
2.;&1-sum_{j=1}^nP(y_j|x)=0
end{align}
]
由拉格朗日乘数法得:
[egin{align}
min_P; max_{lambda};L(P,lambda)&=sum_{i=1}^migg( ilde P(x_i)cdot sum_{j=1}^nP(y_{ij}|x_i)cdot log(P(y_{ij}|x_i))igg)
+lambda_0igg(1-sum_{j=1}^nP(y_j|x)igg)
\&+sum_{i=1}^mlambda_iig(Delta_i-E_P(f_i(x_i,y_i))ig)
end{align}
]
其中(Delta_k=E_{ ilde P}[f_k(x,y)])且是个常数。
因为:
[egin{align}
E_P(f_k(x,y))&=P(x,y)cdot f_k(x,y)= ilde P(x)color{blue}{P(y|x)}color{black}f_k(x,y)
end{align}
]
因此:
[egin{align}
min_P; max_{lambda};L(P,lambda)&=sum_{i=1}^migg( ilde P(x_i)cdot sum_{j=1}^nP(y_{ij}|x_i)cdot log(P(y_{ij}|x_i))igg)
+lambda_0igg(1-sum_{j=1}^nP(y_j|x)igg)
\&+sum_{i=1}^mlambda_iigg(Delta_i-sum_{j=1}^{n} ilde P(x_i)color{blue}{P(y_{ij}|x_i)}color{black}f_i(x_i,y_{ij})igg)
end{align}
]
考虑求其对偶问题(max_{lambda}; min_P;L(P,lambda)),即先把(lambda)当作常数,求当(P)为多少时,(L(P,lambda))最小。求得(P)之后,再去求(lambda)。
对(P)求导得:
[egin{align}
frac{varphi L(P,lambda)}{varphi(P(y_{ij}|x_i))}&=sum_{i=1}^migg(sum_{j=1}^n ilde P(x_i)ig(log(P(y_{ij}|x_i))+1ig)igg)
-lambda_0cdot color{red}{sum_{i=1}^m ilde P(x_i)}color{black}cdotsum_{j=1}^n1
\&-sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i)f_i(x_i,y_{ij})igg)
end{align}
]
其中红色项的值为(1),是为了后续方便推导,凑出来的。合并同类项得:
[egin{align}
frac{varphi L(P,lambda)}{varphi(P(y_{ij}|x_i))}&=sum_{i=1}^migg(sum_{j=1}^n ilde P(x_i)ig(log(P(y_{ij}|x_i))+1ig)
-lambda_0cdot color{red}{ ilde P(x_i)}color{black}
-lambda_icdot ilde P(x_i)cdot f_i(x_i,y_{ij})igg)\
&=sum_{i=1}^m ilde P(x_i)igg(sum_{j=1}^nlogig(P(y_{ij}|x_i)ig)+1
-lambda_0
-lambda_icdot f_i(x_i,y_{ij})igg)\
end{align}
]
令(frac{varphi L(P,lambda)}{varphi(P(y_{ij}|x_i))}=0),即:
[egin{align}
logig(P(y_{ij}|x_i)ig)+1
-lambda_0
-lambda_icdot f_i(x_i,y_{ij})=0\
log(P(y_{ij}|x_i))=lambda_0+lambda_icdot f_i(x_i,y_{ij})-1\
P(y_{ij}|x_i)=e^{lambda_0-1}cdot e^{lambda_icdot f_i(x_i, y_{ij})}\
P(y_{ij}|x_i)=frac{e^{lambda_icdot f_i(x_i, y_{ij})}}{e^{1-lambda_0}}
end{align}
]
前面说过,f(x,y)将数据映射到了随机变量X上,(lambda_i)可以理解为网络中的参数。而:
[egin{align}
&ecause sum_{j=1}^nP(y_{ij}|x_i)=1=sum_{j=1}^nfrac{e^{lambda_icdot f_i(x_i, y_{ij})}}{e^{1-lambda_0}}\
& herefore e^{1-lambda_0}=sum_{j=1}^ne^{lambda_icdot f_i(x_i,y_{ij})}
end{align}
]
再将(e^{1-lambda_0})代回式(31)可得:
[egin{align}
P(y_{ij}|x_i)=frac{e^{lambda_icdot f_i(x_i, y_{ij})}}{sum_{j=1}^ne^{lambda_icdot f_i(x_i,y_{ij})}}
end{align}
]
到这里可以发现这个就是softmax的形式。也就说,在最后一层应用softmax函数,就代表了默认使用最大熵原则来求得最终的模型。并且可以知道,softmax并仅仅是为了归一化而凑出来的,而是应用最大熵原则时得出的一个结果。
到这里,我们只是解决了下式的红色部分:
[max_{lambda}; color{red}{min_P;L(P,lambda)}
]
也就是确定了概率模型的形式,也就是式(33)的样子,它是属于指数族的一种概率分布,伯努利分布,正态分布,泊松分布等都属于这种类型。
下一步就是将P代入上式,然后确定模型的参数(lambda),确定参数其实就是通过梯度下降法。但是我要看一下最大熵与极大似然估计有什么关系,将(P)代入原式:
[egin{align}
max_{lambda};L(P,lambda)&=sum_{i=1}^migg( ilde P(x_i)cdot sum_{j=1}^nPcdot log(P)igg)
+color{lightgray}{lambda_0igg(1-sum_{j=1}^nPigg)}
\&+sum_{i=1}^mlambda_iigg(E_{ ilde P}[f_k(x_i,y_i)]-sum_{j=1}^{n} ilde P(x_i)Pf_i(x_i,y_{ij})igg)\
&=sum_{i=1}^migg( ilde P(x_i)cdot sum_{j=1}^nPcdot log(P)igg)
\&+sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i,y_{ij})cdot f_i(x,y)-sum_{j=1}^{n} ilde P(x_i)Pf_i(x_i,y_{ij})igg)\
&=sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i, y_{ij})cdot f_i(x,y)igg)
+sum_{i=1}^migg( ilde P(x_i)cdot sum_{j=1}^nPcdot log(P)igg)
\&-sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i)Pf_i(x_i,y_{ij}) igg)\
&=sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i, y_{ij})cdot f_i(x,y)igg)
+sum_{i=1}^migg( ilde P(x_i)cdot sum_{j=1}^nPcdot
log(frac{e^{lambda_icdot f_i(x_i, y_{ij})}}{sum_{j=1}^ne^{lambda_icdot f_i(x_i,y_{ij})}})igg)
\&-sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i)Pf_i(x_i,y_{ij}) igg)\
&=sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i, y_{ij})cdot f_i(x,y)igg)
\&+sum_{i=1}^migg( ilde P(x_i)cdot sum_{j=1}^nPcdot
{lambda_icdot f_i(x_i, y_{ij})}-Pcdot logig({sum_{j=1}^ne^{lambda_icdot f_i(x_i,y_{ij})}}ig)igg)
\&-sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i)Pf_i(x_i,y_{ij}) igg)\
&=sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i, y_{ij})cdot f_i(x,y)igg)
-sum_{i=1}^msum_{j=1}^nigg( ilde P(x_i)cdot Pcdot logig(sum_{j=1}^ne^{lambda_icdot f_i(x_i,y_{ij})} ig)igg)\
&=sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i, y_{ij})cdot f_i(x,y)igg)
-sum_{i=1}^m ilde P(x_i)cdot logig(sum_{j=1}^ne^{lambda_icdot f_i(x_i,y_{ij})} ig) sum_{j=1}^nP\
&=sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i, y_{ij})cdot f_i(x,y)igg)
-sum_{i=1}^m ilde P(x_i)cdot logig(sum_{j=1}^ne^{lambda_icdot f_i(x_i,y_{ij})} ig)
end{align}
]
再来看看极大似然估计:
[egin{align}
max;log(L)&=max;sum_{i=1}^msum_{j=1}^nP(x_{ij})cdot log( heta_{ij})\
end{align}
]
其中( heta_i=Network_{W,b}(x_i))原本就是神经网络在数据(x_i)上的输出分布,这里可以将(P)代入。(P(x_{ij}))表示第(i)个数据有多大的概率是属于(j)分类,也就是数据集的标签,可以用经验概率代替得到:
[egin{align}
log(L)&=sum_{i=1}^msum_{j=1}^n ilde P(x,y)
logigg(frac{e^{lambda_icdot f_i(x_i, y_{ij})}}{sum_{k=1}^ne^{lambda_icdot f_i(x_i,y_{ij})}}igg)\
&=sum_{i=1}^msum_{j=1}^n ilde P(x,y)
{cdot {lambda_icdot f_i(x_i, y_{ij})}}-sum_{i=1}^msum_{j=1}^n ilde P(x,y)cdot log({sum_{i=1}^ne^{lambda_kcdot f_i(x_i,y_{ij})}})\
&=sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i, y_{ij})cdot f_i(x,y)igg)
-sum_{i=1}^m ilde P(x_i)cdot logig(sum_{j=1}^ne^{lambda_icdot f_i(x_i,y_{ij})} ig) sum_{j=1}^nP(y_{ij}|x_i)\
&=sum_{i=1}^mlambda_iigg(sum_{j=1}^n ilde P(x_i, y_{ij})cdot f_i(x,y)igg)
-sum_{i=1}^m ilde P(x_i)cdot logig(sum_{j=1}^ne^{lambda_icdot f_i(x_i,y_{ij})} ig)
end{align}
]
可以发现最大熵和极大似然估计最后的结果形式一模一样。
因此得出结论极大似然估计与交叉熵与最大熵三种方法在形式上完全等价。
推荐详细讲解视频:https://www.bilibili.com/video/BV1cP4y1t7cP