提交 f8b829a1 编写于 作者: W wizardforcel

2.1.

上级 14f3cfbc
......@@ -134,4 +134,37 @@ Y_train = [80, 91.5, 42, 55, …, 100] # 对应的年收入,单位为千美元
对于一个像这样的简单问题,我们可以使用微积分计算闭式解,来寻找最佳的`β`参数,它使我们的损失函数最小。但是随着成本函数的复杂性的增长,使用微积分寻找闭式解就不太可能了。这就推动了一种迭代方式,叫做梯度下降,它允许我们使复杂的损失函数最小。
## 梯度下降:习得参数
> 蒙住眼睛,向下走一步。当你无路可走只能向上的时候,你就到了底部。
梯度下降会一遍一遍地出现,特别是在神经网络中。机器学习库,例如 scikit-learn 和 TensorFlow 会在背后的任何地方使用它,所以它值得了解细节。
梯度下降的目标是寻找我们模型的损失函数的最小值,通过在迭代中得到它的越来越好的近似值。
想象你自己蒙上眼睛穿过一个山谷。你的目标是寻找山谷的底部。你要怎么做呢?
一个可行的办法是,触摸你周围的地面,向地面下降最快的方向移动。走出一步,之后不断重复相同的过程,直到地面变成平的。之后你就知道了你到达了山谷的底部。如果你在所在位置向任何方向移动,你最终都会位于相同的高度,或者更高。
回到数学,地面变成了损失函数,山谷底部的高度变成了函数的最小值。
让我们看一看回归中的损失函数:
![](img/2-6.png)
我们看到这个实际上是两个变量的函数:`β0``β1`。所有其余变量都是已确定的,因为`X``Y``n`都在训练过程中提供了。我们打算尝试使这个函数最小。
![](img/2-7.png)
这个函数是`f(β0,β1)=z`。为了开始梯度下降,你需要对参数`β0``β1`做出一些猜测,它们使函数最小。
下面,你寻找损失函数对每个`β`参数的偏导数`[dz/dβ0, dz/dβ1]`。偏导数表示,如果你为`β0`或者`β1`增加一个很小的值,总损失增加或减少多少。
换一种方式。假设教育年数(`β0`)为零会增加模型的损失(也就是不准确度),这会将你的年收入的估计值增加多少?你需要向相反方向移动,以便你最终向下走并使损失最小。
与之类似,如果你增加“教育年数的每个增量会影响多少收入”的估计量(`β1`),这会将损失(`z`)增加多少?如果偏导数`dz/β1`是个复数,那么`β1`的增加是极好的,因为它会降低总损失。如果它是个正数,你需要降低`β1`。如果是零,不要修改`β1`,因为这表示你已经到达最优了。
持续做这件事,直到你到达了底部,也就是,算法收敛,损失到达最小。存在大量技巧和例外情况,它们超出了这一章的范围,但是通常来说,这就是你为你的参数化模型寻找最优参数的方式。
## 过拟合
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册