当前位置: 首页 > news >正文

测试

梯度下降

方向导数

​ 设三元函数\(f\)在点\(p_0(x_0, y_0, z_0)\)的某领域\(U(P_0)\subset \mathbf{R}^3\)有定义,\(l\)为从点\(P_0\)出发的射线,\(P(x, y, z)\)\(l\)上且含于\(U(P_0)\)内任一点,以\(\rho\)表示\(P\)\(P_0\)两点间的距离,若极限
\[ \lim\limits_{\rho\rightarrow 0^+}\dfrac{f(P)-f(P_0)}{\rho}=\lim\limits_{\rho\rightarrow 0^+}\dfrac{\Delta_lf}{\rho} \]
存在,则称此极限为函数\(f\)在点\(P_0\)沿方向\(l\)的方向导数,记作
\[ \dfrac{\partial f}{\partial l}\Bigg |_{P_0},f_l(P_0)\text{或}f_l(x_0, y_0, z_0) \]
​ 若函数\(f​\)在点\(P_0(x_0, y_0, z_0)​\)可微,则\(f​\)在点\(P_0​\)沿任一方向\(\mathcal{l}​\)的方向导数都存在,且
\[ f_l(P_0)=f_x(P_0)\cos\alpha + f_x(P_0)\cos\beta + f_z(P_0)\cos\gamma \]
其中\(cos\alpha, \cos\beta, \cos\gamma\)为方向\(l\)方向余弦。

梯度

​ 若\(f(x, y, z)\)在点\(P_0(x_0, y_0, z_0)\)存在对所有自变量的偏导数,则称向量\((f_x(P_0), f_y(P_0), f_z(P_0))\)为函数\(f\)在点\(P_0\)的梯度。记作
\[ grad\; f(P_0) = (f_x(P_0), f_y(P_0), f_z(P_0)) \]
向量\(grad\;f\)的长度(或模)为
\[ |grad\; f(P_0)| = \sqrt{f_x(P_0)^2+f_y(P_0)^2+f_z(P_0)^2} \]
​ 若记\(l\)方向上的单位向量为
\[ l_0 = (\cos\alpha,\cos\beta,\cos\gamma) \]
于是方向导数公式又可写成
\[ f_l(P_0) = grad\; f(P_0)\cdot l_0 = |grad\; f(P_0)||l_0|\cos\theta = |grad\; f(P_0)|\cos\theta \]
这里\(\theta\)是梯度向量\(grad\;f(P_0)\)\(l_0\)的夹角。

​ 因此当\(\theta = 0\)时,\(f_l(P_0)\)取最大值\(|grad\; f(P_0)|\)。这就是说,当\(f\)在点\(P_0\)可微时,\(f\)在点\(P_0\)的梯度方向是\(f\)的值增长最快的方向,并且沿这一方向的变化率是梯度的模;而当\(l\)与梯度向量反方向\(\theta = \pi\)时,方向导数取得最小值\(-|grad\;f(P_0)|\)

梯度下降

由于我们的拟合函数是这样子的:\[h_{\theta}(x) = \theta_0 + \theta_1x_1 + \theta_2x_2 + \ldots + \theta_nx_n\]

为了方便,设置初始值\(x_0=1\),那么得到拟合函数
\[ h(x) = \sum_{i=0}^{n}\theta_ix_i = \theta^Tx \]

\[ J(\theta) = \dfrac{1}{2}\sum_{i=0}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 \]

这是损失函数,用来表示拟合程度的好坏。现在要确定一组\(\theta_1, \theta_2,\ldots,\theta_n\)使得到的拟合函数\(h(x)=\sum_{i=0}^n\theta_ix_i\)让损失函数\(J(\theta)\)尽可能小。

​ 为了确定\(\theta_0, \theta_1, \ldots, \theta_n\)的值,可以先对其赋一组初值,然后改变\(\theta\)的值,使得\(J(\theta)\)最小,由上面的梯度性质可以知道,函数\(J(\theta)\)在其负梯度方向下降最快,所以只要使得每个参数\(\theta\)按函负梯度方向改变,则\(J(\theta)\)将得到最小值,即
\[ \theta_i = \theta_i - \alpha\dfrac{\partial J(\theta)}{\partial\theta_i} \]
其中\(\alpha\)表示步长,即每次往下降最快方向走多远。

​ 当只有一组数据时,由于
\[ \dfrac{\partial J(\theta)}{\partial \theta_i} = \dfrac{\partial}{\partial\theta_i}\frac{1}{2}(h_\theta(x) - y)^2=(h_\theta(x)-y)x_i \]
所以
\[ \theta_i = \theta_i - \alpha(h_\theta(x)-y)x_i \]
当有\(m\)组数据时
\[ \theta_i = \theta_i - \alpha\sum_{j=1}^{m}(h_\theta(x^{(j)}-y^{(j)}))x_i^{(j)} \]

每迭代一步,都要遍历到所有的训练数据,此时为批梯度下降算法,当\(m\)非常大的时候,此时算法收敛的得非常慢。所以在进行迭代的时候,让\(\theta_i = \theta_i - \alpha(h_\theta(x^{(j)})-y^{(j)})x_i^{(j)}\)来进行更新迭代,即每次随机选择一个数据集来更新,这样的算法叫做随机梯度算法。

参考文献

  1. 梯度下降深入浅出
  2. 方向导数与梯度

转载于:https://www.cnblogs.com/crackpotisback/p/5537222.html

相关文章:

  • Asp.net MVC 3实例学习之ExtShop(三)——完成首页
  • delphi 中COPY()函数的意思
  • 如何检查oracle的高可用性属性
  • one-to-many many-to-one配置解释
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之93——BREW中的工具接口层...
  • 第二次冲刺阶段每日任务01
  • python基础整理笔记(三)
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之94——BREW中的应用单元测试方法...
  • 一张图说明CDN网络的原理
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之95——BREW中的典型上有测试TBT...
  • 我的程序库:HiCSUtil
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之96——BREW中运营商管理的测试UBT...
  • echarts学习网站
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之97——BREW的应用管理器...
  • QTableWidget嵌入QpushButton后定位QpushButton
  • 分享一款快速APP功能测试工具
  • ComponentOne 2017 V2版本正式发布
  • ES6简单总结(搭配简单的讲解和小案例)
  • FineReport中如何实现自动滚屏效果
  • js 实现textarea输入字数提示
  • PHP变量
  • python3 使用 asyncio 代替线程
  • React as a UI Runtime(五、列表)
  • Spring Cloud中负载均衡器概览
  • Vue小说阅读器(仿追书神器)
  • 产品三维模型在线预览
  • 前端之Sass/Scss实战笔记
  • 使用parted解决大于2T的磁盘分区
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 突破自己的技术思维
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 2017年360最后一道编程题
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # 计算机视觉入门
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $(function(){})与(function($){....})(jQuery)的区别
  • (C++)八皇后问题
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (编译到47%失败)to be deleted
  • (二)Linux——Linux常用指令
  • (接口自动化)Python3操作MySQL数据库
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net core使用ef 6
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET构架之我见
  • [ solr入门 ] - 利用solrJ进行检索
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [ActionScript][AS3]小小笔记
  • [BUAA软工]第一次博客作业---阅读《构建之法》