欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sigmoid和交叉熵损失函数

程序员文章站 2022-07-04 22:59:43
...

sigmoid函数

Sigmoid函数是一个在生物学中常见的S型函数,将值映射到(0,1)之间,常用于神经元的**函数。σ(x)=11+ex\sigma(x)=\frac{1}{1+e^{-x}}
画出函数图像

import numpy as np
from matplotlib import pyplot as plt 
%matplotlib inline
x=np.arange(-10,10,0.1)
y=1/(np.exp(-x)+1)
#print(y)
plt.title("sigmoid") 
plt.plot(x,y) 
plt.show()

sigmoid和交叉熵损失函数
显然:limx+=1\lim\limits_{x\to+\infty}=1 , limx=0\lim\limits_{x\to-\infty}=0 ,函数平滑、易于求导。
σ(x)=ex(1+ex)2=11+ex1(1+ex)2=σ(x)(1σ(x))\sigma'(x)=\frac{e^{-x}}{(1+e^{-x})^2} =\frac{1}{1+e^{-x}}-\frac{1}{(1+e^{-x})^2}=\sigma(x)(1-\sigma(x))
因此sigmoid可用于二分类问题,输出p代表为1的概率。

二元交叉熵损失函数

y=1y=1时,p(y=1x)=pp(y=1|x)=p
y=0y=0时,p(y=0x)=1pp(y=0|x)=1-p
可将上式合并得p(yx)=py(1p)1yp(y|x)=p^y(1-p)^{1-y}
为方便计算两边取对数得到logp(yx)=ylogp+(1y)log(1p)\log p(y|x)=y\log p +(1-y)\log (1-p)
损失应取正值故添加负号L=[ylogp+(1y)log(1p)]L=-[y\log p +(1-y)\log (1-p)]
假设m个样本独立同分布,最大似然可得P=i=1mp(yixi)P=\prod_{i=1}^m p(y^i|x^i)logP=i=1mlogp(yixi)\log P=\sum_{i=1}^m\log p(y^i|x^i)logP=i=1mL\log P=-\sum_{i=1}^mL
所以样本的平均误差可以定义为J=1mi=1mL(p,y)J=\frac{1}{m}\sum_{i=1}^mL(p,y)