机器学习入门:梯度下降算法(上)

简介: 机器学习入门:梯度下降算法(上)

学习目标

🍀 掌握梯度下降算法的原理

🍀 掌握梯度下降法优化损失函数的原理

🍔 梯度下降(Gradient Descent)

1.1 什么是梯度下降🍭

梯度下降法的基本思想可以类比为一个下山的过程。

假设这样一个场景:

一个人 被困在山上,需要从山上下来 (i.e. 找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低。

因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。

具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,(同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走)。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷。

梯度下降的基本过程就和下山的场景很类似。

首先,我们有一个 可微分的函数 。这个函数就代表着一座山。

我们的目标就是找到 这个函数的最小值 ,也就是山底。

根据之前的场景假设,最快的下山的方式就是找到当前位置最陡峭的方向,然后沿着此方向向下走,对应到函数中,就是 找到给定点的梯度 ,然后朝着梯度相反的方向,就能让函数值下降的最快!因为梯度的方向就是函数值变化最快的方向。 所以,我们重复利用这个方法,反复求取梯度,最后就能到达局部的最小值,这就类似于我们下山的过程。而求取梯度就确定了最陡峭的方向,也就是场景中测量方向的手段。

1.2 梯度的概念🍭

梯度是微积分中一个很重要的概念

  • 在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率;
  • 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向;

在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。

这也就说明了为什么我们需要千方百计的求取梯度!我们需要到达山底,就需要在每一步观测到此时最陡峭的地方,梯度就恰巧告诉了我们这个方向。梯度的方向是函数在给定点上升最快的方向,那么梯度的反方向就是函数在给定点下降最快的方向,这正是我们所需要的。所以我们只要沿着梯度的反方向一直走,就能走到局部的最低点!

1.3 梯度下降举例🍭

单变量函数的梯度下降

我们假设有一个单变量的函数 :J(\theta) = \theta^2

函数的微分:J^\prime(\theta) = 2\theta

初始化起点为:\theta^0 = 1

学习率:\alpha = 0.4

我们开始进行梯度下降的迭代计算过程:

如图,经过四次的运算,也就是走了四步,基本就抵达了函数的最低点,也就是山底

多变量函数的梯度下降

我们假设有一个目标函数 :J(\theta) = \theta{1}^{2} + \theta{2}^{2}

现在要通过梯度下降法计算这个函数的最小值。我们通过观察就能发现最小值其实就是 (0,0)点。但是接下 来,我们会从梯度下降算法开始一步步计算到这个最小值! 我们假设初始的起点为: \theta^{0} = (1, 3)

初始的学习率为:\alpha = 0.1

函数的梯度为:\Delta J(\theta) =< 2\theta{1} ,2\theta{2}>

进行多次迭代:

我们发现,已经基本靠近函数的最小值点

1.4 梯度下降(Gradient Descent)公式🍭

  • 1) alpha是什么含义?

alpha在梯度下降算法中被称作为 学习率 或者 步长 ,意味着我们可以通过α来控制每一步走的距离,控制参数不要走太快,错过了使损失函数取最小值的点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下。所以α的选择在梯度下降法中往往是很重要的!α不能太大也不能太小,太小的话,可能导致迟迟走不到最低点,太大的话,会导致错过最低点!

  • 2) 为什么梯度要乘以一个负号

梯度前加一个负号,就意味着朝着梯度相反的方向前进!我们在前文提到,梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号

我们通过两个图更好理解梯度下降的过程

所以有了梯度下降这样一个优化算法,回归就有了"自动学习"的能力

  • 优化动态图演示

🍔 梯度下降优化原理

2.1梯度下降的相关概念复习🍭

在详细了解梯度下降的算法之前,我们先复习相关的一些概念。

步长(Learning rate):

  • 步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。 用前面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。

特征(feature):

  • 指的是样本中输入部分,比如2个单特征的样本(x^{(0)},y^{(0)}),(x^{(1)},y^{(1)}),则第一个样本特征为x^{(0)},第一个样本输出为y^{(0)}。

假设函数(hypothesis function):

  • 在监督学习中,为了拟合输入样本,而使用的假设函数,记为h_\theta (x)。 比如对于单个特征的m个样本(x^{(i)},y^{(i)})(i=1,2,...m),可以采用拟合函数如下: h_\theta (x)=\theta _0+\theta _1x。

损失函数(loss function):

  • 为了评估模型拟合的好坏, 通常用损失函数来度量拟合的程度。 损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。
  • 在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于m个样本(x_i,y_i)(i=1,2,...m),采用线性回归,损失函数为:

其中x_i表示第i个样本特征,y_i表示第i个样本对应的输出,h_\theta (x_i)为假设函数。

2.2 梯度下降法的推导流程🍭

1) 先决条件: 确认优化模型的假设函数和损失函数。

比如对于线性回归,假设函数表示为 h_\theta (x_1,x_2,...,x_n)=\theta _0+\theta _1x_1+...+\theta _nx_n, 其中\theta _i (i = 0,1,2... n)为模型参数,x_i (i = 0,1,2... n)为每个样本的n个特征值。这个表示可以简化,我们增加一个特征x_0=1 ,这样

同样是线性回归,对应于上面的假设函数,损失函数为:

2) 算法相关参数初始化,

主要是初始化\theta _0,\theta _1...,\theta _n,算法终止距离ε以及步长/alpha 。在没有任何先验知识的时候,可以将所有的\theta 初始化为0, 将步长初始化为1。在调优的时候再 优化。

3) 算法过程:

3.1) 确定当前位置的损失函数的梯度,对于\theta _i,其梯度表达式如下:

3.2) 用步长乘以损失函数的梯度,得到当前位置下降的距离,即

对应于前面登山例子中的某一步。

3.3) 确定是否所有的\theta _i,梯度下降的距离都小于ε,如果小于ε则算法终止,当前所有的\theta _i(i=0,1,...n)即为最终结果。否则进入步骤4.

4)更新所有的\theta ,对于\theta _i,其更新表达式如下。更新完毕后继续转入步骤1。


下面用线性回归的例子来具体描述梯度下降。假设我们的样本是:

损失函数如前面先决条件所述:

则在算法过程步骤1中对于\theta _i 的偏导数计算如下:

由于样本中没有x_0上式中令所有的x_0^j为1.

步骤4中\theta _i的更新表达式如下:

从这个例子可以看出当前点的梯度方向是由所有的样本决定的,加\frac{1}{m} 是为了好理解。由于步长也为常数,他们的乘积也为常数,所以这里\alpha\frac{1}{m} 可以用一个常数表示。

在下一节中,会介绍梯度下降法的变种,他们主要的区别是 对样本的采用方法不同。这里我们采用的是用所有样本

🍔 小结

  1. 梯度下降法(gradient descent)是一个最优化算法,常用于机器学习和深度学习中用来递归性地逼近最小偏差模型
  2. 梯度下降法的计算过程就是沿梯度下降的方向求解极小值(也可以沿梯度上升方向求解极大值)
  3. 线性回归的回归系数可以通过梯度下降算法找到损失函数的极小值得到
  4. 梯度下降中,学习率(Learning rate)是一个很重要的参数,它决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度

相关文章
|
8天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
26 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI的奥秘:机器学习入门指南
【10月更文挑战第30天】本篇文章是一份初学者友好的机器学习入门指南,旨在帮助读者理解并开始实践机器学习。我们将介绍机器学习的基本概念,包括监督学习、无监督学习和强化学习等。我们还将提供一些实用的代码示例,以帮助读者更好地理解和应用这些概念。无论你是编程新手,还是有一定经验的开发者,这篇文章都将为你提供一个清晰的机器学习入门路径。
32 2
|
23天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
28 1
|
29天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
23 1
|
1月前
|
机器学习/深度学习 算法 Python
“探秘机器学习的幕后英雄:梯度下降——如何在数据的海洋中寻找那枚失落的钥匙?”
【10月更文挑战第11天】梯度下降是机器学习和深度学习中的核心优化算法,用于最小化损失函数,找到最优参数。通过计算损失函数的梯度,算法沿着负梯度方向更新参数,逐步逼近最小值。常见的变种包括批量梯度下降、随机梯度下降和小批量梯度下降,各有优缺点。示例代码展示了如何用Python和NumPy实现简单的线性回归模型训练。掌握梯度下降有助于深入理解模型优化机制。
30 2
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
53 2
|
17天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
28天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
12天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。