From 752ea28e13adf77b456e6118ba6e8dc655920971 Mon Sep 17 00:00:00 2001
From: ascoders <576625322@qq.com>
Date: Mon, 19 Feb 2024 09:18:44 +0800
Subject: [PATCH] update image
---
...5\260\347\232\204\350\211\272\346\234\257.md" | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git "a/\346\234\272\345\231\250\345\255\246\344\271\240/291.\346\234\272\345\231\250\345\255\246\344\271\240\347\256\200\344\273\213: \345\257\273\346\211\276\345\207\275\346\225\260\347\232\204\350\211\272\346\234\257.md" "b/\346\234\272\345\231\250\345\255\246\344\271\240/291.\346\234\272\345\231\250\345\255\246\344\271\240\347\256\200\344\273\213: \345\257\273\346\211\276\345\207\275\346\225\260\347\232\204\350\211\272\346\234\257.md"
index 12a690ac..89fd21f6 100644
--- "a/\346\234\272\345\231\250\345\255\246\344\271\240/291.\346\234\272\345\231\250\345\255\246\344\271\240\347\256\200\344\273\213: \345\257\273\346\211\276\345\207\275\346\225\260\347\232\204\350\211\272\346\234\257.md"
+++ "b/\346\234\272\345\231\250\345\255\246\344\271\240/291.\346\234\272\345\231\250\345\255\246\344\271\240\347\256\200\344\273\213: \345\257\273\346\211\276\345\207\275\346\225\260\347\232\204\350\211\272\346\234\257.md"
@@ -6,7 +6,7 @@
## 机器学习就是找函数
-
+
以我对机器学习的理解,认为其本质就是 **找函数**。我需要从两个角度解释,为什么机器学习就是找函数。
@@ -69,7 +69,7 @@ define model function 就是定义函数,这可不是一步到位定义函数
假设我们定义一个简单的一元一次函数:
-
+
其中未知参数是 w 和 b,也就是我们假设最终要找的函数可以表示为 b + wx,但具体 w 和 b 的值是多少,是需要寻找的。我们可以这么定义:
@@ -91,7 +91,7 @@ define loss function 就是定义损失函数,这个损失可以理解为距
有很多种方法定义 loss 函数,一种最朴素的方法就是均方误差:
-
+
即计算当前实际值 `modelFunction(b,w)(x)` 与目标值 `3x` 的平方差。那么 loss 函数可以这样定义:
@@ -121,7 +121,7 @@ optimization 就是优化函数的参数,使 loss 函数值最小。
而寻找 loss function 的最小值,需要不断更新未知参数,如果把 loss 函数画成一个函数图像,我们想让函数图像向较低的值走,就需要对当前值求偏导,判断参数更新方向:
-
+
如上图所示,假设上图的 x 轴是参数 w,y 轴是此时所有 training data 得到的 loss 值,那么只要对 loss 函数做 w 的偏导,就能知道 w 要怎么改变,可以让 loss 变得更小(当偏导数为负数时,右移,即 w 增大可以使 loss 减小,反之亦然)。
@@ -129,11 +129,11 @@ optimization 就是优化函数的参数,使 loss 函数值最小。
对 b 偏导:
-
+
对 w 偏导:
-
+
> 注意,这里仅计算针对某一个 training data 的偏导数,而不用把所有 training data 的偏导数结果加总,因为后续如何利用这些偏导数还有不同的策略。
@@ -203,7 +203,7 @@ for (let i = 0; i < 500; i++) {
把函数寻找过程可视化,就形成了下图:
-
+
可以发现,无论初始值参数 b 和 w 怎么选取,最终 loss 收敛时,b 都会趋近于 0,而 w 趋近于 3,即无限接近 y=3x 这个函数。
@@ -217,6 +217,6 @@ for (let i = 0; i < 500; i++) {
也许你已经发现,我们设定的 y = b + wx 的函数架构太过于简单,它只能解决线性问题,我们只要稍稍修改 training data 让它变成非线性结构,就会发现 loss 小到某一个值后,就再也无法减少了。通过图可以很明显的发现,不是我们的 define loss function 或者 optimization 过程有问题,而是 define model function 定义的函数架构根本就不可能完美匹配 training data:
-
+
这种情况称为 model bias,此时我们必须升级 model function 的复杂度,升级复杂度后的函数却很难 train 起来,由此引发了一系列解决问题 - 发现新问题 - 再解决新问题的过程,这也是机器学习的发展史,非常精彩,而且读到这里如果你对接下来的挑战以及怎么解决这些挑战非常感兴趣,你就具备了入门机器学习的基本好奇心,我们下一篇就来介绍,如何定义一个理论上能逼近一切实现的函数。