我们从初中就开始学习指数和对数,但即使是程序员平时也很少用到这些方法。本篇就来看看如何使用它们解决具体问题。
指数
在多分类问题中,一般在最后一步使用Softmax,将数值转换成属于各个类别的概率,比如根据输入物品图片,通过一系列处理,判别它是衣服、鞋子、帽子各类别的概率。具体公式如下:
其中i为某一类别,j用于遍历所有可能的类别,Si计算的是某一类别的概率,即某一类别在所有类别中的占比。其中用到了自然指数e。e的图型如下:
首先,e指数是单调上升的,也就是说x越大y越大,变换之后的大小关系不会改变;且当x为负数时,y也是正数,这点非常重要。仍以物品分类为例,假设深度网络输出的最后一层是[1,-1,2],其中包含负数,而概率在[0,1]之间,又不可能是负数。通过Softmax公式计算出每一分类的概率为:[0.25949646 0.03511903 0.70538451],完美地解决了这一问题。
对数
条件概率常被用于序列预测问题,比如使用模型写作时,使用前N个字预测第N+1字,实际也是概率问题,比如给出前两个字“白日”预测第三个字,第三个字备选项是包含10000个字的字库,计算其中每一字的概率。假设其中“依”字概率最大为0.3,再使用“日依”预测下一个字,其中概率最大的是“山”概率为0.15,以此类推,预测最后一个字为“尽”的概率为0.2。
能预测出“白日依山尽”的概率,即给定条件“白日”,“依山尽”三个字同时出现的概率为0.30.150.2=0.009。如果预测一个很长的序列,小数连乘的结果很可能趋近于0,这里常使用对数方法。自然对数做图如下:
由于负数没有对数,图像中只有x>0的部分。自然对数也是单调上升的;使用log后连乘变为连加,上例变成:
log(0.30.150.2)=log(0.3)+log(0.15)+log(0.2)=-4.71
如果使用log计算概率,概率取值在[0,1]之间,那么只需要关注图中红色线条部分。对概率x取对数,y最大值为0,最小值为负无穷,在前面加一个负号,将值转换到0到正无穷,并将其作为误差函数Loss=-log(p),当p值较小时(可能性小)Loss为一个较大的误差;当p值接近1时误差Loss趋近于0,这就是用负对数似然计算误差。
cosine距离
cosine距离常用于计算两个向量的距离,如用于图片搜索,对比文字描述的相似度,计算距离等等。设想二维情况下,两个向量的夹角,如下图所示:
当夹角θ接近0时,cos(θ)=1,向量距离很近,当夹角接近90度时,两向量正交二者无关cos(θ)=0;当夹角为180度时,方向相反cos(θ)=-1。
cosine距离公式如下:
其中u和v都是n维向量,分子为点积操作,分母可看作对各个维度的归一化。从直觉上看,它们每一维度上的值越接近,整体距离越近。因此也说:向量之间夹角的余弦也是单位向量均之间的点积。程序中很多向量相似度都通过点积计算,速度也非常快。
在选择距离计算方法时,cosine距离可看作是计算向量间的相似程度,而欧式距离计算的是两向量间的差异程度。