Regression:linear model

这里用的是 Adagrad ,接下来的课程会再细讲,这里只是想显示 gradient descent 实作起来没有想像的那么简单,还有很多小技巧要注意

这里采用最简单的linear model:y_data=b+w*x_data

我们要用gradient descent把b和w找出来

当然这个问题有closed-form solution,这个b和w有更简单的方法可以找出来;那我们假装不知道这件事,我们练习用gradient descent把b和w找出来

数据准备:

计算梯度微分的函数getGrad()

1、自己写的版本

当两个微分值b_grad和w_grad都为0时,gradient descent停止,b和w的值就是我们要找的最终参数

上面的数据输出处于隐藏状态,点击即可显示

2、这里使用李宏毅老师的demo尝试

引入需要的库

准备好b、w、loss的图像数据

规定迭代次数和learning rate,进行第一次尝试

距离最优解还有一段距离

把learning rate增大10倍尝试

发现经过100000次的update以后,我们的参数相比之前与最终目标更接近了,但是这里有一个剧烈的震荡现象发生

把learning rate再增大10倍

发现此时learning rate太大了,参数一update,就远远超出图中标注的范围了

所以我们会发现一个很严重的问题,如果learning rate变小一点,他距离最佳解还是会具有一段距离;但是如果learning rate放大,它就会直接超出范围了

这个问题明明很简单,可是只有两个参数b和w,gradient descent搞半天都搞不定,那以后做neural network有数百万个参数的时候,要怎么办呢

这个就是一室不治何以国家为的概念

于是这里就要放大招了!!!——Adagrad

我们给b和w客制化的learning rate,让它们两个的learning rate不一样

 

有了新的learning rate以后,从初始值到终点,我们在100000次iteration之内就可以顺利地完成了