精华内容
下载资源
问答
  • 最优化算法

    2019-03-16 16:15:56
    在推荐和广告等需要处理大数据的领域里,经常需要用到的一项基础理论知识是最优化理论和方法。这些具体应用领域的很多问题都可以抽象为一个数学上的最优化问题,例如推荐领域的排序问题,广告领域的CTR估计问题,...

    在推荐和广告等需要处理大数据的领域里,经常需要用到的一项基础理论知识是最优化理论和方法。这些具体应用领域的很多问题都可以抽象为一个数学上的最优化问题,例如推荐领域的排序问题,广告领域的CTR估计问题,等等。

    最优化理论研究的目标是在给定的约束条件下,如何找到一个目标函数的最优值。具体来说,可以用下列下面的形式来表示最优化问题:

    minF(x)s.tG(x)0,H(x)=0minF(\boldsymbol x) \quad s.t \quad G(\boldsymbol x) \preceq 0, H(\boldsymbol x) = 0

    其中F(x)F(\boldsymbol x)是关于自变量x\boldsymbol x的函数,也是需要我们找到最优值的目标函数;G(x)0,H(x)=0\quad G(\boldsymbol x) \preceq 0, H(\boldsymbol x) = 0是自变量x\boldsymbol x需要满足的约束条件。

    最优化的方法有很多,其中有些适合带约束的最优化问题,有些适合不带约束的最优化问题,这里简单介绍几类最常用算法:

    • 拉格朗日法
    • 梯度下降法
    • 牛顿法

    拉格朗日法

    在介绍拉格朗日法之前,先介绍一个关于凸优化相关的概念

    凸集合 :给定一个集合DD,对于其中任意的两个元素xD,yDx\in D, y\in D,以及任意一个实数θR0θ1\theta\in R, 0\leq\theta \leq1,满足θx+(1θ)yD\theta x + (1-\theta)y \in D,则称集合DD为凸集合(convex set)

    凸函数 :如果一个函数f(x)f(\boldsymbol x)的定义域D(f)D(f)是一个凸集合,并且对于任意实数0θ10\leq \theta \leq 1满足:

    θf(x)+(1θ)f(y)f(θx+(1θ)y)\theta f(x) + (1-\theta)f(y) \geq f(\theta x + (1-\theta) y)

    则称此函数为凸函数。

    凸优化 :凸优化问题形式化定义如下:

    minf(x)s.tgi(x)0,hj(x)=0,i[1,m],j[1,n]minf(x)\quad s.t \quad g_i(x)\leq 0, h_j(x)=0, i\in[1,m], j\in[1,n]

    其中目标函数f(x)f(x)和不等式约束函数gi(x)g_i(x)是凸函数,等式约束函数hi(x)h_i(x)是仿射函数。

    实际在求解以上带约束的凸优化问题的时候,可以通过一定的方式将其转化称为一个不带约束的最优化问题,那么如果进行转换呢?首先我们引入拉格朗日函数,其具体形式如下:

    L(x,λ,ν)=f(x)+i=1mλigi(x)+i=1nνihi(x)L(x,\lambda, \nu)=f(x) + \sum_{i=1}^m\lambda_ig_i(x)+\sum_{i=1}^n\nu_ih_i(x)

    其中λ,ν\lambda, \nu被称为拉格朗日乘子。

    引入拉格朗日函数之后了,很容易可以证明,求解原问题等价与求解下面的问题:

    minxf(x)min_xf(x)
    =minxmaxλ,ν:λi0L(x,λ,ν)=min_xmax_{\lambda,\nu:\lambda_i\geq0}L(x,\lambda,\nu)
    =minxJ(x)=min_xJ(x)

    其中J(x)=maxλ,ν:λi0L(x,λ,ν).J(x)=max_{\lambda,\nu:\lambda_i\geq 0}L(x,\lambda,\nu).

    如此,原始的带约束的凸优化问题就转化成立不带约束的最优化问题。

    继续推导,我们还可以证明:

    minxmaxλ,ν:λi0L(x,λ,ν)min_xmax_{\lambda,\nu:\lambda_i\geq0}L(x,\lambda,\nu)

    maxλ,ν:λ0minxL(x,λ,ν)\geq max_{\lambda,\nu:\lambda\geq0}min_xL(x,\lambda,\nu)

    =maxλ,ν:λ0L(λ,ν)=max_{\lambda,\nu:\lambda\geq0}L(\lambda,\nu)

    也就是:

    minxf(x)=minxJ(x)maxλ,ν:λ0L(λ,ν)min_xf(x)=min_xJ(x)\geq max_{\lambda,\nu:\lambda\geq0}L(\lambda,\nu)

    我们把其中L(λ,ν)=minxL(x,λ,ν)L(\lambda,\nu)=min_xL(x,\lambda,\nu)称为目标函数f(x)f(x)的对偶函数。可以看出,对偶函数的最优值是原函数最优值的下界。

    当等号成立的时候,称之为强对偶,否则称之为弱对偶。可以证明当原问题是凸优化问题的时候,强对偶总是满足的。

    另外,即使原问题不是凸优化问题,只要满足一定的条件,强对偶也是会满足的,这个条件被称为KKT条件:

    xL(x,λ,ν)=0\nabla_xL(x,\lambda,\nu)=0
    λigi(x)=0\lambda_ig_i(x)=0
    gi(x)0g_i(x)\leq0
    λ0\lambda\geq0

    梯度下降法

    我们用下山的例子来介绍梯度下降优化法,比如我们在山上的某个位置,目的是要下到山下,但是因为身处山中,视野有限,只能看到周围情况,那么如何才能下到山下呢?

    一个比较直观的想法就是,观察当前位置上哪个方向高度下降的最大,我们便朝这个方向移动一步,接着我们继续观察移动后的位置上,高度下降最大的方向,再继续朝这个方向移动一步;如此不断重复上面的步骤,直到到达一个位置后,所有的方向上的高度都不再下降为止。

    函数F(x)F(\boldsymbol x)的最小值求解过程可以类比下山的过程,自变量x\boldsymbol x表示我们当前所在的位置的坐标,函数值F(x)F(\boldsymbol x)表示当前位置的高度。那么问题就转化为如何找到高度变化最大的方向了。

    由此引入梯度(gradient)的概念,梯度的定义如下:

    gradF(x1,x2,...,xn)=(Fx1,Fx2,...,Fxn)gradF(x_1,x_2,...,x_n)=(\frac{\partial F}{\partial x_1},\frac{\partial F}{\partial x_2},...,\frac{\partial F}{\partial x_n})

    并且梯度就有一个很重要的性质,那就是函数再沿梯度的方向上值增长率最大,所以在优化目的函数值的时候,一个很自然的方法就是沿着梯度的反方向去改变自变量的值,表示为:

    xn+1=xnη\boldsymbol x_{n+1} = \boldsymbol x_n - \eta \nabla

    其中\nabla表示函数F(x)的梯度,η\eta称为学习步长或学习速率;学习步长是训练模型的超参之一。

    以上便是梯度下降算法的基本思想,但是也很容易发现,基本的梯度下降法的一些缺点,比如目标函数如果不是凸函数的话,不能保证收敛到全局的最优值,可能会陷入局部的最优值。

    为了克服这一缺点,一系列的基于梯度下降的优化算法被提出来,比如基于动量的梯度下降法,ADAGRAD, ADAM等,这里就不逐一介绍了。

    牛顿法

    牛顿法是一种近似求解方程根的方法,例如求解一元方程f(x)=0f(x)=0的根,牛顿法的求解步骤是:

    • 初始化自变量的值 x=x0x=x_0, 计算函数值f(x0)f(x_0)以及函数导数值f(x0)f'(x_0).
    • 求经过点(x0,f(x0))(x_0,f(x_0))并且斜率为f(0)f'(0)的直线与xx轴的交点的横坐标x1x_1, 也就是求解方程:

    (x0x1)f(x0)=f(x0)0(x_0-x_1)f'(x_0) = f(x_0) - 0

    得到x1x_1为:

    x1=x0f(x0)fx0x_1=x_0 - \frac{f(x_0)}{f'{x_0}}

    • 重复步骤以上两个步骤,直到xn+1,xnx_{n+1}, x_{n}足够接近为止,其中自变量的更新方式为:

    xn+1=xnf(xn)f(xn)x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}

    那么就牛顿法怎么运用到函数值的优化过程呢?其实目标函数F(x)F(x)的最优化的过程也就是寻找函数F(x)F(x)极值的过程,而函数的极值可以通过求职方程F(x)=0F'(x)=0根的方式求得。所以可以看出,我们把最优化的问题转化为了求解方程根的问题,然后可以用牛顿法求解。

    牛顿法的最大优点在于它的收敛速度很快。

    展开全文
  • 最优化算法之粒子群算法(PSO)

    万次阅读 多人点赞 2018-08-03 10:26:45
    粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找优解.   PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制...

    一、粒子群算法的概念

      粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
      PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。

    二、粒子群算法分析

    1、基本思想

      粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:
    这里写图片描述

    2、更新规则

      PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
    这里写图片描述
    公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式
    这里写图片描述
    公式(2)和 公式(3)被视为标准PSO算法

    3、PSO算法的流程和伪代码

    这里写图片描述

    4、PSO算法举例

    这里写图片描述
    这里写图片描述

    5、PSO算法的demo

    #include <iostream>
    #include <vector>
    #include <cmath>
    #include <map>
    #include <algorithm>
    #include <random>
    #include <ctime>
    #include <Eigen/Dense>
    using namespace Eigen;
    using namespace std;
    
    const int dim = 1;//维数
    const int p_num = 10;//粒子数量
    const int iters = 100;//迭代次数
    const int inf = 999999;//极大值
    const double pi = 3.1415;
    //定义粒子的位置和速度的范围
    const double v_max = 4;
    const double v_min = -2;
    const double pos_max = 2;
    const double pos_min = -1;
    //定义位置向量和速度向量
    vector<double> pos;
    vector<double> spd;
    //定义粒子的历史最优位置和全局最优位置
    vector<double> p_best;
    double g_best;
    //使用eigen库定义函数值矩阵和位置矩阵
    Matrix<double, iters, p_num> f_test;
    Matrix<double, iters, p_num> pos_mat;
    
    //定义适应度函数
    double fun_test(double x)
    {
        double res = x * x + 1;
        return res;
    }
    
    //初始化粒子群的位置和速度
    void init()
    {
        //矩阵中所有元素初始化为极大值
        f_test.fill(inf);
        pos_mat.fill(inf);
        //生成范围随机数
        static std::mt19937 rng;
        static std::uniform_real_distribution<double> distribution1(-1, 2);
        static std::uniform_real_distribution<double> distribution2(-2, 4);
        for (int i = 0; i < p_num; ++i)
        {
            pos.push_back(distribution1(rng));
            spd.push_back(distribution2(rng));
        }
        vector<double> vec;
        for (int i = 0; i < p_num; ++i)
        {
            auto temp = fun_test(pos[i]);//计算函数值
            //初始化函数值矩阵和位置矩阵
            f_test(0, i) = temp;
            pos_mat(0, i) = pos[i];
            p_best.push_back(pos[i]);//初始化粒子的历史最优位置
        }
        std::ptrdiff_t minRow, minCol;
        f_test.row(0).minCoeff(&minRow, &minCol);//返回函数值矩阵第一行中极小值对应的位置
        g_best = pos_mat(minRow, minCol);//初始化全局最优位置
    }
    
    void PSO()
    {
        static std::mt19937 rng;
        static std::uniform_real_distribution<double> distribution(0, 1);
        for (int step = 1; step < iters; ++step)
        {
            for (int i = 0; i < p_num; ++i)
            {
                //更新速度向量和位置向量
                spd[i] = 0.5 * spd[i] + 2 * distribution(rng) * (p_best[i] - pos[i]) +
                    2 * distribution(rng) * (g_best - pos[i]);
                pos[i] = pos[i] + spd[i];
                //如果越界则取边界值
                if (spd[i] < -2 || spd[i] > 4)
                    spd[i] = 4;
                if (pos[i] < -1 || pos[i] > 2)
                    pos[i] = -1;
                //更新位置矩阵
                pos_mat(step, i) = pos[i];
            }
            //更新函数值矩阵
            for (int i = 0; i < p_num; ++i)
            {
                auto temp = fun_test(pos[i]);
                f_test(step, i) = temp;
            }
            for (int i = 0; i < p_num; ++i)
            {
                MatrixXd temp_test;
                temp_test = f_test.col(i);//取函数值矩阵的每一列
                std::ptrdiff_t minRow, minCol;
                temp_test.minCoeff(&minRow, &minCol);//获取每一列的极小值对应的位置
                p_best[i] = pos_mat(minRow, i);//获取每一列的极小值,即每个粒子的历史最优位置
            }
            g_best = *min_element(p_best.begin(), p_best.end());//获取全局最优位置
        }
        cout << fun_test(g_best);
    }
    
    int main()
    {
        init();
        PSO();
        system("pause");
        return 0;
    }

    参考:https://blog.csdn.net/myarrow/article/details/51507671
    https://blog.csdn.net/google19890102/article/details/30044945
    https://wenku.baidu.com/view/65c600b9294ac850ad02de80d4d8d15abe230048.html
    https://blog.csdn.net/darin1997/article/details/80675933

    展开全文
  • 离散最优化算法.pdf

    2019-05-11 14:19:10
    离散最优化算法.pdf
  • 最优化算法——常见优化算法分类及总结

    万次阅读 多人点赞 2018-10-27 12:54:53
    之前做特征选择,实现过基于群智能算法进行最优化的搜索,看过一些群智能优化算法的论文,在此做一下总结。 最优化问题  在生活或者工作中存在各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题“在...

    之前做特征选择,实现过基于群智能算法进行最优化的搜索,看过一些群智能优化算法的论文,在此做一下总结。

    最优化问题

      在生活或者工作中存在各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题“在一定成本下,如何使利润最大化”等。最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称。

      工程设计中最优化问题(optimalization problem)的一般提法是要选择一组参数(变量),在满足一系列有关的限制条件(约束)下,使设计指标(目标)达到最优值。因此,最优化问题通常可以表示为数学规划形式的问题。进行工程优化设计时,应将工程设计问题用上述形式表示成数学问题,再用最优化的方法求解。这项工作就是建立优化设计的数学模型。

    optimalization

      
      最优化问题分为函数优化问题和组合优化问题两大类,其中函数优化的对象是一定区间的连续变量,而组合优化的对象则是解空间中的离散状态。其中典型的组合优化问题有旅行商(Traveling salesman problem,TSP)问题、加工调度问题(Scheduling problem,如Flow-shop,Job-shop)、0-1背包问题(Knapsack problem)、装箱问题(Bin packing problem)、图着色问题(Graph coloring problem)、聚类问题(Clustering problem)等。

    最优化算法

    根据自己对最优化的理解,采用最优化算法解决实际问题主要分为下列两步:

    • 建立数学模型。对可行方案进行编码(变量),约束条件以及目标函数的构造。
    • 最优值的搜索策略。在可行解(约束条件下)搜索最优解的方法,有穷举、随机和启发式搜索方法。

    最优化算法有三要素:变量(Decision Variable)、约束条件(Constraints)和目标函数(Objective function)。最优化算法,其实就是一种搜索过程或规则,它是基于某种思想和机制,通过一定的途径或规则来得到满足用户要求的问题的解。

    优化问题相关算法有如下分类:

    优化算法

    精确算法(绝对最优解)

    精确算法包括线性规划、动态规划、整数规划和分支定界法等运筹学中的传统算法,其算法计算复杂性一般很大,只适合于求解小规模问题,在工程中往往不实用。

    启发式算法(近似算法)

      启发式方法指人在解决问题时所采取的一种根据经验规则进行发现的方法。其特点是在解决问题时,利用过去的经验,选择已经行之有效的方法,而不是系统地、以确定的步骤去寻求答案。

    领域搜索算法。从任一解出发,对其领域的不断搜索和当前解的替换来实现优化。根据搜索行为,它又可分为局部搜索法和指导性搜索法。

    • 局部领域搜索法(也称爬山法)。以局部优化策略在当前解的领域中贪婪搜索,如只接受优于当前解的状态作为下一当前解的爬山法;接受当前邻域中的最好解作为下一当前解的最陡下降法等。

    • 指导性搜索法。利用一些指导规则来指导整个解空间中优良解的探索,如SA、GA、EP、ES和TS等.

    个体启发(寻找相对最优)

    特点:每次输出的是相同的。从一个解开始,寻找最优,易陷入局部最优。

    爬山算法

    算法思想:从当前的节点开始,和周围的邻居节点的值进行比较。如果当前节点是最大的,那么返回当前节点,作为最大值(即山峰最高点);反之就用最高的邻居节点替换当前节点,从而实现向山峰的高处攀爬的目的。

    其实就是,在初始值的附近,找到最大的一个。

    • 优点

      • 容易理解,容易实现,具有较强的通用性;
      • 局部开发能力强,收敛速度很快
    • 缺点

      • 全局开发能力弱,只能搜索到局部最优解;
      • 搜索结果完全依赖于初始解和邻域的映射关系。

    禁忌算法(Tabu Search,TS)

    基本思想:基于爬山算法的改进,标记已经解得的局部最优解或求解过程,并在进一步的迭代中避开这些局部最优解或求解过程。局部搜索的缺点在于,太过于对某一局部区域以及其邻域的搜索,导致一叶障目。为了找到全局最优解,禁忌搜索就是对于找到的一部分局部最优解,有意识地避开它,从而或得更多的搜索区域

    • 特点:

      • 避免在搜索过程中的循环
      • 只进不退的原则,通过禁忌表实现
      • 不以局部最优作为停止准则
      • 邻域选优的规则模拟了人类的记忆功能
    • 禁忌表:用于防止搜索出现循环

      • 记录前若干步走过的点、方向或目标值,禁止返回
      • 表是动态更新的
      • 表的长度称为Tabu-Size
    • 禁忌表的主要指标(两项指标)

      • 禁忌对象:禁忌表中被禁的那些变化元素
      • 禁忌长度:禁忌的步数
    • 禁忌对象(三种变化)

      • 以状态本身或者状态的变化作为禁忌对象
      • 以状态分量以及分量的变化作为禁忌对象
      • 采用类似的等高线做法,以目标值变化作为禁忌对象
    • 禁忌长度:可以是一个固定的常数(T=c),也可以是动态变化的,可按照某种规则或公式在区间内变化。

      • 禁忌长度过短,一旦陷入局部最优点,出现循环无法跳出;
      • 禁忌长度过长,候选解全部被禁忌,造成计算时间较大,也可能造成计算无法继续下去。

    参考:

    1. 禁忌搜索算法(Tabu Search)
    2. 禁忌搜索算法详解

    贪婪算法

    从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到算法中的某一步不能再继续前进时,算法停止。

    基本都要先排序,从排序的开始那个依次判断,符合就留下不符合就去掉。

    模拟退火(simulated annealing,SA)

    模拟退火算法作为局部搜索算法的扩展,在每一次修改模型的过程中,随机产生一个新的状态模型,然后以一定的概率选择邻域中能量值大的状态.这种接受新模型的方式使其成为一种全局最优算法,并得到理论证明和实际应用的验证.SA虽然在寻优能力上不容置疑,但它是以严密的退火计划为保证的,具体地讲,就是足够高的初始温度、缓慢的退火速度、大量的迭代次数及同一温度下足够的扰动次数。

    用兔子的故事来说:兔子喝醉了。他随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,他渐渐清醒了并朝他踏过的最高方向跳去。这就是模拟退火。

    其实就是,先用初始值进行随机更新,记录每次更新的值,最后取历史记录中最大的值。

    参考:模拟退火算法

    群体智能(全局最优)

    类别:

    • 粒子群算法(PSO)
    • 蚁群算法(ACO)
    • 人工蜂群算法(ABC)
    • 人工鱼群算法(AFSA)
    • 混洗蛙跳算法(SFLA)
    • 烟花算法(FWA)
    • 细菌觅食优化(BFO)
    • 萤火虫算法(FA)

    特点:

    • 全局寻优
    • 每次的解都不同
    • 时间较长

    智能计算包括:

    • 进化算法(EC),如遗传算法。
    • 模糊逻辑
    • 群智能(SI)算法
    • 人工免疫系统(AIS)
    • 人工神经网络(ANN)

    参考:

    1. 最优化问题及其分类
    2. 遗传算法
    3. 《MATLAB神经网络30个案例分析》的13个案例中的GA优化SVM参数
    4. 手把手教你实现SVM算法(一)
    5. 遗传算法学习笔记(一):常用的选择策略
    6. 粒子群算法介绍(讲解的很清晰,将PSO的算法原理、算法特点以及参数的设置)
    7. 群体智能简介ppt(粒子群和人工蚁群优化)
    8. 优化算法分类

     

    原文出处:http://dingby.site/2018/04/07/%E6%9C%80%E4%BC%98%E5%8C%96%E7%AE%97%E6%B3%95%E2%80%94%E2%80%94%E5%B8%B8%E8%A7%81%E4%BC%98%E5%8C%96%E7%AE%97%E6%B3%95%E5%88%86%E7%B1%BB%E5%8F%8A%E6%80%BB%E7%BB%93/

    展开全文
  • 最优化算法总结

    万次阅读 多人点赞 2018-08-22 21:53:05
    本文为SIGAI 2018/8/22最优化算法总结的直播笔记。 目录 总结图片: 1、精确求解(公式求解) 2 数值优化算法 2.1 梯度下降法 2.1.1 动量项 2.1.2 自适应学习率法  AdaGrad  RMSProp  AdaDelta  ...

    本文为SIGAI 2018/8/22最优化算法总结的直播笔记。

    目录

    总结图片:

    1、精确求解(公式求解)

    2 数值优化算法

    2.1 梯度下降法

    2.1.1 动量项

    2.1.2 自适应学习率法

             AdaGrad

             RMSProp

             AdaDelta

             Adam

             随机梯度下降

    2.2 牛顿法

    3 分治法

    3.1 坐标下降法

    3.2 SMO算法

    3.3 分阶段优化法


    总结图片:

    1、精确求解(公式求解)

    一共分为三种:费马定理→拉格朗日乘数法→KKT条件

    2 数值优化算法

    2.1 梯度下降法

    有两种调整方法——加入动量项自适应学习率法

    2.1.1 动量项

    动量项展开后(累计了之前所有的梯度):

    2.1.2 自适应学习率法

    AdaGrad

    RMSProp

    AdaDelta

    前两种方法还都用了人工的学习率α,替换掉了人工学习率α后:

    Adam

    随机梯度下降

    2.2 牛顿法

    3 分治法

    将一个大问题分解成子问题求解,最后将子问题拼接起来

    3.1 坐标下降法

    3.2 SMO算法

    (下图中C是惩罚因子)

    3.3 分阶段优化法

    上图中:先固定β,优化f;再固定f,优化β

    展开全文
  • 序列最小最优化算法

    2020-02-24 23:30:33
    序列最小最优化算法 前面我们讲过了支持向量机的原理,将我们的问题转化为约束优化问题,但还没有提到使用什么方法求解最优化解。 事实上一般我们用SMO(序列最小最优化算法)求解最优解,最要是这个算法即使在训练...
  • 第一章 最优化算法概述 1.1最优化算法简介 最优化算法,即最优计算方法,也是运筹学。涵盖线性规划、非线性规划、整数规划、组合规划、图论、网络流、决策分析、排队论、可靠性数学理论、仓储库存论、物流论、博弈论、...
  • 从推公式到写代码:代码是联系理论和现实的桥梁,本书通过代码实现*优化算法,将理论与实践相结合,在编程中思考算法的计算过程,并通过代码将算法应用在实际问题中,以达到解决问题的目的。本书以理论结合编程开发...
  • 最优化算法与编程基础章最优化算法概述21.1最优化算法简介31.2最优化算法的内容41.2.1规划论41.2.2库存论51.2.3图论61.2.4排队论71.2.5可靠性理论81.2.6对策论81.2.7决策论81.2.8搜索论91.3本章小结9第2章Python...
  • 最优化算法 之 PSO算法

    千次阅读 2016-10-11 00:14:50
    (一)PSO算法简要介绍**PSO算法是一种最优化算法。它预定义一组粒子,和计算粒子适应值(fitness value)的函数。然后进行如下步骤:(1) 随机化这些粒子,并根据适应值函数算出所有粒子的适应值; (2) 选出当前所有...
  • 2019 June 26 最优化算法 机器学习中的最优化算法总结
  •  链接抛上: 梯度下降算法原理及其在线性回归中的应用 最优化算法之牛顿和拟牛顿算法学习 对于共轭梯度算法的学习,也是讲究基础性的学习,包括共轭的概念,共轭梯度的思想,以及推到等,网上资源很多,我找了一...
  • python视频教程栏目介绍各种最优化算法 相关免费学习推荐:python视频教程 二分法 函数详见rres,此代码使该算法运行了两次 def asdf(x): rres=8*x**3-2*x**2-7*x+3 return rres i=2 left=0 right=1 ...
  • 数值最优化算法与理论习题解答,部分答案有,部分没有
  • 最优化算法基础

    千次阅读 2017-11-24 15:46:10
    优化算法基础
  • 遗传算法介绍及代码实现(一)算法说明遗传算法是最优化算法的一种,具体算法步骤如下: (1) 首先,预先设定染色体数目GeneSize, 基因的最大最小范围maxGene/minGene, 变异概率mutepro, 交叉概率crosspro,迭代次数...
  • 最优化算法与matlab应用3:最速下降法 最速下降法上一种沿着N维目标函数的负梯度方向搜索最小值的方法。 (1)算法原理 函数的负梯度表示如下: 搜索步长可调整ak,通常记为 (第k次迭代的步长)。该算法利用一维的...
  • 最优化算法(一)

    千次阅读 2017-06-12 19:56:37
    最优化算法在机器学习中扮演着重要的角色,很多的机器学习算法最终都会归结为如下的最优化问题minfJ(x):=λΩ(f)+Remp(f)\min_f J(x):=\lambda\Omega(f)+R_{emp}(f)以上就是结构风险最小化,其中Remp(f)R_{emp}(f)是...
  • | 第1篇 优化算法与编程基础 |第1章 优化算法概述 21.1 优化算法简介 31.2 优化算法的内容 41.2.1 规划论 41.2.2 库存论 51.2.3 图论 61.2.4 排队论 71.2.5 可靠性理论 81.2.6 对策论 81.2.7 决策论 81.2.8 搜索论...
  • 最优化算法背景通过公式生成ADF之后,根据下层函数库的配置,在结构不变的情形下,ADF是可以通过一系列值在0-1之间的参数进行调节的。也即ADF可表示为固定维数n的实数集,因此需要解决的问题就是在给定的目标下,求...
  • 1998年,由Platt提出的序列最小最优化算法(SMO)可以高效的求解上述SVM问题,它把原始求解N个参数二次规划问题分解成很多个子二次规划问题分别求解,每个子问题只需要求解2个参数,方法类似于坐标上升,节省时间成本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,121
精华内容 8,448
关键字:

最优化算法