Random sample的数学变换
这个random sample本质上是一种采样策略,可以参考链接https://blog.csdn.net/qq_43243579/article/details/136331123
给定input = {source, topp, topk, temperature},输出output = {index}
source是一个一维的长度为voc的向量,数据类型为float或者half
topp是一个位于(0,1)之间的float类型的常数
topk是一个正整数
temperature是一个float类型的常数
从input到output的数学变换如下所示:
1:针对source里面的每个元素缩放得到source = {source[i]/temperature},0 <= i < voc
2:对source做softmax变换得到source = {exp(source[i]/temperature)},0 <= i < voc
3:对source进行排序,得到前topk个最大值组成的新向量z,z的长度为topk,存储的是第二步中source的按照从大到小顺序排列的前topk个最大值,同时维护一个长度为topk的向量indGdram,indGdram的每个元素保存的是对应z向量元素在原始source里面的索引
4:针对向量z,借助下面这段伪代码得到索引end,表示前end个z元素不超过topp。
int end =