郭军军,白硕栋,王 乐
(西安工业大学 计算机科学与工程学院,西安 710021)
深度学习是机器学习的重要分支之一,近年来由于其突出的性能而备受工业界和学术界的广泛关注[1].深度学习的基本原理是模仿人脑中多层神经节点堆叠在一起构成的深度神经网络完成认知学习.基于数据驱动,深度学习技术能够自动抽取特征进行由浅入深学习,试图求解难以用传统机器学习方法解决的复杂问题,例如游戏竞赛[2]、图像分类[3]、语音识别[4]和机器翻译[5]等.
最近,国内外专家学者纷纷将深度学习引入到信道译码领域.借助深度神经网络,一些中短长度的高密度校验码(High-Density Parity-Check,HDPC)译码性能大幅提高,且译码复杂度相对较低[6-11].鉴于构造译码训练集的困难性,Eliya 等利用译码概率的独立性特点,通过训练HDPC 码对应Tanner 图中消息交换边的权重,分别提出了前馈神经网络译码算法和循环神经网络译码算法[9,10].中科大梁飞等提出了一种基于迭代的置信传播与卷积神经网络的组合译码方法,该译码方法便于并行实现,可广泛用于各类线性分组码[11].但是,目前所提出的深度神经网络译码器由于时间和空间开销较大,从而制约了在一些诸如空间受限、低延时、低功耗的物联网和存储芯片电路系统等领域的应用.
针对现有译码方法的不足,受到文献[12]启发,提出了针对加性高斯白噪声信道下HDPC 码的基于深度神经网络的量化最小和译码算法—QMSND.仿真实验结果表明,所提出的方法仅需要256 个量化阶(8 比特表示)即可达到与现有浮点型神经网络译码器相同的译码性能,因此便于硬件实现,具有一定的实用价值.
一个人工神经网络是由多个相连的神经元组成的.每个神经元就是一个最小的计算单元,通过累加其输入权重和可选的偏置量并利用非线性激活函数将结果直接输出或传递给其它神经元.这些神经元分层排列构成了输入层、隐层和输出层.如果神经网络包括多个隐层,如卷积层、池化层、循环层和激活层等,则称这类神经网络为深度神经网络(Deep Neural Network,DNN)[1].
令r和s分别表示DNN 的输入和输出,L为层数或深度,ρ为相关参数,则深度神经网络的计算模型可用式(1)来表示.
从式(1)中可知,每一层神经网络的功能都是将上一次产生的结果作为输入,函数经逐级复合,将问题化繁为简.使用大量测试数据,在损失函数的约束下,对目标函数进行最优化处理,最终训练出合适的深度神经网络模型.
设一个二元HDPC 码的校验矩阵对应Tanner 图模型为G=(VUC,E),图G中 变量节点集V={v1,v2,···,vn},校验节点集C={c1,c2,···,cr},n和r分别表示校验矩阵的列数(码长)和行数,E是变量节点与校验节点之间相连的边集,E=V×C.如果校验矩阵的第i列 第j行元素是非零的,则Tanner 图G的 节点vi与cj之间存在一条边vi,cj>∈E.在不产生歧义的情况下,本文后面表示变量节点和校验节点时省略其下标值.在加性高斯白噪声信道下,变量节点v的对数似然比LLR 的计算见式(2).
式(2)中yv为码字位cv对应的信道接收值,σ信道噪声方差.在HDPC 码最小和译码算法中,消息沿着变量节点和校验节点之间的边进行迭代传递.令表示在第l次迭代中由变量节点v 传递到校验节点c 的消息,同理可定义为第l次迭代中由校验节点c传递到变量节点v的消息.在第0 次迭代中,为变量节点v 在其信道观察值对应的消息,与校验节点c 无关,用mv来 表示.当l>0时,变量节点的消息更新规则如下所示:
校验节点的消息更新是由上一次进入校验节点消息的函数决定的.
在式(3)和(4)中,N(v)是Tanner 图中变量节点v的邻居校验节点集合,N(c)是校验节点c的邻居变量节点集合.若x>0 ,符号函数s ign(x)=1,否则s ign(x)=-1.
若采用基于深度学习的最小和译码时,校验节点的消息更新如式(5)所示.
式(5)中,激活函数R eLU(x)=max(x,0),调优参数是通过小批次随机梯度下降法学习得到的非负实数.
为了便于硬件电路实现,本文提出了一种基于多阶量化的HDPC 码最小和译码算法.由于采用了事先训练好的深度神经网络进行一次性译码,因此译码速度大幅提高.信道噪声和译码消息经非均匀量化器过滤,采用有限比特表示量化阶,可以有效节约存储空间.量化激活函数 Q ReLU(x)=max(Q(x),0),其中量化函数Q(x)见式(6).
式(6)中,门限集合T={T1,T2,···,TM},量化阶Li是 正整数,量化阶的数量为M+1.量化阶的选择会影响译码的性能,且与门限之间存在着非线性关系,因此需要针对不同的码通过学习来确定量化阶及其门限值的大小.
假设码长为n的二元高密度BCH 码C ∈{0,1}n,一个码字c ∈C经无记忆信道传输后,其对应的信道接收向量y=(y1,y2,···,yn),译码器输出的估计码字向量所提出的基于深度学习的量化最小和译码QMSND 算法描述如下:
(1)变量节点更新
通过式(3)计算由校验节点(除本节点外)传入到变量节点的消息.当l=0时,
(2)校验节点更新
由变量节点(除本节点外)进入到变量节点的消息由式(7)计算.
(3)译码判决
如果>0 ,则对应码位的判决值=0;否则=1.
(4)停止条件
QMSND 译码算法的最大迭代次数与码长、码的结构以及信道噪声大小有关.一般而言,码字结构越复杂、码长越长或信道质量越差,译码最大迭代次数的设值也越大.通常,为了平衡译码性能和速度,对于中短长度的HDPC 码,如BCH 或Polar 码的最大迭代次数设置在5~30 之间.
本文实验所采用的深度神经网络是构建在基于TensorFlow 的Keras 框架之上.使用Python 语言编写仿真程序,操作系统平台为Windows 10 专业版,采用蒙特卡洛法进行试验并比较高密度BCH 码在不同信噪比下的性能.为了加快训练速度,应用了英伟达公司的GeForce GTX 1080 Ti 系列图形加速GPU.
本文所采用的深度神经网络译码器是对Tanner图边的权重和量化阶进行训练.交叉熵函数定义为:
式(9)中,ov是深度神经网络的非线性输出sigmoid 函数,定义为
所构建的量化最小和神经译码器QMSND 是基于深度循环神经网络(Recurrent Neural Network,RNN)的,包括1 个输入层、4 个循环层和1 个输出层.其中输入层又细化为调制层、噪声层和LLR 层,每个循环层对应一次完整的量化最小和译码迭代过程,循环层内进一步细化为变量节点计算层、校验节点计算层(QReLU 量化激活层).变量节点计算层完成式(3)的计算任务,校验节点计算层对进入节点的信息进行量化激活,上次校验节点的计算结果作为下一次循环变量节点的输入,循环层的训练目标是最小化交叉熵函数式(9).循环层最后输出经式(7)计算后得到译码的最终结果.
训练数据来自于BCH 码的全零码字在加性高斯白噪声信道的随机构造的数据集,信噪比范围从1 dB 到8 dB.在不同信噪比下,采用小批量随机梯度下降方式,每次训练批次提交20 个码字,共使用1600 个训练样例.量化阶采用非均匀间隔,间隔大小基本服从正态分布,通过学习确定不同间隔大小.由于循环神经网络前后层之间的存在相关性约束,每层学习时的参数都会发生变化,从而使得训练速度减慢.因此,在训练过程中学习率r设置较小.本次训练中,我们将r设置为0.001.
为了验证本文提出方法的正确性和有效性,选取了三个典型的BCH 码作为测试码,分别是BCH(63,36),BCH(63,45)和BCH(127,99).本次实验中量化阶数选择了128 和256 两种,不同BCH 码的译码性能比较分别见图1、图2和图3.
图1是采用传统和积译码SPA、文献[12]提出的DNNMS 和本文提出的7 比特量化QMSND-128 以及8 比特量化QMSND-256 译码算法对BCH(63,36)码的误比特率BER 进行数值仿真结果比较.从图1中可以看出,当信噪比大于3 dB,QMSND 译码性能逐步改善,QMSNND-256 译码器性能逼近未经量化处理的DNNMS译码器;在信噪比为7 dB 时,SPA 误码率为9.7×10-4,DNNMS 误码率是1.2×10-4,QMSNND-128 和QMSNND-256 译码器的误码率分别是6.8×10-4和2×10-4.
图1 BCH(63,36)性能仿真图
图2是对BCH(63,45)码进行性能数值比较.在误码率为2.5×10-4时,SPA 译码器信噪比是8 dB,QMSND-256 译码器的信噪比为6.45 dB,本文提出的8 比特量化译码性能提高1.55 dB,与DNNMS 性能差距仅0.18 dB.
图2 BCH(63,45)性能仿真图
图3是对BCH(127,99)长码进行仿真试验得到的译码性能比较,其仿真结果与前两个码类似.但QMSND量化译码性能改进没有前两个码那样显著,这是因为随着码长增加,样本训练复杂度急剧上升导致量化精度降低.
图3 BCH(127,99)性能仿真图
从以上三个译码性能比较图中可以看出,在低信噪比区域,传统的和积译码SPA、基于深度神经网络的最小和译码DNNMS 以及本文提出的128 和256 阶量化神经最小和译码QMSND 的译码性能差距很小,但在中到高信噪比区域,SPA 译码性能明显较差,DNNMS性能至少比SPA 高1 dB,而QMSND-128 虽然没有DNNMS 的译码性能优异,但总体而言比SPA 要好,特别是QMSND-256 译码性能与DNNMS 十分接近.
为了提高加性高斯白噪声信道下高密度BCH 码译码的高效性和实用性,本文提出了基于深度神经网络的量化最小和译码方法—QMSND.仿真实验结果表明,所提出的方法仅需要256 个量化阶(8 比特)即可达到与现有浮点型神经网络译码器相近的译码性能.所提出的方法译码性能好,便于硬件实现,具有一定的应用前景.今后将对进一步优化译码算法,研究单轮迭代时能够自适应量化阶区间的学习方法,提高译码性能和硬件实现效率.