- 从零开始大模型开发与微调:基于PyTorch与ChatGLM
- 王晓华
- 552字
- 2024-12-31 17:37:12
2.1.3 Python代码小练习:计算Softmax函数
对于Python科学计算来说,最简单的想法就是可以将数学公式直接表达成程序语言,可以说,Python满足了这个想法。本小节将使用Python实现和计算一个深度学习中最为常见的函数——Softmax函数。至于这个函数的作用,现在不加以说明,笔者只是带领读者尝试实现其程序的编写。
Softmax函数的计算公式如下:
其中Vi是长度为j的数列V中的一个数,代入Softmax的结果就是先对每一个Vi取以e为底的指数计算变成非负,然后除以所有项之和进行归一化,之后每个Vi就可以解释成:在观察到的数据集类别中,特定的Vi属于某个类别的概率,或者称作似然(Likelihood)。
提示:Softmax用以解决概率计算中概率结果大而占绝对优势的问题。例如函数计算结果中的2个值a和b,且a>b,如果简单地以值的大小为单位衡量的话,那么在后续的使用过程中,a永远被选用,而b由于数值较小不会被选择,但是有时也需要使用数值较小的b,Softmax就可以解决这个问题。
Softmax按照概率选择a和b,由于a的概率值大于b,因此在计算时a经常会被取得,而b由于概率较小,取得的可能性也较小,但是也有概率被取得。
Softmax公式的代码如下:
import numpy def softmax(inMatrix): m,n = numpy.shape(inMatrix) outMatrix = numpy.mat(numpy.zeros((m,n))) soft_sum = 0 for idx in range(0,n): outMatrix[0,idx] = math.exp(inMatrix[0,idx]) soft_sum += outMatrix[0,idx] for idx in range(0,n): outMatrix[0,idx] = outMatrix[0,idx] / soft_sum return outMatrix
可以看到,当传入一个数列后,分别计算每个数值所对应的指数函数值,将其相加后计算每个数值在数值和中的概率。
a = numpy.array([[1,2,1,2,1,1,3]])
结果请读者自行打印验证。