概述
exponential family
最近因为工作原因重温了目标检测算法,参考了Focal loss。里边涉及了cross entropy损失函数。这里重温了一下二分类的logistic回归以及多类的softmax loss,但是对于softmax的背景知识一直不是太了解。借着这次机会,好好地挖一下softmax,在本博文中会陆续更新挖到的相关知识点。
PRML中关于softmax的阐述
logistic sigmoid function
首先,书中(2.4)从exp family的角度出发,提出了两种exp family的分布:
-
exponential family distribution
这里不翻译了,直接上原文,顺便发现了一个latex的公式编辑器The exponential family of distributions over x, given parameters η, is defined to be the set of distributions of the form
p ( x ∣ η ) = h ( x ) g ( η ) e η T u ( x ) ( 2.194 ) pleft ( x|eta right )=hleft ( x right )gleft ( eta right )e^{eta ^{T}uleft ( x right )}qquad(2.194) p(x∣η)=h(x)g(η)eηTu(x)(2.194)这里 η eta η叫做该分布的自然参数(natural parameter), u ( x ) u(x) u(x)是关于x的函数, g ( η ) g(eta) g(η)是归一化系数(normalized coefficient),对于连续变量x,满足下式
g ( η ) ∫ h ( x ) e η T u ( x ) d x = 1 ( 2.195 ) gleft ( eta right )int hleft ( x right )e^{eta ^{T}uleft ( x right )}dx=1qquad(2.195) g(η)∫h(x)eηTu(x)dx=1(2.195)
对于离散变量x,满足下式
g ( η ) ∑ h ( x ) e η T u ( x ) = 1 gleft ( eta right )sum hleft ( x right )e^{eta ^{T}uleft ( x right )}=1qquad g(η)∑h(x)eηTu(x)=1
首先,考虑伯努利分布(Bernoulli distribution)
p ( x ∣ μ ) = B e r n ( x ∣ μ ) = μ x ( 1 − μ ) 1 − x ( 2.196 ) pleft ( x|mu right )=Bernleft ( x|mu right )=mu ^{x}left ( 1-mu right )^{1-x}qquad(2.196) p(x∣μ)=Bern(x∣μ)=μx(1−μ)1−x(2.196)
简单的进行公示推导(这里不进行详细的公示推导),可以得到
KaTeX parse error: No such environment: eqnarray at position 8: begin{̲e̲q̲n̲a̲r̲r̲a̲y̲}̲ pleft ( x|mu…
将式2.197整理成2.194的格式,可以得到
η = l n ( μ 1 − μ ) eta =ln^{left ( frac{mu}{1-mu} right )} η=ln(1−μμ)
以及
σ ( η ) = 1 1 + e − η ( 2.199 ) sigma left ( eta right )=frac{1}{1+e^{-eta}}qquad(2.199) σ(η)=1+e−η1(2.199)
式2.199就是logistic sigmoid函数。把伯努利概率分布函数改为标准的形式,如下
p ( x ∣ η ) = σ ( − η ) e η x ( 2.200 ) pleft ( x|eta right )=sigma left ( -eta right )e^{eta x}qquad(2.200) p(x∣η)=σ(−η)eηx(2.200)
这里,根据式2.199,我们很容易得到 1 − σ ( η ) = σ ( − η ) 1-sigma left ( eta right )=sigma left ( -eta right ) 1−σ(η)=σ(−η)。相应地,类比式2.194,我们有
KaTeX parse error: No such environment: eqnarray at position 8: begin{̲e̲q̲n̲a̲r̲r̲a̲y̲}̲ uleft ( x ri…
以上,是由伯努利分布得到了sigmoid函数,二者有什么联系尚不得知,如果有谁知道,请补充。。。
###softmax function###
下面说一下softmax函数,在我看来,它就是logistic的一般形式。首先考虑下面的多项式概率分布函数
p ( x ∣ μ ) = ∏ k = 1 M μ k x k = e ∑ k = M x k l n μ k ( 2.204 ) pleft ( x|mu right )=prod_{k=1}^{M} mu_{k}^{x^{k}}=e^{sum_{k=}^{M}x_{k}ln^{mu_{k}}}qquad(2.204) p(x∣μ)=k=1∏Mμkxk=e∑k=Mxklnμk(2.204)
类似于上边logistic函数,我们把式2.204改成2.194的一般形式,得到式2.205
p ( x ∣ η ) = e η T x ( 2.205 ) pleft ( x|eta right )=e^{eta^{T} x}qquad(2.205) p(x∣η)=eηTx(2.205)
其中, η k = l n μ k eta_{k}=ln^{mu^{k}} ηk=lnμk,且满足下面几个条件
KaTeX parse error: No such environment: eqnarray at position 8: begin{̲e̲q̲n̲a̲r̲r̲a̲y̲}̲ uleft ( x ri…
值得注意的是,这里参数 η k eta_{k} ηk并不是相互独立的,因为 μ k mu_{k} μk满足下式
∑ k = 1 M μ k = 1 ( 2.209 ) sum_{k=1}^{M}mu_{k}=1qquad(2.209) k=1∑Mμk=1(2.209)。
同时,还有下式成立
0 ⩽ μ k ⩽ 1 , ∑ k = 1 M − 1 ⩽ 1 ( 2.210 ) 0leqslant mu_{k}leqslant 1,quadsum_{k=1}^{M-1}leqslant 1quad(2.210) 0⩽μk⩽1,k=1∑M−1⩽1(2.210)
根据式2.209,式2.204可以改写为以下形式
KaTeX parse error: No such environment: eqnarray at position 8: begin{̲e̲q̲n̲a̲r̲r̲a̲y̲}̲ e^{sum_{k=1}^…
令
l n ( μ k 1 − ∑ j = 1 M − 1 μ j ) = η k ( 2.212 ) ln^{left ( frac{mu_{k}}{1-sum_{j=1}^{M-1}mu_{j} } right )}=eta_{k}qquad(2.212) ln(1−∑j=1M−1μjμk)=ηk(2.212)
我们可以得到 μ k mu_{k} μk关于 η k eta_{k} ηk的函数
μ k = e η k 1 + ∑ j = 1 M e η j ( 2.213 ) mu_{k}=frac{e^{eta_{k}}}{1+sum_{j=1}^{M}e^{eta_{j}}}qquad(2.213) μk=1+∑j=1Meηjeηk(2.213)
上式就是softmax函数,在PRML书中,也称其为normalized exponential。同样地,我们把多项式概率分布函数改写成式2.194的标准形式,有
p ( x ∣ η ) = ( 1 + ∑ k = 1 M − 1 e η k ) − 1 e η T x ( 2.214 ) pleft ( x|eta right )=left ( 1+sum_{k=1}^{M-1}e^{eta_{k}} right )^{-1}e^{eta^{T}x}qquad(2.214) p(x∣η)=(1+k=1∑M−1eηk)−1eηTx(2.214),其中
KaTeX parse error: No such environment: eqnarray at position 8: begin{̲e̲q̲n̲a̲r̲r̲a̲y̲}̲ uleft ( x ri…
##softmax loss求导##
来自quora
根据ufldl中关于softmax loss函数的定义,有下式成立
KaTeX parse error: No such environment: eqnarray at position 8: begin{̲e̲q̲n̲a̲r̲r̲a̲y̲}̲ Jleft ( thet…
对J求 θ theta θ的偏导,可以得到
KaTeX parse error: No such environment: eqnarray at position 8: begin{̲e̲q̲n̲a̲r̲r̲a̲y̲}̲ frac{partial…
上式中,显然有 ∑ j = 1 k 1 { y ( i ) = j } = 1 sum_{j=1}^{k}mathbf{1}{y^{left ( i right )}=j}=1 ∑j=1k1{y(i)=j}=1成立,所以有
∂ J ( θ ) ∂ θ A = − 1 m ∑ i = 1 m x ( i ) [ ∑ j = 1 k 1 { y ( i ) = A } − p ( y ( i ) = A ∣ x ( i ) ; θ A ) ] frac{partial Jleft ( theta right )}{partial theta _{A} }=-frac{1}{m}sum_{i=1}^{m}x^{left ( i right )}left [ sum_{j=1}^{k}mathbf{1}{y^{left ( i right )}=A}-pleft ( y^{left ( i right )}=A|x^{left ( i right )};theta _{A} right ) right ] ∂θA∂J(θ)=−m1i=1∑mx(i)[j=1∑k1{y(i)=A}−p(y(i)=A∣x(i);θA)]
这就是ufldl里关于softmax loss的求导详细过程。
双线性插值
链接在这里https://blog.csdn.net/sinat_34474705/article/details/75125520
从公式中可以看出,双线性插值认为灰度值的变化和邻域的长度成正比,距离某个像素点越近,灰度值越接近某个像素点。
Bounding Box Regression
bounding box regression-caffe社区
Bounding Box Encoding and Decoding in Object Detection
其他资源列表
Interpretable Machine Learning: A Guide for Making Black Box Models Explainable
coco数据集
coco2014的json是一个很大的字典,主要包含以下几个单元,‘annotations’, ‘images’, ‘categories’。每个单元是一个list,list的每个单元又是一个字典,形式如下
# 'annotations'的单元
{'segmentation': [[312.29, 562.89, 402.25, 511.48 ...]], 'area': 54652, 'iscrowd': 0, 'image_id', 480023, 'bbox': [116.95, 305.86, 285.3, 266.03], 'category_id': 58, 'id': 86}
# 'images'的单元
{'license': 5, 'file_name': 'COCO_train2014_000000057870.jpg', 'coco_url': 'https://mscoco.org/images/57870', 'height': 480, 'width': 640, 'date_captured': '2013-11-14 16:28:23', ...}
# 'categories'的单元
{'supercategory': 'person', 'id': 1, 'name': 'person'}
coco官方的pythonapi里解析json是这么做的
def createIndex(self):
# create index
print('creating index...')
anns, cats, imgs = {}, {}, {}
imgToAnns,catToImgs = defaultdict(list),defaultdict(list)
if 'annotations' in self.dataset:
for ann in self.dataset['annotations']:
imgToAnns[ann['image_id']].append(ann) # ann只是1个object的标注信息,一个image_id会有多个ann
anns[ann['id']] = ann # id是某个object的id,只有1个ann
if 'images' in self.dataset:
for img in self.dataset['images']:
imgs[img['id']] = img
if 'categories' in self.dataset:
for cat in self.dataset['categories']:
cats[cat['id']] = cat
if 'annotations' in self.dataset and 'categories' in self.dataset:
for ann in self.dataset['annotations']:
catToImgs[ann['category_id']].append(ann['image_id'])
print('index created!')
# create class members
self.anns = anns
self.imgToAnns = imgToAnns
self.catToImgs = catToImgs
self.imgs = imgs
self.cats = cats
最后
以上就是谦让冰棍为你收集整理的机器学习资源exponential family双线性插值Bounding Box Regression其他资源列表coco数据集的全部内容,希望文章能够帮你解决机器学习资源exponential family双线性插值Bounding Box Regression其他资源列表coco数据集所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复