一种神经网络中自定义损失函数的设计与分析

2019-04-29 05:52张鼎松
长春师范大学学报 2019年4期
关键词:均方车流量网络系统

刘 波,张鼎松

(1.巢湖学院,安徽巢湖 238000;2.微软(中国)有限公司,上海 201100)

神经网络中的损失函数,又叫误差函数,是用来刻画神经网络的输出值与真实值之间的误差大小的。对神经网络进行训练的目标就是使这个误差最小化,即通过不断的训练使误差无限趋于零,每一次训练都会更新神经网络系统的权重参数。一般当误差小于某个既定的阈值时,会认为误差已经足够小,可停止训练,此时得到的一组神经网络的权重参数就是系统最终的权重值。影响权重参数最终值的因素有很多,其中损失函数对参数的影响不容忽视,如果损失函数使用得不恰当,即使训练次数再多,用得到的参数组成的神经网络也不是符合要求的神经网络模型[1-2]。

对于不同的问题,损失函数也不相同,比如,在分类问题中经典的损失函数是交叉熵,在线性回归问题中常用的损失函数是均方误差函数。然而,针对一些特定的实际问题,并不能一味地套用上述方法,需要根据实际情况自定义损失函数[1,3]。

1 常用损失函数及其局限性

1.1 交叉熵

在分类问题中,在神经网络的训练中常采用交叉熵作为损失函数,交叉熵这个概念源于信息论,交叉熵的公式定义为:

H(p,q)=-∑p(x)logq(x).

当作为分类问题中神经网络的损失函数时,p表示真实值的概率分布,q表示预测值的概率分布,交叉熵反映的是p和q之间的差异[4]。例如,假设p=(0,0,1,0),q1=(0.1,0.1,0.7,0.1),q2=(0.2,0.2,0.5,0.1),明显地,q1与p更接近。而交叉熵的计算结果如下:

H(p,q1)=-(0×log 0.1+0×log 0.1+1×log 0.7+0×log 0.1)≈0.155.

H(p,q2)=-(0×log 0.2+0×log 0.2+1×log 0.5+0×log 0.1)≈0.301.

可见,H(p,q1)

1.2 均方误差

在回归问题中,在神经网络的训练中常采用均方误差作为损失函数,均方误差的公式定义如下:

这个公式反映了真实值y与预测值y′之间差异的大小,其中n为训练样本的数量。

1.3 局限性

上述这些常用的损失函数通用性很好,适用于很多应用场合,根据这些损失函数训练得出的神经网络模型都是完全标准的模型。但对于某些特定环境的实际问题,有时并不需要一个标准模型,而需要一个符合实际要求的模型,这个符合实际要求的模型不一定是标准的。因此,还需要根据实际需求,设计自定义损失函数,从而保证得到的神经网络模型更贴合实际情况。

2 实际问题及自定义损失函数

2.1 实际问题的提出

在现实生活中,常常有一些实际问题采用常用损失函数得到的效果并不能让人满意。比如关于高速公路收费站,有时会根据车流量来开放收费通道数,车流量少时,会关闭若干通道数以节省收费员人数等人力成本,而在节假日等车流高峰日,会多安排一些收费员上班。而作为交通管理部门或许希望多开放一些通道数,以进一步保持道路畅通。关于这个实际问题,在车流量预测的神经网络系统中,由于属于回归问题,损失函数通常采用均方误差。然而,均方误差不能很好地反映无论是交管部门还是收费站管理公司任意一方的需求,交通管理部门希望模型预测出来的值是偏多的,从而保证多开放通道数,而收费站管理公司希望模型预测出来的值是偏少的,从而节省人力成本。

2.2 自定义损失函数的提出和设计

对于上述实际问题,使用经典的损失函数得到的将是标准模型。而实际情况中,无论是交通管理部门还是收费站管理公司,都并不需要这样的标准模型。因此,需要针对该实际问题,进行自定义损失函数的设计,自定义损失函数如下:

3 对比实验

3.1 实验的设计

图1 实验所用的神经网络系统结构图

基于Tensorflow编写代码进行对比实验。设计一个预测车流量的神经网络系统,简单起见,该神经网络系统仅有输入层和输出层,没有隐藏层。输入层有3个神经元x1、x2和x3,输出层有一个神经元y,y即为输出的预测值。由该模型可推算该神经网络系统的权重值w有3个,分别记作w1、w2和w3[5]。具体结构如图1所示。

实验所需的数据集是通过随机数生成的。在Tensorflow中,随机生成输入数据x的代码如下:

x=rdm.rand(100,3)

而真实值yt设置为在3个输入之和的基础上再加上一个小的随机数,相应的TensorFlow代码编写如下:

y=[[x1+x2+x3+(rdm.rand()/10.0-0.05)]for(x1,x2,x3)in x]

在实验中分别设置a=20,b=1,或者a=1,b=20,其它不变。为表述方便,将设置a=20,b=1的实验记作实验1,将设置a=1,b=20的实验记作实验2。在Tensorflow中,该自定义损失函数的代码可表示为self_defined_loss=tf.reduce_sum(tf.where(tf.greater(y,yt),(y-yt)*a,(yt-y)*b))。其中,yt表示真实值,y表示预测值,self_defined_loss为损失函数[1]。

同时,为了与传统的经典均方误差函数做对比,在实验1或实验2中将原有的自定义损失函数替换为均方误差函数再进行一次实验,记作实验3。在Tensorflow中,均方误差函数的代码可表示为:

loss=tf.losses.mean_squared_error(y,yt).

其中,yt表示真实值,y表示预测值,loss为损失函数。此外,实验中的训练次数统一设为10000次。

3.2 实验结果及对比分析

表1展示了训练10000次之后3个实验的最终结果,即得到的3个模型的最终权重值。

表1 三次实验得到的最终权重

从实验1得到的预测函数为0.97799325×x1+0.97289824×x2+0.9656626×x3,系数都小于1,偏向于少预测车流量,符合收费站管理公司的需求。

从实验2得到的预测函数为1.00788939×x1+1.03763902×x2+1.02715361×x3,系数都大于1,偏向于多预测车流量,符合交管部门的需求。

从实验3得到的预测函数为0.98959422×x1+1.01077771×x2+0.99803776×x3,实验3所用的损失函数不是自定义的损失函数,而是经典的均方误差函数,最终的预测函数更偏向于标准值,但得到的模型并不是一个符合实际需求的模型。

4 结语

本文在分析神经网络系统中经典损失函数局限性的基础上,针对实际问题提出一种自定义损失函数,并设计实验进行对比分析,结果表明使用自定义的损失函数比使用经典的均方误差函数更符合实际需求。因此,在使用神经网络解决实际问题时,需要根据实际需求选用经典的损失函数或者设计自定义损失函数。

猜你喜欢
均方车流量网络系统
构造Daubechies小波的一些注记
Beidou, le système de navigation par satellite compatible et interopérable
基于DEMATEL-ISM的军事通信网络系统结构分析
基于车流量监测系统的荆岳大桥拥堵预警方法探讨
基于线性最小均方误差估计的SAR图像降噪
高速公路网络系统配置浅析
基于最小均方算法的破片测速信号处理方法
参考答案
高速公路重大节假日免费车流量金额算法研究与应用
纯电动客车的CAN网络系统设计与开发