专利名称:基于gpu的条件随机场模型的数据分类方法
技术领域:
本发明涉及ー种数据分类方法,具体涉及ー种基于GPU的并行条件随机场模型的数据分类方法。
背景技术:
条件随机场(Conditional Random Field,简称CRF)是机器学习中的重要判别式模型之一,最早应用于自然语言处理过程,由此逐渐被引入数据挖掘、生物信息学、图像智能识别及搜索引擎等热门领域中。它解决了其他传统判別式模型(例如极大熵马尔科夫模 型,简称MEMMS)的标记偏置问题,并且有更加精准的训练预测效果。然而,随着分类应用的广泛,串行CRF面临了ー些问题。实际应用中,训练集数量快速增长,数据分析序列越来越长(例如ー个DNA中就包含了上千氨基酸对),特征数量越来越多(图形图像处理的特征可以达到十万甚至百万数量级),而CRF对于多特征综合建模的迭代训练过程计算复杂,耗时久。通常为了调优学习模型,会重复训练过程。由此造成了串行CRF严重耗时。实践中,对于45个特征标签的1,000,000个单词利用一阶串行CRF进行语义分割耗时,甚至需要100小吋。如此高昂的计算代价使得CRF无法有效的应用到需要实时处理的系统中,因此CRF的并行化成为ー个直观的需求。当前有效的CRF并行方法主要是划分样本集,通过消息传递接ロ(MessagePassing Interface,简称MPI)利用大规模计算机分布式处理子任务,最后汇总处理计算结果。这种方法在一定范围内获得了线性加速比,但相比于消耗的计算资源而言,性价比不高;另ー方面,图像处理器(Graphic Process Units,简称GPU)以其显存带宽大、执行单元多、浮点运算能力强且成本功耗低等特点,在通用并行计算领域逐渐有所作为,但GPU也有其自身的局限性和处理的特殊性单个处理器性能低,需要大量计算单元同时并行提升性能;内存IO消耗存在分级开销特点;并行读取共享内存效率问题等。
发明内容
本发明的目的在于提供一种基于GPU的并行条件随机场模型的数据分类方法,其具有耗时短、能有效处理线性依赖性数据、过多过长观察序列、过多特征序列特性的优点。本发明是通过以下技术方案实现的一种基于GPU的条件随机场并行实现方法,包括步骤 读取学习数据,包括观察数据序列X的长度值N,特征序列Y的长度值M,所有观察数据-特征对集合{(X,y)} (X为X中任意元素,y为Y中任意元素)、特征转移概率数组F[M] [Μ]、特征出现概率数组G[M] [N],并初始化特征权重数组λ 口、μ []、似然函数值lh、似然函数缓存值IhTemp为O ;获取显存容量GPUMem,并初始化观察数据序列X和特征序列Y的分割数组divX[]、divY[],以及其有效长度divXLen、divYLen为0,初始化分割数据标志ds为O ;判断N或者M是否大于(GPUMem)1/4 ;
如果是,则设置分割数据标志ds = 1,分割所述观察数据序列X,以获得分割位数组divX[]及其有效长度divXLen ;定义数据分割块计数器i = 1,Xi为X[l]到X[divX[l]]之间的观察数据块;传递观察数据块Xi进入GPU,以获取Xi的似然函数值IhTemp ;判断i是否大于等于divXLen ;如果是,贝1J设置Ih = Ih+IhTemp ;CPU根据Ih更新特征权重向量λ、μ,以求取似然函数梯度值; 判断似然函数梯度值是否为O ;如果是,则CPU读取新的观察数据序列X’,其长度值为N’,初始化矩阵R □口和L[][]为0,初始化X’的分割数组divX’ □、分割长度divXLen’为0,初始化最优状态序列state []为 O ;判断N’或者M是否大于(GPUMem)1/4 ;如果是,则设置分割数据标志ds’ = 1,分割观察数据X’,以获得分割位数组divX,[]及其有效长度divXLen,;定义数据分割块计数器j = 1,X,j为V [I]到V [divX[l]]之间的观察数据块;GPU根据特征权重向量λ、μ,计算观察数据-特征对集合{(X’,y)}的最大概率值,X ‘为X’ j中的任意元素,y为Y中任意元素,将概率值存入R□口,将最大概率值对应的上一观察数据对应的特征数据编号存入L[][];判断j是否大于等于divXLen’ ;如果是,GPU返回矩阵结果R口 []、L[] □至CPU ;CPU选取矩阵R最后一列中的最大概率值,根据关联矩阵L获取该最大概率值对应的上一观察数据对应的特征数据编号,在L中重复获取上一观察数据对应的特征数据编号,对应特征依次存入最优状态序列state口 ;CPU输出最优状态序列state []。本发明的方法还包括步骤若N 或者 M 没有大于(GPUMem)1/4,则 divXLen = 1,divX[l] = N ;若N’ 或者 M 没有超过(GPUMem)1/4,则 divXLen,= 1,divX,[I] = N。本发明的方法还包括步骤若i < divXLen,则设置 Ih = lh+lhTemp, i = i+1, Xi 为 X[divX[i_l]]到X[divX[i]]之间的观察数据块;返回传递观察数据块Xi进入GPU,以获取Xi似然函数值IhTemp的步骤;若j < divXLen’,则设置 j = j+l,X,j 为 X,[divX,[j_l]]到 X,[divX,[j]]之间的观察数据块;返回GPU根据特征权重向量λ、μ,计算观察数据-特征对集合{(x’,y)}的最大概率值,X ‘为X’ j中的任意元素,y为Y中任意元素,将概率值存入R□口,该最大概率值对应的上一观察数据对应的特征数据编号存入L[][]的步骤。本发明的方法还包括步骤若似然函数梯度值不为0,则返回判断N或者M是否大于(GPUMem)1/4的步骤。获取Xi的似然函数值IhTemp的步骤包括设置分割标志ds = 2,分割特征序列Y得到divY口和divYLen。定义变量k,并初始化为I。初始化矩阵状态转移概率子数组f[][]和状态出现概率子数组g[][]为O,初始化矩阵 divf []、difg[]为 O ;GPU获取Y[divY[k_l]]到Y[divY[k]]之间特征数据块,标记Yk,k = I时,Yk为Y[l]到Y[divY[l]]之间的特征数据块;按照Yk内容,设置ds = 3。分割特征转移概率矩阵F[M] [Μ],获得状态转移子数组 f 口 □,矩阵 divf 口 ;从Yk中的第一个特征开始,即初始化j = I ;GPU开辟M个线程,每个线程计算ー个特征的前向向量,线程标号tid表示处理的特征编号,结果存入前向数组alpha[tid] [j];设置j = j+1,指向Yk中的下ー特征数据;判断是否处理完Yk中所有特征数据,即j是否大于Yk长度;如果是,设置k = k+Ι,处理下一个特征序列块;判断是否已处理完所有特征序列块,即k是否大于divYLen ;如果是,GPU获取当前等待处理的第i块观察数据,标记为Xi,并从观察数据-特征对(x,y)集合中找到Xi中所有观察数据对应的特征,组成给定特征数据块Yi ;分别设置ds = 3,ds = 4,根据 Xi,Yi,分害 I] F[M] [Μ]、G[M] [N],GPU 先后获取 f[][]、g[] []、divf []、divg[];GPU利用前向数组和f[] []、g[] []、divf []、divg[]求取给定Xi-Yi序列对概率值之和,以及序列归ー化量两者相減,获得观察数据块Xi部分的似然函数值,存入lhTemp。 获取Xi的似然函数值IhTemp的步骤还包括若j < = Yk长度吋,则返回GPU开辟M个线程,每个线程计算ー个特征的前向向量,线程标号tid表示处理的特征编号,结果存入前向数组alpha[tid] [j]的步骤。获取Xi的似然函数值IhTemp的步骤还包括若k< = divYLen 时,则返回 GPU 获取 Y[divY[k_l]]到 Y[divY[k]]之间特征数据块,标记Yk,k= I吋,Yk为Y[l]到Y[divY[l]]之间的特征数据块的步骤。分割观察数据序列X,以获得分割位数组divX[]及其有效长度divXLen的步骤包括读取给定分割数据标志ds值;传输最大值tmax设定为(GPUMem)17level-(GPUMem)1/level % threadsPerBlock ;level 为用户给定 GPU 显存使用程度,默认为 5 ;threadsPerBlock为每个block中线程数,默认设置为256 ;判断ds是否等于I ;如果是,以X序列在tmax长度处开始,向前搜索语义结束符的位置,将此位置的值存入X分割位数组divX[]中,从当前分割位开始再向后循环上述搜索过程直至X结束,获得divX[]及其有效长度divXLen ;判断ds是否等于2 ;如果是,从Y序列在tmax长度处,每tmax获取ー个分割位置的值,存入Y分割位数组divY □,获得divY[]及其有效长度写入divYLen ;判断ds是否等于3 ;如果是,按照当前待处理状态序列段Yi中所有元素值,从特征转移概率数组F[M][Μ]中抽取对应列,存入状态转移概率子数组f[][]中,并将f[][]列号与抽取列在F[M][N]中列号的对应关系写入数组divfロ。分割观察数据序列X,以获得分割位数组divX[]及其有效长度divXLen的步骤还包括若ds不等于1,则返回判断ds是否等于2的步骤;若ds不等于2,则返回判断ds是否等于3的步骤;若ds不等于3,则按照当前待处理观察数据序列段Xi中所有观察数据,从特征出现概率数组G[M] [N]中抽取对应列,存入特征出现概率子数组g[][],并将g[][]列号与抽取列在G[M] [N]中列号的对应关系写入数组divgロ。本发明具有以下的优点和技术效果 (I)针对不同粒度、不同类型的模型数据采用不同分割策略进行分割,充分发挥GPU的并行性,提高模型学习和推导过程速度;(2)在采用分割策略的基础上,适当调整了 GPU并行计算的步骤以适应分段似然函数值计算的需要,有效保证了模型的准确性。
图I是本发明基于GPU的并行条件随机场模型的数据分类方法的流程图。图2是本发明步骤(7)的细化流程图。图3是本发明分割观察数据序列的细化流程图。
具体实施例方式下面结合附图对本发明进行详细说明。如图I所示,本发明基于GPU的并行条件随机场模型的数据分类方法包括以下步骤(I)读取学习数据,包括观察数据序列X的长度值N,特征序列Y的长度值M,所有观察数据-特征对集合{(X,y)} (X为X中任意元素,y为Y中任意元素)、特征转移概率数组F[M] [Μ]、特征出现概率数组G [Μ] [N],并初始化特征权重数组λ []、μ []、似然函数值lh、似然函数缓存值IhTemp为O ;根据给定的观察序列X,给定观察数据-特征对集合概率可以通过如下公式ー进行计算PCflx; = -=T7Tevpi 'S+βτGlyitX) J
\ =1プ
Ζ( )定文为 ;=Y : I〉.'rGi V;ハ·:一t,+ Pr .—,Λ·))
1. I=■■■■■ノ其中,N为观察数据序列X长度。F、G分别对应特征转移概率数组和特征出现概率数组。λ、μ为权重值向量。Z(X)为归ー化量,定义为X给定时所有可能出现的y的概率之和,即求取I的边缘分布。对于给定包含若干个x、y的X-Y序列对,可以根据上式分别求出其出子序列对χ-y概率表达式,其中包含了 λ、μ系数。
(2)获取显存容量GPUMem,并初始化观察数据序列X和特征序列Y的分割数组divX[]、divY[],以及其有效长度divXLen、divYLen为0,初始化分割数据标志ds为O ;(3)判断N或者M是否大于(GPUMem)1/4 ;如果是,转到步骤(5),否则转到步骤
(4);(4) divXLen = I, divX[l] = N。转到步骤(6);(5)设置分割数据标志ds = 1,分割所述观察数据序列X,以获得分割位数组divX[]及其有效长度divXLen ;在元素X给定分割后,观察数据-特征对集合可以表示成{(xd,yd)}
d = [I, dimXLen] ° 厶
式ー此时可以看成关于λ、μ为未知參数的多项式函数P (yd I xd,λ, μ),即似然函数。模
型学习的过程此时等价于对于给定,学习过程找到满足
it
Γγ\γ\οο %eriRifis f / ^I r-s-. - ,-,
L0082」 a = 9、L{A,m = 9 <r-- v. l\ ,
&=1
Ai · · V 翁·ψ -vf= ·ΓΙβ ** 口 θ Ρ(^Τ^'*[*h ■ χ^) * <Γ ム'λ— α;:: J
i=—"Is-I其中f、g分别表示对应F、G的子数组。为了便于计算,常用方法是对上面的公式进行取以e为底的对数,在保证函数性质基础上,将大量的乘法,转换成加法计算,減少计算量,转换后公式如下,η为每个观察数据序列分块中观察数据的个数
HvXlmk TlPrtfers= 2, ::2/:,/( レ^i)+ デ邊·、:.·卜
嫌 λ对于离散型随机变量,log似然函数的最大值求解过程可以转换成了对应的梯度求解过程当函数梯度为O吋,P(Ylx)可以取得最大值。接下来的详细描述过程将以λ为例,说明函数梯度的求解过程,μ计算过程与之一祥。对λ求取梯度后得到函数
r;ηη^iap)= ;'レ)(ΡΟΙν,;) /;:vひ),へ—*Λ 雇
ImZy对于々JΣ;=._/;:—Vd.:.)进ー步进行化简后可得到
__ /5\... —\POIλI = 2 I〉I
y、! * ,\ = \ \ い/
,·· \
η I __\
II= > I > /v;. Iri 1>,\χ ) I
i=\ い.::こべ/其中有如下定义
^ …e:-;D{7.J V-, V ,λ . ; -t ο ;; V..:,^- Y e.':::丨..............丫 て................:.........む.....;:ν...........................マ.マ=α .:.U: )α ( ,y^) = exp ( λ Tf (^i,,xd) + μ Tg (Ji,xd))这里的a (yi y^)可视为前向向量。根据上面的描述可以得到最终的梯度求解过程公式ニ如下IiLftll)論% e_-J麻Λ-Λ))。
(6)定义数据分割块计数器i = l,Xi为X[l]到X[divX[l]]之间的观察数据块;(7)传递观察数据块Xi进入GPU,以获取Xi的似然函数值IhTemp ;边缘分布的变换求取过程中,涉及到大量可并行化的前向向量计算。为了提高模型学习速度,所以在获取Xi的似然函数值IhTemp的过程中,先按后续描述子步骤(7_1) (7-9)描述求取所有的前向向量值,存入前向矩阵。然后按照子步骤(7-10) (7-12)描述计算分段似然函数值。步骤(7-10) (7-12)的详细实现过程如下描述。GPU 计算公式 二中的
权利要求
1.一种基于GPU的条件随机场并行实现方法,其特征在于,包括步骤 读取学习数据,包括观察数据序列X的长度值N,特征序列Y的长度值M,所有观察数据-特征对集合{(x,y)} (X为X中任意元素,y为Y中任意元素)、特征转移概率数组F[M][M]、特征出现概率数组G[M] [N],并初始化特征权重数组X []、ii []、似然函数值lh、似然函数缓存值IhTemp为O ; 获取显存容量GPUMem,并初始化观察数据序列X和特征序列Y的分割数组divX[]、divY[],以及其有效长度divXLen、divYLen为O,初始化分割数据标志ds为O ; 判断N或者M是否大于(GPUMem)1/4 ; 如果是,则设置分割数据标志ds = I,分割观察数据序列X,以获得分割位数组divX[]及其有效长度divXLen ; 定义数据分割块计数器i = l,Xi为X[l]到X[divX[l]]之间的观察数据块; 传递观察数据块Xi进入GPU,以获取Xi的似然函数值IhTemp ; 判断i是否大于等于divXLen ; 如果是,则设置Ih = Ih+IhTemp ; CPU根据Ih更新特征权重向量X、ii,以求取似然函数梯度值; 判断似然函数梯度值是否为O ; 如果是,则CPU读取新的观察数据序列X’,其长度值为N’,初始化矩阵R[][]和L[][]为O,初始化X’的分割数组divX’ []、分割长度divXLen’为O,初始化最优状态序列state []为O ; 判断N’或者M是否大于(GPUMem)1/4 ; 如果是,则设置分割数据标志ds’ = 1,分割观察数据X’,以获得分割位数组divX’ []及其有效长度divXLen’ ; 定义数据分割块计数器j = 1,X’ j为X’ [I]到X’ [divX[l]]之间的观察数据块;GPU根据特征权重向量\U,计算观察数据-特征对集合Kx’,y)}的最大概率值,X ‘为X’ j中的任意元素,y为Y中任意元素,将概率值存入R[][],将最大概率值对应的上一观察数据对应的特征数据编号存入L[][]; 判断j是否大于等于divXLen’ ; 如果是,GPU返回矩阵结果R[] []、L□□至CPU ; CPU选取矩阵R最后一列中的最大概率值,根据关联矩阵L获取该最大概率值对应的上一观察数据对应的特征数据编号,在L中重复获取上一观察数据对应的特征数据编号,对应特征依次存入最优状态序列state 口 ; CPU输出最优状态序列state []。
2.根据权利要求I所述的条件随机场并行实现方法,其特征在于,还包括步骤 若 N 或者 M 没有大于(GPUMem)1/4,则 divXLen = 1,divX[l] = N ; 若 N,或者 M 没有超过(GPUMem)1/4,则 divXLen,= 1,divX,[I] = N。
3.根据权利要求I所述的条件随机场并行实现方法,其特征在于,还包括步骤若 i < divXLen,则设置 Ih = lh+lhTemp, i = i+1,Xi 为 X[divX[i_l]]到 X[divX[i]]之间的观察数据块;返回传递观察数据块Xi进入GPU,以获取Xi似然函数值IhTemp的步骤;若 j < divXLen’,则设置 j = j+l,X,j 为 X,[divX,[j_l]]到 X,[divX,[j]]之间的观察数据块;返回GPU根据特征权重向量X、ii,计算观察数据-特征对集合{(x’,y)}的最大概率值,X ‘为X’ j中的任意元素,y为Y中任意元素,将概率值存入R[][],该最大概率值对应的上一观察数据对应的特征数据编号存入L[][]的步骤。
4.根据权利要求I所述的条件随机场并行实现方法,其特征在于,还包括步骤 若似然函数梯度值不为O,则返回判断N或者M是否大于(GPUMem)1/4的步骤。
5.根据权利要求I所述的条件随机场并行实现方法,其特征在于,获取Xi的似然函数值IhTemp的步骤包括 设置分割标志ds = 2,分割特征序列Y得到divY[]和divYLen。定义变量k,并初始化为I。初始化矩阵状态转移概率子数组f[][]和状态出现概率子数组g[][]为O,初始化矩阵 divf []、difg[]为 O ; GPU获取Y[divY[k-l]]到Y[divY[k]]之间特征数据块,标记Yk,k = I时,Yk为Y[I]到Y[divY[l]]之间的特征数据块; 按照Yk内容,设置ds = 3。分割特征转移概率矩阵F[M] [M],获得状态转移子数组f[]□,矩阵 divf 口 ; 从Yk中的第一个特征开始,即初始化j = I ; GPU开辟M个线程,每个线程计算一个特征的前向向量,线程标号tid表示处理的特征编号,结果存入前向数组alpha[tid] [j]; 设置j = j+1,指向Yk中的下一特征数据; 判断是否处理完Yk中所有特征数据,即j是否大于Yk长度; 如果是,设置k = k+1,处理下一个特征序列块; 判断是否已处理完所有特征序列块,即k是否大于divYLen ; 如果是,GPU获取当前等待处理的第i块观察数据,标记为Xi,并从观察数据-特征对(x,y)集合中找到Xi中所有观察数据对应的特征,组成给定特征数据块Yi ; 分别设置 ds = 3,ds = 4,根据 Xi,Yi,分害I] F[M] [M]、G[M] [N],GPU 先后获取 f [][]、g[] []、divf []、divg[]; GPU利用前向数组和f[] []、g[] []、divf []、divg[]求取给定Xi-Yi序列对概率值之和,以及序列归一化量两者相减,获得观察数据块Xi部分的似然函数值,存入lhTemp。
6.根据权利要求5所述的条件随机场并行学习方法,其特征在于,获取Xi的似然函数值IhTemp的步骤还包括 若j < = Yk长度时,则返回GPU开辟M个线程,每个线程计算一个特征的前向向量,线程标号tid表示处理的特征编号,结果存入前向数组alpha[tid] [j]的步骤。
7.根据权利要求5所述的条件随机场并行学习方法,其特征在于,获取Xi的似然函数值IhTemp的步骤还包括 若k < = divYLen时,则返回GPU获取Y[divY[k_l]]到Y[divY[k]]之间特征数据块,标记Yk, k = I时,Yk为Y[I]到Y[divY[l]]之间的特征数据块的步骤。
8.根据权利要求I所述的条件随机场并行学习方法,其特征在于,分割观察数据序列X,以获得分割位数组divX[]及其有效长度divXLen的步骤包括 读取给定分割数据标志ds值;传输最大值tmax设定为(GPUMem)1/1 evel-(GPUMem)17level% threadsPerBlock ;level 为用户给定 GPU 显存使用程度,默认为 5 ;threadsPerBlock为每个block中线程数,默认设置为256 ; 判断ds是否等于I ; 如果是,以X序列在tmax长度处开始,向前搜索语义结束符的位置,将此位置的值存A X分割位数组divX[]中,从当前分割位开始再向后循环上述搜索过程直至X结束,获得divX[]及其有效长度divXLen ; 判断ds是否等于2; 如果是,从Y序列在tmax长度处,每tmax获取一个分割位置的值,存入Y分割位数组divY □,获得divY 口及其有效长度写入divYLen ; 判断ds是否等于3; 如果是,按照当前待处理状态序列段Yi中所有元素值,从特征转移概率数组F[M] [M]中抽取对应列,存入状态转移概率子数组f[][]中,并将f[][]列号与抽取列在F[M] [N]中列号的对应关系写入数组divf []。
9.根据权利要求8所述的条件随机场并行实现方法,其特征在于,分割观察数据序列X,以获得分割位数组divX[]及其有效长度divXLen的步骤还包括 若ds不等于1,则返回判断ds是否等于2的步骤; 若ds不等于2,则返回判断ds是否等于3的步骤; 若ds不等于3,则按照当前待处理观察数据序列段Xi中所有观察数据,从特征出现概率数组G[M] [N]中抽取对应列,存入特征出现概率子数组g[][],并将g[][]列号与抽取列在G[M] [N]中列号的对应关系写入数组divg[]。
全文摘要
本发明提供了一种基于GPU的条件随机场模型的数据分类方法,包括以下步骤CPU读取训练数据集,根据匹配模板定义法则,生成特征集。CPU初始化相关矩阵和向量,先计算出观察序列的起始结点对应所有特征的初始概率。CPU判断是否数据分割处理。传递参数后,GPU根据处理数据规模自动选择合适并行计算方法,并行计算每个观察点对应每个特征的最大概率值。计算结束后,返回结果由CPU判断数据处理完成情况和最后的输出。本方法具有通用性好、训练速度快、有效处理大规模序列数据、自适应力的特点。
文档编号G06K9/62GK102663415SQ201210072409
公开日2012年9月12日 申请日期2012年3月19日 优先权日2012年3月19日
发明者冯晓文, 章勤, 郑然 , 金海 , 韩丹 申请人:华中科技大学