(28)损失度Loss的计算方法


本节将进行数据可视化,例如将Epoch训练的过程运行10000次, 每100个Epoch看一下损失度调整的程度。在Tensorflow可视化图中运行一下,Tensorflow给出了动态的损失度的曲线图,根据损失度曲线看运行的效果,这也是以后做项目的核心工作。Forward  Propagation与Back Propagation是阴阳互动的过程,在计算过程中有了损失,有损失要看到这个损失,如果看见损失而不减少损失,磨损就会非常大,所有的奋斗都是为了一个目的,要达到零磨损的状态。在计算过程中,激活函数和梯度下降的计算不一样,处理的业务不一样,导致我们计算的误差函数也不一样。例如,最原始的误差计算函数是预测值减去真实值,将预测值和真实值进行比较,第1条记录将预测值 0.4385711425310979减去真实值0;第2条记录将预测值0.4129240972484869减去真实值1;第3条记录将预测值0.4651651378938895 减去真实值1;第4条记录将预测值0.43581722934765915 减去真实值0;

Prediction: 0.4385711425310979 while real value is0Prediction: 0.4129240972484869 while real value is1Prediction: 0.4651651378938895 while real value is1Prediction: 0.43581722934765915 while real value is0 



本章节人工智能神经网络损失度Loss的计算方法:

(1) Loss的计算方法一:最简单的损失度Loss的计算方式是把每个实例Instance计算的预测Predicted的结果减去真实值Real Value(在AI盘古案例中,根据instances的第1列,第2列在神经网络计算出的预测结果,然后减去真实值0 或者减去真实值1),然后进行累加,累加完毕后除以所有的Instances的个数。

方法一的优点:方便理解;

方法一的缺点:假设instances第1个实例[0,0]的计算的误差结果是0.3,第2个实例[0,1]的计算的误差结果是-0.5,第3个实例[1,0]的计算的误差结果是0.2,第4个实例[1,1]的计算的误差结果是0,整体的误差0.3+(-0.5)+0.2+0=0,将误差累加起来然后除以它的个数,这里instances有4个实例,因此除以4,这样计算出的误差结果为0,而0表示没误差,但实际上肯定有误差。因此,方法一不具有实用价值,没有真实的AI框架采用这种算法;


(2) Loss的计算的方法二: 方法一问题的痛点是不同的误差计算结果可能相互影响,0.3+(-0.5)+0.2+0相加将结果变成0了。但是,计算的预测值和真实值之间的误差没有所谓的正、负之分,误差就是误差,误差是指从一个地方到另一个地方的距离。为了避免方法一产生的弊端,距离最简单的方法是计算绝对值。因此,方法二的计算方法:把每个Instance计算的Predicted的结果减去Real Value后进行绝对值求值,然后累加,完毕后除以所有的Instances的个数。

方法二的优点:真实反馈出预测值和真实值的差异。

方法二的缺点:可能获得很慢的收敛Converge的过程。


(3) Loss的计算的方法三: 把每个Instance计算的Predicted的结果减去Real Value后进行平方的求值,然后累加,完毕后除以所有的Instances的个数。

方法二和方法三的区别在于:方法二进行绝对值计算就能真实反馈出预测值和真实值的误差,为什么还要进行平方计算? 是因为平方计算将误差放大了。例如,TensorFlow的可视化图中,Regression的计算有一个收敛的过程,如果不能夸大化反馈误差,那系统每次的计算的误差很小,进行梯度计算的时候,每次的改变量很小,调整的速度就很慢。Back Propagation算法是根据误差的差值进行前面神经元责任的计算,然后进行梯度的计算。误差放大的好处在于较快的收敛速度。不过夸大误差的过程,理论上也可能过犹不及,步子跨的太大了,也可能犯错,这也是以后延伸出其他误差算法的原因。

方法三的缺点: 当数据量很大的时候,会导致很大的计算量;并且有些计算是不必要的,这和梯度下降相关,因为有些预测的值和实际值的误差在0.0001之内了,就不需要再进行计算,而有些误差很大,就很有必要计算。

 

(4) 方法四:采用样本方差的计算,该方法适合数据量比较大的时候。


本节我们使用Loss的计算方法三,即平方的计算方式,因为instances只有4条数据,没必要使用样本方差的计算。在service目录中创建LossComputation.py文件,在文件中创建一个类LossComputation。在类LossComputation中定义compute_loss方法,compute_loss方法计算损失度,传入的第一个参数是instances,将所有的数据放进去,这里没其他的数据,测试集也是训练集; 传入的第2个参数是所有的节点nodes, 传入的第3个参数是所有的权重weights。total_loss变量记录累加的误差,误差使用平方的方式。循环遍历所有的instances,计算每一个instance的误差,然后进行累加。ForwardPropagation.applyForwardPropagation静态方法没有self参数,直接调用applyForwardPropagation方法。接下来获取instance的预测值,和真实值进行比较。

predicted_value等于nodes[len(nodes) - 1].get_value(),是运算的时候获得的value,是预测值;而real_value 是instance的最后一列,是真实值。然后将预测值predicted_value 和真实值real_value相减,进行平方的计算,得到squared_error。然后将误差进行累加,计算累加的total_loss。循环所有的实例,得到最后的误差平方之和,然后除以instances的个数。循环所有的实例,得到误差平方之和,然后除以instances的个数,最后返回损失度total_losss。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

段智华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值