pytorch深度学习实战lesson3

参考教材:

pytorch深度学习实战lesson3_第1张图片

课程网站:

https://www.bilibili.com/video/BV1xB4y1m7f4/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click

-----------------------------第三课 回归问题(举例+实战,对应视频课时4-6)--------------------------------

例子:

pytorch深度学习实战lesson3_第2张图片

        现在有一个非常非常具体的模型, y=1.477X+0.089,再加上一个高速噪声,我们通过这个非常真实的模型来生成了一系列数据,其中x采样到 0 到 15 之间,x随便的 sample 一个出来值,它对应的一个y的值也会 sample 出来。就比如说我们现在是拿到了一个有有高斯噪声的 100 个数字采样的一个点。我们虽然知道这 100 个高斯噪声也知道这个函数是怎么生成的,但是我们假设不知道,因为世界中我们往往是不知道这个函数的模型是什么样子的。

        我们通过观察并且给出一定的假设,我们假设这个函数符合这个线性分布的,就比如说它是一个直线:

pytorch深度学习实战lesson3_第3张图片

        我们现在要求解这个具体的 W 和 B 的参数,使得这一条直线跟整体的这个误差比较小。那么我们怎么衡量这个误差呢?我们刚刚讲了就是用均方差,就是要我们求 WX+B +ε值和真实的 Y 之间观测值之间的这个平方和差最小。我们把这个标准作为我们要优化的目标,也就是说我们是要求loss这个函数的极小值:

我们把上面那个式子稍微的正式化一下:

pytorch深度学习实战lesson3_第4张图片

        也就是说对于一个具体的方程,我们要求解参数式 W 和 B 然后我们观测到的样本是 X 和 y,xi表示我们第i个观测到的样本。我们通过借助于梯度下降的方法,梯度下降可以帮助我们求解一个极小值。

        我们这里是希望是 WX 加 B接近于 Y 因此我们构造一个这样的 Y 减去 WX 加 B 这样的一个新的函数,我们来求解这个新的函数的极小值,也就可以达到了我们 WX 趋近于 B 这样一个目的。新的函数叫做 loss 函数。我们通过最小化这个 loss function 使得求解到一个比较合适的解W’和B‘。当我们得到了一个 W’和 B’以后,对于一个新的观察样本,他和 Y’之间的复合度是非常非常高的。

实战:

计算loss function:

pytorch深度学习实战lesson3_第5张图片

计算梯度信息:

pytorch深度学习实战lesson3_第6张图片

其中loss对w和b求偏导为(红字):

pytorch深度学习实战lesson3_第7张图片

这个结果就对应着代码的8,9行。8,9行还除了一个N的原因是求平均梯度。

最后根据10,11行的式子,梯度乘上学习率然后和当前的b或w求差,就得到了新的b和w。

迭代梯度信息:

pytorch深度学习实战lesson3_第8张图片

        比如说我们要迭代 100 次,每一次根据当加 W 和 B 然后再根据这个 学习率以及送进出来的这个 X 和 Y 的这个数组(array(points)),就得到了一个新的 W 和 B 然后我们最后面把最后一组的 W 和 B 返回,就是我们求解到的第 100 个循环以后的 W 和 B 我们就把这个 W 和 B 作为我们找到一个比较优的解,

源码:

pytorch深度学习实战lesson3_第9张图片

pytorch深度学习实战lesson3_第10张图片

pytorch深度学习实战lesson3_第11张图片

        首先是我们要得到生成的数据,我们这里就用 numpy 生成的一系列数据。然后就是计算这个 loss 的,然后这就计算 gradent 然后这是循环计算 gradent 我们在总的函数里面,首先是把这个 points 弄进来,我们使用 numpy 的这个线程的库函数搂进来就 OK 了。然后我们使用 graden 的 decent 一次跑 100 个 Apple 看一下最终得到的数据。

        可以看得到最后面的 B 和最后面的 W 是1.477,1.008与我们刚刚计算出来是非常非常接近的,因此整个的计算过程应该算是非常有效的。

你可能感兴趣的:(python,机器学习,开发语言)