优化器--牛顿法总结

---这里记录下一些关于牛顿法来作为优化器的个人笔记 :)

关于牛顿法,先不说其中的概念,来简单看一个例子? 不用计算器,如何手动开一个值的平方根,比如计算{sqrt(a) | a=4 } ? 不用程序和代码如何求?

  ----比较简单有木有,直接上用公式来套就好了.

      xt = ( xt-1 + ( a / xt-1 ) ) / 2

      我们看 sqrt(4) 这个值的区间在1<=sqrt(4)<=4里,写成这种形式吧[1,4],我们令x0 = 1,

      x = ( 1 + (4/1))/2 = 5/2 =2.5

      x = (2.5 + (4/2.5))/2 = 2.05

      x = (2.05 + ( 4 /2.05 ))/2 = 2.0006

        .....

于是我们就求出x的近似值为2

那么这个公式是如何得来的呢?

  这个公式其实是依据牛顿法得来的?牛顿法长成什么样子呢?

     就是长成这个样子,我们发现这个样子和我们的SGD还是很像的,这两者的区别记录在后面吧~。

而牛顿迭代法,这个公式其实就是泰勒级数展开的前几项 f(x),并使得f(x) =0,求解后的结果,而泰勒级数是采用无限项的来等价表示一个函数,比如:

,那牛顿法采用的是泰勒级数的前几项 -- 有限的项,来近似表示一个函数f(x).

那么如何上面这个公式是如何通过牛顿法得到的呢?

  上面的题,我们将其转换车更加通用的一些,比如改为如何求解sqrt(a)?

------这又等价于sqrt(a)=x  转换成-->  x^2 = a , (a 属于实数域),  进一步转换成--->f(x) = x^2 -a =0

我们知道 f(x) = x^2 - a =0 ,因为只要求某一个点的值,所以我们只需要知道这个点的切线就可以了, 由此我们依据泰勒级数定义,对其进行一阶展开,可以知道 f(x) ~g(x) =  f(x0) + f ‘ (x0)*(x - x0),我们令g(x)=0

于是我们就得到了 x = x0 - f(x0) / f ‘(x0);

  然后我们再次化解这个公式:

        x = x0 - (x0^2 - a / 2x0 )  = (x0^2 + a) /2x0  = (x0 + a/x0)/2

这样我们就得到了最开始的那个公式了。

但是我们在用牛顿法作为优化器的时候,是要求极小值的啊? 那么如何快速的求出极小值呢?

   我们知道一阶导,为曲线切线方向,二阶导为切线的切线方向回想一下SGD法,SGD只是在一阶导上,进行权值更新,基本上就是处于求切线方向,前进一个步长,然后再矫正,再求当前点的切线,再矫正:

  

这种方式就会出现绿线的情况,那么牛顿法就給出另一种思路: 我们再沿着切线方向走的时候,不必按照固定的步长走动,我们可以依据切线的变化率来动态调整行走的步子,于是就有了这个公式:

 当二阶导趋近于0的时候,说明一阶导有极小值,那么此时就应该让它接近这个极小值,而loss函数为凸函数 ,f’(x)趋近极小值的时候,f(x)就也就可以快速的接近极小值,而不出现大幅度摇摆,就出现了红色那条线.

一般来说,对于那种高阶多项式采用牛顿法效果会比SGD好些.

时间: 2024-10-24 05:25:01

优化器--牛顿法总结的相关文章

MySQL优化器不使用索引的情况

优化器选择不适用索引的情况 有时候,有乎其并没有选择索引而去查找数据,而是通过扫描聚集索引,也就是直接进行全表的扫描来得到数据.这种情况多发生于范围查找.JOIN链接操作等情况.例如 SELECT * FROM orderdetails WHERE orderid>10000 and orderid<102000; 通过SHOW INDEX FROM orderdetails可以看到 可以看到orderdetails有(orderID,ProductID)的联合主键.此外还有对于列OrderI

利用DBMS_STATS包修改统计信息,欺骗优化器,生成糟糕的执行计划

在使用基于成本的优化器的优化器时,优化器生产执行计划时要估算每条SQL的执行成本,选择最佳的执行计划来执行sql语句.通过操纵统计信息就可以简介操纵执行计划的生成. 当然 需要强调的一点是,这是非常危险的行为 1 创建测试表 SQL> create table test_stats  as   2  select * from dba_objects ; Table created. 2 收集统计信息 SQL> EXEC dbms_stats.gather_table_stats(ownnam

Oracle优化器的基础知识(二)

一. 表连接 顾名思义,表连接就是指多个表之间用连接条件连接在一起,使用表连接的目标SQL的目的就是从多个表获取存储在这些表中的不同维度的数据.体现在SQL语句上,含表连接的目标SQL的from部分会出现多个表,而这些SQL的where条件部分则会定义具体的表连接条件. 当优化器解析含表连接的目标SQL时,它除了会根据目标SQL的SQL文本的写法来决定表连接的类型之外,还必须决定如下三件事情才能得到最终的执行计划. 1.表连接顺序 不管目标SQL中有多少个表做表连接,Oracle在实际执行该SQ

Oracle_sql优化基础——优化器总结

优化器的基础: 1.Oracle里的优化器: 优化器是Oracle数据库中内置的一个核心子系统,优化器的目的就是按照一定的判断原则来得到它认为目标sql在当前情形下最高效的执行路径,也就是说是为了得到目标sql的执行计划. Oracle数据库的优化器分为:RBO和CBO两种类型: RBO:基于规则的优化器(在得到sql执行计划时,RBO所用的判断原则为一组内置的规则) CBO:基于成本的优化器(在得到sql执行计划时,CBO所用的判断原则为成本,它会从目标sql诸多可能的执行路线中选择成本值最小

ORACLE优化器RBO与CBO介绍总结

RBO和CBO的基本概念 Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO) RBO: Rule-Based Optimization 基于规则的优化器 CBO: Cost-Based Optimization 基于代价的优化器 RBO自ORACLE 6以来被采用,一直沿用至ORACLE 9i. ORACLE 10g开始,

optimizer_mode优化器模式

查询优化器最主要的工作就是接受输入的SQL以及各种环境参数.配置参数,生成合适的SQL执行计划(Execution Plan). Query Optimizer一共经历了两个历史阶段: RBO: Rule-Based Optimization 基于规则的优化器 CBO: Cost-Based Optimization 基于代价的优化器 关于RBO与CBO,一个形象的比喻:大数据时代到来以前,做生意或许凭借多年累计 下来的经验规则(RBO)就能够很好的做出决策,跟随市场变化.但是大数据时代,如果做

基于RULE的优化器(学习笔记)

崔华<基于Oracle的sql优化学习笔记> 1.1 基于RULE的优化器 (1) CBO (2)RBO 和CBO相比,RBO是有其明显权限的.在使用RBO的情况下,执行计划一旦出了问题,很难对其做调整.另外,如果使用了RBO则目标SQL的写法,甚至是目标SQL中所涉及的各个对象在该SQL文本中出现的先后顺序都可能影响RBO执行计划的选择我,更糟糕的是,Oracle数据库中很好的特性.功能不能再RBO中使用因为他们不能被RBO锁支持. 只要出现如下情形之一,那么即便修改了优化器模式或者使用了R

MySQL源码 优化器

完成了sql的解析过程后,开始进入优化器: 调用的流程分为: mysql_select: JOIN::prepare: JOIN::optimize: JOIN::exec: prepare过程: 组装各个组件,包括:stepup tables, fields, condition, order 1. tables: setup_tables_and_check_access:从table_list中检查访问权限,并加入到leaf_tables中,增加tables计数. setup_tables

Oracle优化器和执行计划

1. 优化器(Optimizer)是sql分析和执行的优化工具,它负责制定sql的执行计划,负责保证sql执行效率最高,比如决定oracle以什么方式访问数据,全表扫描(full table scan)还是索引范围(index range scan)扫描,还是全索引快速扫描(index fast full scan, INDEX_FFS),对于表关联查询,是用什么方式关联.有2种优化器,RBO和CBO,从oracle 10g开始,RBO已经被弃用,但是仍可以通过hint的方式使用. 2. RBO