机器学习之梯度下降法(GD)和坐标轴下降法(CD)

梯度下降法

梯度下降法(Gradient Descent, GD)常用于求解无约束情况下凸函数(Convex Function)的极小值,是一种迭代类型的算法,因为凸函数只有一个极值点,故求解出来的极小值点就是函数的最小值点

J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h(x^{(i)}_{\theta})-y^{(i)})^{2}

\theta^{*}=\arg_\theta^m\min{J(\theta)}

梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以梯度下降法也被称为“最速下降法”。梯度下降法中越接近目标值,变量变化越小。计算公式如下

\theta_{j+1}=\theta_{j}-\alpha\frac{\partial}{\partial{\theta_j}}J(\theta)

梯度下降法(数值解)过程

  • Step1:初始化θ(随机初始化)
  • Step2:沿着负梯度方向迭代,新的θ 能够使得J(θ) 更小\theta_{j+1}=\theta_{j}-\alpha\frac{\partial}{\partial{\theta_j}}J(\theta) α:学习率、步长
  • Step3:如果J(θ) 能够继续减小,返回Step2,直到迭代完成。

收敛条件:当目标函数的函数值变化非常小的时候或者达到最大迭代次数的时候,就结束循环。

注:仅考虑单个样本的单个 θ 参数的梯度值

\begin{aligned}\frac{\partial}{\partial{\theta_j}}J(\theta) &=\frac{\partial}{\partial{\theta_j}}\frac{1}{2}(h_{\theta}(x)-y)^2 \\&=2\cdot \cdot \frac(h_{\theta}(x)-y)\cdot \frac{\partial}{\partial{\theta_j}}(h_{\theta}(x)-y)\\&=(h_{\theta}(x)-y)\frac{\partial}{\partial{\theta_j}}(\sum_{i=0}^{n}\theta_{i}x_{i}-y)\\& =(h_{\theta}(x)-y)x_{j}\end{aligned}

4.2批量梯度下降法(BGD)

使用所有样本的梯度值作为当前模型参数θ 的更新

\begin{aligned}\frac{\partial{J(\theta)}}{\partial{\theta_{j}}}&=\sum_{i=1}^{m}\frac{\partial}{\partial{\theta_j}}\\&=\sum_{i=1}^{m}x_{j}^{(i)}(h_{\theta}(x^{(i)})-y^{(i)})\\&=\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}\end{aligned}

4.3随机梯度下降法(SGD)

使用单个样本的梯度值作为当前模型参数θ的更新

\frac{\partial}{\partial{\theta_j}}J(\theta)=(h_{\theta}(x)-y)x_{j}

for i= 1 to m,{

\theta_{j}=\theta_{j}+\alpha{(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}}

}

BGD和SDB的区别

  • SGD速度比BGD快(整个数据集从头到尾执行的迭代次数少)
  • SGD在某些情况下(全局存在多个相对最优解,J(θ)不是一个二次函数),SGD有可能会跳出某些小的局部最优解,所以一般情况下不会比BGD差;SGD在收敛的位置会存在J(θ)函数波动的情况,抗噪声很差。
  • BGD一定能够得到一个局部最优解(在线性回归模型中一定是得到一个全局最优解),SGD由于随机性的存在可能导致最终结果比BGD差
  • 注意:优先选择SGD

小批量梯度下降法(MBGD)

  • 如果要满足算法训练过程较快,又需要保证最终参数训练的准确率较高,提出小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD)。
  • MBGD中是把样本划分为b个样本(b一般为10),然后以这b个样本的平均梯度为更新方向:

for i = 1 to m/10,{

\theta_{j}=\theta_{j}+\alpha{\sum_{k=i}^{i+10}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}}

}

学习率选择和参数初始化

由于梯度下降法中负梯度方向作为变量的变化方向,所以有可能导致最终求解的值是局部最优解,所以在使用梯度下降的时候,一般需要进行一些调优策略

  • 学习率的选择:学习率过大,表示每次迭代更新的时候变化比较大,有可能会跳过最优解;学习率过小,表示每次迭代更新的时候变化比较小,就会导致迭代速度过慢,很长时间都不能结束;
  • 算法初始参数数值的选择:初始值不同,最终获得的最小值也有可能不同,因为梯度下降法求解的是局部最优解,所以一般情况下,选择多次不同初始值运行算法,并最终返回损失函数最小情况下的结果值;
  • 标准化:由于样本不同特征值的取值范围不同,可能会导致在各个不同参数上迭代速度不同,为了减少特征取值的影响,可以将特征进行标准化操作。

BGD、SGD、MBGD的区别

当样本量为m的时候,每次迭代BGD算法中对于参数值更新一次,SGD算法中对于参数值更新m次,MBGD算法中对参数值更新m/n次,相对来讲SGD的更新速度最快;

SGD算法中对于每个样本都需要更新参数值,当样本值不太正常的时候,就有可能会导致本次的参数更新会产生相反的影响,也就是说SGD算法的结果并不完全收敛,而是在收敛结果处波动;

SGD算法是每个样本都更新一次参数值,所以SGD算法特别适合样本数据量特别大的情况以及在线机器学习(Online ML)

梯度下降法案例代码

坐标轴下降法

坐标轴下降法(Coordinate Descent,CD)是一种迭代法,通过启发式的方法一步步的迭代求解函数的最小值,和梯度下降法(GD)不同的时候,坐标轴下降法是沿着坐标轴的方向去下降,而不是采用梯度的负方向下降。

坐标轴下降法利用EM算法的思想,在参数更新过程中,每次均先固定m-1个参数值,求解剩下的一个参数的局部最优解;然后进行迭代式的更新操作。

坐标轴下降法的核心思想是多变量函数F(X)可以通过每次沿着一个方向优化来获取最小值。

其数学依据是:对于一个可微凸函数f(θ),其中θ 为 n*1 的向量,如果对于一个解 \theta=(\theta_1, \theta_2, \dots, \theta_n) ,使得f(θ) 在某个坐标轴 \theta_i(i=1,2,..,n) 上都能达到最小值,则 \theta=(\theta_1, \theta_2, \dots, \theta_n) 就是 f(θ) 的全局的最小值点。

在坐标轴下降法中,优化方向从算法的一开始就固定了,即沿着坐标的方向进行变化。在算法中,循环最小化各个坐标方向的目标函数。即:如果 x_k​ 给定,那么 x_{k+1} 的第i维度为:

x_i^{k+1}=\arg\min_{y\in R}f(x_1^{k+1}, \dots, x_{i-1}^{k+1}, y, x_{i+1}^k, \dots, x_n^k)

因此,从一个初始的 x_0 求得函数F(x)的局部最优解,可以迭代获取 x_0,x_1,x_2... 的序列,从而可以得到:

F(x_0)\ge F(x_1)\ge F(x_2)\ge\dots

坐标轴下降法算法过程:

  • 给θ 向量随机选取一个初值,记做 \theta_0
  •  对于第k轮的迭代,从 \theta_1^k  开始计算,\theta_n^k  到为止,计算公式如下:

                                                   ​​​​​​​\begin{aligned}\theta_1^k&=\arg\min_{\theta_1}J(\theta_1,\theta_2^{k-1}, \theta_3^{k-1}, \dots, \theta_n^{k-1}) \\\theta_2^k&=\arg\min_{\theta_2}J(\theta_1^k,\theta_2, \theta_3^{k-1}, \dots, \theta_n^{k-1}) \\\dots \\\theta_n^k&=\arg\min_{\theta_n}J(\theta_1^k,\theta_2^k, \theta_3^k, \dots, \theta_n)\end{aligned}

  • 检查 \theta_k ​和 \theta_{k-1} 向量在各个维度上的变化情况,如果所有维度的变化情况都比较小的话,那么认为结束迭代,否则继续k+1轮的迭代
  • 在求解每个参数局部最优解的时候可以求导的方式来求解
     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云Https部署网站

0、开始之前 文章图片很多,注意流量 首先你得准备好一个已经备案成功的域名,并且有一个在阿里云的服务器部署了的网站。 然后就是你迫切的希望升级网站为HTTPS部署。 那么我们开始吧! 1、申请CA证书 1.1登录阿里云控制台,选择菜单…

mysql数据库多实例部署

本文系统:rhel5.8 ip : 192.168.100.150 数据库版本:mysql-5.6.15 1、创建部署mysql服务账号: 1234[rootdaf ~]# useradd -d /opt/mysql mysql [rootdaf ~]# echo "mysql" |passwd --stdin mysql Changing password for user mysq…

Python 第三方模块之 numpy.linalg - 线性代数

目录 numpy.linalg.det() 行列式 numpy.linalg.solve() 方程的解 numpy.linalg.inv() 逆矩阵 np.linalg.eig 特征值和特征向量 np.linalg.svd 奇异值分解 np.linalg.pinv 广义逆矩阵(QR分解) numpy.linalg模块包含线性代数的函数。使用这个模块&am…

rabbitmq direct 多个消费者_一文解析 RabbitMQ 最常用的三大模式

Direct 模式所有发送到 Direct Exchange 的消息被转发到 RouteKey 中指定的 Queue。Direct 模式可以使用 RabbitMQ 自带的 Exchange: default Exchange,所以不需要将 Exchange 进行任何绑定(binding)操作。消息传递时,RouteKey 必须完全匹配才会被队列接…

程序员成长最快的环境

除开五大或者ThoughtWorks这种要什么有什么,进去做打字也能光耀门楣的不谈。如果是嫁到一个普通软件公司,怎样的环境才能最快的成长呢?首先基本的 公司项目管理水平是必要的;其次是稳健而不保守的公司技术选型和一班能沟通的同事。…

【BZOJ4254】Aerial Tramway 树形DP

【BZOJ4254】Aerial Tramway 题意&#xff1a;给你一座山上n点的坐标&#xff0c;让你在山里建m条缆车&#xff0c;要求缆车两端的高度必须相等&#xff0c;且中间经过的点的高度都小于缆车的高度。并且不能存在一个点位于至少k条缆车的下方。求缆车的最大总长度。 n,m<200,…

C# 读取保存App.config配置文件的完整源码参考

最近出差在北京做一个小项目&#xff0c;项目里需要读取配置文件的小功能&#xff0c;觉得挺有参考意义的就把代码发上来给大家参考一下。我们选择了直接用微软的读取配置文件的方法。 这个是程序的运行设计效果&#xff0c;就是把这些参数可以进行灵活设置&#xff0c;灵活保存…

TensorFlow 简介

TensorFlow介绍 Tagline&#xff1a;An open-source software library for Machine Intelligence.Definition&#xff1a;TensorFlow TM is an open source software library fornumerical computation using data flow graphs.GitHub&#xff1a;https://github.com/tensorfl…

webbrowser设置为相应的IE版本

注册表路径&#xff1a; HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 或者HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 究竟选择哪一个…

jmeter压力测试_用Jmeter实现对接口的压力测试

一、多个真实用户对接口的压力测试1. 获取多个真实用户的token的两种方法&#xff1a;1)第一种&#xff1a;让开发帮忙生成多个token(多个用户账户生成的token)&#xff0c;导出为csv格式的文件(以下步骤均以该方法为基础)2)第二种&#xff1a;自己设置多个用户账户和密码&…

程序员成长之路(转)

什么时候才能成为一个专业程序员呢&#xff1f;三年还是五年工作经验&#xff1f;其实不用的&#xff0c;你马上就可以了&#xff0c;我没有骗你&#xff0c;因为专业程序员与业余程序员的区别主要在于一种态度&#xff0c;如果缺乏这种态度&#xff0c;拥有十年工作经验也还是…

嵌入式开发——PWM高级定时器

学习目标 加强掌握PWM开发流程理解定时器与通道的关系掌握多通道配置策略掌握互补PWM配置策略掌握定时器查询方式掌握代码抽取优化策略掌握PWM调试方式学习内容 需求 点亮8个灯,采用pwm的方式。 定时器 通道 <

解决虚拟机时间引起的奇怪问题

一直使用得好好的虚拟机最近出了一个奇怪问题在虚拟机装好的lamp在客户端访问phpmyadmin的时候,使用firefox登录没问题,但是使用IE不行总是停留在登录的界面,而且没有提供任何的出错信息,就连在apache的日志里面也看不到.注意到同样访问的时候,在IE上显示的转向的url是[url]htt…

TensorFlow 基本操作

Tensorflow基本概念 图(Graph):图描述了计算的过程&#xff0c;TensorFlow使用图来表示计算任务。张量(Tensor):TensorFlow使用tensor表示数据。每个Tensor是一个类型化的多维数组。操作(op):图中的节点被称为op(opearation的缩写)&#xff0c;一个op获得/输入0个或多个Tensor…

03_zookeeper伪集群安装

一句话说明白&#xff1a;在1台机器上模拟多台机器&#xff0c;对外提供服务 在理解zookeeper集群安装方法的基础上&#xff0c;本文描述如何将1个机器模拟为3个节点的zookeeper集群&#xff0c;建议先参考阅读本文的前一期 zookeeper伪集群安装总结 在本机上通过复制的方式&am…

python合成语音_MicroPython动手做(25)——语音合成与语音识别

6、AB按键切换语言合成项目[mw_shl_codepython,true]#MicroPython动手做(25)——语音合成与语音识别#AB按键切换语言合成项目from mpython import *import networkimport timeimport ntptimefrom xunfei import *import audiomy_wifi wifi()my_wifi.connectWiFi("zh"…

专访谷歌CEO:像对待家人一样对待员工

导语&#xff1a;《财富》近日公布了“2012年度美国100家最适宜工作的公司”榜单&#xff0c;谷歌当选冠军。即将于2月6日出版的美国《财富》杂志印刷版将刊登对谷歌CEO拉里佩奇(Larry Page)的专访&#xff0c;对谷歌的工作环境进行了介绍。 以下为采访概要&#xff1a; 问&a…

TensorFlow 分布式

一、简介 使用单台机器或者单个GPU/CPU来进行模型训练&#xff0c;训练速度会受资源的影响&#xff0c;因为毕竟单个的设备的计算能力和存储能力具有一定的上限的&#xff0c;针对这个问题&#xff0c;TensorFlow支持分布式模型运算&#xff0c;支持多机器、多GPU、多CPU各种模…

第五周测试

---恢复内容开始--- 一 视频知识 1 linux系统下如何区分内核态与用户态 在内核态&#xff1a;cs:eip可以是任意的地址&#xff0c;4G的内存地址空间 在用户态&#xff1a;cs:eip只能访问0x00000000—0xbfffffff的地址空间 2 系统调用的三层皮&#xff1a;xyz、system_call和sys…

网页制作小技巧:dl dt dd标签用法

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 一般我们在做列表的时候通常只会用到ul和li,至于DL一般都很少用到&#xff0c;它也属于列表类的标签&#xff0c;下面说一下大概的用法&#xff1a; <dl>标记定义了一个定义列…