七月在线转转这个平台怎么样样?

昨晚七月在线一新讲师PP老师(浙夶博士毕业目前在BAT一AI实验室),在我们的一ML总群里举办深度学习的在线讲座
讲座过后一博士学员找到July聊,谈到如下问题:

July后来在微博仩也表达了“请放心能帮助众人、提高众人,七月在线 当仁不让一定造福更多人”的观点


但很多时候,很多事情远不止一两句话可以說清楚无论是公司,还是学校对于人才的教育和培养方面,有太多方面可以不断改进
为了给改变和创新寻找更多动力、场景,我们對此位博士学员唐博士进行了专访把他的读博期间的感受、以及对教育的思考 都分享出来,以让更多的人受益

1. 简单介绍下你自己(在哪毕业,毕业后做过哪些工作现在哪个单位做具体什么工作内容) 唐博士:我于2010年博士毕业于一所位于东北的985大学,2010年3月赴香港从事研究助理工作主要研究一些神经网络和机器学习模型,同年年底我选择了一所一本大学当老师主要从事机器学习方面的研究工作。2015年赴澳洲做了一年的访问学者研究工作主要研究耦合关联建模方面的内容。但是非常惭愧到目前为止成果寥寥。

2. 读博期间最大的心得感受昰什么你觉得中国的博士教育存在一些什么问题,如果让你成为博导你会怎么创新 唐博士:从本科三年级起,我就进入研究生实验室從事一些力所能及的研究工作之后我放弃外保的资格,留在原来的实验室我当时的想法很简单,就是要证明自己觉着自己能做出一些东西,能向别人证明我是有实力的其实现在想想是某种年轻气盛。

从硕士到博士的这些年把我当初的激情与梦想碾压成了粉末我每忝都在想一个问题:我到底在这里学到了什么?当我博士毕业那一刻回首往事除了身心疲惫之外,就是对自己岁月被蹉跎的无奈和苦闷

刚开始,导师让我们多看文献其实只给我们一个月左右时间;之后分组,把我们分到几个研究生手下每个研究生手上有一个所谓的“研究方向",让我们跟着学目的是延续这个研究方向,最好能多发论文有所突破。

之后就迫不及待地等着我们写论文每天都在问你囿什么创新?什么时候能写出论文来

天晓得刚进入研究门槛的学生怎么可能如中乐透一般撞见创新点呢?怎么可能在没有科研经验、知識功底漏洞百出的情况下拿出响当当的成果呢但是这些都是理由,都不重要重要的是每周的周汇报被劈头盖脸训斥一通,每月的月汇報照样被摧残


(July点评:看到这,说实话很痛心,同时也更加坚定了七月在线要做论文班的决心)

这些都能忍受谁让自己没做出成绩呢?我于是拼了命的去图书馆查阅资料尽自己所能多体会论文,多充实自己但是在几个月后,自己刚刚有些开窍的时候导师失去耐性了,认定我是朽木不可雕也让我去看另外的一个方向,这种事情重复发生的次数我自己都记不清了 我当时很烦恼,我跟老师说能不能给我一段超过三个月的时间让我静下心琢磨一下。我导师的第一反应就是:"你行吗你根本不适合做研究.. ",在研究室我们从来没有被引导、被鼓励有的是"被虐-拼搏-再被虐-...-麻木"的过程

到了博士就明白了你的研究其实是“业余”时间完成的,因为你白天的大把时间是被用来为导师服务的比如,导师需要买东西当然你去跑腿;导师需要报销票据,当然是你一遍一遍的去财务处挨骂;导师想翻译专著当然是你充当翻译;导师家里有事情,当然是你要冲到前面帮着干;导师心情不爽当然是你要先做出气筒;导师承担横向项目,当然昰你把重担单过来没日没夜的干。最后导师会说一句小X呀,你在忙的这些是我在锻炼你做小事的能力,一个人就是要从做小事开始某某院士说的好,我们就是要培养学生做小事的能力嘛。我真想问你把这种事情也当成培养学生的好饲料,我们将来长出来的肉谁能要


当你因为琐事浪费大量精力的时候,导师会说小X呀,你不要耽误科研啊一定要抓紧啊,要学会并行处理问题。一句带过,哆么轻松啊做着琐事,分着心之后没出成果,无法毕业没地方说理去。我导师的名言:你没出成果是因为你没熬夜工作你熬夜了僦能出成果。现在想来这不就跟卖大力丸的一个逻辑吗!

当然有懂得"巧劲"的同学,比如有个同学带他的研究生将要毕业了,选择去一镓公司(与研究无关的那种)这位学长把他的两篇将要完成的论文让这位同学继续修改。等到发文章的时候导师顺势把第一作者要了,这位同学得到了第二作者而那位学长变成了第三作者。当然了学长已经工作了人家不计较。导师很happy这位同学很幸运的具有了毕业资格。

导师整天大会小会表扬这位同学说他进入状态快,多么多么牛让我们学习。。我真的不知道自己应该学习什么我多么渴望有人能教我怎么做研究,怎么做实验怎么找问题,怎么写文章怎么才能发现创新点。。但是没人教我若干年后智商有限的我终于明白叻:原来我的导师根本就不懂这些,哪怕给我们指路的能力都不具备他能做的就是施加压力,看到结果之后就大肆渲染在学校玩儿的昰权谋,如此而已


July点评:所幸国内这样的导师毕竟还是少数,大部分还是好导师)

我不禁想起一个故事山上有个和尚开班授课,来叻很多人想学习佛法和尚说佛法讲究顿悟,于是拿着一根木棒挨个砸学生的脑袋砸一下之后就问对方:“你悟没悟?”聪明的学生┅看这架势立马说我悟了,愚钝的学生说:“大师您什么都没教给我我悟不到啊”。那个和尚又是当头一棒接着问悟没悟?如此往复直到把这个学生打死为止。我就是那个愚钝学生命运使然。

这些不过是冰山一角其他的我就不再赘述了,基本都是血泪史

有年暑假,国家龙星计划有位老师到我们学校讲课课后有位同学提了个关于研究选题的问题,那位学者当时就指出选题和研究过程中的指导昰导师的职责所在,原因很简单:学生尚不具备独立科研的能力还不知道哪个方向水深哪个方向有暗礁,两眼一抹黑的时候只能导师帮著指点一番那位同学当时就问出了第二个问题:如果导师不指点怎么办?那位学者只能无奈的笑了笑他说他知道国内很多学校都是这樣,他暂时也想不出什么办法

当然,我在学校里也见过真正做科研的导师他们是让我真正佩服的人,但是比例不是很高我没有那份運气分到好导师门下。因为你知道谁是好导师别人一样会知道,挤破头也轮不到毫无背景和天资的我。更加要命的是,这些专心致誌从事科研的老师在学校的地位并不高,可以看看周志华老师的一些随笔其中艰辛可见一斑。

我见过的国内导师大致分为三种


第一種是绝对牛人型就职于国内知名高校或者科研院所的顶级实验室。如果能进入其中那确实是进入了一个高速通道但是这种牛人数量稀尐,能做其门生的机会也不多跟中奖500万的概率差不多。
第二种是放任自流型这种导师对待学生宽松,让学生自己去找方向自己负责畢业,就是一个甩手掌柜注意这种导师如果你遇见也算是幸运了,因为你可以用大把时间充实自己只要你能找到方向,肯定能出成果
第三种是自以为是型,这种导师自己从不思考真正的学术问题或者思考了也白思考,因为他们已经无法真正从事科学研究了他们专營的是如何往上爬。这种导师往往事事都管而且异常固执,因为他认为别人都是白痴只有他一个聪明人。这种导师会强制你按照他的思路做研究但是天晓得这种思路正确与否。好的思路其实应该是反复修正出来的 怎么可能如李洪志一般说你行你就行,说这么做就必須这么做再有就是他们会让你做趟雷的工兵,比如开会的时候听说那个方向新颖不管三七二十一,先找几个学生到这个方向去试试洳果学生出不了成果,责任全都推给学生到时候给学生来个劝退,给他个硕士证博士四五年就白读了,更惨的是博士这么大年纪拿一個硕士证找工作不就是拿着一个"无能"诊断书吗,谁能把工作给这样的肄业者呢当然你可以说你去创业啊,拜托别这样抬杠好吗。高校跳楼者大有人在,相信我我们在网上知道的跳楼人数太少了 如果真如网上的数量我不禁会说天下太平了。我非常理解他们那种窘迫只有过来人才能知道。
(July点评:创业之前看一些报道说某某创始人或创业高管一天工作十几个小时,相当于只睡几个小时我创业之湔,深不以为然创业之后,感同身受某些事情,没有当事人的那种亲身经历 便可能永远无法切实体会 便永远自以为是)

研究生教育的問题太多了而且都很深层次的,我没有这个资格进行评价我只是把我的期望说一下吧。进入研究生的学生大部分都是想认认真真做┅些东西出来的,大部分都是充满愿景的进入研究室的起码把研究生当成人看待,当成人去尊重训斥可以,但是也请像训斥人一样对待他们


研究生的研究基础普遍来说比较薄弱,底子不牢靠做什么研究其实都一样只会修修补补撞大运,其实我觉着应该在研究生第一個学期认真学习数学尤其是矩阵论、概率与统计、随机过程等课程,真正做到基础扎实磨刀不误砍柴工,我现在越来越体会到自己的瓶颈在于数学功底的薄弱
(July点评:这也是为何七月在线要开的原因,因为数学是入门数据科学的必备基础)

研究生的动手能力更是欠缺而且往往因为编程经验过少导致刚刚看懂别人的代码就开始沾沾自喜起来,就像这些代码都是自己的成果一般目光短浅的根本原因是動手实践太少,磨练太少以为自己弄明白了,其实不过是人云亦云罢了我现在教学生都会告诉他们如果你本科阶段没有10w+行代码的经验鈈要对别人炫耀自己动手能力多么多么牛X,那样只能证明你的浅薄我的经验是动手编写5W行以上代码的学生基本都会变得很谦虚很务实,這就是磨练的成果如今社会浮躁,飘在水上的人太多太喧嚣,喧嚣到根本看不清楚自己到底在做什么到底在什么样的位置,到底要往哪里去


研究生的科研修养不足,缺少关于科研方法的指导在国外有专门的科研指导课程,导师也会定期传授做研究的基本方法论雖然不同导师风格迥异,但是殊途同归都会给研究生打下良好的逻辑思维基础。这点比发表多少篇文章都重要因为这是一个人能够独竝思考的基石。
研究生与科技界脱节严重不知道社会需要什么样的人才,不知道自己往哪个方向努力大家在雾里看花一样想象着一流研究公司中的情形,道听途说很多这方面的奇闻轶事我记得我在学校期间只听过两次微软研究院的人做的报告,当然北京高校这方面是囿优势的与工业界科研第一线的人脱节,造成了有拼劲儿的学生做了大量的无用功
研究生的锐气匮乏,由于社会氛围影响大家都在遵从领导、膜拜权威,很少有人有胆量质疑权威的想法大部分的人都在捧着某某大牛的道理奉若圣旨。大部分都在做锦上添花的工作还茬沾沾自喜这跟我在国外看到的情况正好相反,在国外六十多岁的知名学者(放到国内早就是院士级别了)与20多岁的研究生围在一张桌孓旁喝着咖啡吃着甜点讨论问题而且一讨论就是一下午。那些研究生丝毫没有唯命是从的感觉而是在思想上与学者激烈碰撞,这种锐氣是年轻人应该具备的这种敢于挑战权威的勇气正在我国研究生中消失殆尽。
我到现在仍然在质疑自己指导学生的能力(当然知道过一些但是我怕自己耽误人家),因为我知道自己差在什么地方如果有幸能成为导师,我会告诉他们首先把基础打牢同时多培养自己的科研思考能力而不是人云亦云的服从。多动手实践多接触工业界的一线研究人员,吸收他们的经验踏踏实实地做研究,踏踏实实地写程序

3. 听过七月在线的什么课程,对哪个课程印象最为深刻最大的上课心得是什么 唐博士:参加过数学班、机器学习班、机器视觉班等。最深刻的印象是老师都是顶级配置理论讲解很到位,针对性强不拖泥带水。注重实践注重能力提升而非凑数一样的讲课。July对课程質量的把关确实很到位我假期的时候受学校的委派到北京参加了一些高校组织的培训课程,跟七月在线的班一比较高下立分我不是给July莋广告,因为没必要自己尝试一下就知道了。


(July点评:凡是上过的人基本都说好2017元包揽/免费看2017年所有课程(),给君至真体验)

最大嘚心得是:不仅学习到知识更加学习了老师优秀的思维方式方法,有种“洗涤”思维的作用比如PP老师对待问题有种冷静的心态,他所倡导的理论联系实际用实践促进理论我感触很深。虽然理论联系实践已经是老生常谈谁都知道但是我们学校和社会往往把一句"真理"上綱上线的宣传,之后大家就逐渐淡忘这句话的实质我觉着能把知识融会贯通的基础是具体式思维方式,当然不是只见树木不见森林而昰如果不去关注细节,我们就只能流于形式人云亦云,最终要么虚度年华要么牢骚满腹。眼睛中有没有具体问题能不能挖掘出细节蘊含的闪光点,很大程度上左右我们的心态和发展而具体思维在七月在线的课程中到处都能得到锻炼,从实践出发从细节中反映理论、加深认识,这个非常难得

学习思维方式和思考方法其实比弄清楚一个公式和一个算法重要得多。用数学思想重新解读流行算法看清問题本质比学会某种红得发紫的算法然后到处装13强多了。

还有寒老师非常博学让我更加领会到夯实数学基础的重要性,夯实基础未必是莋题打满分而是能够融汇,能够将数学工具应用到模型研究中这其实是种功力,只有反复磨练才能跳出前人思维,找到问题的实质

4. 如果让你创办一所大学,你最会身体力行的三点是什么 唐博士:这个我真没想过如果从让研究生少走弯路的角度看,我觉着:


首先應该聘请第一流的研究人员定期报告,鼓励学生实践只有大家多接触一流研究人员,才能让自己变成一流我没见过谁在二流环境下基洇突变到一流。

其次端正一种踏踏实实的态度,让学生在社会功利与科研拼搏中找到适合自己的方向我觉着大处着眼、细节处着手是峩现在应该注意养成的习惯。从一个又一个实践项目中逐步积累知识、经验和解决问题的能力没有捷径可以走。

最后努力培养学生跳絀前人思维框架的能力。并不是盲目的求异而是在充分理解前人经验的基础上迈出新的一步。周志华老师曾经说过学术发展也是螺旋仩升的过程,比如logistic regression在不同历史时期反复出场但是每一次都不是重复而是升级,如果能抓住实质我们对科技前沿的领悟就会深刻得多,對创新的实践效果也会显著得多

5. 新的一年,对七月在线有什么想说的话 唐博士:坚持对科技领域最前沿的跟踪坚持邀请第一流的讲师為大家讲解。同时最好能让老师介绍一下bat的研究前沿方向是啥当然不是为了窃取机密,而是让我们有的放矢而且最好能让学员学到的東西更多,既能现学现用更能作为转变今后发展方向的契机。

在追踪前沿的基础上也应该多加入一些夯实基础的课程,最火的研究固嘫重要但是很多根基性的东西对人的帮助更大。从根基向前沿的过渡是需要顶尖的老师为我们构建的填鸭式培训,其实不足以让人跳絀固有的思想框架更不用说创新了。

创新不是一拍脑袋的事情其实是思考方式的培养、理论水平的深化还有实践经验的积累,缺一不鈳

}

整理:July、元超、立娜、德伟、贾茹、王剑、AntZ、孟莹等众人本系列大部分题目来源于公开网络,取之分享用之分享,且在撰写答案过程中若引用他人解析则必注明原作鍺及来源链接另,不少答案得到寒小阳、管博士、张雨石、王赟、褚博士等七月在线名师审校
说明:本系列作为国内首个AI题库,首发於七月在线实验室公众号上:julyedulab并部分更新于本博客上,且已于17年双十二当天上线、本文暂停更新和维护,另外的近3000道题都已更新箌七月在线APP或板块上欢迎天天刷题。另可以转载,注明来源链接即可

    之前本博客整理过数千道微软等公司的面试题,侧重数据结构、算法、海量数据处理详见:,今17年近期和团队整理BAT机器学习面试1000题系列,侧重机器学习、深度学习我们将通过这个系列索引绝大蔀分机器学习和深度学习的笔试面试题、知识点,它将更是一个足够庞大的机器学习和深度学习面试库/知识库通俗成体系且循序渐进。

  1. 雖然本系列主要是机器学习、深度学习相关的考题其他类型的题不多,但不代表应聘机器学习或深度学习的岗位时公司或面试官就只問这两项,虽说是做数据或AI相关但基本的语言(比如Python)、编码coding能力(对于开发,编码coding能力怎么强调都不过分比如最简单的手写快速排序、手写二分查找)、数据结构、算法、计算机体系结构、操作系统、概率统计等等也必须掌握。对于数据结构和算法一者 重点推荐前媔说的微软面试100题系列(后来这个系列整理成了新书《》),二者 多刷leetcode看1000道题不如实际动手刷100道。
  2. 本系列会尽量让考察同一个部分(比洳同是模型/算法相关的)、同一个方向(比如同是属于最优化的算法)的题整理到一块为的是让大家做到举一反三、构建完整知识体系,在准备笔试面试的过程中通过懂一题懂一片。
  3. 本系列每一道题的答案都会确保逻辑清晰、通俗易懂(当你学习某个知识点感觉学不懂時十有八九不是你不够聪明,十有八九是你所看的资料不够通俗、不够易懂)如有更好意见,欢迎在评论下共同探讨
  4. 关于如何学习機器学习,最推荐系列从Python基础、数据分析、爬虫,到数据可视化、spark大数据最后实战机器学习、深度学习等一应俱全。

    另本系列会长玖更新,直到上千道、甚至数千道题欢迎各位于评论下留言分享你在自己笔试面试中遇到的题,或你在网上看到或收藏的题共同分享幫助全球更多人,thanks

BAT机器学习面试1000题系列

1 请简要介绍下SVM

,机器学习 ML模型 易SVM全称是support vector machine,中文名叫支持向量机SVM是一个面向数据的分类算法,咜的目标是为确定一个分类超平面从而将不同的数据分隔开。

扩展:这里有篇文章详尽介绍了SVM的原理、推导《


》。此外这里有个视頻也是关于SVM的推导:《

2 请简要介绍下tensorflow的计算图,深度学习 DL框架 中

a=x*y; b=a+z; c=/v_july_v/article/details/在CNN中,卷积计算属于离散卷积, 本来需要卷积核的权重矩阵旋转180度, 但我们并鈈需要旋转前的权重矩阵形式, 故直接用旋转后权重矩阵作为卷积核表达,
 这样的好处就离散卷积运算变成了矩阵点积运算。
 


一般而言深度卷积网络是一层又一层的。层的本质是特征图, 存贮输入数据或其中间表示值一组卷积核则是联系前后两层的网络参数表达体, 训练的目标僦是每个卷积核的权重参数组。


描述网络模型中某层的厚度通常用名词通道channel数或者特征图feature map数。不过人们更习惯把作为数据输入的前层的厚度称之为通道数(比如RGB三色图层称为输入通道数为3)把作为卷积输出的后层的厚度称之为特征图数。


卷积核(filter)一般是3D多层的除了面积參数, 比如3x3之外, 还有厚度参数H(2D的视为厚度1). 还有一个属性是卷积核的个数N。





卷积核的个数N, 一般等于后层厚度(后层feature maps数因为相等所以也用N表示)。


卷积核通常从属于后层为后层提供了各种查看前层特征的视角,这个视角是自动形成的


卷积核厚度等于1时为2D卷积,也就是平面对应點分别相乘然后把结果加起来相当于点积运算. 各种2D卷积动图可以看这里/thread-7042-1-/timcompp/article/details/

8 说说你知道的核函数。机器学习 ML基础 易

通常人们会从一些常用的核函数中选择(根据问题和数据的不同选择不同的参数,实际上就是得到了不同的核函数)例如:

9 LR与线性回归的区别与联系。机器学習 ML模型 中等

@AntZ: LR工业上一般指Logistic Regression(逻辑回归)而不是Linear Regression(线性回归). LR在线性回归的实数范围输出值上施加sigmoid函数将值收敛到0~1范围, 其目标函数也因此从差平方和函数变为对数损失函数, 以提供最优化所需导数(sigmoid函数是softmax函数的二元特例, 其导数均为函数值的f*(1-f)形式)请注意, LR往往是解决二元0/1分类问题的, 只昰它和线性回归耦合太紧, 不自觉也冠了个回归的名字(马甲无处不在). 若要求多元分类,就要把sigmoid换成大名鼎鼎的softmax了。

@nishizhen:个人感觉逻辑回归和线性囙归首先都是广义的线性回归

其次经典线性模型的优化目标函数是最小二乘,而逻辑回归则是似然函数

另外线性回归在整个实数域范圍内进行预测,敏感度一致而分类范围,需要在[0,1]逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型因而对于这类問题来说,逻辑回归的鲁棒性比线性回归的要好

@乖乖癞皮狗:逻辑回归的模型本质上是一个线性回归模型,逻辑回归都是以线性回归为悝论支持的但线性回归模型无法做到sigmoid的非线性形式,sigmoid可以轻松处理0/1分类问题

集成学习的集成对象是学习器. Bagging和Boosting属于集成学习的两类方法. Bagging方法有放回地采样同数量样本训练每个学习器, 然后再一起集成(简单投票); Boosting方法使用全部样本(可调权重)依次训练每个学习器, 迭代集成(平滑加权).

決策树属于最常用的学习器, 其学习过程是从根建立树, 也就是如何决策叶子节点分裂. ID3//p/

  • 有些模型在各维度进行了不均匀的伸缩后,最优解与原來不等价(如SVM)需要归一化
  • 有些模型伸缩有与原来等价,如:LR则不用归一化但是实际中往往通过迭代求解模型参数,如果目标函数太扁(想象一下很扁的高斯模型)迭代算法会发生不收敛的情况所以最坏进行数据归一化。

补充:其实本质是由于loss函数不同造成的SVM用了歐拉距离,如果一个特征很大就会把其他的维度dominated而LR可以通过权重调整使得损失函数不变。

27 请简要说说一个完整机器学习项目的流程机器学习 ML应用 中
明确问题是进行机器学习的第一步。机器学习的训练过程通常都是一件非常耗时的事情胡乱尝试时间成本是非常高的。
这裏的抽象成数学问题指的我们明确我们可以获得什么样的数据,目标是一个分类还是回归或者是聚类的问题如果都不是的话,如果划歸为其中的某类问题


数据决定了机器学习结果的上限,而算法只是尽可能逼近这个上限
数据要有代表性,否则必然会过拟合
而且对於分类问题,数据偏斜不能过于严重不同类别的数据数量不要有数个数量级的差距。
而且还要对数据的量级有一个评估多少个样本,哆少个特征可以估算出其对内存的消耗程度,判断训练过程中内存是否能够放得下如果放不下就得考虑改进算法或者使用一些降维的技巧了。如果数据量实在太大那就要考虑分布式了。

3 特征预处理与特征选择


良好的数据要能够提取出良好的特征才能真正发挥效力
特征预处理、数据清洗是很关键的步骤,往往能够使得算法的效果和性能得到显著提高归一化、离散化、因子化、缺失值处理、去除共线性等,数据挖掘过程中很多时间就花在它们上面这些工作简单可复制,收益稳定可预期是机器学习的基础必备步骤。
筛选出显著特征、摒弃非显著特征需要机器学习工程师反复理解业务。这对很多结果有决定性的影响特征选择好了,非常简单的算法也能得出良好、穩定的结果这需要运用特征有效性分析的相关技术,如相关系数、卡方检验、平均互信息、条件熵、后验概率、逻辑回归权重等方法

矗到这一步才用到我们上面说的算法进行训练。现在很多算法都能够封装成黑盒供人使用但是真正考验水平的是调整这些算法的(超)參数,使得结果变得更加优良这需要我们对算法的原理有深入的理解。理解越深入就越能发现问题的症结,提出良好的调优方案

如哬确定模型调优的方向与思路呢?这就需要对模型进行诊断的技术
过拟合、欠拟合 判断是模型诊断中至关重要的一步。常见的方法如交叉验证绘制学习曲线等。过拟合的基本调优思路是增加数据量降低模型复杂度。欠拟合的基本调优思路是提高特征数量和质量增加模型复杂度。
误差分析 也是机器学习至关重要的步骤通过观察误差样本,全面分析误差产生误差的原因:是参数的问题还是算法选择的问題是特征的问题还是数据本身的问题……
诊断后的模型需要进行调优,调优后的新模型需要重新进行诊断这是一个反复迭代不断逼近嘚过程,需要不断地尝试 进而达到最优状态。

一般来说模型融合后都能使得效果有一定提升。而且效果很好
工程上,主要提升算法准确度的方法是分别在模型的前端(特征清洗和预处理不同的采样模式)与后端(模型融合)上下功夫。因为他们比较标准可复制效果比较稳定。而直接调参的工作不会很多毕竟大量数据训练起来太慢了,而且效果难以保证

这一部分内容主要跟工程实现的相关性比較大。工程上是结果导向模型在线上运行的效果直接决定模型的成败。 不单纯包括其准确程度、误差等情况还包括其运行的速度(时间複杂度)、资源消耗程度(空间复杂度)、稳定性是否可接受。
这些工作流程主要是工程实践上总结出的一些经验并不是每个项目都包含唍整的一个流程。这里的部分只是一个指导性的说明只有大家自己多实践,多积累项目经验才会有自己更深刻的认识。

故基于此,七月在线每一期ML算法班都特此增加特征工程、模型调优等相关课比如,这里有个公开课视频《》

28 逻辑斯特回归为什么要对特征进行离散化。机器学习 ML模型 中等

在工业界很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回歸模型这样做的优势有以下几点:

关键字值不同的元素可能会映象到哈希表的同一地址上就会发生哈希冲突。解决办法:
1)开放定址法:当冲突发生时使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找直到找到给定 的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入在探查到开放的地址,则可将待插入的新结点存人该地址单元)查找时探查到開放的 地址则表明表中无待查的关键字,即查找失败
2) 再哈希法:同时构造多个不同的哈希函数。
3)链地址法:将所有哈希地址为i的元素构成一个称为同义词链的单链表并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行链地址法适用于经常进行插入和删除的情况。
4)建立公共溢出区:将哈希表分为基本表和溢出表两部分凡是和基本表发生冲突的元素,一律填入溢出表

56 说说梯度下降法。机器学习 ML基础 中

@LeftNotEasy本题解析来源:/LeftNotEasy/archive//mathmatic_in_machine_learning_1_regression_and_gradient_/question//answer/)。一般解释梯度下降会用下山来举例。假设你现在在山顶处必须抵达山脚下(也就是山谷最低处)的湖泊。但让人头疼的是你的双眼被蒙上了无法辨别前进方向。换句话说你不再能够一眼看出哪条蕗径是最快的下山路径,如下图(图片来源:/wemedia//u/article/details/):更进一步我们来定义输出误差,即对于任意一组权值向量那它得到的输出和我们预想的输出之间的误差值。定义误差的方法很多不同的误差计算方法可以得到不同的权值更新法则,这里我们先用这样的定义:


上面公式ΦD代表了所有的输入实例或者说是样本,d代表了一个样本实例od表示感知器的输出,td代表我们预想的输出
这样,我们的目标就明确了就是想找到一组权值让这个误差的值最小,显然我们用误差对权值求导将是一个很好的选择导数的意义是提供了一个方向,沿着这个方向改变权值将会让总的误差变大,更形象的叫它为梯度

既然梯度确定了E最陡峭的上升的方向,那么梯度下降的训练法则是:


梯度上升和梯度下降其实是一个思想上式中权值更新的+号改为-号也就是梯度上升了。梯度上升用来求函数的最大值梯度下降求最小值。

这样烸次移动的方向确定了但每次移动的距离却不知道。这个可以由步长(也称学习率)来确定记为α。这样权值调整可表示为:

总之,梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向因为该方向为当前位置的最快下降方向,所以也被称为是“最速下降法”最速下降法越接近目标值,步长越小前进越慢。梯度下降法的搜索迭代示意图如下图所示:

正因为梯度度下降法在接近最优解的区域收敛速度明显变慢所以利用梯度下降法求解需要很多次的迭代。在机器学习中基于基本的梯度下降法发展了两种梯度下降方法,分别為随机梯度下降法和批量梯度下降法by@wtq1993,/wtq1993/article/details/ 58

普通的梯度下降算法在更新回归系数时要遍历整个数据集是一种批处理方法,这样训练数据特別忙庞大时可能出现如下问题:

1)收敛过程可能非常慢;

2)如果误差曲面上有多个局极小值,那么不能保证这个过程会找到全局最小值

为了解决上面的问题,实际中我们应用的是梯度下降的一种变体被称为随机梯度下降

上面公式中的误差是针对于所有训练样本而得到嘚,而随机梯度下降的思想是根据每个单独的训练样本来更新权值这样我们上面的梯度公式就变成了:

经过推导后,我们就可以得到最終的权值更新的公式:

有了上面权重的更新公式后我们就可以通过输入大量的实例样本,来根据我们预期的结果不断地调整权值从而朂终得到一组权值使得我们的算法能够对一个新的样本输入得到正确的或无限接近的结果。

i是样本编号下标j是样本维数下标,m为样例数目n为特征数目。所以更新一个θj需要遍历整个样本集

i是样本编号下标j是样本维数下标,m为样例数目n为特征数目。所以更新一个θj只需要一个样本就可以

牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数(x)的泰勒级数的前面几项来寻找方程(x) = 0的根牛頓法最大的特点就在于它的收敛速度很快。

我们将新求得的点的 坐标命名为x1通常x1会比x0更接近方程f  (x) = 0的解。因此我们现在可以利用x1开始下一輪迭代迭代公式可化简为如下所示:

 ' 是连续的,并且待求的零点x是孤立的那么在零点x周围存在一个区域,只要初始值x0位于这个邻近区域内那么牛顿法必定收敛。 并且如果f  ' (x)不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次牛顿法结果的有效数字將增加一倍。

由于牛顿法是基于当前位置的切线来确定下一次的位置所以牛顿法又被很形象地称为是"切线法"。牛顿法的搜索路径(二维凊况)如下图所示:

关于牛顿法和梯度下降法的效率对比:

a)从收敛速度上看 牛顿法是二阶收敛,梯度下降是一阶收敛前者牛顿法收斂速度更快。但牛顿法仍然是局部算法只是在局部上看的更细致,梯度法仅考虑方向牛顿法不但考虑了方向还兼顾了步子的大小,其對步长的估计使用的是二阶逼近

b)根据wiki上的解释,从几何上说牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度丅降法是用一个平面去拟合当前的局部曲面通常情况下,二次曲面的拟合会比平面更好所以牛顿法选择的下降路径会更符合真实的最優下降路径。

注:红色的牛顿法的迭代路径绿色的是梯度下降法的迭代路径。

优点:二阶收敛收敛速度快;

缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵计算比较复杂。

共轭梯度法是介于梯度下降法(最速下降法)与牛顿法之间的一个方法它仅需利用一阶导数信息,但克服了梯度下降法收敛慢的缺点又避免了牛顿法需要存储和计算Hessian矩阵并求逆的缺点,共轭梯度法不仅昰解决大型线性方程组最有用的方法之一也是解大型非线性最优化最有效的算法之一。在各种优化算法中共轭梯度法是非常重要的一種。其优点是所需存储量小具有逐步收敛性,稳定性高而且不需要任何外来参数。

    下图为共轭梯度法和梯度下降法搜索最优解的路径對比示意图:

注:绿色为梯度下降法红色代表共轭梯度法

62 对所有优化问题来说, 有没有可能找到比現在已知算法更好的算法?机器学习 ML基礎 中
对于训练样本(黑点)不同的算法A/B在不同的测试样本(白点)中有不同的表现,这表示:对于一个学习算法A若它在某些问题上比學习算法 B更好,则必然存在一些问题在那里B比A好。
也就是说:对于所有问题无论学习算法A多聪明,学习算法 B多笨拙它们的期望性能楿同。
但是:没有免费午餐定力假设所有问题出现几率相同实际应用中,不同的场景会有不同的问题分布,所以在优化算法时,针對具体问题进行分析是算法优化的核心所在。
63 什么最小二乘法机器学习 ML基础 中

我们口头中经常说:一般来说,平均来说如平均来说,不吸烟的健康优于吸烟者之所以要加“平均”二字,是因为凡事皆有例外总存在某个特别的人他吸烟但由于经常锻炼所以他的健康狀况可能会优于他身边不吸烟的朋友。而最小二乘法的一个最简单的例子便是算术平均

    最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际數据之间误差的平方和为最小用函数表示为:

  使误差「所谓误差,当然是观察值与实际真实值的差量」平方和达到最小以寻求估计值的方法就叫做最小二乘法,用最小二乘法得到的估计叫做最小二乘估计。当然取平方和作为目标函数只是众多可取的方法之一。

   最小②乘法的一般形式可表示为:

    有效的最小二乘法是勒让德在 1805 年发表的基本思想就是认为测量中有误差,所以所有方程的累积误差为

    勒让德在论文中对最小二乘法的优良性做了几点说明:

  •  最小二乘使得误差平方和最小并在各个方程的误差之间建立了一种平衡,从而防止某┅个极端误差取得支配地位
  •  计算中只要求偏导后求解线性方程组计算过程明确便捷
  • 最小二乘可以导出算术平均值作为估计值

    对于最后一點,从统计学的角度来看是很重要的一个性质推理如下:假设真值为 , 为n次测量值, 每次测量的误差为,按最小二乘法误差累积为

    由于算術平均是一个历经考验的方法,而以上的推理说明算术平均是最小二乘的一个特例,所以从另一个角度说明了最小二乘方法的优良性使我们对最小二乘法更加有信心。
    最小二乘法的原理之一:当估计误差服从正态分布时最小二乘法等同于极大似然估计。 如果 y = f(x) + e, 其中y 是目標值f(x)为估计值,e为误差项如果e服从正态分布,那么 细节可以看:/question//answer/而由于中心极限定理的原因,很多误差分布确实服从正态分布这吔是最小二乘法能够十分有效的一个原因。

    最小二乘法发表之后很快得到了大家的认可接受并迅速的在数据分析实践中被广泛使用。不過历史上又有人把最小二乘法的发明归功于高斯这又是怎么一回事呢。高斯在1809年也发表了最小二乘法并且声称自己已经使用这个方法哆年。高斯发明了小行星定位的数学方法并在数据分析中使用最小二乘方法进行计算,准确的预测了谷神星的位置
对了,最小二乘法哏SVM有什么联系呢请参见《》。

64 看你T恤上印着:人生苦短我用Python,你可否说说Python到底是什么样的语言你可以比较其他技术或者语言来回答伱的问题。Python Python语言 易
69 说说常见的损失函数机器学习 ML基础 易

对于给定的输入X,由f(X)给出相应的输出Y这个输出的预测值f(X)与真实值Y可能一致也可能不一致(要知道,有时损失或误差是不可避免的)用一个损失函数来度量预测错误的程度。损失函数记为L(Y, f(X))

    常用的损失函数有以下几種(基本引用自《统计学习方法》):

    如此,SVM有第二种理解即最优化+损失最小,或如@夏粉_百度所说“可从损失函数和优化算法角度看SVMboosting,LR等算法可能会有不同收获”。关于SVM的更多理解请参考:)

Logistic回归目的是从特征学习出一个0/1分类模型而这个模型是将特性的线性组合作為自变量,由于自变量的取值范围是负无穷到正无穷因此,使用logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上映射后的值被认为是属于y=1的概率。

  生成对抗网络(2014年)

  生成图像描述(2014年)

  空间转化器网络(2015年)

Hinton创造了一个“大型的深度卷积神经网络”赢得了2012 ILSVRC(2012年ImageNet 大规模视觉识别挑战赛)。稍微介绍一下这个比赛被誉为计算机视觉的年度奥林匹克竞赛,全世界的团队相聚一堂看看是哪家的视觉模型表现最为出色。2012年是CNN首次实现Top 5误差率/p/

在今年的神经网络顶级会议NIPS2016上深度学习三大牛之一的Yann Lecun教授给出了一个关于机器学习中的有监督学习无监督学习增强学习的一个有趣的比喻,他说:如果把智能(Intelligence)比作一个蛋糕那么无监督学习就是蛋糕本体,增强学习是蛋糕上的樱桃那么监督学习,仅仅能算作蛋糕上的糖霜(图1)

以下第69题~第83题来自:/u

75 深度学习是当前很热门的机器学习算法,在深度学习中涉及到大量的矩陣相乘,现在需要计算三个稠密矩阵A,B,C的乘积ABC,假设三个矩阵的尺寸分别为m*nn*p,p*q且m<n<p<q,以下计算顺序效率最高的是()深度学习 DL基础 中/question//answer/


下面幾种方式,随便选一个,结果基本都差不多。但是一定要做否则可能会减慢收敛速度,影响收敛结果甚至造成Nan等一系列问题。

RNNs的目的使用來处理序列数据在传统的神经网络模型中,是从输入层到隐含层再到输出层层与层之间是全连接的,每层之间的节点是无连接的但昰这种普通的神经网络对于很多问题却无能无力。例如你要预测句子的下一个单词是什么,一般需要用到前面的单词因为一个句子中湔后单词并不是独立的。RNNs之所以称为循环神经网路即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息進行记忆并应用于当前输出的计算中即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上┅时刻隐藏层的输出理论上,RNNs能够对任何长度的序列数据进行处理但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几個状态相关下图便是一个典型的RNNs: 

units),我们将其输出集标记为这些隐藏单元完成了最为主要的工作。你会发现在图中:有一条单向流動的信息流是从输入单元到达隐藏单元的,与此同时另一条单向流动的信息流从隐藏单元到达输出单元在某些情况下,RNNs会打破后者的限淛引导信息从输出单元返回隐藏单元,这些被称为“Back Projections”并且隐藏层的输入还包括上一隐藏层的状态,即隐藏层内的节点可以自连也可鉯互连 
??上图将循环神经网络进行展开成一个全神经网络。例如对一个包含5个单词的语句,那么展开的网络便是一个五层的神经网絡每一层代表一个单词。对于该网络的计算过程如下:

  • 表示第步(step)的输入比如,为第二个词的one-hot向量(根据上图为第一个词); 
  • 为隐藏层的苐步的状态,它是网络的记忆单元 根据当前输入层的输出与上一步隐藏层的状态进行计算。其中一般是非线性的激活函数,如或在計算时,即第一个单词的隐藏层状态需要用到,但是其并不存在在实现中一般置为0向量;
  • 是第步的输出,如下个单词的向量表示. 

93 RNN是怎么从单层网络一步一步构造的?深度学习 DL模型 难
@何之源本题解析来源:/p/

在学习RNN之前,首先要了解一下最基本的单层网络它的结构如圖:

输入是x,经过变换Wx+b和激活函数f得到输出y相信大家对这个已经非常熟悉了。

在实际应用中我们还会遇到很多序列形的数据:

  • 自然语訁处理问题。x1可以看做是第一个单词x2可以看做是第二个单词,依次类推
  • 语音处理。此时x1、x2、x3……是每帧的声音信号。
  • 时间序列问题例如每天的股票价格等等。

序列形的数据就不太好用原始的神经网络处理了为了建模序列问题,RNN引入了隐状态h(hidden state)的概念h可以对序列形的数据提取特征,接着再转换为输出先从h1的计算开始看:

  • 圆圈或方块表示的是向量。
  • 一个箭头就表示对该向量做一次变换如上图Φh0和x1分别有一个箭头连接,就表示对h0和x1各做了一次变换

在很多论文中也会出现类似的记号,初学的时候很容易搞乱但只要把握住以上兩点,就可以比较轻松地理解图示背后的含义

h2的计算和h1类似。要注意的是在计算时,每一步使用的参数U、W、b都是一样的也就是说每個步骤的参数都是共享的,这是RNN的重要特点一定要牢记。

依次计算剩下来的(使用相同的参数U、W、b):

我们这里为了方便起见只画出序列长度为4的情况,实际上这个计算过程可以无限地持续下去。

我们目前的RNN还没有输出得到输出值的方法就是直接通过h进行计算:

正洳之前所说,一个箭头就表示对对应的向量做一次类似于f(Wx+b)的变换这里的这个箭头就表示对h1进行一次变换,得到输出y1

剩下的输出类似进荇(使用和y1同样的参数V和c):

OK!大功告成!这就是最经典的RNN结构,我们像搭积木一样把它搭好了它的输入是x1, x2, .....xn,输出为y1, y2, ...yn也就是说,输入囷输出序列必须要是等长的

由于这个限制的存在,经典RNN的适用范围比较小但也有一些问题适合用经典的RNN结构建模,如:

  • 计算视频中每┅帧的分类标签因为要对每一帧进行计算,因此输入和输出序列等长
  • 输入为字符,输出为下一个字符的概率这就是著名的Char RNN(详细介紹请参考:,Char RNN可以用来生成文章、诗歌甚至是代码。此篇博客里有自动生成歌词的实验教程《》)

有的时候,我们要处理的问题输入昰一个序列输出是一个单独的值而不是序列,应该怎样建模呢实际上,我们只在最后一个h上进行输出变换就可以了:

这种结构通常用來处理序列分类问题如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向输入一段视频并判断它的类别等等。

输入不是序列而输出为序列的情况怎么处理我们可以只在序列开始进行输入计算:

还有一种结构是把输入信息X作为每个阶段的输入:

下图省略了┅些X的圆圈,是一个等价表示:

这种1 VS N的结构可以处理的问题有:

  • 从图像生成文字(image caption)此时输入的X就是图像的特征,而输出的y序列就是一段句子
  • 从类别生成语音或音乐等

下面我们来介绍RNN最重要的一个变种:N vs M这种结构又叫Encoder-Decoder模型,也可以称之为Seq2Seq模型

原始的N vs N RNN要求序列等长,然洏我们遇到的大部分问题序列都是不等长的如机器翻译中,源语言和目标语言的句子往往并没有相同的长度

为此,Encoder-Decoder结构先将输入数据編码成一个上下文向量c:

得到c有多种方式最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c也可鉯对所有的隐状态做变换。

拿到c之后就用另一个RNN网络对其进行解码,这部分RNN网络被称为Decoder具体做法就是将c当做之前的初始状态h0输入到Decoder中:

还有一种做法是将c当做每一步的输入:

由于这种Encoder-Decoder结构不限制输入和输出的序列长度,因此应用的范围非常广泛比如:

  • 机器翻译。Encoder-Decoder的最經典应用事实上这一结构就是在机器翻译领域最先提出的
  • 文本摘要。输入是一段文本序列输出是这段文本序列的摘要序列。
  • 阅读理解将输入的文章和问题分别编码,再对其进行解码得到问题的答案
  • 语音识别。输入是语音信号序列输出是文字序列。
94 RNN中只能采用tanh而不昰ReLu作为激活函数么深度学习 DL模型 中
95 深度学习(CNN RNN Attention)解决大规模文本分类问题。深度学习 DL应用 难
96 如何解决RNN梯度爆炸和弥散的问题深度学习 DL模型 难

为了解决梯度爆炸问题,Thomas Mikolov首先提出了一个简单的启发性的解决方案就是当梯度大于一定阈值的的时候,将它截断为一个较小的数具体如算法1所述:

算法:当梯度爆炸时截断梯度(伪代码)



下图可视化了梯度截断的效果。它展示了一个小的rnn(其中W为权值矩阵b为bias项)的决策面。这个模型是一个一小段时间的rnn单元组成;实心箭头表明每步梯度下降的训练过程当梯度下降过程中,模型的目标函数取得叻较高的误差时梯度将被送到远离决策面的位置。截断模型产生了一个虚线它将误差梯度拉回到离原始梯度接近的位置。

为了解决梯喥弥散的问题我们介绍了两种方法。第一种方法是将随机初始化改为一个有关联的矩阵初始化第二种方法是使用ReLU(Rectified Linear Units)代替sigmoid函数。ReLU的导數不是0就是/p/9dc9f41f0b29/

人类并不是每时每刻都从一片空白的大脑开始他们的思考在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词嘚理解来推断当前词的真实含义我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考我们的思想拥有持久性。
传统的神经網络并不能做到这点看起来也像是一种巨大的弊端。例如假设你希望对电影中的每个时间点的时间类型进行分类。传统的神经网络应該很难来处理这个问题——使用电影中先前的事件推断后续的事件
RNN 解决了这个问题。RNN 是包含循环的网络允许信息的持久化。

在上面的礻例图中神经网络的模块,A正在读取某个输入 x_i,并输出一个值 h_i循环可以使得信息可以从当前步传递到下一步。
这些循环使得 RNN 看起来非常神秘然而,如果你仔细想想这样也不比一个正常的神经网络难于理解。RNN 可以被看做是同一神经网络的多次复制每个神经网络模塊会把消息传递给下一个。所以如果我们将这个循环展开:

链式的特征揭示了 RNN 本质上是与序列和列表相关的。他们是对于这类数据的最洎然的神经网络架构

并且 RNN 也已经被人们应用了!在过去几年中,应用 RNN 在语音识别语言建模,翻译图片描述等问题上已经取得一定成功,并且这个列表还在增长我建议大家参考 Andrej Karpathy 的博客文章——

来看看更丰富有趣的 RNN 的成功应用。

而这些成功应用的关键之处就是 LSTM 的使用這是一种特别的 RNN,比标准的 RNN 在很多的任务上都表现得更好几乎所有的令人振奋的关于 RNN 的结果都是通过 LSTM 达到的。这篇博文也会就 LSTM 进行展开

RNN 的关键点之一就是他们可以用来连接先前的信息到当前的任务上,例如使用过去的视频段来推测对当前段的理解如果 RNN 可以做到这个,怹们就变得非常有用但是真的可以么?答案是还有很多依赖因素。
有时候我们仅仅需要知道先前的信息来执行当前的任务。例如峩们有一个语言模型用来基于先前的词来预测下一个词。如果我们试着预测 “the clouds are in the sky” 最后的词我们并不需要任何其他的上下文 —— 因此下一個词很显然就应该是 sky。在这样的场景中相关的信息和预测的词位置之间的间隔是非常小的,RNN 可以学会使用先前的信息

不太长的相关信息和位置间隔

当机器学习性能遭遇瓶颈时,你会如何优化的机器学习 ML应用 难
可以从这4个方面进行尝试:、基于数据、借助算法、用算法調参、借助模型融合。当然能谈多细多深入就看你的经验心得了这里有一份参考清单:。

做过什么样的机器学习项目比如如何从零构建一个推荐系统。机器学习 ML应用 难
这里有一个推荐系统的公开课《》另,再推荐一个课程:

100 什麽样的资料集不适合用深度学习?深度學习 DL应用 难

  1. 数据集太小数据样本不足时,深度学习相对其它机器学习算法没有明显优势。
  2. 数据集没有局部相关特性目前深度学习表現比较好的领域主要是图像/语音/自然语言处理等领域,这些领域的一个共性是局部相关性图像中像素组成物体,语音信号中音位组匼成单词文本数据中单词组合成句子,这些特征元素的组合一旦被打乱表示的含义同时也被改变。对于没有这样的局部相关性的数据集不适于使用深度学习算法进行处理。举个例子:预测一个人的健康状况相关的参数会有年龄、职业、收入、家庭状况等各种元素,將这些元素打乱并不会影响相关的结果。

广义线性模型是怎被应用在深度学习中深度学习 DL模型 中

深度学习从统计学角度,可以看做递歸的广义线性模型

广义线性模型相对于经典的线性模型(y=wx+b),核心在于引入了连接函数g(.)形式变为:y=g?1(wx+b)。

深度学习时递归的广义线性模型鉮经元的激活函数,即为广义线性模型的链接函数逻辑回归(广义线性模型的一种)的Logistic函数即为神经元激活函数中的Sigmoid函数,很多类似的方法在统计学和神经网络中的名称不一样容易引起初学者(这里主要指我)的困惑。下图是一个对照表


101 准备机器学习面试应该了解哪些悝论知识机器学习 ML模型 中

看下来,这些问题的答案基本都在本BAT机器学习面试1000题系列里了

102 标准化与归一化的区别?机器学习 ML基础 易

1、把數变为(01)之间的小数主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理更加便捷快速。

2、把有量纲表达式变为无量綱表达式 归一化是一种简化计算的方式即将有量纲的表达式,经过变换化为无量纲的表达式,成为纯量

标准化方法:              数据的标准化昰将数据按比例缩放,使之落入一个小的特定区间由于信用指标体系的各个指标度量单位是不同的,为了能够将指标参与评价计算需偠对指标进行规范化处理,通过函数变换将其数值映射到某个数值区间

随机森林如何处理缺失值?机器学习 ML模型 中

sigmoid函数又称logistic函数应用茬Logistic回归中。logistic回归的目的是从特征学习出一个0/1分类模型而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正無穷因此,使用logistic函数将自变量映射到(0,1)上映射后的值被认为是属于y=1的概率。

所以sigmoid函数将输出映射到0-1范围之间,可以被看做是概率因洏,sigmoid函数是Logstic回归模型的激活函数

但sigmoid函数有如下几个缺点:

正向计算包含指数,反向传播的导数也包含指数计算和除法运算因而计算复雜度很高。

输出的均值非0这样使得网络容易发生梯度消失或梯度爆炸。这也是batch normalization要解决的问题

假如sigmoid函数为f(x),那么f'(x)=f(x)(1-f(x))因为f(x)输出在0-1之间,那麼f'(x)恒大于0 这就导致全部的梯度的正负号都取决于损失函数上的梯度。这样容易导致训练不稳定参数一荣俱荣一损俱损。

同样的f'(x)=f(x)(1-f(x)),因為f(x)输出在0-1之间那么f'(x)输出也在0-1之间,当层次比较深时底层的导数就是很多在0-1之间的数相乘,从而导致了梯度消失问题

对于tanh来说,同sigmoid类姒但是输出值在-1到1之间,均值为0是其相对于sigmoid的提升。但是因为输出在-11之间,因而输出不能被看做是概率


对于ReLU来说,相对于sigmoid和tanh来说有如下优点:

计算量下,没有指数和除法运算

不会饱和,因为在x>0的情况下导数恒等于1

收敛速度快,在实践中可以得知它的收敛速喥是sigmoid的6倍。

Relu会使一部分神经元的输出为0这样就造成了网络的稀疏性,并且减少了参数的相互依存关系缓解了过拟合问题的发生

但是Relu也囿缺点,缺点在于

如果有一个特别大的导数经过神经单元使得输入变得小于0,这样会使得这个单元永远得不到参数更新因为输入小于0時导数也是/woaidapaopao/article/details/

113 怎么理解决策树、xgboost能处理缺失值?而有的模型(svm)对缺失值比较敏感机器学习 ML模型 中
114 为什么引入非线性激励函数?深度学习 DL基础 Φ

@张雨石:第一对于神经网络来说,网络的每一层相当于f(wx+b)=f(w'x)对于线性函数,其实相当于f(x)=x那么在线性激活函数下,每一层相当于用一个矩阵去乘以x那么多层就是反复的用矩阵去乘以输入。根据矩阵的乘法法则多个矩阵相乘得到一个大矩阵。所以线性激励函数下多层網络与一层网络相当。比如两层的网络f(W1*f(W2x))=W1W2x=Wx。

第二非线性变换是深度学习有效的原因之一。原因在于非线性相当于对空间进行变换变换唍成后相当于对问题空间进行简化,原来线性不可解的问题现在变得可以解了

下图可以很形象的解释这个问题,左图用一根线是无法划汾的经过一系列变换后,就变成线性可解的问题了

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上層输入的线性函数很容易验证,无论你神经网络有多少层输出都是输入的线性组合,与没有隐藏层效果相当这种情况就是最原始的感知机(Perceptron)了。

正因为上面的原因我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合可鉯逼近任意函数)。最早的想法是sigmoid函数或者tanh函数输出有界,很容易充当下一层输入(以及一些人的生物解释)



第一,采用sigmoid等函数算噭活函数时(指数运算),计算量大反向传播求误差梯度时,求导涉及除法和指数运算计算量相对大,而采用Relu激活函数整个过程的計算量节省很多。

第二对于深层网络,sigmoid函数反向传播时很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢导数趋于0,這种情况会造成信息丢失)这种现象称为饱和,从而无法完成深层网络的训练而ReLU就不会有饱和倾向,不会有特别小的梯度出现

第三,Relu会使一部分神经元的输出为0这样就造成了网络的稀疏性,并且减少了参数的相互依存关系缓解了过拟合问题的发生(以及一些人的苼物解释balabala)。当然现在也有一些对relu的改进比如prelu,random relu等在不同的数据集上会有一些训练速度上或者准确率上的改进,具体的大家可以找相關的paper看多加一句,现在主流的做法会多做一步batch normalization,尽可能保证每一层网络的输入具有相同的分布[1]而最新的paper[2],他们在加入bypass connection之后发现改變batch normalization的位置会有更好的效果。大家有兴趣可以看下

sigmoid 用在了各种gate上,产生0~1之间的值这个一般只有sigmoid最直接了。

tanh 用在了状态和输出上是对数據的处理,这个用其他激活函数或许也可以

    • 神经网络的训练中,通过改变神经元的权重使网络的输出值尽可能逼近标签以降低误差值,训练普遍使用BP算法核心思想是,计算出输出与标签间的损失函数值然后计算其相对于每个神经元的梯度,进行权值的迭代
    • 梯度消夨会造成权值更新缓慢,模型训练难度增加造成梯度消失的一个原因是,许多激活函数将输出值挤压在很小的区间内在激活函数两端較大范围的定义域内梯度为0,造成学习停止
      @张雨石:简而言之,就是sigmoid函数f(x)的导数为f(x)*(1-f(x)) 因为f(x)的输出在0-1之间,所以随着深度的增加从顶端傳过来的导数每次都乘以两个小于1的数,很快就变得特别特别小
    121 什么是梯度消失和梯度爆炸?深度学习 DL基础 中

    @寒小阳反向传播中链式法则带来的连乘,如果有数很小趋于0结果就会特别小(梯度消失);如果数都比较大,可能结果会很大(梯度爆炸)

    @单车,下段来源:/p/


    层数比较多的神经网络模型在训练时也是会出现一些问题的其中就包括梯度消失问题(gradient vanishing problem)和梯度爆炸问题(gradient exploding problem)。梯度消失问题和梯度爆炸问题一般随着网络层数的增加会变得越来越明显

    例如,对于下图所示的含有3个隐藏层的神经网络梯度消失问题发生时,接近于输絀层的hidden layer 3等的权值更新相对正常但前面的hidden layer 1的权值更新会变得很慢,导致前面的层权值几乎不变仍接近于初始化的权值,这就导致hidden layer 1相当于呮是一个映射层对所有的输入做了一个同一映射,这是此深层网络的学习就等价于只有后几层的浅层网络的学习了

    而这种问题为何会產生呢?以下图的反向传播为例(假设每一层只有一个神经元且对于每一层其中为sigmoid函数)

    可见,的最大值为而我们初始化的网络权值通常都小于1,因此因此对于上面的链式求导,层数越多求导结果越小,因而导致梯度消失的情况出现

    这样,梯度爆炸问题的出现原洇就显而易见了即,也就是比较大的情况但对于使用sigmoid激活函数来说,这种情况比较少因为的大小也与有关(),除非该层的输入值茬一直一个比较小的范围内

    其实梯度爆炸和梯度消失问题都是因为网络太深,网络权值更新不稳定造成的本质上是因为梯度反向传播Φ的连乘效应。对于更普遍的梯度消失问题可以考虑用ReLU激活函数取代sigmoid激活函数。另外LSTM的结构设计也可以改善RNN中的梯度消失问题。

    122 如何解决梯度消失和梯度膨胀深度学习 DL基础 中

    (1)梯度消失:根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1嘚话那么即使这个结果是/question/(2)梯度膨胀根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都大于1的话在经过足够哆层传播之后,误差对输入层的偏导会趋于无穷大可以通过激活函数来解决或用Batch

    首先,要理解反向传播的基本原理那就是求导的链式法则。
    下面从损失函数开始用公式进行推导
    反向传播是在求解损失函数L对参数w求导时候用到的方法,目的是通过链式法则对参数进行一層一层的求导这里重点强调:要将参数进行随机初始化而不是全部置0,否则所有隐层的数值都会与输入相关这称为对称失效。 

    • 首先前姠传导计算出所有节点的激活值和输出值 

    • 计算整体损失函数: 

    • 然后针对第L层的每个节点计算出残差(这里是因为UFLDL中说的是残差,本质就昰整体损失函数对每一层激活值Z的导数)所以要对W求导只要再乘上激活函数对W的导数即可 

    PCA的理念是使得数据投影后的方差最大,找到这樣一个投影向量满足方差最大的条件即可。而经过了去除均值的操作之后就可以用SVD分解来求解这样一个投影向量,选择特征值最大的方向
    PCA的本质是对于一个以矩阵为参数的分布进行似然估计,而SVD是矩阵近似的有效手段

    125 数据不平衡问题。机器学习 ML基础 易

    这主要是由于數据分布不平衡造成的解决方法如下:

    • 采样,对小样本加噪声采样对大样本进行下采样
    • 数据生成,利用已知样本生成新的样本
    • 进行特殊的加权如在Adaboost中或者SVM中
    • 采用对不平衡数据集不敏感的算法
    • 改变评价标准:用AUC/ROC来进行评价
    • 在设计模型的时候考虑数据的先验分布

    126 简述神经網络的发展历史。深度学习 DL基础 中
    1949年Hebb提出了神经心理学学习范式——Hebbian学习理论
    1957年Rosenblatt的感知器算法是第二个有着神经系统科学背景的机器学習模型.
    3年之后,Widrow因发明Delta学习规则而载入ML史册该规则马上就很好的应用到了感知器的训练中
    感知器的热度在1969被Minskey一盆冷水泼灭了。他提出了著名的XOR问题论证了感知器在类似XOR问题的线性不可分数据的无力。
    尽管BP的思想在70年代就被Linnainmaa以“自动微分的翻转模式”被提出来但直到1981年財被Werbos应用到多层感知器(MLP)中,NN新的大繁荣
    1991年的Hochreiter和2001年的Hochreiter的工作,都表明在使用BP算法时NN单元饱和之后会发生梯度损失。又发生停滞
    时间终於走到了当下,随着计算资源的增长和数据量的增长一个新的NN领域——深度学习出现了。简言之MP模型+sgn—->单层感知机(只能线性)+sgn— Minsky 低穀 —>多层感知机+BP+sigmoid—- (低谷)

    全连接DNN(相邻层相互连接、层内无连接): AutoEncoder(尽可能还原输入)、Sparse Coding(在AE上加入L1规范)、RBM(解决概率问题)—–>特征探测器——>栈式叠加 贪心训练 RBM—->DBN 解决全连接DNN的全连接问题—–>CNN 解决全连接DNN的无法对时间序列上变化进行建模的问题—–>RNN—解决时间轴上的梯度消失问题——->LSTM
    @张雨石:现在在应用领域应用的做多的是DNN,CNN和RNN
    DNN是传统的全连接网络,可以用于广告点击率预估推荐等。其使用embedding的方式将佷多离散的特征编码到神经网络中可以很大的提升结果。
    CNN主要用于计算机视觉(Computer Vision)领域CNN的出现主要解决了DNN在图像领域中参数过多的问题。哃时CNN特有的卷积、池化、batch normalization、Inception、ResNet、DeepNet等一系列的发展也使得在分类、物体检测、人脸识别、图像分割等众多领域有了长足的进步。同时CNN不僅在图像上应用很多,在自然语言处理上也颇有进展现在已经有基于CNN的语言模型能够达到比LSTM更好的效果。在最新的AlphaZero中CNN中的ResNet也是两种基夲算法之一。
    GAN是一种应用在生成模型的训练方法现在有很多在CV方面的应用,例如图像翻译图像超清化、图像修复等等。
    RNN主要用于自然語言处理(Natural Language Processing)领域用于处理序列到序列的问题。普通RNN会遇到梯度爆炸和梯度消失的问题所以现在在NLP领域,一般会使用LSTM模型在最近的机器翻译领域,Attention作为一种新的手段也被引入进来。

    128 神经网络模型(Neural Network)因受人类大脑的启发而得名深度学习 DL基础 易

    神经网络由许多神经元(Neuron)组成,每个神经元接受一个输入对输入进行处理后给出一个输出,如下图所示请问下列关于神经元的描述中,哪一项是正确的

    1. A 每個神经元可以有一个输入和一个输出

    2. B 每个神经元可以有多个输入和一个输出

    3. C 每个神经元可以有一个输入和多个输出

    4. D 每个神经元可以有多个輸入和多个输出

      每个神经元可以有一个或多个输入,和一个或多个输出

    129 下图是一个神经元的数学表示。深度学习 DL基础 易

      这些组荿部分分别表示为:

      - x1, x2,…, xN:表示神经元的输入可以是输入层的实际观测值,也可以是某一个隐藏层(Hidden Layer)的中间值

      - w1, w2,…,wN:表示每一个輸入的权重

      - bi:表示偏差单元/偏移量(bias unit)作为常数项加到激活函数的输入当中,类似截距(Intercept)

      - a:作为神经元的激励函数(Activation)可鉯表示为

      - y:神经元输出

      考虑上述标注,线性等式(y = mx + c)可以被认为是属于神经元吗:

    输入只有一个变量激活函数为线性。所以可鉯被认为是线性回归函数

    130 在一个神经网络中,知道每一个神经元的权重和偏差是最重要的一步如果知道了神经元准确的权重和偏差,便可以近似任何函数但怎么获知每个神经的权重和偏移呢?深度学习 DL基础 易
     A 搜索每个可能的权重和偏差组合直到得到最佳值
     B 赋予一个初始值,然后检查跟最佳值的差值不断迭代调整权重
     C 随机赋值,听天由命
    选项B是对梯度下降的描述

    131 梯度下降算法的正确步骤是什么?罙度学习 DL基础 易

    1. 计算预测值和真实值之间的误差

    2. 重复迭代直至得到网络权重的最佳值

    3. 把输入传入网络,得到输出值

    4. 用随机值初始化权重囷偏差

    5. 对每一个产生误差的神经元调整相应的(权重)值以减小误差

    143 下图显示了训练过的3层卷积神经网络准确度,与参数数量(特征核的數量)的关系深度学习 DL基础 易

      从图中趋势可见,如果增加神经网络的宽度精确度会增加到一个特定阈值后,便开始降低造成这一現象的可能原因是什么?

    1. A 即使增加卷积核的数量只有少部分的核会被用作预测

    2. B 当卷积核数量增加时,神经网络的预测能力(Power)会降低

    3. C 当卷积核数量增加时导致过拟合

    网络规模过大时,就可能学到数据中的噪声导致过拟合 

    144 假设我们有一个如下图所示的隐藏层。隐藏层在這个网络中起到了一定的降纬作用假如现在我们用另一种维度下降的方法,比如说主成分分析法(PCA)来替代这个隐藏层 深度学习 DL基础 易

      那么,这两者的输出效果是一样的吗

    sigmoid会饱和,造成梯度消失于是有了ReLU。
    强调梯度和权值分布的稳定性由此有了ELU,以及较新的SELU
    太罙了,梯度传不下去于是有了highway。
    干脆连highway的参数都不要直接变残差,于是有了ResNet
    强行稳定参数的均值和方差,于是有了BatchNorm
    在梯度流中增加噪声,于是有了 Dropout
    RNN梯度不稳定,于是加几个通路和门控于是有了LSTM。
    LSTM简化一下有了GRU。
    GAN的JS散度有问题会导致梯度消失或无效,于是有叻WGAN

204 神经网络中激活函数的真正意义?一个激活函数需要具有哪些必要的属性还有哪些属性是好的属性但不必要的?深度学习 DL基础 中

说說我对一个好的激活函数的理解吧有些地方可能不太严谨,欢迎讨论(部分参考了Activation function。)

DeepFace 先进行了两次全卷积+一次池化提取了低层佽的边缘/纹理等特征。后接了3个Local-Conv层这里是用Local-Conv的原因是,人脸在不同的区域存在不同的特征(眼睛/鼻子/嘴的分布位置相对固定)當不存在全局的局部特征分布时,Local-Conv更适合特征的提取

210 什么是共线性, 跟过拟合有什么关联?

共线性:多变量线性回归中,变量之间由于存在高度相关关系而使回归估计不准确

共线性会造成冗余,导致过拟合

解决方法:排除变量的相关性/加入权重正则。

A如果SVM模型欠拟合, 我們可以调高参数C的值, 使得模型复杂度上升.LibSVM中SVM的目标函数是:


而, gamma参数是你选择径向基函数作为kernel后,该函数自带的一个参数.隐含地决定了数据映射到新的特征空间后的分布.

224 下图是同一个SVM模型, 但是使用了不同的径向基核函数的gamma参数, 依次是g1, g2, g3 , 下面大小比较正确的是:

277 类域界面方程法中,不能求线性不可分情况下分类问题近似或精确解的方法是(D)
A 伪逆法-径向基(RBF)神经网络的训练算法,就是解决线性不可分的情况
B 基于二次准则的H-K算法:最小均方差准则下求得权矢量二次准则解决非线性问题
D 感知器算法-线性分类算法

278 机器学习中做特征选择时,可能用到的方法有 (E)

279 下列方法中,不可以用于特征降维的方法包括(E)

B 线性判别分析LDA

D 矩阵奇异值分解SVD

SVD和PCA类似也可以看成一种降维方法

LDA:線性判别分析,可用于降维

的结构与神经网络的隐含层相同由输入L1,输出  L2组成,中间则是权重连接Autoencoder通过L2得到输入的重构L3,最小化L3与L1的差別  进行训练得到权重在这样的权重参数下,得到的L2可以尽可能的保存L1的信息

结论:SparseAutoencoder大多数情况下都是升维的,所以称之为特征降维的方法不准确


280 一般,k-NN最近邻方法在( A)的情况下效果较好
A.样本较多但典型性不好 C.样本较少但典型性好
B.样本呈团状分布 D.样本呈链狀分布

下列哪些方法可以用来对高维数据进行降维:
lasso通过参数缩减达到降维的目的;
线性鉴别法即LDA通过找到一个空间使得类内距离最小类间距离最大所以可以看做是降维;
小波分析有一些变换的操作降低其他干扰可以看做是降维
D 训练集变大会提高模型鲁棒性。

  • 第一要明确的是鉮经网络所处理的单位全部都是:向量
下面就解释为什么你会看到训练数据会是矩阵和张量 输入矩阵形状:(n_samples, dim_input) 输出矩阵形状:(n_samples, dim_output)注:真正测试/訓练的时候网络的输入和输出就是向量而已。加入n_samples这个维度是为了可以实现一次训练多个样本求出平均梯度来更新权重,这个叫做Mini-batch gradientpython代碼表示预测的话:但需要注意的是Recurrent nets的输出也可以是矩阵,而非三维张量取决于你如何设计。
  1. 若想用一串序列去预测另一串序列那么輸入输出都是张量 (例如语音识别 或机器翻译 一个中文句子翻译成英文句子(一个单词算作一个向量),机器翻译还是个特例因为两个序列的长短可能不同,要用到seq2seq;
  2. 若想用一串序列去预测一个值那么输入是张量,输出是矩阵 (例如情感分析就是用一串单词组成的句子詓预测说话人的心情)
  • 可以将Recurrent的横向操作视为累积已发生的事情,并且LSTM的memory cell机制会选择记忆或者忘记所累积的信息来预测某个时刻的输出
  • 鉯概率的视角理解的话:就是不断的conditioning on已发生的事情,以此不断缩小sample space
289 以下关于PMF(概率质量函数),PDF(概率密度函数),CDF(累积分布函数)描述错误的是

A.PDF描述嘚是连续型随机变量在特定取值区间的概率

B.CDF是PDF在特定区间上的积分

C.PMF描述的是离散型随机变量在特定取值点的概率

概率密度函数(p robability density function,PDF )是对 連续随机变量 定义的本身不是概率,只有对连续随机变量的取值进行积分后才是概率

累积分布函数(cumulative distribution function,CDF) 能完整描述一个实数随机变量X的概率分布是概率密度函数的积分。

290 对于所有实数x 与pdf相对线性回归的基本假设有哪些?(ABDE)
A.随机误差项是一个期望值为0的随机变量;
B.对於解释变量的所有观测值随机误差项有相同的方差;
C.随机误差项彼此相关;
D.解释变量是确定性变量不是随机变量,与随机误差项之间相互独立;
E.随机误差项服从正态分布处理类别型特征时事先不知道分类变量在测试集中的分布。要将 one-hot encoding(独热码)应用到类别型特征中那麼在训练集中将独热码应用到分类变量可能要面临的困难是什么?
A. 分类变量所有的类别没有全部出现在测试集中
B. 类别的频率分布在训练集囷测试集是不同的
C. 训练集和测试集通常会有一样的分布
答案为:A、B 如果类别在测试集中出现,但没有在训练集中出现独}

2017年度学员专访之七

1 简单介绍下你洎己哪年在哪毕业,现在哪上班具体做什么 我叫高熙,2009年在杭州电子科技大学硕士毕业后工作了8年,先后在医疗器械行业与互联网荇业从事算法相关的工作现在在北京一家金融公司做信用与反欺诈模型。


2 工作中遇到过什么困难或挑战后来怎么解决的 随着当前数据量的剧增,硬件资源也在不断的发展许多大数据的存储和处理工具也需要不断的学习。但是可以学习的间比较少对我来说也是一种困難和挑战,于是在老师的引导下,每天挤出两小时来学习包括地铁时间,这样虽然速度是慢一些但是终究还是学到了。

3 你所在公司需要什么样的人才 我们公司需要的人才:熟悉机器学习算法熟悉python,能够主动思考应变各种场景,解决问题能力强并且在工作中有相關项目经验者优先考虑。

4 参加集训营1期最大的心得、收获、感受是什么 参加机器学习集训营1期的最大收获和感受是:系统的学习了各种机器学习常用算法并且老师带着我们一起做项目,对工程应用有了更深入的理解

5 你觉得AI时代,应该如何学习AI未来职业规划是什么 我感覺AI时代,机器学习算法是关键的一个环节真正掌握了技能,并能应用才是真的强我的职业规划:在近2年内,踏踏实实把算法和硬件这塊搞精通然后分享给女儿。再利用1-2年的时间我们可以在AI时代做出一些有趣的智能产品。

}

我要回帖

更多关于 这个平台 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。