有关人工神经网做回归的实验发现的问题

写论实验。。发现matlab的nntool是个好东西。。自动把输入的数据分成三部分:training,validation,和test,还会自动做归一化。今天实验中发现一些问题,,

首先。。激活函数的选择对回归问题的影响很大。。

nntool有一个画regression的功能,图示如下
这里写图片描述
我这里要预测一个boundingbox的高度的大小。
这个图示每个图的横坐标都是groundtruth的值,纵坐标是预测值,预测准确的话点应该分布在对角线上。如上图所示。然而,今天做实验发生一个很奇怪的现象,大概就是这样。
这里写图片描述
红色线是对角线,蓝色线是实际的回归直线,,大概意思就是说当输出范围小于某值的时候,网络效果不错,预测比较准确,但当输出值超过一定范围时,预测值仿佛变成一个定值,,这种情况在training,validation和test里面都出现了。。我猜想是最后一层使用了tansigmoid函数的缘故。。
这里写图片描述
如图所示,当隐藏层输入的值过大,最后一层输出的值就会趋近于常数,,猜想是这种原因。
于是想把最后一层的激活函数换成relu,但matlab里没有relu,于是换成了purelin。。
这里写图片描述
于是可以得到第一幅图片的效果。猜想回归应该选择relu函数,因为不需要把输出限制在某个范围内(0,1)或者(-1,1)

有时会出现这么一种现象。。gradient为0或者超级小

nntool有一种判定训练结束的标准是当gradient小于某个值时。而迭代一次就使得gradient为0是为什么呢。。
梯度为0,查看上面的tansig函数图像,,说明在迭代几次后输出的值很大,经过tansig函数后,再反向传播求导,梯度为0
为什么这个值会这么大,,很可能是因为使用mse求出的方差太大,反向传播然后更新w和b的时候使得w和b一下变得很大,,
这里就需要修改learning rate的大小了。虽然很多地方写learning rate在0.01到0.7之间,,其实还有很多情况learning rate只有1e-06,,比如这次的我。。

这次gradient没问题了,但是mse的值一直不变,不收敛

这个可能是网络设置不合理造成的。。改一改隐藏层数,改一改每层节点数,尤其要换一个激活函数试试,,这次我就换了激活函数,从sigmoid换成了tansig,然后就收敛了。

还有一些不明白的

比如算法收敛以后mse的值还是很大。。不同的序列训练效果不同,最小的有30多,,大的有300,这是为什么,,有机会再慢慢想,,猜想是卡在局部极小值?或者网络太简单不能拟合的很好?或者有其他原因?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值