diff --git "a/docs/5.Logistic\345\233\236\345\275\222.md" "b/docs/5.Logistic\345\233\236\345\275\222.md" index 95172758c..a9bdb4fdc 100644 --- "a/docs/5.Logistic\345\233\236\345\275\222.md" +++ "b/docs/5.Logistic\345\233\236\345\275\222.md" @@ -41,20 +41,64 @@ Sigmoid 函数的输入记为 z ,由下面公式得到: 上图展示的,梯度上升算法到达每个点后都会重新估计移动的方向。从 P0 开始,计算完该点的梯度,函数就根据梯度移动到下一点 P1。在 P1 点,梯度再次被重新计算,并沿着新的梯度方向移动到 P2 。如此循环迭代,直到满足停止条件。迭代过程中,梯度算子总是保证我们能选取到最佳的移动方向。 +上图中的梯度上升算法沿梯度方向移动了一步。可以看到,梯度算子总是指向函数值增长最快的方向。这里所说的是移动方向,而未提到移动量的大小。该量值称为步长,记作 α 。用向量来表示的话,梯度上升算法的迭代公式如下: + +![梯度上升迭代公式](../images/5.Logistic/LR_9.png) + +该公式将一直被迭代执行,直至达到某个停止条件为止,比如迭代次数达到某个指定值或者算法达到某个可以允许的误差范围。 + 介绍一下几个相关的概念: ``` 例如:y = w1x1 + w2x2 + ... + wnxn -梯度:参考上图的例子,二维图像,x方向是代表第一个系数,也就是w1,y方向代表第二个系数也就是w2,这样的向量就是梯度。 +梯度:参考上图的例子,二维图像,x方向是代表第一个系数,也就是 w1,y方向代表第二个系数也就是 w2,这样的向量就是梯度。 α:上面的梯度算法的迭代公式中的阿尔法,这个代表的是移动步长。移动步长会影响最终结果的拟合程度,最好的方法就是随着迭代次数更改移动步长。 步长通俗的理解,100米,如果我一步走10米,我需要走10步;如果一步走20米,我只需要走5步。这里的一步走多少米就是步长的意思。 ▽f(w):代表沿着梯度变化的方向。 ``` -上图中的梯度上升算法沿梯度方向移动了一步。可以看到,梯度算子总是指向函数值增长最快的方向。这里所说的是移动方向,而未提到移动量的大小。该量值称为步长,记作 α 。用向量来表示的话,梯度上升算法的迭代公式如下: +如果大家对上面的例子不理解,下面我们看一个比较容易理解的例子。 -![梯度上升迭代公式](../images/5.Logistic/LR_9.png) +我们要做一个房屋价值的评估系统,一个房屋的价值来自很多地方,比如说面积、房间的数量(几室几厅)、地 段、朝向等等,这些影响房屋价值的变量被称为特征(feature)。我们用 X1,X2..Xn 去描述 feature 里面的分量,比如 x1=房间的面积,x2=房间的朝向,等等,我们可以做出一个估计函数: -该公式将一直被迭代执行,直至达到某个停止条件为止,比如迭代次数达到某个指定值或者算法达到某个可以允许的误差范围。 +![估计函数](../images/5.Logistic/LR_14.png) + +θ 在这儿称为参数,在这儿的意思是调整 feature 中每个分量的影响力,就是到底是房屋的面积更重要还是房屋的地段更重要。为了如果我们令 X0 = 1,就可以用向量的方式来表示了: + +![估计函数的向量形式](../images/5.Logistic/LR_15.png) + +我们要写的程序是创造一个机制来评估我们的 θ 是否比较好,所以说需要对我们做出的 h 函数进行评估,一般这个函数称为 损失函数 (loss function) 或者错误函数(error function),描述 h 函数 **不好** 的程度,我们这里把它写成 J 函数,如下: + +![损失函数](../images/5.Logistic/LR_16.png) + +这个错误估计函数是去对x(i)的估计值与真实值y(i)差的平方和作为错误估计函数,前面乘上的1/2是为了在求导的时候,这个系数就不见了。 + +梯度下降法是按下面的流程进行的: + +1)首先对θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量。 + +2)改变θ的值,使得J(θ)按梯度下降的方向进行减少。 + +为了更加清楚地介绍,我们可以看下面的图: + +![梯度下降图_1](../images/5.Logistic/LR_17.png) + +上图表示参数 θ 与误差函数 J(θ) 的关系图,红色的部分是表示 J(θ) 有着比较高的取值,我们需要的是,能够让 J(θ) 的值尽量的低。也就是深蓝色的部分。θ0,θ1 表示 θ 向量的两个维度。 + +在上面提到梯度下降法的第一步是给 θ 给一个初值,假设随机给的初值是在图上的十字点。 + +然后我们将 θ 按照梯度下降的方向进行调整,就会使得 J(θ) 往更低的方向进行变化,如图所示,算法的结束将是在θ下降到无法继续下降为止。 + +![梯度下降图_2](../images/5.Logistic/LR_18.png) + +当然,可能梯度下降的最终点并非是全局最小点,可能是一个局部最小点,可能是下面的情况: + +![梯度下降图_3](../images/5.Logistic/LR_19.png) + +上面这张图就是描述的一个局部最小点,这是我们重新选择了一个初始点得到的,看来我们这个算法将会在很大的程度上被初始点的选择影响而陷入局部最小点。 + +我们再来整体看一下,刚才的例子的求解过程: + +![梯度下降图_4](../images/5.Logistic/LR_20.png) **Note:** 我们常听到的是梯度下降算法,它与这里的梯度上升算法是一样的,只是公式中的加法需要变成减法。因此,对应的公式可以写成 diff --git a/images/5.Logistic/LR_14.png b/images/5.Logistic/LR_14.png new file mode 100644 index 000000000..880b9b451 Binary files /dev/null and b/images/5.Logistic/LR_14.png differ diff --git a/images/5.Logistic/LR_15.png b/images/5.Logistic/LR_15.png new file mode 100644 index 000000000..dafa6fc9f Binary files /dev/null and b/images/5.Logistic/LR_15.png differ diff --git a/images/5.Logistic/LR_16.png b/images/5.Logistic/LR_16.png new file mode 100644 index 000000000..c5e8298ca Binary files /dev/null and b/images/5.Logistic/LR_16.png differ diff --git a/images/5.Logistic/LR_17.png b/images/5.Logistic/LR_17.png new file mode 100644 index 000000000..34b7d8463 Binary files /dev/null and b/images/5.Logistic/LR_17.png differ diff --git a/images/5.Logistic/LR_18.png b/images/5.Logistic/LR_18.png new file mode 100644 index 000000000..18ae90922 Binary files /dev/null and b/images/5.Logistic/LR_18.png differ diff --git a/images/5.Logistic/LR_19.png b/images/5.Logistic/LR_19.png new file mode 100644 index 000000000..83dc32d29 Binary files /dev/null and b/images/5.Logistic/LR_19.png differ diff --git a/images/5.Logistic/LR_20.png b/images/5.Logistic/LR_20.png new file mode 100644 index 000000000..921014385 Binary files /dev/null and b/images/5.Logistic/LR_20.png differ