(2)使用BP算法来拟合曲线y = sin(x)

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


    图一

再次尝试
这是一种权值方式


图二

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

图三 图四
  1. 原来导致二者的差异原因是这个。。


    图五

    标准BP算法,我那个是批训练。。

  2. 突然间,我想明白了。。
    二者的差异导致了 二者的应用场景不同:
    举个例子:
    下面这种例子我们应该采用,单样本更新


    图六
    yi = 5 * i + 3
    

    但是下面这种例子,我们应该采用批更新:


    图七
    yi = 5 * i + 20 * random()
    

    为什么呢? 因为单样本 能够完美的融合每个样本(图中每个点),他会尽量达到每个样本的精确,但是可能会忽略掉整体的协调,又是甚至为了追求单样本的精度,陷入到时间很长的收敛;但是批更新 追求的是整个整个局势的趋势,他放弃了对局部点的完美拟合,能够更快的收敛,并且不会出现过拟合。为什么说 y = sin(x)适合于 单样本更新 呢? 这是因为 当完美拟合每个点的时候,并不会失去整齐 的趋势,因为这些点都是完美在 曲线上的,每个点都拟合,肯定不会丧失 整体;为什么说 我们采集到的 实际数据,比如工资和年龄的关系等的拟合适合 批更新呢?这是因为 他们这些点本来就是 在那一条线附近波动,只要是生活中的例子,就难免有精度不准确的 原因。

    我们来看一下当 单样本 去拟合图七的时候可能发生什么?


    image.png

    这是 批更新 去拟合图七的发生情况


    image.png
上一篇 下一篇

猜你喜欢

热点阅读