精华内容
下载资源
问答
  • 局部最优问题 在神经网络中,我们通常遇到的情况是右图中的鞍点,而不是左图中的局部最优。 想象你坐在马鞍上,那么你坐下的那一个点就是导数为0的点, 有关平稳段的问题 平缓段让学习变得很慢(这是Momentum Adam ...

    学习率衰减

    考虑学习率不变的情况,梯度下降难以在最后达到收敛,如果采用学习率衰减方式呢?在刚开始能承受大步伐的梯度下降,随着梯度下降的进行,学习率衰减有利于最后收敛到一个趋近于最低点。
    在这里插入图片描述
    在1epoch内(1 pass through data):
    α = α 0 1 + d e c a y _ r a t e ∗ e p o c h _ n u m \alpha=\frac{\alpha_0}{1+decay\_rate*epoch_\_num} α=1+decay_rateepoch_numα0
    其他学习率衰减的方法:
    α = 0.9 5 e p o c h _ n u m ∗ α 0 \alpha=0.95^{epoch\_num}*\alpha_0 α=0.95epoch_numα0

    α = k e p o c h _ n u m ∗ α 0 \alpha=\frac{k}{\sqrt{epoch\_num}}*\alpha_0 α=epoch_num kα0

    α = k t ∗ α 0 \alpha=\frac{k}{\sqrt{t}}*\alpha_0 α=t kα0

    也有用离散值作为学习率的。

    局部最优问题

    在这里插入图片描述
    在神经网络中,我们通常遇到的情况是右图中的鞍点,而不是左图中的局部最优。
    想象你坐在马鞍上,那么你坐下的那一个点就是导数为0的点,
    在这里插入图片描述
    有关平稳段的问题
    在这里插入图片描述

    • 平缓段让学习变得很慢(这是Momentum Adam RMSprop优化算法可以加速这个过程,尽早走出平稳段)
    • 不太可能困在不好的局部最优(前提:有大量的参数,J也是在高维空间)
    展开全文
  • 当神经网络使用梯度下降算法寻优时,陷入局部最优的条件是所有偏导数在这一点全部为0, 在二维或三维空间似乎这种点很容易遇到,但在极高维的空间中这样的点很难遇到,在高维空间大部分是鞍点; 由于深度神经网络...
    1. 当神经网络使用梯度下降算法寻优时,陷入局部最优的条件是所有偏导数在这一点全部为0,
    2. 在二维或三维空间似乎这种点很容易遇到,但在极高维的空间中这样的点很难遇到,在高维空间大部分是鞍点;
    3. 由于深度神经网络多数情况下在高维进行寻优,因此根据上边的解释很难陷入局部最优
    展开全文
  • 文章目录基本知识回顾如何证明问题具有贪心选择性质样例一:活动安排问题问题描述总有一个以贪心选择为开始的最优解样例二、最优装载的贪心性证明问题描述证明过程分析与总结 基本知识回顾 贪心算法的基本要素 最...

    基本知识回顾

    • 贪心算法的基本要素
      • 最优子结构性质:一个问题的最优解包含其子问题的最优解时,称这个问题具有最优子结构性质
      • 贪心选择性质:所求问题的整体最优解可以通过一系列的局部最优解选择,也就是贪心选择来得到。
        • 这也是贪心算法对于最优解问题可行的基本要素,是贪心算法区别于动态规划算法的主要区别
        • 如果要使用贪心算法,一定要证明由算法所得到的解是最优的,通过局部最优可以得到整体最优

    如何证明问题具有贪心选择性质

    • 对于一个具体的问题,确定是否具有贪心选择的性质,必须证明每一步所作的贪心选择最终导致问题的整体的最优解
    样例一:活动安排问题
    • 分为两步:
      • 证明总存在一个以贪心选择开始的最优活动安排方案
      • 再证明每一步所作的贪心选择都将问题简化为一个更小的与原问题具有相同形式的子问题
    问题描述

    在这里插入图片描述

    总有一个以贪心选择为开始的最优解

    在这里插入图片描述

    • 每一步所作的贪心选择都将问题简化为一个更小的与原问题具有相同形式的子问题

    在这里插入图片描述

    样例二、最优装载的贪心性证明
    • 对于一个具体的问题,要确定她是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解
    问题描述

    在这里插入图片描述

    证明过程
    • 证明贪心性分两步
      • 首先证明最佳装载问题有一个最优解以贪心选择开始的,即该最优解包含最轻的物体
      • 然后证明每一个所作的贪心选择都将问题简化为一个更小的与原问题具有相同形式的子问题
    • 该问题有一个最优解是贪心选择开始的
      在这里插入图片描述
    • 每一个所作的贪心选择,都将问题转化为与更小的与原问题相同形式的子问题

    在这里插入图片描述

    分析与总结

    • 但愿考到
    • 照葫芦画瓢,理解起来都好办
    展开全文
  • 就是一句话,局部最优推出全局最优,找不出反例,试试贪心

    简单题目

    贪心算法总结就是一句话,局部最优推出整体最优
    例如力扣上的这一道题:

    LC455

      每个孩子有胃口g[i] ,饼干有尺寸s[i] ,求最多可以满足多少孩子的胃口?
      局部最优,就是满足一个孩子的胃口,用尽可能少的饼干满足胃口尽可能大的孩子,然后满足多个孩子,最终满足胃口数量达到最优

    我们,可以首先将数组排序,然后,用大饼干开始满足大胃口,记录满足的个数,最终返回结果
    在这里插入图片描述

    class Solution {
    public:
        int findContentChildren(vector<int>& g, vector<int>& s) {
            //局部最优推出全局最优解
            if(s.size()==0) return 0;
            int count =0;
            sort(g.begin(),g.end());
            sort(s.begin(),s.end());
            int index=s.size()-1;
            for(int i=g.size()-1;i>=0;i--)
            {
                if(index>=0&&s[index]>=g[i])
                {
                    index--;
                    count++;
                }
            }
            return count;
        }
    };
    

    LC376

    在这里插入图片描述
      永远记住,贪心的方法,局部最优推出整体最优,为了统计摆动序列的最大长度,所以,可以将一些破坏摆动性的数字删除,使其达到最大的摆动性,从实现上看,就是将连续下降和连续上升的坡上面只保留一个元素:
    在这里插入图片描述

    class Solution {
    public:
        int wiggleMaxLength(vector<int>& nums) {
            //局部最优推出整体最优
            if(nums.size()<=1) return nums.size();
            int preDiff=0;
            int curDiff=0;
            int count=1;
            for(int i=0;i<nums.size()-1;++i)
            {
                curDiff=nums[i+1]-nums[i];
                if( (curDiff>0&&preDiff<=0)||(curDiff<0&&preDiff>=0) )
                {
                    count++;
                    preDiff=curDiff;
                }
            }
            return count;
        }
    };
    

    因为两个元素的时候,只能感受到一个峰,三个元素的时候,最多只能感受到两个峰,而题目需要统计的是序列的长度,因此,人为的初始化一个峰,让初始值=1,然后,遍历前后元素的相对大小,必须是差值交错出现的时候才满足题目条件;

    股票问题

    买卖股票的最佳时机II

    在这里插入图片描述
      因为可以尽可能多的完成更多的交易,所以,一旦有利可图,就可卖出;翻译一下就是,统计相邻递增之差,累加起来,就是最终的最大利润;局部最优,有利就卖出,局部最优推出全局最优;

    class Solution {
    public:
        int maxProfit(vector<int>& prices) {
            int ans=0;
            for(int i=1;i<prices.size();++i)
            {
                if(prices[i]>prices[i-1])
                {
                    ans+=prices[i]-prices[i-1];
                }
            }
            return ans;
    
        }
    };
    

    买卖股票的最佳时机含手续费

    在这里插入图片描述
    这题与上面一题的区别在于,需要手续费,因此不能频繁的买卖,所以,需要在最低点买入,最高点卖出;其实仍然可以采用上述的思想:局部最优,有利(当前价格>买入价格+手续费)就卖出,得到利润(当前价格-买入价格+手续费),如果明天还是有利,就把今天的手续费补回来;局部最优,整体上看,我们是在最低点买入,最高点卖出,只计算了一次手续费,从而全局最优;

    class Solution {
    public:
        int maxProfit(vector<int>& prices, int fee) {
            //如果没有手续费的限制,那就是统计相邻数字的正差之和;
            int minPrice=prices[0];
            int result=0;
            for(int i=1;i<prices.size();++i)
            {
                if(prices[i]<minPrice)  //更新最小价格
                {
                    minPrice=prices[i];
                }
                else if(prices[i]<=minPrice+fee) //此时卖出亏本
                {
                    continue;
                }
                else if(prices[i]>minPrice+fee) //更新利润,
                {
                    result+=prices[i]-minPrice-fee; //把当前这一次卖出当做是最后一次
                    minPrice=prices[i]-fee;//如果不是最后一次,那么下一次就将本次的手续费中和了,负负得正;
                }
            }
            return result;
    
        }
    };
    

    这里一步,当有利可图的时候,我们可以计算卖出得到的利润,当前记为今天,如果明天股票价格继续上涨,那么卖出仍然有利可图,明天计算利润的时候,result+=(prices[i]-fee) -minPrice-fee;就将今天减去的手续费补回来了,整体看,手续费就只计算了一次;也可以理解为,操作了无数次(股票价格需满足prices[i]>minPrice+fee,不然亏本),只计算一次手续费

                else if(prices[i]>minPrice+fee) //更新利润,
                {
                    result+=prices[i]-minPrice-fee; //把当前这一次卖出当做是最后一次
                    minPrice=prices[i]-fee;//如果不是最后一次,那么下一次就将本次的手续费中和了,负负得正;
                }
    

    两个维度制衡问题

    分发糖果

    在这里插入图片描述

    class Solution {
    public:
        int candy(vector<int>& ratings) {
            //两次比较
            vector<int> ans(ratings.size(),1);
            //首先比较左边,比左边大,拿更多的糖果
            for(int i=1;i<ratings.size();++i)
            {
                if(ratings[i]>ratings[i-1])
                {
                    ans[i]=ans[i-1]+1;
                } 
            }
            //然后比较右边,比右边大,拿更多的糖果
            for(int i=ratings.size()-2;i>=0;--i)
            {
                if(ratings[i]>ratings[i+1])
                {
                    ans[i]=max(ans[i],ans[i+1]+1);
                } 
            }
            return accumulate(ans.begin(),ans.end());
        }
    };
    

    406 根据身高重建队列

    假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。

    请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。

    思路:本题也是两个维度,一个是身高h,另一个是排在前面的人数k;思路是,先根据身高排序,然后根据k进行插入;插入的时候,如果是数组,定位插入位置时间复杂度O(1),插入时间复杂度为O(n^2^),而链表的话,定位插入位置时间复杂度O(n),插入时间复杂度O(1);

    class Solution {
    private:
        static bool cmp(const vector<int> a,const vector<int> b)
        {
            if(a[0]==b[0])
                return a[1]<b[1]; //身高相同,就按照k来排列,k小的在前面
            return a[0]>b[0]; //按照身高来排列
        }
    public:
        vector<vector<int>> reconstructQueue(vector<vector<int>>& people) 
        {
            //首先排序
            sort(people.begin(),people.end(),cmp);
            list<vector<int>> ans;
           for(int i=0;i<people.size();++i)
           {
               int position=people[i][1];
               auto it=ans.begin();
               while(position--)
                it++;
                ans.insert(it,people[i]);
           }
           return vector<vector<int>>(ans.begin(),ans.end());
        }
    };
    
    展开全文
  • 1.概念: 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到...3.存在局部最优问题的体现: 找零钱时,如果零钱面额是【1,5,10】,仿佛没
  • 局部最优不一定是全局最优
  • 深度神经网络“容易收敛到局部最优”,很可能是一种想象,实际情况是,我们可能从来没有找到过“局部最优”,更别说全局最优了。 很多人都有一种看法,就是“局部最优是神经网络优化的主要难点”。这来源于一维优化...
  • 文 | Summer Clover@知乎本文已获作者授权,禁止二次转载这是Deep Learning Theory里很基本也很核心的一个问题。在这个问题上,初学者容易被入门教学误导,非此...
  • 这里为了更好地说明问题, 我们特意选择了一些较好的数值以便能够得到较好的结果,而在实际运算过程中 有可能需要一定的循环次数才能达到这个最优结果。 ---------------------------------------------------------...
  • 在讨论优化问题时我们先来讨论全局最优和局部最优全局最优:问题所有的可能解中效果最好的解。局部最优问题的部分可能解中效果最好的解。一个针对的全局,一个针对的部分。就像我们设初值一样,设置了以后函数开始...
  • 要理解这个概念,首先需要了解 —— 对于一个多元函数,我们如何确定其极小值(局部最小值),也就是找到其局部最优。 我们很容易知道,梯度为0是极值的一个必要条件,但非充分条件(还可能是鞍点)。于是,我们...
  • 文章目录一、问题描述二、利用拉格朗日手工求解问题三、利用拉格朗日编程求解问题 一、问题描述 二、利用拉格朗日手工求解问题 说明:上述问题是等式约束 构造拉格朗日函数 F(x,λ)=f(x)+∑j=0nλjhj​(x){F(x,\...
  • C语言:最优装载问题

    2021-11-05 20:19:03
    因为每一个物品都可以分割成单位块,单位块的利益越大显然总收益越大,所以局部最优满足全局最优,可以使用贪心法解答。方法如下: 先将单位块收益从大到小进行排列; 初始化卡车的剩余载重和当前价值; 从前到后...
  • 一个贪心算法总是做出当前最好的选泽,也就是通过局部最优选择从而得到全局最优选择,从而实现自己的目标。 贪心算法的注意事项 1.贪心算法只能向前走而不能后退 2.局部的最优解可能不是最终的最优解,而是最优解的...
  • 《贪心算法解决会场安排问题、多处最优服务次序问题(含源代码)》由会员分享,可在线阅读,更多相关《贪心算法解决会场安排问题、多处最优服务次序问题(含源代码)(5页珍藏版)》请在人人文库网上搜索。1、西 安 邮 电 ...
  • 初步理解 预先准备好非常多吃糖的学习数据, 然后将这些数据一次次放入这套人工神经网络系统中, 糖的信号会通过这套系统传递到手. ...Optimization优化问题 大学里面学习过的求导求微分. 因为这就是传说中”
  • 思想很简单的贪心 贪心算法是在每一步选择中都采取当前最好的或者...但是有些问题,如果每次都是选择局部最优解,有可能最终结果不是最优解 如有这样一个数塔,一个人可以从一个格子移动到和它相邻的2个格子,从塔顶.
  • 本学期我学习了人工智能基础课程,在复习时对于课后习题所谓的八数码局部择优和全局择优搞不明白,上网搜寻资料仅找到全局择优举例,局部择优举例苦搜不得,而且没有明确的比较分析举例来阐述两者的qu'bie ...
  • 你的模型真的陷入局部最优点了吗
  • 【leetcode605. 种花问题】贪心策略,局部区间最优解法
  • 这些信息可以避免搜索一些不必要的点,从而避免陷入局部最优,逐步逼近全局最优解。\ (4) 使用概率搜索而非确定性规则。传统的优化算法往往使用确定性的搜索方法,一个搜索点到另一个搜索点的转移有确定的转移方向和...
  • 贪心选择性质:是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别(贪心法有贪心选择性质)。 最优子结构性质:...
  • 关于BERT的若干问题整理记录

    千次阅读 2021-02-24 21:13:42
    但是需要注意的是,这个问题并不是什么大问题,甚至可以说对最后的结果并没有多大的影响,因为本身BERT预训练的语料就是海量的(动辄几十个G),所以如果训练数据足够大,其实不靠当前这个例子,靠其它例子,也能弥补...
  • 局部搜索算法总结

    千次阅读 2021-05-26 06:10:43
    局部最优问题(或叫局部峰值局部陷井):现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就,目标函数差的点,被...
  • 【贪心算法】最优合并问题

    千次阅读 2021-05-08 14:09:17
    算法实现题 4-2最优合并问题 给定k 个排好序的序列s1 , s2,……, sk , 用2 路合并算法将这k 个序列合并成一个序列。假设所采用的2 路合并算法合并2 个长度分别为m和n的序列需要m + n -1次比较。试设计一个算法确定...
  • 加勒比海盗船 海盗们截获了一艘装满各种各样古董的货船,每一件古董都价值连城,一旦打碎...采用重量最轻者先装的贪心选择策略,从局部最优达到全局最优,从而产生最优装载问题的最优解。 #include <iostream>.
  • 我们截取了局部的代码,然后查看运行的效果 我们来说明一下每一个参数的含义 suma【j】表示服务器j运行的时间 sumawait【j】表示分配到服务器j的等待时间 注意,这里的等待时间是计算当前服务器执行的所有任务的...
  • 结论3:当一个问题/函数较为复杂时(有很多局部极值陷阱),往往离全局最优“较邻近”的局部极小值点们最具有迷惑性!模拟退火、粒子群、蚁群这三种算法都有可能出现走不出这“最后一关”的情况!这是调参数所不能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,579
精华内容 27,831
关键字:

局部最优的问题