首先简介梯度法的原理。首先一个实值函数$R^{n} \rightarrow R$的梯度方向是函数值上升最快的方向。梯度的反方向显然是函数值下降的最快方向,这就是机器学习里梯度下降法的基本原理。但是运筹学中的梯度法略有不同,表现在步长的选择上。在确定了梯度方向(或反方向)是我们优化目标函数值的方向后,我们不能够直接获得最佳的步长。常规的做法是选定一个固定的步长,而运筹学中的做法是将问题转化为一个一维搜索问题,进而通过求解这个一维问题(关于步长的函数)的最大最小值获得最佳步长。

  一个好消息是若目标函数$f(x)$二次连续可微, 且海森矩阵 $∇^2 f(x)$ 负定,那么最优步长的近似值可以由如下的公式给出。$$r_k = -\frac{∇f(x^{(k)})^T∇f(x^{(k)})}{∇f(x^{(k)})^T∇^2f(x^{(k)})∇f(x^{(k)})}$$

  下面给出一例利用梯度法求函数极小值(如果是凸规划问题同时也是最小值)的Python实现:

  

Python实现梯度法(最速上升(下降)法)寻找函数极大(极小)值的更多相关文章

  1. python排序之二冒泡排序法

    python排序之二冒泡排序法 如果你理解之前的插入排序法那冒泡排序法就很容易理解,冒泡排序是两个两个以向后位移的方式比较大小在互换的过程好了不多了先上代码吧如下: 首先还是一个无序列表lis,老规矩 ...

  2. Python 几个重要的内置函数

    所谓内置函数,就是在Python中被自动加载的函数,任何时候都可以用.内置函数,这意味着我们不必为了使用该函数而导入模块.不必做任何操作,Python 就可识别内置函数.在学习Python的过程中,有 ...

  3. Python开发【第四篇】函数

    函数的作用 函数可以让编程逻辑结构化以及模块化 无论是C.C++,Java还是Python,函数是必不可少的知识点,也是很重要的知识点,函数是完成一个功能的代码块,使用函数可以使逻辑结构变得更加清晰以 ...

  4. python成长之路八 -- 内置函数

    1,python内置函数     内置函数     abs() dict() help() min() setattr() all()  dir()  hex() next()  slice()  a ...

  5. Python实现客观赋权法

    本文从阐述Python实现客观赋权法的四种方式: 一. 熵权法 二. 因子分析权数法(FAM) 三. 主成分分析权数法(PCA) 四. 独立性权系数法 Python实现客观赋权法,在进行赋权前,先导入 ...

  6. Python基础-week03 集合 , 文件操作 和 函数详解

    一.集合及其运算 1.集合的概念 集合是一个无序的,不重复的数据组合,它的主要作用如下 *去重,把一个列表变成集合,就自动去重了 *关系测试,测试两组数据之前的交集.并集.差集.子集.父级.对称差集, ...

  7. Python编程:从入门到实践—函数

    从函数中修改列表 一家为用户提交的设计制作3D打印模型的公司,需要打印的设计存储在一个列表中,打印后移到另一个列表中. #!/usr/bin/env python # -*- coding:utf-8 ...

  8. Python 之父为什么嫌弃 lambda 匿名函数?

    Python 支持 lambda 匿名函数,其扩展的 BNF 表示法是lambda_expr ::= "lambda" [parameter_list] ":" ...

  9. Python语言系列-03-文件操作和函数

    ## 深浅拷贝 #!/usr/bin/env python3 # author:Alnk(李成果) # 赋值运算 # 可变的数据类型:由于数据类型可变,修改数据会在原来的数据的基础上进行修改, # 可 ...

随机推荐

  1. Class basic syntax

    Class basic syntax Wikipedia In object-oriented programming, a class is an extensible program-code-t ...

  2. LOL源代码娜美皮肤免费领取

    领取地址 http://t.cn/EyOY8zp 截图

  3. 【Python】利用python自动发送邮件

    前言 在训练网络的过程中,需要大量的时间,虽然可以预估网络训练完成时间,但蹲点看结果着实有点不太聪明的亚子. 因此,参照师兄之前发的python利用smtp自动发邮件的代码,我作了些调整,并参照网上的 ...

  4. eclipse——Error exists in required project Proceed with launch?

    运行java文件时报错: Error exists in required project    Proceed with launch? 报错截图: 问题参生原因:开始Buildpath了一个jar ...

  5. Linux退出vi编辑

    按ESC键 跳出vi的编辑命令,然后: :w 保存文件但不退出vi:w file 将修改另外保存到file中,不退出vi:w! 强制保存,不推出vi:wq 保存文件并退出vi:wq! 强制保存文件,并 ...

  6. .NET Core HttpClient源码探究

    前言     在之前的文章我们介绍过HttpClient相关的服务发现,确实HttpClient是目前.NET Core进行Http网络编程的的主要手段.在之前的介绍中也看到了,我们使用了一个很重要的 ...

  7. Docker scratch 无法正常运行golang二进制程序的问题

    使用Docker构建容器能够极大的降低运维成本,提高部署效率,同时非常方便对服务的平行扩展.然而在构建容器镜像过程中的,存在着一个难以避免的问题,就是如果使用常见的发行版本作为程序运行的基础环境,那么 ...

  8. mysql页面查询

    <?php $link = mysql_connect('127.0.0.1', 'root', 'root'); if (!$link) { die('Could not connect: ' ...

  9. Parrot os安装nvidia失败恢复

    因为两种显卡,amd和nvidia,所以按照parrot官方文档安装驱动,结果可想而知,安装失败--- 内心万马奔腾,去国外论坛也发现很多求助的小伙伴,所以有了我这次随笔,如何恢复你的parrot 黑 ...

  10. jchdl - GSL实例:HalfAdder

    https://mp.weixin.qq.com/s/Y97bIro7UlPPFCoPlzgmOQ 半加器电路是指对两个输入相加,输出一个结果位和,没有进位输入的电路. 是实现两个一位二进制数的加法运 ...