精华内容
下载资源
问答
  • 算法工程师大致是做什么

    万次阅读 多人点赞 2021-01-25 22:37:39
    笔者在算法领域这些年遇到了不少做算法的同行,发现各自的差别还是很大的,工作侧重点甚至思维方式都不同。为了给刚入门的朋友介绍得清晰一些,这里就简单串一串我遇到的不同的算法算法与非算法的区别 一般来说,...

    作者: 龙心尘
    时间:2021年1月
    出处:https://blog.csdn.net/longxinchen_ml/article/details/113074403

    其实这是一个不太好解释的问题,因为并没有一个完备的定义。笔者在算法领域遇到了不少同行,发现各自的工作侧重点甚至思维方式都很不同。为了给入门的朋友一个清晰的梳理,这里就简单串一串12个常见的算法。
    首先,全景图镇楼。
    在这里插入图片描述

    算法与非算法的区别

    一般来说,可以把编程工作分为两种,一种是面向实现的,一种是面向优化的。前者如实现一个功能、搭建一个服务、实现一种展现交互方式等。更关注的是如何实现功能,如何对于各种复杂甚至小众的场景都不出错。互联网中典型的后端、前端、平台、网络工程师的主要工作是这一类。

    如果一些功能已经实现了,你主要需要优化它,那这类工作一般比较偏向算法。其中一个关键是你的优化目标要是客观可量化的。比如一些代码优化的工作是提升代码的可维护性、可读性和可扩展性。这个优化目标具备比较强的主观性,难以形成量化的指标,属于设计模式主要关注的问题,一般不纳入算法范畴。

    另一个区分算法与非算法工作的重要特征是一般涉及数学知识较多的编程工作更偏向算法。比如对于面向优化的编程工作,为了很好地衡量可量化的目标,其数学定义往往比较明确,相应引入的数学知识会比较多。

    那么如果面向实现的编程工作也依赖大量数学知识时是否算作算法呢?其中一个例子是可计算性理论,它涉及到可判定性问题、数理逻辑等问题都需要大量复杂的数学知识。这种情况下,它其实更关心何种问题原则上是否可用算法解决,在实际工程领域中并没有大量的岗位与之相匹配,所以本文暂不将其作为算法工程师所考虑的范围。
    在这里插入图片描述

    另一个例子是加密算法。加密算法的目标是保证数据的安全通信,保证其加密性、完整性和身份唯一确认。看起来是面向实现,但换一个视角,加密算法设计的指导思想是提高其解密成本,也可以算是面向优化的。
    在这里插入图片描述

    不同种类算法之间的区别

    如果你的优化目标是要降低程序的时间复杂度与空间复杂度,它们都是能够比较严格地量化定义的,就属于经典的“数据结构与算法”中关注的“算法”的问题。LeetCode中大部分Algorithm的题目都属于此类,也是互联网面试中的高频考点,如常见的分治、递归、动态规划等。在实际工作中,特别是一些架构师相关的角色,会着重关注这类问题,比如提升增删改查的速度、降低其内存消耗等等。相应的数学理论是计算复杂性理论,依赖的数学知识包括离散数学、组合数学、图论等。

    如果你的优化目标是要降低在未见过的case上的预测误差,这是典型的机器学习中的算法问题。这里面涉及到一些核心的概念,包括:泛化误差、训练误差、过拟合、欠拟合、偏差等。相应的算法岗位非常多,图像算法、语音算法、自然语言处理算法、搜索推荐算法等。

    机器学习算法还可以根据优化目的的不同进行进一步的细分。如果训练数据带有标签,优化目标是降低预测标签的误差则是最常见的有监督学习。如果训练数据不带标签,则是无监督学习。而如果此时又非要预测对应的标签,则有降维聚类两种算法。如果仅仅是为了拟合训练数据的分布,生成式算法。

    它的数学理论是计算学习理论,依赖的数学知识包括概率与统计、最优化理论、线性代数与矩阵论等。
    在这里插入图片描述
    当然,最优化本身就是一种算法。稍微严格一点的表述是在一定的约束条件下控制自变量达到目标函数最优的问题。最优化问题也叫作运筹学,在工程界应用非常广泛。典型的如外卖骑手调度、网约车调度、航班调度、物流路径调度、广告/补贴金额投放等。
    在这里插入图片描述

    最优化算法的种类也比较多,以自变量是否连续可分为连续最优化和组合优化。很多计算复杂度优化算法可以看做一种广义的组合优化问题。机器学习算法一般是连续最优化问题。

    不同算法思路的相互组合

    其他一些的高阶算法可以理解为以上多种算法的组合。比如强化学习算法可以理解成机器学习中的有监督学习算法与最优化决策算法的组合。也就是智能体根据其对当前环境下长期最大收益进行决策(最优化),而这个收益的函数是需要通过大量样本统计(有监督学习)才能得到,并且智能体的当下决策往往影响周围的环境状态进而进一步影响下一步自身的决策。其典型应用场景是基于用户实时行为的个性化推荐与搜索,外卖骑手路径优化与订单分配的在线优化等。其实,“强人工智能”如果可行的话,强化学习是其绕不开的学习思路。

    以上介绍的优化算法都是基于单智能体的,而博弈论就将其拓展到多个智能体的最优化,视野一下就打开了。多个智能体的优化策略是会相互影响的。也就是说多智能体各自基于各自的优化函数进行优化,并且各自的优化行动可以影响其他智能体优化策略的过程。博弈论算法典型的应用场景是拍卖竞价策略。在ACG文化中的《大逃杀》、《赌博默示录》、《弥留之国的爱丽丝》甚至《JOJO》等大量作品中都充满了大量的博弈论场景。有一个小程序的游戏叫作《信任的进化》,简单玩一下就能够体会到博弈论的有趣之处。

    多智能体强化学习则是多个智能体的强化学习得到最优策略,并且各自的最优策略会影响对方智能体的下一步优化策略的过程。或者理解成其认为博弈论收益函数是不确定的,需要对通过大量样本统计(长期收益的有监督学习)。典型的案例是AlphaGo、AlphaZero之类。

    生成对抗网络(GAN)有点特殊,可以理解成两种机器学习算法的组合,一种算法的优化目标是降低生成样本与真实样本的区分难度,另一种算法的优化目标是提升他们的区分难度。而这两个目标是相互对立的,这又借鉴了博弈论的思路。这类算法在图像风格迁移、图像修复等场景有非常多的应用。

    另外,模型压缩算法可以理解成机器学算法与优化计算复杂度算法组合,在一定的误差容忍范围下显著降低模型的空间复杂度和推断时间复杂度。其典型应用场景是模型的实时运算加速、边缘部署压缩等。

    小结一下

    这里主要从面向优化的角度上串讲了以下12种思维方式不同的算法:加密算法、计算复杂度优化算法、最优化算法、有监督学习、无监督学习(降维、聚类、生成)、强化学习、博弈论、多智能体强化学习、生成对抗网络、模型压缩算法等。

    因为是科普向,很多细节没展开,特别是机器学习算法和优化计算复杂度算法的各个流派没有探讨。

    我们将在接下来的文章中进行更加详细的介绍。

    展开全文
  • 什么要学习数据结构和算法

    千次阅读 多人点赞 2021-11-07 13:06:24
    尽管计算机专业同学在大学都过这些课程,甚至很多培训机构也会培训,但很多程序员对数据结构和算法依旧一窍不通。绝大多数人只听说过数组、链表、快排这些最简单的数据结构和算法,稍微复杂一点的就完全没概念。 ...

    是不是觉得数据结构和算法,跟os、计网一样,属于脱离实际工作的屠龙术?
    除了面试,其实这辈子也用不着?

    尽管计算机专业同学在大学都学过这些课程,甚至很多培训机构也会培训,但很多程序员对数据结构和算法依旧一窍不通。绝大多数人只听说过数组、链表、快排这些最简单的数据结构和算法,稍微复杂一点的就完全没概念。

    很多人说实际工作中根本用不到数据结构和算法。所以,就算不懂这块知识,只要Java API、开发框架用得熟练,照样可以把代码写得“飞”起来。

    事实真的是这样吗?

    想要通关大厂面试,数据结构和算法是开胃菜

    BAT字节、Google、微软,面试都喜欢考算法、手写代码并运行。有些人虽然技术八股文不错,但每次去面试都会“跪”在算法上,很可惜。

    那你可曾想过,为何这些大公司喜欢考察算法?

    校招时,学生一般都没有实际项目经验,公司只能考察他们的基础知识是否牢固。
    社招更不用说,越注重技术的公司,越会重点考察数据结构与算法这类基础知识。
    因为相比短期能力,他们更看中候选人的长期潜力。

    我不懂算法,照样找到了高薪大厂工作啊。我是不是就不用研究算法了?

    要以发展的眼光看待,我们学任何知识都是为了解决实际问题,学习算法自然有用处。难道你真愿意一直做个crud boy?

    可我整天工作就是crud 啊,哪里用到过算法?

    诚然,大部分业务开发都是利用封装好的API堆砌、转译业务逻辑,几乎无需自行实现算法。
    但不需要自己实现≠什么都不需要了解

    若不知道这些类库背后的原理,不懂得时间、空间复杂度分析,你如何能用好、用对它们?
    存储某业务数据时,你如何知道应该用ArrayList,还是LinkedList?
    调用某方法后,你如何评估代码的性能和资源消耗?

    业务开发用到的各种框架、中间件和底层系统,如MySQL、Spring、MQ和Redis等。这些基础组件中,其实都内置了很多基础算法思想。
    如Redis中,有序集合用什么数据结构实现?为什么要用跳表?为什么不用二叉树?

    若能清晰这些底层原理,就能更好利用它们。即便出现问题,也方便定位。

    实际工作中的算法应用到处可见,如何实时地统计业务接口的99%响应时间?

    你可能想,每次查询时,从小到大排序所有的响应时间,若总共有1200个数据,那第1188个数据就是99%的响应时间。
    每次用这个方法查询的话都要排序,效率太低。但若你知道“堆”数据结构,用两个堆即可高效解决。

    现在开源的技术文章、架构、项目很多,照猫画虎做一套基础框架并不难。我就拿RPC框架举例。

    不同人做出的RPC框架,架构设计思路其实都差不多,所实现的功能也相差无几。但就是有人做的框架,Bug很多、性能一般、扩展性也不好,只能在自己公司仅有的几个项目里面玩一下。
    而有人的框架就能开源到GitHub,甚至被Apache收录。

    为什么会有这么大差距?

    编程高手竞争就在细节:算法是不是足够优化,数据存取的效率是不是足够高,内存是不是够节省等等。
    所以细节决定成败!

    对编程还有追求?不想被35优化?那就不要只会写只是能run的代码!

    何为编程高手?不同人可能观点不同。但在我看来,性能好坏至少算一项关键指标。若你连代码时间复杂度、空间复杂度都会分析,怎么可能写出高性能代码?

    我在小公司工作的呀,非互联网,用户量少,处理数据量也小,qps几乎0,开发不需要考虑那些性能问题,完成功能就下班了,用不用数据结构和算法,无足轻重。

    那你就甘愿“十年如一日”重复 crud 了吗?
    大家都知道这行35岁后容易被行业淘汰,原因其实就在此。有人写代码,从不考虑非功能性需求,只是完成功能,能run就行;做事情的时候,也从无长远规划,只顾眼前三分利。
    这样即使十年业务积累,跟应届生一年积累没有本质区别。怎么不会被淘汰呢?

    大公司里性能几乎是时刻都要考虑的。一个简单的ArrayList、Linked List的选择问题,就可能会产生成千上万倍的性能差别。
    数据结构和算法的意义就彰显了。

    数据结构和算法这个东西,如果你不去学,可能真的这辈子都用不到,也感受不到它的好。但一旦掌握,你就会常常被它的强大威力所折服。
    之前你可能需要费很大劲儿来优化的代码,需要花很多心思来设计的架构,用了数据结构和算法之后,很容易就能解决。

    总结

    学习数据结构和算法,并非为了死记硬背几个知识点。而是为建立时间复杂度、空间复杂度意识,写出高质量代码,能够设计基础架构,提升编程技能,训练逻辑思维,积攒人生经验,以此获得工作回报,实现你的价值,完善你的人生。

    掌握数据结构与算法,看待问题的深度,解决问题的角度就会完全不同。

    展开全文
  • 这学期我们开设了算法设计与分析这堂课,出于对这位大佬博导的喜爱和对算法的兴趣,我打算写一系列的博文来记录我的一个学习过程,博主在重要的部分录了音,将十分详细地还原授课内容,力求将大佬的思想和方法讲透彻...

    零.前言

    这学期我们开设了算法设计与分析这堂课,出于对这位大佬(是我们哈工大深圳的博士生导师)博导的喜爱和对算法的兴趣,我打算写一系列的博文来记录我的一个学习过程,博主在重要的部分录了音,将十分详细地还原授课内容,力求将大佬的思想和方法讲透彻,提升自己的同时,也将这些内容分享给大家。

    本篇文章是为绪论,即简单介绍了一下算法,上学期看了《大话数据结构》这本书,很喜欢里面的讲课方式,下面我也将和老师身份互换,以第一人称上这堂课。

    目录

    1.自我介绍

    2.教材

    3.什么是算法

    4.计算与算法的定义

    1.计算

    2.算法

    5.关于算法

    1.算法的来源

    2.最早的算法--欧几里得求最大公因子算法

    6.伪代码

    7.什么是问题

    8.为什么要学算法

    9.数据的重要性

    10.本课目标

    11.总结

    11.算法设计者的问题


    1.自我介绍

    同学们好!欢迎来学习我的算法课,我的办公室在信息楼,你有事情可以来找我,虽然我经常不在办公室,所以大家有什么事情可以在qq群里反馈,也可以反映给你们的助教,不过我更希望你给我发邮件,其实我们技术人员用邮件最多,就像明星总是聚集在微博中一样。

    下面我们来上课,《算法设计与分析》是非常非常重要的一门课,我们先说一说我们哈深计算机的大部分出路,一条是出国,一条是读研成为这一领域的研究人员,还有一条是进大厂,对吧。我想你们相当大的一部分会选择进大厂,做“新时代的农民工“(开个玩笑)对不对,我们说进大厂一般有三个岗位对不对,哪三个岗位大家可以说一下吗?

    算法岗,测试岗,开发岗对不对,那么一般情况下大家会觉得算法好一点,薪资来说一般是算法高于开发,高于测试,所以经常有同学问我,我是去大厂的开发岗,还是去小厂的测试岗,我也不好说。所以一般情况下我们会认为去大厂的算法岗好一点,所以为了实现这个目标,我们一定要把我们这门课好好学习。

    2.教材

    我们这门课有教材,这个教材呢,大家都应该有所耳闻,就是这本算法导论。

     我从16年开始上这门课,一直用的是这本书,这本书有没有同学看完了?我向大家汇报一下,实话实说,我还没看完,所以这学期我不建议大家从头到尾全都看完,毕竟时间有限,你们还只是本科生,我们要学什么看什么。这本书已经在一定程度上很完备了,但是写作风格不太适合你们,外国人写的这本书比较全,比较深奥,理解起来会比较吃力,如果你只想考个七八十分,每天来上课就足够了,如果你想考的更高的话,就要多多思考,大学的自学能力也很重要,暂时将这本书当成字典来用。所以要跟着老师的思路走,把老师的讲义搞懂,是真的要看懂,不是把里面每一个字看懂,而是把背后的意思看懂,有可能的话去做一些课后题,对你能力的提升有很大的帮助。

    也要多刷题,到leetcode上刷,从简单题到中等题到难题,现在内卷如此严重,我以前很少要求大家去刷题,但刷题其实真的是一个提升自己的过程,在刷题中要注入自己的思考。

    3.什么是算法

    什么是算法?算法是计算机领域的皇冠,或者说是皇冠上的明珠。我认为计算机领域最重要的两门课之一,另一门就是数据结构。在数学和计算机科学之中,算法/算则法(Algorithm)为一个计算的具体步骤,常用于计算、数据处理和自动推理。

    举几个算法的例子,不知道大家以前是否参加过一个数学竞赛叫“祖冲之杯”,里面就有这种算法的题目,比如刘辉割圆术,在圆中放多边形,多边形的边数n越大,这个多边形面积就越接近这个圆的面积,不过很遗憾,当时还没有提出极限这一概念,所以总是差一点点。

    比如加减乘数四则运算也是一种算法,还有上学期学的,也经常用到的最小生成树。

    算法有什么用,在一些公司中,一个好的算法可以节省大量的人力物力,尤其是需要处理庞大的数据时,一个好的算法可以甚至可以帮公司省下上亿的资产,其实我们的生活的方方面面都被算法给深入地浸入了。我们看抖音,抖音的视频是不是一打开软件就是你想看的,比如你经常看小姐姐,那么它给你推的·是不是就都是小姐姐的视频了,当你在地铁上把手机拿出来,打开抖音。。。。或者当你想在京东上买一双皮鞋,你甚至会发现不只是在京东,在qq看点,在百度上都有向你推荐皮鞋的广告,我们发现我们的生活甚至被算法给操纵了,看的啥推的啥。你的抖音和我的抖音都不一样,每个人都被对自己独特的算法分析着,影响着。

    4.计算与算法的定义

    1.计算

    可由一个给定计算模型机械地执行的规则或计算步骤序列称为该计算模型的一个计算。

    计算模型可以是图灵机,也可以是其他计算模型,一个计算机是一个计算(计算模型是计算机),计算可能有用不停止--不是算法。

    2.算法

    算法是一个满足以下步骤的计算:

    有穷性:有限步内必须停止。

    确定性:每一步都是严格定义的操作。

    能行性:每一个动作都能被精确地机械执行。

    输入:有一个满足给定条件的输入。

    输出:满足给定约定条件的结果。

    5.关于算法

    1.算法的来源

    中文名字“算法”来源于周髀算经(公元前一世纪)。

    英文名字“Algorithm”来自于9世纪波斯数学家花拉子米(al-Khwarizmi)。后面在说某个国家数学很厉害,但我没听清(捂脸)。

    2.最早的算法--欧几里得求最大公因子算法

    定理:两个数的最大公约数等于两个数中较小的那个数和这两个数相除余数的最大公约数。

    定理是需要证明的,但公理不需要证明,感兴趣的同学自己证明一下。

         

        int euclid(int m, int n){
    
              int r;
    
                do{
    
                   r = m % n;
    
         m = n;
    
         n = r;
    
                }while(r!=0);
    
                return m;
    
             }

    这段代码就是这个算法的基本操作,你们都学过了高级语言程序设计和数据结构,别跟我说看不懂这段代码的内容。

     我们知道世界上的大学有两种体系,是德国的鸿宝体系(有点没听清楚,百度没查到。。)和美国的费曼体系,鸿宝体系是什么呢,鸿宝体系就是德国在19世纪中叶建立起来的大学体系,就是严格按照教学,老师讲,学生记,学生学,就是这种教学体系。另一种体系是美国教育学家费曼他提出来办大学其实很简单,只要找到足够的钱,只要把全国最优秀的年轻人聚集到一起,放在同一间教室,给他们最好的条件,让他们能找到他们想找到的任何知识,然后互相交流,甚至都不需要老师来讲,从而实现世界上最好的大学。你们的分数也都很高,但是你们不要指望老师把什么都交给你,我们这里没有学渣,至少高三的时候都是学霸,要把自己当成精英,老师讲的都是白米饭,如果想吃到大鱼大肉一定要自己多学,好好利用这里的条件,可以自己搞一个算法小组啊,一起讨论研究一下,多刷刷leetcode你们一定会受益匪浅的。如果这段代码看不懂你就不配在我们工大读书,你的高考成绩一定是有水分的,忘记的同学要好好复习C语言相关的内容。

    6.伪代码

    讲到这里我要问一下大家,有没有学过伪代码吗?我默认你们都学过而且都会写,我这里有一个伪代码的教程,回头发给大家,不会的一定要看。(想要的可以私聊博主啊!)

    7.什么是问题

    设Input和Output是两个集合。一个问题是一个关系RÍInput´Output,Input称为问题R的输入集合,Input的每个元素称为R的一个输入,Output称为问题R的输出或结果集合,Output的每个元素称为R的一个结果。

    注意:问题定义了输入和输出的关系,

    排序问题定义如下:

    输入集合Input={<a1,…,an>|ai是整数}

    输出集合Output={<b1,…,bn>|bi是整数, b1£….£bn}

    问题SORT={(<a1,…,an>,<b1,…,bn>)|<a1,…,an>ÎInput, <b1,…, bn>ÎOutput,{a1, …, an}={b1, …, bn}}

    问题就是输入和输出的关系,把问题数字化了。

    好比一个导航系统,输入是什么?这些大厦,食堂,街道之类的,输出是什么?就是一个最优路径,这也涉及到数学中图论的内容,算法和数学是分不开的,学好算法的同时,还要学好数学的内容。

    8.为什么要学算法

    同学们,你们为什么要学算法?为了进大厂?好,同学们你们为什么学计算机?,我们学校招1000多个人,有五百个是计算机专业,一半。我们先休息几分钟回来再说。

    好,为什么要学习计算机?为了就业,所以现在计算机为什么这么火,是就业造成的,你们怎么学的计算机?现在编程在初高中其实还并不普遍,你们大多数人都不会特别了解计算机,多半是老师推荐,家长推荐,学长推荐,所以你们选对了吗?选对了,如今很多的甚至有化学专业的报研究生的都报了计算机,学电子的,学机械的,学航天的报了计算机。

    20年前,或者15年前,你们知道哪个专业是最火的吗,是通讯。计算机不行,计算机当时只能写一些网页,当时中国有四家企业,叫“巨、大、中、华”,分别是巨龙通信,大唐电信,中兴通讯,华为这四家公司,巨龙已经没了,大唐是消失边缘,中兴也没有以前的辉煌了,现在干的最好的就是华为。当时的通讯公司,诺基亚,爱立信,摩托罗拉,现在是不是基本要消失了,所以这就是行业的发展。我们的同学一般都想进华为,腾讯,还有一些最近很火的游戏行业,工资基本都是很高的,现在都不是特别想进通讯行业了,我们的基本薪资在各行业中也算是高的。

    1.算法是计算机解决问题的基础,毫无疑问计算机是为了解决我们日常生活中的基本问题的。

    2.算法是有用的,这是废话

    3.算法是有趣的。

    不知道你们记不记得打败围棋界各大高手的阿尔法go,你们很小的时候也有一个机器人“深蓝”,记不记得下国际象棋是冠军,基本都是碾压式的打败,基本已经不可能有人类战胜计算机了,几几年的事情,就那个时候人们都知道算法这个东西了,打败了我们人类的棋类冠军。还有那个机器人跑酷,会翻跟头,有一家公司经常会发机器人的各种运动的视频,这些都基于什么,是不是算法呀,所以我们说算法是不是太牛了,以后机器人一定会代替人类所有的体力劳动。你们可能现在玩的吃鸡呀,王者荣耀什么的,之前看新闻已经有人工智能击败人类的了,我不太懂怎么玩啊,我已经好多年没有玩游戏了,因为我发现了有比游戏更好玩的东西。

    大家看现在的自动驾驶,华为在搞,百度在搞,特斯拉在搞,以后可能会解放双手代替汽车的,如果人人有一辆事故率和堵车率一定会降低的,还有一段视频,那个(英美达?没听清)的老板,一段演讲的视频,是完全虚拟生成的,他根本就没做这段报告,虚拟出来的,非常真实,这样的话你们什么都可以被虚拟出来,非常可怕。我现在有一个学生在做什么呢,在做基于音乐的舞蹈,就给一段音乐,就输出来一段人跳的舞蹈,非常真实,看不出破绽。我有一个师弟在创业公司做一个(唉,没听清)拿着几千万的工资。

    所以你看人类在棋类已经被打败了吧,随着机器人对人类各种劳动的模拟替代,这个潘多拉魔盒就打开了吧,现在在游戏领域人类也被打败了。大公司都在拼了命的搞算法,腾讯,阿里,招那些搞算法的年轻人们,华为有个天才少年,给两百万。那么一下子薪资标准往上猛涨,别说大厂,现在稍微像一点样子的公司都在花费巨额资金招揽那些算法天才们,所以你看全部都是计算机,你看现在家长群里也是,问我我的孩子能不能报哈工大计算机,如果可以报我就上,不能报我就去别的学校了,计算机对社会的发展非常重要,而且比较容易有成就感,你学的多了你会发现计算机这个行业非常非常有趣,不要只局限于赚钱上。其实博主的感觉也是一样,那些真正搞科研搞到一定程度的人,源动力一定不是钱了,否则不会有那么高的成就。

    博主有一个华5的研究生学长,是学化学的,我当时问他毕业年薪大概多少,他说10万左右,我当时想会不会有点少,要知道华5最差的专业有的也比我们哈深最好的计算机专业分高,可能是我们薪资的三分之一或者二分之一,但我想不一定有趣,这也许就是好多硕士跨考计算机的原因吧。

    9.数据的重要性

    当我们能够获得的数据越来越多,算法就越来越重要,学好算法可以帮助你们找到喜欢的工作,毫无疑问,我认为人工智能能够这么火,就是大数据与高算例,以及基于大数据与高算例的深度网络算法的发展,造成了这么火的计算机算法领域,同学们知道人工智能的三要素吗?算法,数据,算例,我们要学习的只有三分之一哦,你们认为三要素里最重要的是什么呢,我个人认为是数据,你有好的数据,哪怕算法一般,也很有可能让这个数据算的很好,我打一个比方,数据就好比是一个食材,算法就好比是一个厨师,你厨师做的菜再好,食材不行,仍然无法做出高水平的食物,巧妇难为无米之炊。所以说数据是非常重要的,大家知道一家公司,到美国去上市,按照美国的规定,一些数据要交到美国审查,但是我们中国的规定不允许,属于泄密。所以数据十非常重要的,像我们和一些有数据的公司或者医院合作,我们研究出一些算法,要写论文,但是写论文可以,第一作者必须是人家而不是我们,为什么呢?研究是我们做的呀,但数据是人家出的,只要用到人家的数据,我们就不能是第一作者,不做的话,有的是人需要这份数据来做。所以现在有很多地方的公司倒闭了,但他最值钱的东西就是他们的数据,所以现在也有大量的专门做数据的公司,有的一份数据就要好多钱,按秒收费的也有,当实验需要大量数据的时候,开销可想而知。所以也有很多人从事这种处理数据的工作,然后卖给一些需要这些数据的大厂。所以现在有一句话叫“人工智能人工做”,所以现在数据真的非常吃香。

    另一个就是CPU,我当年读博士的时候一台笔记本就可以把所有数据都做了,但是现在我给我博士生上课用的那台电脑,花了我40万,我们还有老师花了300万买这个,有些大厂要花几千万,你们的笔记本都跑不了大数据,你们做实验一定要有大厂的支持或者学校的支持,你们的电脑只能处理一些很小的数据,真正能跑起来的都在机房里,你说你们一年6000多块的学费,这些钱还不值CPU的电费呢,我们学校的机房温度很高的,光膀子都不觉得冷,说话一定要喊出来才互相听得见,你们有条件有机会的话一定要珍惜,你们进大厂的话一定要知道算法只占三分之一,而且还不是排在第一位的三分之一。大家一定要清楚地认识。

    10.本课目标

    1.培养算法分析与设计的能力,这意味着我们要掌握常见的算法并拥有设计优秀算法的能力,创新精神就是用来应用的。

    2.理解算法后面隐藏的历史,你会发现新的问题,你了解的算法和课本上不一样怎么办,了解他们创建的思想,思想很重要。

    3.具有良好的算法思维,并要熟练应用。语言是会过时的,但是数据结构和算法永远不会过时。

    4.有时间看看算法导论的书,多刷刷leetcode题。

    11.总结

    首先说明这个总结是博主写的,感觉这样写文章还是很累的,有些口语我只能把它们转化成书面语,说出来能听懂,但写出来我自己都有点懵。打算“卖血”买一个好的录音笔,再去听下一节课程(发抖)。

    写这个专栏的目的呢是因为我很喜欢这个老师的课,也很喜欢算法这一很有成就感的技术型搬砖方向,在提升自己的同时也分享给大家。我还是要声明一下,这篇文章的内容如果大家感觉有哪些不对的地方(比如我没听清楚的地方都用蓝色笔写了)欢迎私信我,由于文体比较特殊,是我站在老师视角写的,所以还是希望大家不要太过纠结于抠字眼(狗头保命),把握文章主要想表达的大体方向,如果你非要认为我们老师哪里说得不对的话。。。。那就是我录音录的有问题,或者听录音听的有问题。

    还有最后一个所有算法设计者经常要考虑的问题:

    11.算法设计者的问题

    这里我用一张图来表示全部内容,hiahiahia

     希望你的的回答是

    展开全文
  • 元学习MAML算法详解

    千次阅读 2020-12-18 10:49:09
    MAML and Model Pre-training 为了进一步区分两者,MAML在意训练后KaTeX parse error: Undefined control sequence: \...两者就像刚毕业学生一样,Model Pre-training就是直接毕业工作拿工资,对于当前是很好,MAML...

    Meta learning

    Meta learning 基本定义

    元学习:又称“学习如何学习”,就像我们人类学习新知识往往从以往得经验出发而很少从头开始一样,元学习以一种系统得、数据驱动得方式从先前得经验中学习,是一个可用于描述所以基于其他先前任务经验来学习的方法的概念。学习学习的方法

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    MAML and Model Pre-training

    区别:
    MAML:MAML的loss是训练后的结果在评估模型上计算得到
    Pre-training:loss在预训练上的模型上计算的

    在这里插入图片描述

    为了进一步区分两者,MAML在意训练后KaTeX parse error: Undefined control sequence: \thea at position 6: \hat{\̲t̲h̲e̲a̲}^{n}表现得好,如图处,对task1和task2都下降很快
    MAML:

    • MAML注重找到一个任务最优点,对于所有的任务都能较快收敛,关注于潜力都不关注于此时任务上的收敛情况

    • 在MAML中找到的 ϕ \phi ϕ在task1上不是全局最优解,但是他在两个任务上都下降很快
      Pre-training:

    • 预训练在训练任务上找最优,收敛

    • 在Pre-training在task1上找到全局最优作为初始值可能就在task2上陷入局部最优

    在这里插入图片描述

    在图中Model Pre-training在所有task上都最好
    在这里插入图片描述
    两者就像刚毕业学生一样,Model Pre-training就是直接毕业工作拿工资,对于当前是很好,MAML相当于去读博,有了高学历对于以后发展会很好。

    在这里插入图片描述

    Example

    在这里插入图片描述
    可以看到

    • Model Pre-training,学习到的网络初始参数预测出来的是绿色曲线,找到不同的sin函数上都好的,而不同sin函数叠加起来波峰与波谷抵消,为了使每个任务上都好最后得到一条近乎水平的线,所以用transfering learning在新任务上用这几个点迭代几次依然不好
    • 而MAML学习到了初始参数预测有一些波动,在经过几个训练点上几次迭代很快就能拟合到橙色曲线。
      在这里插入图片描述
      https://towardsdatascience.com/paper-repro-deep-metalearning-using-maml-and-reptile-fd1df1cc81b0

    Two way one shot
    在这里插入图片描述

    理论证明

    在这里插入图片描述
    算法分析

    • 给定task分布,由于MAML执行两次梯度更新,所以可以设置两个学习率
    • 第一步随机初始化参数
    • 2,相当于epocjh
    • 3,采batch task
    • 4-7在采的task上计算梯度
    • 8在第一次所有采样任务上再算一次梯度,然后将梯度方向作用于 θ \theta θ

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    Reptile

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    元学习应用

    在这里插入图片描述

    迁移学习其实也可以算元学习的一种,但是更多关注于两个相似模型上的关联性,其原理更多偏向于预训练,而不是元学习的典型算法MAML,迁移学习可以称为单独的一种学习方式

    在这里插入图片描述

    在这里插入图片描述

    变形

    在这里插入图片描述

    在这里插入图片描述

    问题
    在这里插入图片描述

    解决
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • C++ 什么程度可以找工作

    千次阅读 2021-07-22 00:44:58
    置顶/星标公众号????,硬核文章第一时间送达!链接 |https://www.zhihu.com/question/400543720至少需要哪些知识?需要掌握到什么程度呢?https...
  • 密码系列之:Argon2加密算法详解

    万次阅读 2021-09-20 16:12:40
    文章目录简介密钥推导函数key derivation functionPassword Hashing CompetitionArgon2算法Argon2的输入参数处理流程 简介 Argon2是一个密钥推导函数,在2015年7月被选为密码哈希大赛的冠军,它由卢森堡大学的Alex ...
  • 算法的本质是什么?程序员如何学好算法

    千次阅读 多人点赞 2021-11-02 00:19:21
    这几年来,小灰一直在用漫画的形式分享算法知识,每一次所分享的,都是一个具体的算法知识点。今天,让我从宏观的角度来讲一讲,算法到底是什么?如何来学好算法。1. 算法什么所谓算法,指的是解决...
  • 三十多岁就别转行做算法

    千次阅读 2021-03-02 00:37:23
    像是什么做人脸识别的,做语音识别的,这些技术和企业都不完全算是人工智能企业。因为语音识别和人脸识别就是特定的算法,也不存在什么和人交互一说。像是我们在大公司里做推荐、搜索、广告以及NLP的工程师就更...
  • Java什么程度可以找工作

    千次阅读 2021-02-26 19:43:38
    原标题:Java什么程度可以找工作实际上Java初级开发岗位对于从业者的要求并不高,通常能够熟练使用常见的Java框架就可以找到第一份工作了(很可能是外包)。但是外行人难免忐忑,心里没谱儿,到底Java到何种程度...
  • 算法工程师职业方向及技术要求

    千次阅读 2021-05-13 16:35:18
    点上方人工智能算法与Python大数据获取更多干货在右上方···设为星标★,第一时间获取资源仅学术分享,如有侵权,联系删除转载于 :作者|explorer来源|知乎算法(A...
  • 计算机专业毕业后能做什么工作

    千次阅读 2020-12-18 06:00:00
    众所周知,目前比较火的专业之一莫过于计算机专业了。在这个互联网时代,越来越多的人选择去学习计算机专业,可是你知道计算机专业毕业后都有哪些岗位可选择吗?各个岗位的工作任务主要是什么?以下是...
  • 算法岗和开发岗有什么区别?

    千次阅读 2021-11-10 00:47:12
    链接:https://www.zhihu.com/question/490150407编辑:深度学习与计算机视觉声明:仅学术分享,侵删作者:如雪https://www.zhihu.com...
  • 如何学习算法的相关文章,大家估计也见过不少,每个人的学习方法都不尽相同,这很正常,并且,对于不同的选手,例如打 ACM 的玩家和不打比赛的玩家来说,训练的方式也会有所差异,所以别人所说的学习方式,更多的是...
  • 机器学习常见算法分类

    千次阅读 2021-02-03 19:32:43
    “机器学习是对通过经验自动改进的计算机算法的研究”。 “机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。” 一种经常引用的英文定义是:A computer program is said to learn from experience ...
  • 区块链技术当中一个很重要的组成部分就是密码作为从事区块链研究工作的相关人员,应对密码有相当的认识。ZUC 算法,即祖冲之算法,属于序列密码,其也是中国第一个成为国际密码标准的密码算法。ZUC 算法,即...
  • 知乎高赞,如何系统地学习算法

    千次阅读 2021-06-10 15:51:14
    不 BB,直接上干货,非科班出生,毕业工作后才开始学算法,到目前学了 4 年 !!! 为了让你对数据结构和算法有个全面的认识,我画了一张图,里面几乎涵盖了所有数据结构和算法书籍中都会讲到的知识点。 这里面有...
  • Blowfish是由Bruce Schneier在1993年发明的对称密钥分组加密算法,类似的DES和AES都是分组加密算法,Blowfish是用来替代DES算法出现的,并且Blowfish是没有商用限制的,任何人都可以自由使用。
  • 零基础Java什么程度就可以找工作了? 可以找工作的程度主要看你的目标岗位定位,一般来说学习Java的人群大部分是零基础的学员,目标岗位初级java程序员。 如果是有一定基础想找高级程序员的岗位,那么学习到的...
  • 算法工程师的自我修养

    千次阅读 2021-03-23 09:10:13
    同样在我们技术的、做算法的也是一样的道理,如果从业期间,不追求技术的长进和个人成长,那和跑龙套的有什么区别,拿着差不多的工资,干着差不多的活,回到差不多的家,喝着差不多的茶,过着差不多的人生,演着...
  • 密码系列之:bcrypt加密算法详解

    万次阅读 2021-09-16 10:19:13
    文章目录简介bcrypt的工作原理bcrypt算法实现bcrypt hash的结构hash的历史 简介 今天要给大家介绍的一种加密算法叫做bcrypt, bcrypt是由Niels Provos和David Mazières设计的密码哈希函数,他是基于Blowfish密码而来...
  • 算法和数据结构》学习路线指引

    万次阅读 多人点赞 2021-07-01 11:16:15
    前 WorldFinal 选手对学习算法的一点总结。五张思维导图解决你的困惑
  • 如果你去面试过百度,阿里,腾讯,字节跳动等大厂的话,你会发现,算法是你绕不开的内容。无论你是前端、后端还是搞AI,无论你用JavaScript、Java,C++,Go 还是Python,只...
  • Python基础算法什么?打个白话点的比喻,我们现实生活中想要去学习英语,日语,韩语等,要通过不同的学习步骤来解决发音或写法,而算法也是和人类语言一样,是解决问题的思想和实施步骤,而编程是算法的实现,把人...
  • 在上一篇文章《写给开发人员的实用密码 - 对称加密算法》中,介绍了现代密码中非常重要的加密解密算法,国密标准中 SM4/SMS4 就是一种对称加密算法。本文将介绍密码库 libtomc...
  • 嵌入式算法移植优化学习笔记5——CPU,GPU,TPU,NPU都是什么一、什么是CPU?二、什么是GPU?三、什么是TPU?四、什么是NPU?附: 一、什么是CPU? 中央处理器(CPU),是电子计算机的主要设备之一,电脑中的核心配件。其...
  • 到底算法工程师需要具备什么样的能力?才能满足“越来越卷”的要求近年来,关于算法岗位“越来越卷”的声音持续热烈。我们经常收到一些同学提问:算法岗位听说人才过剩要顶会才能入场了,不少人都在转开...
  • 或许是太狂妄了,我真的想让那些看了这篇文章的人都从中受益,无论是算法小白还是高手,导致文章的立意拔的太高,高到我驾驭不住,远远超出了我的实际水平,于是一次次的开始写,一次次的废除。直到最近才想明白我...
  • 很多小伙伴想转行Java的后端工作,但是又不知道到底该学习些什么。今天小编就跟你们聊聊Java的后端工作,需要学习和了解什么哪些知识点和技能。首先要明确后端包括哪些职业:DBA(数据库维护优化专家),Developer...
  • 什么程序员都需要学算法? 程序员对算法通常怀有复杂情感,算法很重要是共识,但是否每个程序员都必须学算法是主要的分歧点。很多人觉得像人工智能、数据搜索与挖掘这样高薪的工作才用得上算法,觉得算法...
  • 数据结构与算法必知基础知识

    千次阅读 多人点赞 2021-01-06 22:58:12
    原创公众号:bigsai 文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star 前言 数据结构与算法是程序员内功体现的重要标准...为什么学习数据结构与算法?如果你还是学生,那么这门课程是必修的,考研基本也.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 583,950
精华内容 233,580
关键字:

学算法能做什么工作