(2)使用BP算法来拟合曲线y = sin(x)
2019-02-19 本文已影响1人
小星star
- 主要碰到了一个问题。
那就是初始权重没有随机化,而是全部赋值为0。。
搞了我一下午,醉了,这说明还是要找一个好的教程才行呢,醉了。 - 更好的理解了 BP算法,每一层可以使用不同的 活化函数,当然。这会导致你back的时候需要计算不同的梯度。
-
函数拟合貌似只能拟合 所给数据集中,然后预测也是在所给数据集中。
pi为3.14
如我们的数据集x 在区间[0, 2pi],均匀散点30个得到数据集,然后我们训练出来的模型也只能在 [0, 2pi]来预测,超过这个范围,是不能够预测的。
请看下图:
图一
再次尝试
这是一种权值方式

这是另一种权值更迭方式 而且是矩阵表达


-
原来导致二者的差异原因是这个。。
图五
标准BP算法,我那个是批训练。。
-
突然间,我想明白了。。
二者的差异导致了 二者的应用场景不同:
举个例子:
下面这种例子我们应该采用,单样本更新
图六
yi = 5 * i + 3
但是下面这种例子,我们应该采用批更新:
图七
yi = 5 * i + 20 * random()
为什么呢? 因为单样本 能够完美的融合每个样本(图中每个点),他会尽量达到每个样本的精确,但是可能会忽略掉整体的协调,又是甚至为了追求单样本的精度,陷入到时间很长的收敛;但是批更新 追求的是整个整个局势的趋势,他放弃了对局部点的完美拟合,能够更快的收敛,并且不会出现过拟合。为什么说 y = sin(x)适合于 单样本更新 呢? 这是因为 当完美拟合每个点的时候,并不会失去整齐 的趋势,因为这些点都是完美在 曲线上的,每个点都拟合,肯定不会丧失 整体;为什么说 我们采集到的 实际数据,比如工资和年龄的关系等的拟合适合 批更新呢?这是因为 他们这些点本来就是 在那一条线附近波动,只要是生活中的例子,就难免有精度不准确的 原因。
我们来看一下当 单样本 去拟合图七的时候可能发生什么?
image.png
这是 批更新 去拟合图七的发生情况
image.png