机器学习 | 回归算法原理——随机梯度下降法

Hi,大家好,我是半亩花海。接着上次的多重回归继续更新《白话机器学习的数学》 这本书的学习笔记,在此分享随机梯度下降法这一回归算法原理。本章的回归算法原理还是基于**《基于广告费预测点击量》**项目,欢迎大家交流学习!

目录

一、随机梯度下降法概述

二、案例分析

[1. 设置问题](#1. 设置问题)

[2. 定义模型](#2. 定义模型)

[3. 随机梯度下降法(拓展)](#3. 随机梯度下降法(拓展))


一、随机梯度下降法概述

随机梯度下降法是一种优化算法,用于最小化目标函数,即减少模型预测和实际结果之间的差距。它是梯度下降算法的一种变体,其核心原理 是在每次迭代搜索中,算法随机选择 一个样本或数据点(或一小批样本),计算该样本的梯度 ,然后用这个梯度更新模型参数

随机梯度下降算法(Stochastic Gradient Descent,SGD)和批量梯度下降算法(Batch Gradient Descent,BGD)的区别 在于:随机梯度算法每次只使用少数几个样本点或数据集(每次不重复)的梯度的平均值就更新一次模型;而批量梯度下降算法需要使用所有样本点或数据集的梯度的平均值更新模型。、

举一个经典而形象的例子 :假设你现在在山上,为了以最快的速度下山,且视线良好,你可以看清自己的位置以及所处位置的坡度,那么沿着坡向下走,最终你会走到山底。但是如果你被蒙上双眼,那么你则只能凭借脚踩石头的感觉判断当前位置的坡度,精确性就大大下降,有时候你认为的坡,实际上可能并不是坡,走一段时间后发现没有下山,或者曲曲折折走了好多路才能下山。类似的 ,批量++梯度下降法就好比正常下山,而随机梯度下降法就好比蒙着眼睛下山++。

因此,随机梯度下降算法的效率 明显提高,目前已经得到了广泛应用。

例子来源 于:《详解随机梯度下降法(Stochastic Gradient Descent,SGD)_随机梯度下降公式-CSDN博客


二、案例分析

1. 设置问题

在介绍随机梯度下降法之前,我们先得知道之前研究过++最速下降法++ ,它除了计算花时间以外,还有一个缺点 那就是容易陷入局部最优解

在讲解回归时,我们使用的是平方误差目标函数。这个函数形式简单,所以用最速下降法也没有问题。现在我们来考虑稍微复杂一点的,比如这种形状的函数:

用最速下降法来找函数的最小值时,必须先要决定从哪个 开始找起。之前我用 说明的时候是从 或者 开始的,那是为了讲解而随便选的作为初始值。选用随机数 作为初始值 的情况比较多。不过这样每次初始值都会变,进而导致陷入局部最优解的问题。

假设这张图中标记的位置就是初始值

倘若从这个点开始找,似乎可以求出最小值。但是如果我们换一个初始点,如下所示,那么可能没计算完就会停止,便陷入了局部最优解

这个算法虽然简单,但是容易发生各种问题,但最速下降法也不会白学,随机梯度下降法就是以最速下降法为基础的。

2. 定义模型

由 《机器学习 | 回归算法原理------最速下降法(梯度下降法)-CSDN博客》可知,最速下降法的参数更新表达式为:

这个表达式使用了所有训练数据 的误差,而在随机梯度下降法中会随机选择一个训练数据 ,并使用它来更新参数。下面这个表达式中的 就是被随机选中的数据索引。

最速下降法更新 1 次参数的时间,随机梯度下降法可以更新 次。 此外,随机梯度下降法由于++训练数据是随机选择++ 的,++更新参数时使用++ 的又是++选择数据时的梯度++ ,所以不容易陷入目标函数的局部 最优解,在实际运用上的确会收敛

3. 随机梯度下降法(拓展)

我们前面提到了随机选择 1 个训练数据的做法,此外还有随机选择 个训练数据来更新参数的做法。设随机选择 个训练数据的索引的集合为 ,则更新参数如下:

现在假设训练数据有 100 个,那么在 时,创建一个有 10 个随机数的索引的集合,例如 ,然后重复更新参数,这种做法被称为小批量(mini-batch)梯度下降法 。 这像是介于最速下降法和随机梯度下降法之间的方法。

ps:不论是随机梯度下降法还是小批量梯度下降法,我们都必须考虑学习率 ,将 设置为合适的值是尤为重要。

相关推荐
KeyPan27 分钟前
【Ubuntu与Linux操作系统:十、C/C++编程】
linux·运维·服务器·c语言·c++·算法·ubuntu
程序员非鱼2 小时前
深度学习中常见的激活函数详解
人工智能·python·深度学习·神经网络·机器学习·激活函数
Ckyeka2 小时前
Leetcode刷题笔记—栈与队列
数据结构·python·算法·leetcode
大丈夫立于天地间2 小时前
OSPF - 特殊报文与ospf的机制
网络·网络协议·学习·算法·智能路由器·信息与通信
夏末秋也凉3 小时前
力扣-数组-219 存在重复元素Ⅱ
算法·leetcode
Wang's Blog3 小时前
数据结构与算法之二叉树: LeetCode 543. 二叉树的直径 (Ts版)
算法·leetcode
graceyun3 小时前
C语言初阶习题【23】输出数组的前5项之和
c语言·开发语言·算法
Wang's Blog3 小时前
数据结构与算法之二叉树: LeetCode 701. 二叉搜索树中的插入操作 (Ts版)
算法·leetcode
夏末秋也凉3 小时前
力扣-数组-169 多数元素
数据结构·算法·leetcode
戊子仲秋3 小时前
【LeetCode】每日一题 2024_1_10 统计重新排列后包含另一个字符串的子字符串数目 II(滑动窗口)
算法·leetcode·职场和发展