清华大学2o18领军复试|8新生λ学时间?几号到校

33213 条评论分享收藏感谢收起cogsci.ucsd.edu/~ajyu/Teaching/Cogs118A_wi10/Refs/basic_math.pdf赞同 73166 条评论分享收藏感谢收起&p&从生物学的角度,日本今天的超低生育率可能不是特例——几十年前,科学家已经在实验室中观察到老鼠种群的类似发展阶段。&/p&&p&&br&&/p&&p&John B. Calhoun是一位生态学家,他进行了一系列实验。这些实验的共同点在于:把几对老鼠置于笼子里,吃喝无限供应,但是空间有限。他通过对实验条件进行各种微调,观察老鼠种群数量的发展规律。&/p&&p&其中一个实验无可辩驳地证明:即使吃喝无限供应,当笼内老鼠密度达到一定程度,且笼子结构(影响老鼠之间的接触率——每只老鼠每分钟跟其他老鼠接触多少次)处于某一特定构型时,笼子里不管是有自己领地和配偶的强势老鼠,还是被挤到笼子最无人问津边缘的弱势老鼠,都会逐渐不再生育。——再重复一遍,所有社会阶层的老鼠都逐渐不再生育。&/p&&p&最终,实验结束时,整个种群只剩下几只老鼠还活着。这些老鼠最年轻的也相当于人类的70岁。——毫无疑问的种群灭绝。&/p&&p&关于这个实验的论文《Death Squared The Explosive Growth and Demise of a Mouse Population》&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-26b580515add877f77159_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1653& data-rawheight=&1110& class=&origin_image zh-lightbox-thumb& width=&1653& data-original=&https://pic1.zhimg.com/50/v2-26b580515add877f77159_r.jpg&&&/figure&&p&吃喝无限供应但空间固定的笼子。&/p&&p&&br&&/p&&p&又及:发表于1971年的论文集《BEHAVIOR AND ENVIRONMENT》,其中有一篇由John B. Calhoun撰写的综述论文《Space and the Strategy of Life》。里面除了以上的实验,还有很多其他版本的老鼠无限繁殖实验和对应结果。&/p&
从生物学的角度,日本今天的超低生育率可能不是特例——几十年前,科学家已经在实验室中观察到老鼠种群的类似发展阶段。 John B. Calhoun是一位生态学家,他进行了一系列实验。这些实验的共同点在于:把几对老鼠置于笼子里,吃喝无限供应,但是空间有限。他…
&p&我来答我来答!&/p&&p&&br&&/p&&p&我是康奈尔大学经济学博士,刚刚毕业,加入了亚马逊,成为了一名“经济学家”,在西雅图工作。&/p&&p&&br&&/p&&p&经济学家在亚马逊是一个比较新兴的岗位,大约从两三年前才开始设立,但是成长非常快。该岗位只招收经济学博士。去年有100多个经济学博士在亚马逊做经济学家,面试官说他们今年打算再招四十多个。这个数字对于北美的经济学job market已经是天文数字了,要知道美国大学一般一年也就招1-3个经济学博士。&/p&&p&无论从面试体验(面试刚通过,HR就迫不及待地催我们尽早入职,我一个接到offer的美国同学三月份就入职了),还是网站上还在进行的招聘(&a href=&//link.zhihu.com/?target=https%3A//www.amazon.jobs/en/job_categories/economics%3Fbase_query%3D%26loc_query%3D%26job_count%3D10%26result_limit%3D10%26sort%3Drelevant%26category%255B%255D%3Deconomics%26cache& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Economics&/a&)都能看出来这些职位还是远远没有被满足。来西雅图跟亚马逊的同事聊了一下,发现事实也的确如此。很多组对经济学家的需求都满足不了。&/p&&p&&br&&/p&&p&要想说清楚为什么亚马逊对经济学家有如此大的需求,先说说这个职位是什么吧。具体可以去&a href=&//link.zhihu.com/?target=http%3A//amazoneconomistjobs.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Economist-Amazon&/a&上看个究竟,这里只是我个人的理解。&/p&&p&传统公司,尤其是大家比较熟悉的投行的“经济学家”,大多是宏观经济学家,预测政策、解读政策;或者发表一些言论来增加公司的知名度。这样的经济学家一般公司需要的不多。亚马逊招的经济学家主要是微观经济学家,大概分三类:&/p&&ol&&li&Forecasting:预测各种需要预测的数据,从消费趋势到服务器使用量&/li&&li&Industrial Organization:使用各种定价模型、需求模型,来更好地估算消费和定价。&/li&&li&Program Evaluation & Causal Analysis:定量估算各种决定的因果影响。&/li&&/ol&&p&前两类挺好理解,要做的事情比较清楚,岗位需求也相对明确。但是第三类,我认为是经济学家在亚马逊,在互联网公司,甚至在传统行业,都可以发光发热的岗位,只是亚马逊最先发现了经济学家做这件事的价值。如果看网站上的招聘广告,大部分项目组,比如开书店的、做无人超市的,卖AWS的、卖Echo的,招都是这类经济学家。&/p&&p&那什么叫做“定量估算各种决定的因果影响”呢?举个例子,双十一究竟为阿里巴巴增加了多少销售额?如果只把双十一之前之后的销售额进行比较,得到的答案可能会有很多偏差。比如很多顾客因为知道双十一要来,延迟了之前的消费,导致结果被高估;也可能双十一本身就选在了一个消费旺季,导致结果被低估。而抛出所有内生的因素,找到双十一本身对销售额的影响,正是做Program Evaluation方向的经济学家的拿手好戏。经济学家如何处理类似问题的例子 &a class=&member_mention& href=&//www.zhihu.com/people/c9cee996cdef11fc& data-hash=&c9cee996cdef11fc& data-hovercard=&p$b$c9cee996cdef11fc&&@慧航&/a& &a class=&member_mention& href=&//www.zhihu.com/people/b09ea18dcf0c0& data-hash=&b09ea18dcf0c0& data-hovercard=&p$b$b09ea18dcf0c0&&@chenqin&/a& 都举过很多,如果感兴趣推荐阅读 &a href=&//link.zhihu.com/?target=http%3A//www.mostlyharmlesseconometrics.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mostly harmless Econometrics&/a& 不在这里一一赘述了。&/p&&p&&br&&/p&&p&其实我一直对商业运营很感兴趣。加入亚马逊之前,也在一家管理咨询,Boston Consulting Group做过summer consultant,并且拿到了全职consultant的offer。以我自己的观察,&b&商业决策困难之处&/b&,很多时候就是“&b&因果性&/b&”搞不清楚,以至于预期与结果南辕北辙;以及无法“&b&量化&/b&”影响,以至于公说公有理,婆说婆有理。经济学家在亚马逊,以我所见所闻,在这两方面是做出了切切实实的推进的。可以把亚马逊的经济学家比作一个有大数据支持的,公司内部的咨询顾问 -- 这不是我说的,是亚马逊的首席经济学家在AEA招聘会上对经济学博士们说的。&/p&&p&&br&&/p&&p&除了经济学家本职工作带来的价值,还有很多亚马逊同事提到了经济学家在亚马逊担当了桥梁的功能。软件工程师一般关心的是自己程序运行的效果,数据科学家一般关心的自己模型是否精准,但是亚马逊作为一个电商网站,还有很多&business people&,而这些人既不关心模型是否精准,也不关心代码是否优美,只关心客户、以及跟客户有关的数字。经济学家受到的教育,正好让我们略懂一些编程,略懂一些数学模型,略懂一些数据,但同时又促使我们去思考问题背后的&economic intuition&,于是&business people&,软件工程师,数据科学家,都觉得跟经济学家沟通比较能说到点子上。&/p&&p&&br&&/p&&p&总而言之,我相信经济学博士很适合去互联网公司,并且可以真切地帮助越来越多行业的公司进行更科学、更优化的商业决策。希望国内高校的经济学项目也可以多多培养经济系学生的计量能力和编程能力,前途无量!&/p&
我来答我来答! 我是康奈尔大学经济学博士,刚刚毕业,加入了亚马逊,成为了一名“经济学家”,在西雅图工作。 经济学家在亚马逊是一个比较新兴的岗位,大约从两三年前才开始设立,但是成长非常快。该岗位只招收经济学博士。去年有100多个经济学博士在亚马…
&p&开始正式的答题,学历尚浅,多有偏颇之处,还望指正&/p&&p&来源资料:PRML,cs231n,以及部分论文&/p&&p&其实我们在做线性回归也好,分类(逻辑斯蒂回归)也好,本质上来讲,就是把数据进行映射,要么映射到一个多个离散的标签上,或者是连续的空间里面,一般简单的数据而言,我们很好拟合,只要线性变化一下,然后学习出最好的W就可以了,但是对于一些比较复杂的数据怎么办呢?比如说,对于一个二分类问题,特别是高纬度复杂化之后,数据不一定是线性可分的,这个时候,我们的basis function隆重登场,我们可以把数据进行一定的映射,转变,非线性的线性的,转变之后,就可以进行分类,最明显的例子在andrew NG在讲SVM里面的例子就很好的说明了,但是这个时候问题来了,对于一个很复杂,高维度的数据,我们如何才能找到最好的basis function呢?这个时候,神经网络隆重登场,我们把我们的basis function打开来,我们把误差转递到basis function的里面,通过这样的方式,来得到最好的basis function,同理,我们可以无限打开basis function,一直打开,对应的也就是一层神经网络(具体出自于prml关于神经网络的章节最开始简介的部分),但是问题来了,对于图片怎么办?我们知道,对于图片而言,图片是一个二维度的数据,我们怎样才能通过学习图片正确的模式来对于一张图片有正确的对于图片分类呢?这个时候,有人就提出了一个观点,我们可以这样,对于所有的像素,全部都连接上一个权值,我们也分很多层,然后最后进行分类,这样也可以,但是对于一张图片来说,像素点太多,参数太多了。然后就有人提出来,我们只看一部分怎么样,就是对于一张图片来说,我们只看一个小窗口就可以了,对于其他的地方,我们也提供类似的小窗口,我们知道,当我们对图片进行卷积的时候,我们可以对图片进行很多操作,比如说图片整体模糊,或者是边缘的提取,卷积操作对于图片来说可以很好的提取到特征,而且通过BP误差的传播,我们可以根据不同任务,得到对于这个任务最好的一个参数,学习出相对于这个任务的最好的卷积核,之所以权值共享的逻辑是:如果说一个卷积核在图片的一小块儿区域可以得到很好的特征,那么在其他的地方,也可以得到很好的特征。&/p&&p&这就有了alex net的提出,通过对图片进行五层(不知道有没有记忆错误)的卷积,然后后面三层的全连接,我们可以得到一个很好的结果,特别的相对于更大的数据集而言,最好参数越多越好,也就是网络最好更加深,更加的宽。&/p&&p&但是神经网络到底是什么?对于一批数据我们有很多的问题,为什么设置五层最好,batchsize多少比较好,每一层多少个卷积核(这个到现在我依旧没有一个更好的解释,每一个应该多少卷积核),宽度多少?要不要LRN?每一层都代表了什么?&/p&&p&这些的解释,就要好好看看2014还是15年CVPR的文章Visualizing and Understanding Convolutional Networks
这篇文章写的很棒,而且2015 CVPR出了很多对于卷积神经网络理解的文章,这篇文章提出了一个反卷积的方法(De-convolution)的方法,这样我们就可以好好看看每一层卷积神经网络到底做了什么事情:&/p&&p&首先第一层的返卷积(上面是反卷积的图片,下面对于第一层来说,激活值最大的图片):&/p&&figure&&img src=&https://pic2.zhimg.com/50/d68ddd3a0fd47ec44e7fefa0_b.jpg& data-rawwidth=&403& data-rawheight=&552& class=&content_image& width=&403&&&/figure&&p&我们看到,第一个卷积层只是表达了简单的图片的边缘而已,我们来看第二层:&/p&&figure&&img src=&https://pic3.zhimg.com/50/cc9bc86d15db9f_b.jpg& data-rawwidth=&1147& data-rawheight=&562& class=&origin_image zh-lightbox-thumb& width=&1147& data-original=&https://pic3.zhimg.com/50/cc9bc86d15db9f_r.jpg&&&/figure&&p&第二层稍稍复杂了一点点,可以包含的不仅仅是一个边缘,可以是几个边缘的组合&/p&&p&第三层:&/p&&figure&&img src=&https://pic1.zhimg.com/50/6faebaea04a11_b.jpg& data-rawwidth=&1472& data-rawheight=&549& class=&origin_image zh-lightbox-thumb& width=&1472& data-original=&https://pic1.zhimg.com/50/6faebaea04a11_r.jpg&&&/figure&&p&第四层:&/p&&figure&&img src=&https://pic1.zhimg.com/50/f9c5fe43099bde52bde10f_b.jpg& data-rawwidth=&666& data-rawheight=&833& class=&origin_image zh-lightbox-thumb& width=&666& data-original=&https://pic1.zhimg.com/50/f9c5fe43099bde52bde10f_r.jpg&&&/figure&&p&第五层:&/p&&figure&&img src=&https://pic2.zhimg.com/50/b07e0c14ecf740ca47a3c728_b.jpg& data-rawwidth=&667& data-rawheight=&823& class=&origin_image zh-lightbox-thumb& width=&667& data-original=&https://pic2.zhimg.com/50/b07e0c14ecf740ca47a3c728_r.jpg&&&/figure&&p&我们看到,每一层都是对于一张图片从最基础的边缘,不断到最复杂的图片自己本身。&/p&&p&同时在进行反卷积的时候M.D. Zeiler and R. Fergus也发现,对于第一层的alexnet,会得到频度很高的像素(也就是颜色很深),所以他们也提出了应该要减小窗口,这样可以得到频度比较适中的像素:&/p&&figure&&img src=&https://pic2.zhimg.com/50/1f0c506afdf7cc2d20408_b.jpg& data-rawwidth=&561& data-rawheight=&232& class=&origin_image zh-lightbox-thumb& width=&561& data-original=&https://pic2.zhimg.com/50/1f0c506afdf7cc2d20408_r.jpg&&&/figure&&p&当图片卷积完之后,会把一个图片对于这一类本身最独特的部分凸显出来,然后来进行判断,这一类到底是什么?有下面的实验截图:&/p&&figure&&img src=&https://pic3.zhimg.com/50/4ef49fb833cc7a43ed1ae_b.jpg& data-rawwidth=&1448& data-rawheight=&262& class=&origin_image zh-lightbox-thumb& width=&1448& data-original=&https://pic3.zhimg.com/50/4ef49fb833cc7a43ed1ae_r.jpg&&&/figure&&p&最左边的图像是原图像,作者盖住不同的区域,来分析对于一张图片,经过五次卷积之后,到底是如何判断的,我们看到卷积到最后(左三),比较凸显出来的是狗的头部,左二和右二的意思是,当我们遮住不同的区域,判断是狗的几率,红色区域代表概率很高,蓝色区域代表概率很低,我们发现,当我们遮挡住狗的头的地方的时候,我们得到这个物体时狗的概率最低,这个侧面证明了,&b&所谓卷积神经网络,就是会自动的对于一张图片学习出最好的卷积核以及这些卷积核的组合方式,也就是对于一张图片的任务来说,求出最好的图片对于本任务的特征的表达,然后来进行判断&/b&&/p&&p&还有一篇文章也助于理解,&/p&&p&UnderstandingDeepImageRepresentationsbyInvertingThem&/p&&p&这篇对于卷积每一层都不断的还原到最原始的图片:&/p&&figure&&img src=&https://pic3.zhimg.com/50/c7cb7d07df1c_b.jpg& data-rawwidth=&1759& data-rawheight=&366& class=&origin_image zh-lightbox-thumb& width=&1759& data-original=&https://pic3.zhimg.com/50/c7cb7d07df1c_r.jpg&&&/figure&&p&越是到后面,图片越模糊,但是它自己独特的部分,却凸显了出来。(也就是这个猩猩还是狒狒的头的部分)&/p&&p&还望指正,多谢&/p&&p&反正我写的也没什么人看,随意干啥都行,标明作者就好了。&/p&&p&&br&&/p&&p&最后打一个小广告,有兴趣报考人工智能/CS硕士的童鞋,可以看看我的live&/p&&p&&a href=&https://www.zhihu.com/lives/907072& class=&internal&&一百天,从二本到厦大 985&/a&&/p&
开始正式的答题,学历尚浅,多有偏颇之处,还望指正来源资料:PRML,cs231n,以及部分论文其实我们在做线性回归也好,分类(逻辑斯蒂回归)也好,本质上来讲,就是把数据进行映射,要么映射到一个多个离散的标签上,或者是连续的空间里面,一般简单的数据而…
&figure&&img src=&https://pic3.zhimg.com/v2-e9aa6e67a2b754b8480810_b.jpg& data-rawwidth=&768& data-rawheight=&576& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&https://pic3.zhimg.com/v2-e9aa6e67a2b754b8480810_r.jpg&&&/figure&计算机视觉中目标检测、跟踪、识别是最基本的几个task,尤其又以检测最为重要和基础。同时基本上所有的检测任务都需要在给出物体的bounding box之后,给出物体的类别(也就是给识别物体),所以文章中不区分检测和识别任务。笔者从事计算机视觉中目标检测相关的工作还比较多,将自己看到的,学到的,以及相关的一些理解总结如下。帮助自己进行梳理,也希望对后来者有帮助。大致将目前学术及和工业界出现的目标检测算法分成3类:&p&1. 传统的目标检测算法:Cascade + Harr / SVM + HOG / DPM 以及上述的诸多改进、优化;&/p&&p&2. 候选窗+深度学习分类:通过提取候选区域,并对相应区域进行以深度学习方法为主的分类的方案,如:RCNN / Fast-RCNN / Faster-RCNN / SPP-net / R-FCN 等系列方法;&/p&&p&3. 基于深度学习的回归方法:YOLO / SSD / DenseBox 等方法;以及最近出现的结合RNN算法的RRC detection;结合DPM的Deformable CNN等&/p&&p&对于检测的目标,早期工业界关注的主要是人脸,人,车这些对监控、交通等领域非常重要的目标,到现在为止,计算机需要更全面的理解场景,检测的类别扩展到了生活的方方面面。&/p&&p&文章会针对上述的方法进行简单的介绍,以及表达一些笔者认为这种演进趋势背后的原因。总结起来,实际上所有的方法都可以概括成:&b&候选窗口 + 分类or回归&/b&;逻辑上滑窗也是提取候选窗口的一种方式。&/p&&p&基于深度学习的方案的计算效率和进度大致对比如下:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-19ed383f4dcf9a_b.jpg& data-rawwidth=&1356& data-rawheight=&518& class=&origin_image zh-lightbox-thumb& width=&1356& data-original=&https://pic2.zhimg.com/v2-19ed383f4dcf9a_r.jpg&&&/figure&&p&&i&注:以上数据摘自论文&/i&&/p&&p&下面对上面的3类目标检测的算法进行说明:&/p&&p&&b&传统的目标检测算法:&/b&&/p&&p&传统的做目标检测的算法基本流程如下:&/p&&p&1. 使用不同尺度的滑动窗口选定图像的某一区域为候选区域;&/p&&p&2. 从对应的候选区域提取如Harr HOG LBP LTP等一类或者多类特征;&/p&&p&3. 使用Adaboost SVM 等分类算法对对应的候选区域进行分类,判断是否属于待检测的目标。&/p&&p&2001年viola的cascade+harr进行人脸检测的方案取得了很好的正面人脸的检测效果;其实这之前通过普通的颜色特征,形状特征也可以处理一些基本的目标检测问题,并且这类方法至今在工业检测的场景仍然在使用;下面我们对viola的cascade+harr人脸检测的方案进行详细的介绍,并为后续的方法埋下伏笔。&/p&&p&假设我们现在已经获取了一个图像区域,我们要判断这个区域是不是人脸,应该怎么做呢?那我们首先从这个区域提取特征,然后将特征送给分类器进行分类。特征呢?在viola的方案中主要使用的是harr特征,描述两个图像block之间的明暗对比;而分类器呢,最好是又快又好,viola提出的方法是Adaboost,通过弱分类器的组合和级联完成分类任务;假如一个640*480大小的图片,滑窗时每次移动3个像素的话,总体上也有10w量级的滑窗,再加上由于目标尺寸的变化,需要对图片进行缩放或者扩大,总体滑窗的数量又会上升,因此对分类器的效率要求非常高。所以级联的cascade方法很好的解决了这个问题,在初期使用很少的计算量过滤掉大部分的候选窗口,对于越难进行分类的样本就计算更多的特征来进行判断,直到所有的候选窗口的分类完毕。后续会针对检测的结果进行重叠窗口以及不同尺度图像上窗口的融合。&/p&&p&viola最早提出来的harr特征主要是水平方向和竖直方向,后续又出现了非常多的变化;adaboost方法在后续也出现了非常多的变种,这里将harr特征的变化以及adaboost的变种进行一个罗列:&/p&&p&&figure&&img src=&https://pic1.zhimg.com/v2-e1cab416abf8e5bbaa9f5eb894a73315_b.jpg& data-rawwidth=&1542& data-rawheight=&1020& class=&origin_image zh-lightbox-thumb& width=&1542& data-original=&https://pic1.zhimg.com/v2-e1cab416abf8e5bbaa9f5eb894a73315_r.jpg&&&/figure&基本上可以看到,以上harr的变种都是改变明暗对比的计算方法。还有一些改进:如将harr特征进行组合的joint harr feature,如利用pixel明暗对比进行组合的joint pixel harr feature;基本逻辑就是获得更为全面的特征描述能力,以及提高计算速度。&/p&&p&这对adaboost也有非常多的改进,以及training方法的改进也很多,这里对adaboost的改进进行罗列,感兴趣的朋友可以查看:&/p&&p&vector boosting&/p&&p&output code to boost multiclass learning&/p&&p&multiple instance boosting(MIL等)&/p&&p&multi-class boosting&/p&&p&floatboost learning&/p&&p&multi-class adaboost&/p&&p&textonboost&/p&&p&等等&/p&&p&改进非常多,不过基本逻辑依旧是提升模型的表达能力;traning的改进在此不做罗列,总结起来基本上是:难分负样本的处理,trainning效率等。&/p&&br&&p&使用SVM+HOG的方法进行行人检测方法和上述方案基本一致,不过针对行人检测的场景,harr通过区域的明暗对比计算的特征显然不能够太好的描述;而HOG特征本身含有一定的位置特性,正好可以描述人体如头部,四肢等不同的部位。方法的流程如下:&/p&&p&&figure&&img src=&https://pic4.zhimg.com/v2-ecc8bdd44bcab0cd5dc6d7a_b.jpg& data-rawwidth=&1358& data-rawheight=&254& class=&origin_image zh-lightbox-thumb& width=&1358& data-original=&https://pic4.zhimg.com/v2-ecc8bdd44bcab0cd5dc6d7a_r.jpg&&&/figure&HOG特征能够很好的描述人体的轮廓特性,大致可以有个直观的感受参考这个图:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-1bfd7d4e4cd38195bbc68bc1_b.jpg& data-rawwidth=&1328& data-rawheight=&538& class=&origin_image zh-lightbox-thumb& width=&1328& data-original=&https://pic3.zhimg.com/v2-1bfd7d4e4cd38195bbc68bc1_r.jpg&&&/figure&&p&但上面的方案有个问题,实际上人的正面和侧面从视觉轮廓上来看,差异非常大;比如车辆也一样,从正面看,主要是挡风玻璃和前脸部分,从侧面看则是车门和轮廓部分;所以出现了后来非常出名的dpm算法。dpm算法的思想如下:&/p&&p&1. 物体都是由不同的part组成的,由于各种variations导致物体整体的视觉效果不一样,但是有些part的变化实际上不大,因此可以训练针对不同part的检测模块;&/p&&p&2. 一个物体,不同的part之间实际上是存在天然的拓扑结构的关系,比如人体头大部分情况都位于躯干的上面,车大部分情况轮子的部分都在地面上等等。也就是说这些不同的part之间的距离和位置关系符合一个标准的分布,某种位置关系非常多,而有些位置关系存在但很少,有些则根本不存在;&/p&&p&3. 有了各个部件,有了位置关系,就可以将不同的位置关系对目标物体的贡献看待成一个权重,最后由权重求和得到是否是需要检测的目标。&/p&&p&整体流程参考:&/p&&p&&figure&&img src=&https://pic3.zhimg.com/v2-ac2b7fdafe4_b.jpg& data-rawwidth=&1998& data-rawheight=&1358& class=&origin_image zh-lightbox-thumb& width=&1998& data-original=&https://pic3.zhimg.com/v2-ac2b7fdafe4_r.jpg&&&/figure&root filter 和 n个part filter进行最终的加权,得到检测目标。&/p&&p&dpm算法本身的进步roadmap可以参考这个:&/p&&p&&figure&&img src=&https://pic4.zhimg.com/v2-ae63f2642eaaed77c5ea4fd_b.jpg& data-rawwidth=&1758& data-rawheight=&1116& class=&origin_image zh-lightbox-thumb& width=&1758& data-original=&https://pic4.zhimg.com/v2-ae63f2642eaaed77c5ea4fd_r.jpg&&&/figure&传统的目标检测方法介绍到这里,而实际上后续的基于深度学习的目标检测方案多多少少参考了前面的工作,以及在深度学习目标检测的框架中也在结合以上方法中的思想,后面一一介绍。&/p&&br&&br&&p&&b&候选窗+深度学习分类的目标检测方案:&/b&&/p&&p&滑窗有一个问题,就是产生的候选窗口数量巨大,所以有各种region proposal的方案出来,最根本的需求就是在减少可能窗口的miss的情况下找到更少的候选窗口;从这个角度讲,金字塔+滑动窗口的方案实际上是一个100%召回的方案。&/p&&p&使用深度学习方法进行分类能够更好的提取特征,以及模型能够具备更强大的描述能力;所以基本上对深度学习的使用也慢慢的从当成特征提取进步到特征提取与分类、回归等问题结合起来的end-to-end的方式。&/p&&p&先介绍rgbd大神的系列工作rcnn -& fast rcnn -& faster rcnn;以上工作非常有连续性,建议读者读原论文研读。这个链接有一些说明:&/p&&a href=&https://link.zhihu.com/?target=http%3A//closure11.com/rcnn-fast-rcnn-faster-rcnn%25E7%259A%%25B8%%25BA%259B%25E4%25BA%258B/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&RCNN, Fast-RCNN, Faster-RCNN的一些事&/a&&br&&p&rcnn目标检测的基本流程如下:&/p&&p&&figure&&img src=&https://pic3.zhimg.com/v2-9c33eb6eafe5bbd97eab_b.jpg& data-rawwidth=&856& data-rawheight=&590& class=&origin_image zh-lightbox-thumb& width=&856& data-original=&https://pic3.zhimg.com/v2-9c33eb6eafe5bbd97eab_r.jpg&&&/figure&通过selective search的方式从图片中提取可能的目标的候选窗口,将窗口warp到同一个尺寸,通过卷积网络从warp之后的候选窗口提取特征,将特征送给分类器进行分类,最后在加上bounding box regression等操作得到更准确的目标位置。&/p&&p&以上方案有几个问题:1. selective search方式提取候选窗口非常耗时,同时会miss掉一些窗口;2. 从warp之后的候选窗口提取dnn特征的时候,重叠部分的卷积操作重复计算了;3. 提取特征之后再丢给SVM进行分类,逻辑上每一步都是分开训练,不利于全局最优。&/p&&p&rgbd大神在fast rcnn中提出了ROI pooling层来解决重复的卷积计算的问题,框架如下:&/p&&p&&figure&&img src=&https://pic1.zhimg.com/v2-37eea5f2f_b.jpg& data-rawwidth=&844& data-rawheight=&462& class=&origin_image zh-lightbox-thumb& width=&844& data-original=&https://pic1.zhimg.com/v2-37eea5f2f_r.jpg&&&/figure&ROI pooling层逻辑上可以理解成,对于一个任意尺寸的box,都可以通过将这个box分成4*4,8*8等同样数量的网格,然后每个网格通过max, mean等操作计算相应的特征,就可以将不同尺寸的box转化成相同维度的特征。&/p&&p&还不够,是否可以简化掉最费时的selective search 提取候选窗口呢?显然可以。rgbd大神在faster rcnn中引入region proposal network替代selective search,同时引入anchor box应对目标形状的变化问题。&/p&&p&&figure&&img src=&https://pic3.zhimg.com/v2-fb28dca6c94b76eef8f506_b.jpg& data-rawwidth=&1340& data-rawheight=&504& class=&origin_image zh-lightbox-thumb& width=&1340& data-original=&https://pic3.zhimg.com/v2-fb28dca6c94b76eef8f506_r.jpg&&&/figure&在结合end-to-end的training,faster rcnn基本做到的实时。&/p&&p&SPP-net的主要思想是去掉原始图像上的crop/warp操作,通过在卷积特征层上的空间金字塔池化来达成;二者的差异可以参考这个图:&/p&&p&&figure&&img src=&https://pic1.zhimg.com/v2-c8e43bfd881f16ce5923d_b.jpg& data-rawwidth=&772& data-rawheight=&388& class=&origin_image zh-lightbox-thumb& width=&772& data-original=&https://pic1.zhimg.com/v2-c8e43bfd881f16ce5923d_r.jpg&&&/figure&Spatial pyramid pooling的示意图如下,是一个非常重要的将尺寸不一致的图像pooling到相同的特征纬度的方法:&/p&&p&&figure&&img src=&https://pic2.zhimg.com/v2-53da4cc56f611a2194dea_b.jpg& data-rawwidth=&772& data-rawheight=&554& class=&origin_image zh-lightbox-thumb& width=&772& data-original=&https://pic2.zhimg.com/v2-53da4cc56f611a2194dea_r.jpg&&&/figure&R-FCN方案也使用region proposal network提取候选窗口,同时使用和RPN同享的特征进行分类和回归,流程如下,请读者参考论文详情:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-dceeb1ae7cb_b.jpg& data-rawwidth=&1092& data-rawheight=&540& class=&origin_image zh-lightbox-thumb& width=&1092& data-original=&https://pic2.zhimg.com/v2-dceeb1ae7cb_r.jpg&&&/figure&&p&以上方案可以看到明显的进步,并且每一个进步都有重要的背后的逻辑。几个值得关注的点重申如下:&/p&&p&ROI pooling 操作&/p&&p&Anchor box机制&/p&&p&RPN特征共享&/p&&p&卷积层的空间金字塔&/p&&p&等等&/p&&br&&br&&p&&b&基于深度学习end-to-end的回归方法用于目标检测:&/b&&/p&&p&YOLO可以认为是这类方法的开篇之作,速度很快,详细介绍如下。有人说yolo的方案去除了候选窗口或者滑窗的思想,但实际上并没有,只是yolo使用对输出的图像进行网格划分来提取候选窗口而已。&/p&&p&&figure&&img src=&https://pic2.zhimg.com/v2-abb20d7d9da77b39a9ed43cfc3c747eb_b.jpg& data-rawwidth=&852& data-rawheight=&616& class=&origin_image zh-lightbox-thumb& width=&852& data-original=&https://pic2.zhimg.com/v2-abb20d7d9da77b39a9ed43cfc3c747eb_r.jpg&&&/figure&YOLO方案的输入是比如448*448的图片,输入是一个7*7的网格,每个网格的信息包含:1. 存在某个类别的物体的概率,比如有20类目标需要检测,那就是20类+1类(backgroud);2. 对应物体的bounding box参数,使用4个数字描述;3. 对应目标的概率。&/p&&p&这个问题就被format成一个回归问题,448*448*3作为输入;7*7*(b*5+c)作为回归的参数,然后进行end-to-end的学习。&/p&&br&&p&显然,YOLO的方案有几个问题:1. 针对小目标的检测效果会不太好,因为7*7的网格的划分可能太粗糙了;2. 经过多层卷积和pooling的操作,图像的边缘特征可能丢失较多了,而回归bounding box参数的只使用了高层的卷积层特征,会导致bounding box不准确;3. 当两个目标同时落入7*7的某一个网格中的时候,对应位置只能检测到一个物体。&/p&&p&SSD方案则是faster rcnn和yolo的结合,使用了yolo end-to-end训练的思想,同时有结合了anchor box,不同层的卷积特征的组合等方案。SSD的整体流程如下:&/p&&p&&figure&&img src=&https://pic1.zhimg.com/v2-7beadce0d14160aaa47deb_b.jpg& data-rawwidth=&954& data-rawheight=&644& class=&origin_image zh-lightbox-thumb& width=&954& data-original=&https://pic1.zhimg.com/v2-7beadce0d14160aaa47deb_r.jpg&&&/figure&SSD网络和YOLO网络的差异如下:&/p&&p&&figure&&img src=&https://pic2.zhimg.com/v2-dfb8d7b12e907eae8ec24e67fe9a8440_b.jpg& data-rawwidth=&952& data-rawheight=&610& class=&origin_image zh-lightbox-thumb& width=&952& data-original=&https://pic2.zhimg.com/v2-dfb8d7b12e907eae8ec24e67fe9a8440_r.jpg&&&/figure&anchor机制的引入,以及多个卷积层特征的组合能够帮助SSD获得更为准确的对目标bounding box的估计。&/p&&p&KITTI上top 20的目标检测方案及精度大致如下:&/p&&p&&figure&&img src=&https://pic3.zhimg.com/v2-a70bf27df20c02c1f17f9da_b.jpg& data-rawwidth=&1896& data-rawheight=&1360& class=&origin_image zh-lightbox-thumb& width=&1896& data-original=&https://pic3.zhimg.com/v2-a70bf27df20c02c1f17f9da_r.jpg&&&/figure&对排名第7的RRC 方案做一个描述,之所以介绍这个方法,是因为他在hard上的得分超过了其他方案非常多,并且在moderate easy上的结果也和最好的结果差异不大,而笔者也认为这个方案背后的思想值得学习。&/p&&p&RRC实际上是把RNN的一些思想融入到了目标检测当中:&/p&&p&&figure&&img src=&https://pic2.zhimg.com/v2-c7692db9fcb6fb9f473f_b.jpg& data-rawwidth=&1370& data-rawheight=&808& class=&origin_image zh-lightbox-thumb& width=&1370& data-original=&https://pic2.zhimg.com/v2-c7692db9fcb6fb9f473f_r.jpg&&&/figure&网络结构比较复杂,做如下几个说明:&/p&&p&1. 我们在做bounding box回归的时候,一定是需要一些有用的底层的边缘信息的,但并不是所有的底层信息都有用,那这些信息可以通过一定的方式传递的后面的决策层;&/p&&p&2. 利用当前层进行预测的时候,实际上和他的上一层和下一层的信息是有关的。&/p&&p&详细请参考RRC detection论文。&/p&&p&Deformable CNN方法:是一种把DPM和CNN结合起来的思想。我们一起思考一下,卷积核一般情况下都是一个固定的尺寸或者是性状,比如3*3,5*5;但实际上在我们进行目标检测的时候,我们的目标的性状是千差万别的。比如人的手掌,实际上就是一个长方形或者有一定弧形的区域。那么如果我们可以通过某种方式将卷积核变成或者说是训练成可能的目标的部件的性状,那么他计算出来的特征就越合理。&/p&&p&所以我们是否可以在学习卷积核的时候,也引入一些可学习的卷积核的形状参数呢?答案是肯定的,这个就是deformable cnn卷积:&/p&&p&&figure&&img src=&https://pic3.zhimg.com/v2-b98edd09b5bd1ed0f0d4d_b.jpg& data-rawwidth=&1588& data-rawheight=&574& class=&origin_image zh-lightbox-thumb& width=&1588& data-original=&https://pic3.zhimg.com/v2-b98edd09b5bd1ed0f0d4d_r.jpg&&&/figure&通过对卷积核引入offsets来实现。&/p&&p&通过一个直观的感受来看看学习到的deformable cnn核是什么样子?&/p&&p&&figure&&img src=&https://pic1.zhimg.com/v2-dc883ac43425_b.jpg& data-rawwidth=&984& data-rawheight=&840& class=&origin_image zh-lightbox-thumb& width=&984& data-original=&https://pic1.zhimg.com/v2-dc883ac43425_r.jpg&&&/figure&可以看到,学习到的deformable cnn核会遵循目标的轮廓进行分布;我们可以想见,或许学习到的对人脸特别敏感的核应该是一个椭圆形的等等。&/p&&p&感受一些deformable cnn的效果:&/p&&p&&figure&&img src=&https://pic3.zhimg.com/v2-27f1a3aa0eb1a1f33eb406_b.jpg& data-rawwidth=&1552& data-rawheight=&416& class=&origin_image zh-lightbox-thumb& width=&1552& data-original=&https://pic3.zhimg.com/v2-27f1a3aa0eb1a1f33eb406_r.jpg&&&/figure&逻辑上:deformable cnn的效果可以通过多个标准的卷积核组合得到,就相当于椭圆可以通过很多个矩形来近似一样;这种组合似乎有一些inception v3 v4里面的组合的味道;不过我个人认为这种人造的组合可能上限会比通过参数学习的组合低,笔者认为deformable cnn的方案还是非常值得期待的。&/p&&br&&br&&p&&b&总结、可能:&/b&&/p&&p&基本上对于过去和现在的方法总结得差不多了,似乎该展望未来。不过笔者对于未来的判断一般都没有准确过,所以不敢使用未来这个字眼。但是对于目标检测的一些思考和可能也有一些自己的判断。&/p&&p&基于深度学习方法的几个可能的方向:&/p&&p&1. 想办法从原始图像、低层的feature map层,以及高层的语义层获取更多的信息,从而得到对目标bounding box的更准确的估计;&/p&&p&2. 对bounding box的估计可以结合图片的一些coarse-to-fine的分割信息;&/p&&p&3. bounding box的估计可能需要更多的局部的content的信息,需要想办法引入;&/p&&p&4. 目标检测数据集的标注难度非常大,如何把其他如classfication领域学习到的知识用于检测当中,甚至是将classification的数据和检测数据集做co-training(如YOLO9000)的方式,至少可以从数据层面获得更多的信息;&/p&&p&5. 更好的启发式的学习方式,人在识别物体的时候,第一次可能只是知道这是一个单独的物体,也知道bounding box,但是不知道类别;当人类通过其他渠道学习到类别的时候,下一次就能够识别了;目标检测也是如此,我们不可能标注所有的物体的类别,但是如何将这种快速学习的机制引入,也是一个问题;&/p&&p&6. RRC,deformable cnn中卷积和其他的很好的图片的操作、机器学习的思想的结合未来也有很大的空间;&/p&&p&7. 语意信息和分割的结合,可能能够为目标检测提供更多的有用的信息;&/p&&p&8. 场景信息也会为目标检测提供更多信息;比如天空不会出现汽车等等。&/p&&br&&p&笔者自己一直喜欢非常简单的框架,比如cascade+harr,比如yolo;这种简单的框架对工程上的实现以及后续的优化提供了最多的可能性;也信奉一个道理,在工业界应该是&b&simple is beautiful&/b&&/p&&p&到这里基本上已经写完了,检测和识别这些基本的task的进步才能够让计算机更好的理解世界,共勉!&/p&
计算机视觉中目标检测、跟踪、识别是最基本的几个task,尤其又以检测最为重要和基础。同时基本上所有的检测任务都需要在给出物体的bounding box之后,给出物体的类别(也就是给识别物体),所以文章中不区分检测和识别任务。笔者从事计算机视觉中目标检测相…
&p&资历不深,入坑一年的我仅从个人角度谈谈理解,希望能抛砖引玉。&/p&&p&GAN对于人工智能的意义,可以从它名字的三部分说起:&b&G&/b&enerative &b&A&/b&dversarial &b&N&/b&etworks。为了方便讲述,也缅怀过去两周在某论坛上水掉的时间,我先从Networks讲起。&/p&&p&&b&Networks:(深度)神经网络&/b&&/p&&p&自从12年AlexNet横空出世后,神经网络俨然已成为现在learning的主流。比起贝叶斯学派的强先验假设(priori),SVM在核函数(kernel)上的反复钻研,神经网络不需要科研者过多关注细节,只需要提供好海量的数据和设置好超参数,便能达到不错的效果。用武侠小说的方式来说,便是各大门派高手潜心十余载修炼一阳指/九阴真经/麒麟臂等神功,比试时却发现有一无名小卒内力浩瀚如海,出手虽毫无章法可言,但在内功的加持下,轻松打得众人抬不起头。&/p&&p&Deep系列的算法不仅在众多benchmark上霸据榜首,其衍生应用也给人工智能带来了一股新的浪潮,例如创作艺术品(Gatys 的 Neural Alorightm for Artistic Style),AlphaGo(CNN估值 + 蒙特卡洛剪枝),高质量的机器翻译(Attention + seq2seq)等等。这些衍生应用在部分任务上,已经能媲美人类中的专家,让人不禁浮想强人工智能(strong AI)的到来。&u&然而&/u&,纵使深度网络(Deep Neural Networks)再强大,它也有自己的局限,生成模型上的不尽人意便是其中之一。&/p&&p&&b&Generative(Model):生成模型&/b&&/p&&p&机器学习的模型可大体分为两类,生成模型(Generative Model)和判别模型(Discriminative Model)。判别模型需要输入变量&img src=&//www.zhihu.com/equation?tex=x& alt=&x& eeimg=&1&& ,通过某种模型来预测&img src=&//www.zhihu.com/equation?tex=p%28y%7Cx%29& alt=&p(y|x)& eeimg=&1&& 。生成模型是给定某种隐含信息,来随机产生观测数据。举个简单的例子,&/p&&ul&&li&判别模型:给定一张图,判断这张图里的动物是猫还是狗&/li&&li&生成模型:给一系列猫的图片,生成一张新的猫咪(不在数据集里)&/li&&/ul&&p&众所周知的imagenet-1000图像分类,自动驾驶的图片语义分割,人体骨架点的预测都属于判别模型,即给定输入预测某种特征。实际上12~14年的大部分工作都属于判别模型,为什么呢,原因之一便是判别模型的损失函数(loss)方便定义。&/p&&p&回到根源,什么是机器学习?一句话来概括就是,在&b&训练&/b&过程中给予&b&回馈&/b&,使得&b&结果接近&/b&我们的&b&期望&/b&。对于分类问题(classification),我们希望loss在接近bound以后,就不要再有变化,所以我们选择交叉熵(Cross Entropy)作为回馈;在回归问题(regression)中,我们则希望loss只有在两者一摸一样时才保持不变,所以选择点之间的欧式距离(MSE)作为回馈。损失函数(回馈)的选择,会明显影响到训练结果的质量,是设计模型的重中之重。这五年来,神经网络的变种已有不下几百种,但损失函数却寥寥无几。例如caffe的官方文档中,只提供了八种标准损失函数 &a href=&//link.zhihu.com/?target=http%3A//caffe.berkeleyvision.org/tutorial/layers.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Caffe | Layer Catalogue&/a&。&/p&&p&对于判别模型,损失函数是容易定义的,因为输出的目标相对简单。但对于生成模型,损失函数的定义就不是那么容易。例如对于NLP方面的生成语句,虽然有BLEU这一优秀的衡量指标,但由于难以求导,以至于无法放进模型训练;对于生成猫咪图片的任务,如果简单地将损失函数定义为“和已有图片的欧式距离”,那么结果将是数据库里图片的诡异混合,效果惨不忍睹。当我们希望神经网络画一只猫的时候,显然是希望这张图有一个动物的轮廓、带质感的毛发、和一个霸气的眼神,而不是冷冰冰的欧式距离最优解。如何将我们对于猫的期望放到模型中训练呢?这就是GAN的Adversarial部分解决的问题。&/p&&p&&b&Adversarial:对抗(互怼 )&/b&&/p&&p&在generative部分提到了,我们对于猫(生成结果)的期望,往往是一个暧昧不清,难以数学公理化定义的范式。但等一下,说到处理暧昧不清、难以公理化的问题,之前提到的判别任务不也是吗?比如图像分类,一堆RGB像素点和最后N类别的概率分布模型,显然是无法从传统数学角度定义的。那为何,&u&不把生成模型的回馈部分,交给判别模型呢&/u&?这就是Goodfellow天才般的创意--他将机器学习中的两大类模型,&u&&b&G&/b&enerative和&b&D&/b&iscrimitive给紧密地联合在了一起&/u&。&/p&&p&模型一览&/p&&br&&figure&&img src=&https://pic3.zhimg.com/50/v2-5dfe9e846a1ad37160dfdad80f0b784c_b.jpg& data-rawwidth=&384& data-rawheight=&453& class=&content_image& width=&384&&&/figure&&br&&p&对抗生成网络主要由生成部分G,和判别部分D组成。训练过程描述如下&/p&&ol&&li&输入噪声(隐藏变量)&img src=&//www.zhihu.com/equation?tex=z& alt=&z& eeimg=&1&&&/li&&li&通过生成部分&img src=&//www.zhihu.com/equation?tex=G& alt=&G& eeimg=&1&& 得到&img src=&//www.zhihu.com/equation?tex=x_%7Bfake%7D%3DG%28z%29& alt=&x_{fake}=G(z)& eeimg=&1&&&/li&&li&从真实数据集中取一部分真实数据&img src=&//www.zhihu.com/equation?tex=x_%7Breal%7D& alt=&x_{real}& eeimg=&1&&&/li&&li&将两者混合&img src=&//www.zhihu.com/equation?tex=x%3Dx_%7Bfake%7D+%2B+x_%7Breal%7D& alt=&x=x_{fake} + x_{real}& eeimg=&1&&&/li&&li&将数据喂入判别部分&img src=&//www.zhihu.com/equation?tex=D& alt=&D& eeimg=&1&& ,给定标签&img src=&//www.zhihu.com/equation?tex=x_%7Bfake%7D%3D0& alt=&x_{fake}=0& eeimg=&1&&,&img src=&//www.zhihu.com/equation?tex=x_%7Breal%7D%3D1& alt=&x_{real}=1& eeimg=&1&& (简单的二类分类器)&/li&&li&按照分类结果,回传loss&/li&&/ol&&p&在整个过程中,&img src=&//www.zhihu.com/equation?tex=D& alt=&D& eeimg=&1&& 要尽可能的使&img src=&//www.zhihu.com/equation?tex=D%28G%28z%29%29%3D0& alt=&D(G(z))=0& eeimg=&1&&,&img src=&//www.zhihu.com/equation?tex=D%28x_%7Breal%7D%29%3D1& alt=&D(x_{real})=1& eeimg=&1&& (火眼晶晶,不错杀也不漏杀)。而&img src=&//www.zhihu.com/equation?tex=G& alt=&G& eeimg=&1&& 则要使得&img src=&//www.zhihu.com/equation?tex=D%28G%28z%29%29%3D1& alt=&D(G(z))=1& eeimg=&1&& ,即让生成的图片尽可能以假乱真。整个训练过程就像是两个玩家在相互对抗,也正是这个名字Adversarial的来源。在论文中&a href=&//link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Generative Adversarial Networks&/a& ,Goodfellow从理论上证明了该算法的收敛性,以及在模型收敛时,生成数据具有和真实数据相同的分布(保证了模型效果)。&/p&&p&从研究角度,GAN给众多生成模型提供了一种新的训练思路,催生了许多后续作品。例如根据自己喜好定制二次元妹子(逃),根据文字生成对应描述图片(&a href=&//link.zhihu.com/?target=https%3A//github.com/Newmu/dcgan_code& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Newmu/dcgan_code&/a&, &a href=&//link.zhihu.com/?target=https%3A//github.com/hanzhanggit/StackGAN& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&hanzhanggit/StackGAN&/a&),甚至利用标签生成3D宜家家居模型(&a href=&//link.zhihu.com/?target=https%3A//github.com/zck119/3dgan-release& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&zck119/3dgan-release&/a&),这些作品的效果无一不令人惊叹。同时,难人可贵的是这篇论文有很强的数学论证,不同于前几年的套模型的结果说话,而是从理论上保证了模型的可靠性。虽然目前训练还时常碰到困难,后续已有更新工作改善该问题(WGAN, Loss Sensetive GAN, Least Square GAN),相信终有一日能克服。&/p&&p&从通用人工智能高层次来看,这个模型率先使用神经网络来指导神经网络,颇有一种奇妙的美感:仿佛是在辩日的两小儿一样,一开始两者都是懵懂的幼儿,但通过观察周围,相互讨论,逐渐进化出了对外界的认知。 这不正是吾等所期望的终极智能么 -- 机器的知识来源不再局限于人类,而是可以彼此之间相互交流相互学习。也难怪Yann Lecun赞叹GAN是机器学习近十年来最有意思的想法 &a href=&//link.zhihu.com/?target=https%3A//medium.com/%40devnag/generative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&medium.com/@devnag/gene&/span&&span class=&invisible&&rative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f&/span&&span class=&ellipsis&&&/span&&/a& 。&/p&
资历不深,入坑一年的我仅从个人角度谈谈理解,希望能抛砖引玉。GAN对于人工智能的意义,可以从它名字的三部分说起:Generative Adversarial Networks。为了方便讲述,也缅怀过去两周在某论坛上水掉的时间,我先从Networks讲起。Networks:(深度)神经网络…
&p&&b&左右互搏,青出于蓝而胜于蓝?&/b& &/p&&p&&b&—阿尔法狗原理解析&/b&&/p&&br&&br&&p&这些天都在没日没夜地关注一个话题,谷歌人工智能程序AlphaGo(国内网友亲切地称为“阿尔法狗”)以5:0击败欧洲职业围棋冠军樊麾二段,并在和世界冠军的比赛中2:0领先。&/p&&br&&p&什么!!&/p&&br&&p&19年前计算机击败国际象棋冠军卡斯帕罗夫的情景还历历在目,现在计算机又要来攻克围棋了吗!?&/p&&br&&p&虚竹在天龙八部里自填一子,无意中以“自杀”破解“珍笼”棋局,逍遥子方才亲传掌门之位。难道以后“阿尔法狗”要出任逍遥派掌门了?&/p&&br&&p&1933年,东渡日本19岁的吴清源迎战当时的日本棋坛霸主、已经60岁的本因坊秀哉,开局三招即是日本人从未见过的三三、星、天元布阵,快速进击逼得对方连连暂停“打卦”和弟子商量应对之策。随后以“新布局”开创棋坛新纪元。难道阿尔法狗会再造一个“新新布局”?&/p&&br&&p&作为一个关心人工智能和人类命运的理科生,近些天刷了好些报道,记者们说“阿尔法狗是个‘价值神经网络’和‘策略神经网’络综合蒙特卡洛搜索树的程序”,但我觉得光知道这些概念是不够的。我想看看“阿尔法狗”的庐山真面目。&/p&&br&&br&&p&&b&准备好棋盘和脑容量,一起来探索吧?&/b&&/p&&br&&figure&&img src=&https://pic4.zhimg.com/50/f3a99d8a3d3_b.jpg& data-rawwidth=&348& data-rawheight=&232& class=&content_image& width=&348&&&/figure&&br&&p&围棋棋盘是19x19路,所以一共是361个交叉点,每个交叉点有三种状态,可以用1表示黑子,-1表示白字,0表示无子,考虑到每个位置还可能有落子的时间、这个位置的气等其他信息,我们可以用一个361 * n维的向量来表示一个棋盘的状态。我们把一个棋盘状态向量记为s。&/p&&br&&p&当状态s下,我们暂时不考虑无法落子的地方,可供下一步落子的空间也是361个。我们把下一步的落子的行动也用361维的向量来表示,记为a。&/p&&br&&p&这样,设计一个围棋人工智能的程序,就转换成为了,任意给定一个s状态,寻找最好的应对策略a,让你的程序按照这个策略走,最后获得棋盘上最大的地盘。&/p&&br&&p&如果你想要设计一个特别牛逼惊世骇俗的围棋程序,你会从哪里开始呢?对于在谷歌DeepMind工作的黄士杰和他的小伙伴而言,第一招是:&/p&&br&&br&&p&&b&“深度卷积神经网络”&/b&&/p&&br&&figure&&img src=&https://pic2.zhimg.com/50/2e3c3fcc35aa_b.jpg& data-rawwidth=&640& data-rawheight=&156& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/50/2e3c3fcc35aa_r.jpg&&&/figure&&br&&p&深度卷积神经网络早在98年就攻克了手写数字识别,近些年在人脸识别、图像分类、天气预报等领域无往而不利,接连达到或超过人类的水平,是深度学习火遍大江南北的急先锋。我们现在看到的Picasa照片自动分类,Facebook照片识别好友,以及彩云小译同声传译(软广出现,不要打我)都是此技术的应用。这等天赐宝物,如果可以用来下围棋,岂不是狂拽酷炫吊炸天?&/p&&br&&p&所以2015年黄士杰发表在ICLR的论文[3]一上来就使出了“深度神经网络”的杀招,从网上的围棋对战平台KGS(外国的qq游戏大厅)可以获得人类选手的围棋对弈的棋局。观察这些棋局,每一个状态s,都会有一个人类做出的落子a,这不是天然的训练样本&s,a&吗?如此可以得到3000万个样本。我们再把s看做一个19x19的二维图像(具体是19x19 x n,n是表示一些其他feature),输入一个卷积神经网络进行分类,分类的目标就是落子向量a’,不断训练网络,尽可能让计算机得到的a’接近人类高手的落子结果a,不就得到了一个模拟人类棋手下围棋的神经网络了吗?&/p&&br&&p&于是我们得到了一个可以模拟人类棋手的策略函数P_human,给定某个棋局状态s,它可以计算出人类选手可能在棋盘上落子的概率分布a = P_human(s),如下图:&/p&&figure&&img src=&https://pic2.zhimg.com/50/ac76a560d067d86e0a596336_b.jpg& data-rawwidth=&321& data-rawheight=&312& class=&content_image& width=&321&&&/figure&&br&&p&红圈就是P_human觉得最好的落子方案。每一步都选择概率最高的落子,对方对子后再重新计算一遍,如此往复就可以得到一个棋风类似人类的围棋程序。&/p&&br&&p&这个基于“狂拽酷炫”深度学习的方案棋力如何呢?&/p&&br&&p&&b&不咋地&/b&。黄士杰说P_human已经可以和业余6段左右的人类选手过招,互有胜负,但还未能超过当时最强的电脑程序CrazyStone[1,5],距离人类顶尖玩家就差得更远了。&/p&&br&&p&所以,为求更进一步,黄士杰打算把P_human和CrazyStone的算法结合一下,师夷长技以制夷,先击败所有的其他围棋AI再说。&/p&&p&等等,CrazyStone的算法是什么?&/p&&br&&p&哦,那个算法是黄士杰的老师Remi Coulum在2006年对围棋AI做出的另一个重大突破:&/p&&br&&p&&b&“MCTS,蒙特卡洛搜索树”&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/50/51ca11128a5aafdcfabf6_b.jpg& data-rawwidth=&440& data-rawheight=&277& class=&origin_image zh-lightbox-thumb& width=&440& data-original=&https://pic2.zhimg.com/50/51ca11128a5aafdcfabf6_r.jpg&&&/figure&&p&蒙特卡洛搜索树(Monte-Carlo Tree Search)是一种“大智若愚”的方法。面对一个空白棋盘S0,黄士杰的老师Coulum最初对围棋一无所知,便假设所有落子方法分值都相等,设为1。然后扔了一个骰子,从361种落子方法中随机选择一个走法a0。Coulum想象自己落子之后,棋盘状态变成S1,然后继续假设对手也和自己一样二逼,对方也扔了一个筛子,随便瞎走了一步,这时棋盘状态变成S2,于是这两个二逼青年一直扔骰子下棋,一路走到Sn,最后肯定也能分出一个胜负r,赢了就r记为1,输了则为0,假设这第一次r=1。这样Coulum便算是在心中模拟了完整的一盘围棋。&/p&&br&&p&Coulum心想,这样随机扔骰子也能赢?运气不错啊,那把刚才那个落子方法(S0,a0)记下来,分值提高一些:&/p&&ul&&li&新分数= 初始分+ r&/li&&/ul&&br&&p&我刚才从(S0, a0)开始模拟赢了一次,r=1,那么新分数=2,除了第一步,后面几步运气也不错,那我把这些随机出的局面所对应落子方法(Si,ai)的分数都设为2吧。然后Coulum开始做第二次模拟,这次扔骰子的时候Coulum对围棋已经不是一无所知了,但也知道的不是太多,所以这次除(S0, a0)的分值是2之外,其他落子方法的分数还是1。再次选择a0的概率要比其他方法高一点点。&/p&&br&&p&那位假想中的二逼对手也用同样的方法更新了自己的新分数,他会选择一个a1作为应对。如法炮制,Coulum又和想象中的对手又下了一盘稍微不那么二逼的棋,结果他又赢了,Coulum于是继续调整他的模拟路径上相应的分数,把它们都+1。随着想象中的棋局下得越来越多,那些看起来不错的落子方案的分数就会越来越高,而这些落子方案越是有前途,就会被更多的选中进行推演,于是最有“前途”的落子方法就会“涌现”出来。&/p&&br&&p&最后,Coulum在想象中下完10万盘棋之后,选择他推演过次数最多的那个方案落子,而这时,Coulum才真正下了第一步棋。&/p&&br&&p&蒙特卡洛搜索树华丽转身为相当深刻的方法,可以看到它有两个很有意思的特点:&/p&&br&&p&1)没有任何人工的feature,完全依靠规则本身,通过不断想象自对弈来提高能力。这和深蓝战胜卡斯帕罗夫完全不同,深蓝包含了很多人工设计的规则。MCTS靠的是一种类似遗传算法的自我进化,让靠谱的方法自我涌现出来。让我想起了卡尔文在《大脑如何思维》中说的思维的达尔文主义[6]。&/p&&br&&p&2)MCTS可以连续运行,在对手思考对策的同时自己也可以思考对策。Coulum下完第一步之后,完全不必要停下,可以继续进行想象中的对弈,直到对手落子。Coulum随后从对手落子之后的状态开始计算,但是之前的想象中的对弈完全可以保留,因为对手的落子完全可能出现在之前想象中的对弈中,所以之前的计算是有用的。这就像人在进行对弈的时候,可以不断思考,不会因为等待对手行动而中断。这一点Coulum的程序非常像人,酷毙了。&/p&&p&但黄士杰很快意识到他老师的程序仍然有局限:初始策略太简单。我们需要更高效地扔骰子。&/p&&p&如何更高效的扔骰子呢?&/p&&p&用P_human()来扔。&/p&&figure&&img src=&https://pic3.zhimg.com/50/c7affbc42d19_b.jpg& data-rawwidth=&517& data-rawheight=&257& class=&origin_image zh-lightbox-thumb& width=&517& data-original=&https://pic3.zhimg.com/50/c7affbc42d19_r.jpg&&&/figure&&p&黄士杰改进了MCTS,一上来不再是二逼青年随机掷骰子,而是先根据P_human的计算结果来得到a可能的概率分布,以这个概率来挑选下一步的动作。一次棋局下完之后,新分数按照如下方式更新:&/p&&ul&&li&新分数= 调整后的初始分+ 通过模拟得到的赢棋概率
&/li&&/ul&&br&&p&如果某一步被随机到很多次,就应该主要依据模拟得到的概率而非P_human。&/p&&p&所以P_human的初始分会被打个折扣:&/p&&ul&&li&调整后的初始分= P_human/(被随机到的次数+ 1)
&/li&&/ul&&p&这样就既可以用P_human快速定位比较好的落子方案,又给了其他位置一定的概率。看起来很美,然后实际操作中却发现:“然并卵”。因为,P_human()计算太慢了。&/p&&br&&p&一次P_human()计算需要3ms,相对于原来随机扔骰子不到1us,慢了3000倍。如果不能快速模拟对局,就找不到妙招,棋力就不能提高。所以,黄士杰训练了一个简化版的P_human_fast(),把神经网络层数、输入特征都减少,耗时下降到了2us,基本满足了要求。先以P_human()来开局,走前面大概20多步,后面再使用P_human_fast()快速走到最后。兼顾了准确度和效率。&/p&&br&&p&这样便综合了深度神经网络和MCTS两种方案,此时黄士杰的围棋程序已经可以战胜所有其他电脑,虽然距离人类职业选手仍有不小的差距,但他在2015年那篇论文的最后部分信心满满的表示:“我们围棋软件所使用的神经网络和蒙特卡洛方法都可以随着训练集的增长和计算力的加强(比如增加CPU数)而同步增强,我们正前进在正确的道路上。”&/p&&br&&p&看样子,下一步的突破很快就将到来。同年2月,黄士杰在Deepmind的同事在顶级学术期刊nature上发表了“用神经网络打游戏”的文章[2]。这篇神作,为进一步提高MCTS的棋力,指明了前进的新方向:&/p&&br&&p&&b&“左右互搏,自我进化”&/b&&/p&&br&&p&红白机很多人小时候都玩过,你能都打通吗?黄士杰的同事通过“强化学习”方法训练的程序在类似红白机的游戏机上打通了200多个游戏,大多数得分都比人类还好。&/p&&br&&figure&&img src=&https://pic4.zhimg.com/50/db76a9c4ec7bdf34bf6e5776fdae8a07_b.jpg& data-rawwidth=&346& data-rawheight=&138& class=&content_image& width=&346&&&/figure&&p&“强化学习”是一类机器学习方法,Agent通过和环境s的交互,选择下一步的动作a,这个动作会影响环境s,给Agent一个reward,Agent然后继续和环境交互。游戏结束的时候,Agent得到一个最后总分r。这时我们把之前的环境状态s、动作a匹配起来就得到了一系列&s,a&,设定目标为最后的总得分r,我们可以训练一个神经网络去拟合在状态s下,做动作a的总得分。下一次玩游戏的时候,我们就可以根据当前状态s,去选择最后总得分最大的动作a。通过不断玩游戏,我们对&s,a&下总得分的估计就会越来越准确,游戏也玩儿得越来越好。&/p&&br&&p&打砖块游戏有一个秘诀:把球打到墙的后面去,球就会自己反弹得分。强化学习的程序在玩了600盘以后,学到这个秘诀:球快要把墙打穿的时候评价函数v的分值就会急剧上升。&/p&&figure&&img src=&https://pic4.zhimg.com/50/bb8f60e5df607fa2b4778_b.jpg& data-rawwidth=&640& data-rawheight=&371& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/50/bb8f60e5df607fa2b4778_r.jpg&&&/figure&&p&黄士杰考虑给围棋也设计一个评价函数v(s),在P_human()想象自己开局走了20多步之后,不需要搜索到底,如果有一个v(s)可以直接判断是否能赢,得到最后的结果r,这样肯定能进一步增加MCTS的威力。&/p&&br&&p&黄士杰已经有了国外的qq游戏大厅KGS上的对局,但是很遗憾这些对局数量不够,不足以得到局面评价函数v。但是没关系,我们还可以左右互搏自对弈创造新的对局。&/p&&br&&p&机器学习的开山鼻祖Samuel早在1967年就用自对弈的方法来学习国际跳棋[7],而之前的蒙特卡洛搜索树也是一个自对弈的过程。但是现在黄士杰不仅有一个从人类对弈中学习出的P_human这样一个高起点,而且有一个神经网络可以从对弈样本中学习,有理由相信这次会有更好的结果。&/p&&p&先用P_human和P_human对弈,比如1万局,就得到了一万个新棋谱,加入到训练集当中,训练出P_human_1(网友@一小卒 指出,此时训练方法和之前稍有不同,P_human只是尽可能的模仿人类高手下棋,而不区分每一步棋是好棋还是坏棋。但这时的训练还考虑了最终胜负。P_human和P_human对弈之后,记录下状态s、下一步落子位置a、以及最终胜负情况z,得到一个训练数据(s,a,z)。如果z=1, 表示我方赢棋,则尽可能模仿此时自我对弈中的下棋位置;反之则尽可能避免选择自我对弈中的下棋位置。)。然后再让P_human_1和P_human_1对局,得到另外一万个新棋谱,这样可以训练出P_human_2,如此往复,可以得到P_human_n。P_human_n得到了最多的训练,棋力理应比原来更强。我们给最后这个策略起一个新名字:P_human_plus。这时,再让P_human_plus和P_human对局,在不用任何搜索的情况下胜率可达80%,不加任何搜索策略的P_human_plus和开源的MCTS相比也有85%的胜率。自对弈方法奏效了。&/p&&br&&p&既然P_human_plus这么强,我们先代入到MCTS中试试,用P_human_plus来开局,剩下的用P_human_fast。可惜,这样的方法棋力反而不如用P_human。黄士杰认为是因为P_human_plus走棋的路数太集中,而MCTS需要发散出更多的选择才好。看来,P_human_plus练功还是太死板,还没有进入无招胜有招的境界。&/p&&br&&p&没关系,黄士杰还有局面评价函数v(s)这一招,有了v(s),如果我可以一眼就看到“黑棋大势已去”,我就不用MCTS在想象中自我对弈了。但考虑到P_human_plus的招法太过集中,黄士杰在训练v( )的时候,开局还是先用P_human走L步,这样有利于生成更多局面。黄士杰觉得局面还不够多样化,为了进一步扩大搜索空间,在L+1步的时候,干脆完全随机掷一次骰子,记下这个状态SL+1,然后后面再用P_human_plus来对弈,直到结束获得结果r。如此不断对弈,由于L也是一个随机数,我们就得到了开局、中盘、官子不同阶段的很多局面s,和这些局面对应的结果r。有了这些训练样本&s,r&,还是使用神经网络,把最后一层的目标改成回归而非分类,黄士杰就可以得到一个v( )函数,输出赢棋的概率。&/p&&figure&&img src=&https://pic4.zhimg.com/50/cbf57ac5d7e261ae0f1ead0ecd01bbab_b.jpg& data-rawwidth=&278& data-rawheight=&262& class=&content_image& width=&278&&&/figure&&p&v( )可以给出下一步落子在棋盘上任意位置之后,如果双方都使用P_human_plus来走棋,我方赢棋的概率。如果训练v()的时候全部都使用P_human不用P_human_plus呢?实验表明基于P_human_plus训练的v,比基于P_human训练的v’,棋力更强。强化学习确实有效。&/p&&br&&p&万事俱备,只欠东风。准备好P_human(),MCTS,以及评价函数v(),黄士杰和小伙伴们继续进击,向着可以和人类专业选手过招的围棋AI前进:&/p&&br&&p&&b&“阿尔法狗”&/b&&/p&&figure&&img src=&https://pic4.zhimg.com/50/20ef39c49d2b913f91c18e_b.jpg& data-rawwidth=&640& data-rawheight=&265& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/50/20ef39c49d2b913f91c18e_r.jpg&&&/figure&&p&黄士杰准备在MCTS框架之上融合局面评估函数v()。这次还是用P_human作为初始分开局,每局选择分数最高的方案落子,下到第L步之后,改用P_human_fast把剩下的棋局走完,同时调用v(SL),评估局面的获胜概率。然后按照如下规则更新整个树的分数:&/p&&ul&&li&新分数= 调整后的初始分+ 0.5 * 通过模拟得到的赢棋概率 + 0.5 * 局面评估分
&/li&&/ul&&p&前两项和原来一样,如果待更新的节点就是叶子节点,那局面评估分就是v(SL)。如果是待更新的节点是上级节点,局面评估分是该节点所有叶子节点v()的平均值。&/p&&br&&p&如果v()表示大局观,“P_human_fast模拟对局”表示快速验算,那么上面的方法就是大局观和快速模拟验算并重。如果你不服,非要做一个0.5: 0.5之外的权重,黄士杰团队已经实验了目前的程序对阵其他权重有95%的胜率。&/p&&br&&p&以上,便是阿尔法狗的庐山真面目。&/p&&br&&figure&&img src=&https://pic2.zhimg.com/50/fbafd1cb5d6ae9d0b95e_b.jpg& data-rawwidth=&262& data-rawheight=&274& class=&content_image& width=&262&&&/figure&&p&上图演示了阿尔法狗和樊麾对弈时的计算过程,阿尔法狗执黑,红圈是阿尔法狗实际落子的地方。1、2、3和后面的数字表示他想象中的之后双方下一步落子的地方。白色方框是樊麾的实际落子。在复盘时,樊麾觉得位置1的走法更好。
&/p&&br&&p&深度学习、蒙特卡洛搜索树,自我进化三招齐出,所有其他围棋ai都毫无还手之力。99%的胜率不说,“阿尔法狗”还可以在让四子的情况下以77%的胜率击败crazystone。“阿尔法狗”利用超过170个GPU,粗略估算超过800万核并行计算,不仅有前期训练过程中模仿人类,自我对弈不断进化,还有实战时的模拟对局可以实时进化,已经把现有方法发挥到了极限,是目前人工智能领域绝对的巅峰之作。&/p&&br&&br&&p&&b&后记&/b&&/p&&br&&p&围棋是NP-hard问题,如果用一个原子来存储围棋可能的状态,把全宇宙的原子加起来都不够储存所有的状态。于是我们把这样的问题转换为寻找一个函数P,当状态为S时,计算最优的落子方案a = P(s)。我们看到,无论是“狂拽酷炫”的深度学习,还是“大智若愚”的MCTS,都是对P(s)的越来越精确的估计,但即使引入了“左右互搏”来强化学习,黄士杰和团队仍然做了大量的细节工作。所以只有一步一个脚印,面对挑战不断拆解,用耐心与细心,还有辛勤的汗水,才能取得一点又一点的进步,而这些进步积累在一起,终于让计算机达到并超过了人类职业选手的水平。&/p&&figure&&img src=&https://pic1.zhimg.com/50/988b28e08f03ce839e4d5abef07f07b4_b.jpg& data-rawwidth=&570& data-rawheight=&252& class=&origin_image zh-lightbox-thumb& width=&570& data-original=&https://pic1.zhimg.com/50/988b28e08f03ce839e4d5abef07f07b4_r.jpg&&&/figure&&p&因为一盘棋走一步需要3ms(P_human_plus遍历整个棋盘的时间),谷歌用大规模集群进行并行化计算,自我对弈3000万盘棋生成训练集只需要一天左右的时间[4],所以如果对弈更多棋局可以提高棋力的话,黄士杰他们早就做了。目前的方案可能已经达到了CNN网络能力的极限。完整的阿尔法狗不仅需要生成训练集,还要用训练集来生成局面评估函数v(),而这还使用了两周时间,一局比赛需要花掉4个小时,自我对局速度不够快,这也许是阿尔法狗并没有能够完全使用强化学习,而仅仅是在整个过程的一小部分使用左右互搏的原因。左右互博用的还不够多,这是一个遗憾。
&/p&&br&&p&如果存在一个“围棋之神”,一个已经穷尽了所有的围棋步法的“上帝”,那他每一步都是最优应对。一些顶尖棋手在接受采访时表示[8],“围棋之神”对战人类选手可能还有让4子的空间,也就是说,就算下赢了人类,计算机也还有很大进步的空间。&/p&&br&&p&面对一个如此高难度的问题,计算机和人类都无法在有限时间内找到完全的规律(柯洁和李世乭比赛是一人有3小时时间思考,阿尔法狗今年3月和李世乭进行的比赛则是每人2小时)。计算机和人都是在对问题做抽象,然后搜索最佳策略。要下好围棋所需要的能力已经接近人类智力的极限:要有大局观、要懂得取舍、还要会精打细算,治理一个国家也不过如此。计算机可以学会围棋,就能学会很多一样难度的技能。在未来,也许围棋、自动驾驶、同声传译(「彩云小译」已经开始公测,&a href=&//link.zhihu.com/?target=http%3A//a.app.qq.com/o/simple.jsp%3Fpkgname%3Dcom.caiyuninterpreter.activity& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&欢迎体验&/a&)都会被一一攻克。甚至在数论、量子场论等领域,深度学习和搜索相结合,可能也会带给我们更多惊喜,比如攻克“哥德巴赫猜想”。&/p&&br&&p&那么,人工智能是否真的会很快登顶呢?&/p&&br&&p&虽然在智力方面AI有希望登峰造极,但高智商只是人类众多能力的一个方面。吴清源先生在方寸之间纵横无敌,但仍然漂泊一生,被命运推着前进。早年他做段祺瑞的门客,棋盘上把段祺瑞打的落花流水,弄得下人都没有早饭吃;后来东渡日本,三易国籍,留下许多遗憾。如果把“强人工智能”比作一个天才少年,虽然智商爆表,但其他方面还需要我们悉心加以引导。创造出“德才兼备,匡扶济世”的人工智能,才是我辈真正应该努力实现的目标。&/p&&br&&p&&b&一起加油吧,科学少年们!&/b&&/p&&br&&p&&b&To the infinity and beyond !&/b&&/p&&br&&p&参考文献:&/p&&p&1, EfficientSelectivity and Backup Operators in Monte-Carlo Tree Search&/p&&p&2, Human-level control through deep reinforcementlearning&/p&&p&3, Move Evaluation In GO Using Deep Convolutional Neural Networks&/p&&p&4. Masteringthe Game of Go with Deep Neural Networks and Tree Search&/p&&p&5. A Survey ofMonte Carlo Tree Search Methods&/p&&p&6. 大脑如何思维—智力演化的今昔&/p&&p&7. Some Studies in Machine LearningUsing the Game of Checkers.II-Recent Progress&/p&&p&8.&a href=&//link.zhihu.com/?target=http%3A//www.sbanzu.com/topicdisplay.asp%3FBoardID%3D-4%26Page%3D1%26UserName%3Dtakami%26TopicID%3D4024042& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&围棋之神存在的话,可以让你几子?&/a&&/p&&br&&br&&p&-------------------------------------&/p&&p&以上这篇文章是我在1月28日nature论文基础上对alpha go的理解,现在又过了5个月,并且alpha go已经击败了李世石,我猜测其工作原理会有较大改进,如果有时间,我会贴出我觉得它可能的改进方向。&/p&&br&&p&欢迎转载,请保留作者信息。&/p&&br&&p&最后的最后,允许插播我司的广告一则:&/p&&p&———————————————————-&/p&&p&&b&彩云天气正在招聘中(前端、后端、运营),我们在毗邻皇家园林的两层别墅式公寓办公,有钢琴和温水泳池。需要你的帮助,我们才能每天稳定快速的计算出上亿次天气预报,用人工智能帮到更多普通大众。&/b&&/p&
左右互搏,青出于蓝而胜于蓝? —阿尔法狗原理解析 这些天都在没日没夜地关注一个话题,谷歌人工智能程序AlphaGo(国内网友亲切地称为“阿尔法狗”)以5:0击败欧洲职业围棋冠军樊麾二段,并在和世界冠军的比赛中2:0领先。 什么!! 19年前计算机击败国际象…
蒙特卡罗算法——大家听说过蒙特卡罗求π吧?就是画一个正方形和内切圆,随机撒点,数一下点落在园内和正方形内的数量之比,就是二者面积之比π/4。&br&所以蒙特卡罗就是求面积的方法。&br&而积分是曲线下的面积&br&所以蒙特卡罗就是求积分的方法&br&而均值就是概率密度与自变量乘积的积分&br&所以蒙特卡罗就是求均值的方法&br&而期望就是均值&br&所以蒙特卡罗就是求期望的方法&br&而最优值往往接近或就是期望&br&所以蒙特卡罗就是求最优值的方法
蒙特卡罗算法——大家听说过蒙特卡罗求π吧?就是画一个正方形和内切圆,随机撒点,数一下点落在园内和正方形内的数量之比,就是二者面积之比π/4。 所以蒙特卡罗就是求面积的方法。 而积分是曲线下的面积 所以蒙特卡罗就是求积分的方法 而均值就是概率密度…
&p&首先,我感觉不必像 @李Shawn 同学一样认为DNN、CNN、RNN完全不能相提并论。从广义上来说,NN(或是更美的DNN)确实可以认为包含了CNN、RNN这些具体的变种形式。在实际应用中,所谓的深度神经网络DNN,往往融合了多种已知的结构,包括卷积层或是LSTM单元。但是就题主的意思来看,这里的DNN应该特指全连接的神经元结构,并不包含卷积单元或是时间上的关联。因此,题主一定要将DNN、CNN、RNN等进行对比,也未尝不可。&/p&&p&其实,如果我们顺着神经网络技术发展的脉络,就很容易弄清这几种网络结构发明的初衷,和他们之间本质的区别,希望对题主有所帮助。&/p&&p&=========================== 分 割 线 就 是 我
================================&/p&&br&&p&神经网络技术起源于上世纪五、六十年代,当时叫&b&感知机&/b&(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。早期感知机的推动者是Rosenblatt。&i&(扯一个不相关的:由于计算技术的落后,当时感知器传输函数是用线拉动变阻器改变电阻的方法机械实现的,脑补一下科学家们扯着密密麻麻的导线的样子…)&/i&&/p&&p&但是,Rosenblatt的单层感知机有一个严重得不能再严重的问题,即它对稍复杂一些的函数都无能为力(比如最为典型的“异或”操作)。连异或都不能拟合,你还能指望这货有什么实际用途么o(╯□╰)o&/p&&br&&p&随着数学的发展,这个缺点直到上世纪八十年代才被Rumelhart、Williams、Hinton、LeCun等人(反正就是一票大牛)发明的&b&多层感知机&/b&(multilayer
perceptron)克服。多层感知机,顾名思义,就是有多个隐含层的感知机(废话……)。好好,我们看一下多层感知机的结构:&/p&&figure&&img src=&https://pic2.zhimg.com/50/e186f18d73fdafa8d4a5e75ed55ed4a3_b.jpg& data-rawwidth=&866& data-rawheight=&249& class=&origin_image zh-lightbox-thumb& width=&866& data-original=&https://pic2.zhimg.com/50/e186f18d73fdafa8d4a5e75ed55ed4a3_r.jpg&&&/figure&&br&&p&&b&&i&图1&/i&&/b&&i&上下层神经元全部相连的神经网络——多层感知机&/i&&/p&&br&&p&多层感知机可以摆脱早期离散传输函数的束缚,使用sigmoid或tanh等连续函数模拟神经元对激励的响应,在训练算法上则使用Werbos发明的反向传播BP算法。对,这货就是我们现在所说的&b&神经网络&/b&&b&NN&/b&——神经网络听起来不知道比感知机高端到哪里去了!这再次告诉我们起一个好听的名字对于研(zhuang)究(bi)很重要!&/p&&br&&p&多层感知机解决了之前无法模拟异或逻辑的缺陷,同时更多的层数也让网络更能够刻画现实世界中的复杂情形。相信年轻如Hinton当时一定是春风得意。&/p&&br&&p&多层感知机给我们带来的启示是,&b&神经网络的层数直接决定了它对现实的刻画能力&/b&——利用每层更少的神经元拟合更加复杂的函数[1]。&/p&&p&(Bengio如是说:functions that can be compactly
represented by a depth k architecture might require an exponential number of
computational elements to be represented by a depth k - 1 architecture.)&/p&&br&&p&即便大牛们早就预料到神经网络需要变得更深,但是有一个梦魇总是萦绕左右。随着神经网络层数的加深,&b&优化函数越来越容易陷入局部最优解&/b&,并且这个“陷阱”越来越偏离真正的全局最优。利用有限数据训练的深层网络,性能还不如较浅层网络。同时,另一个不可忽略的问题是随着网络层数增加,&b&“梯度消失”现象更加严重&/b&。具体来说,我们常常使用sigmoid作为神经元的输入输出函数。对于幅度为1的信号,在BP反向传播梯度时,每传递一层,梯度衰减为原来的0.25。层数一多,梯度指数衰减后低层基本上接受不到有效的训练信号。&/p&&br&&p&2006年,Hinton利用预训练方法缓解了局部最优解问题,将隐含层推动到了7层[2],神经网络真正意义上有了“深度”,由此揭开了深度学习的热潮。这里的“深度”并没有固定的定义——在语音识别中4层网络就能够被认为是“较深的”,而在图像识别中20层以上的网络屡见不鲜。为了克服梯度消失,ReLU、maxout等传输函数代替了sigmoid,形成了如今DNN的基本形式。单从结构上来说,&b&全连接的&/b&&b&DNN&/b&&b&和图&/b&&b&1&/b&&b&的多层感知机是没有任何区别的&/b&。&/p&&br&&p&值得一提的是,今年出现的高速公路网络(highway network)和深度残差学习(deep residual learning)进一步避免了梯度消失,网络层数达到了前所未有的一百多层(深度残差学习:152层)[3,4]!具体结构题主可自行搜索了解。如果你之前在怀疑是不是有很多方法打上了“深度学习”的噱头,这个结果真是深得让人心服口服。&/p&&br&&figure&&img src=&https://pic2.zhimg.com/50/7b3ee9e4f4a2e61acfcc12_b.jpg& data-rawwidth=&866& data-rawheight=&1228& class=&origin_image zh-lightbox-thumb& width=&866& data-original=&https://pic2.zhimg.com/50/7b3ee9e4f4a2e61acfcc12_r.jpg&&&/figure&&br&&p&&b&&i&图2&/i&&/b&&i&缩减版的深度残差学习网络,仅有34&/i&&i&层,终极版有152&/i&&i&层,自行感受一下&/i&&/p&&br&&p&如图1所示,我们看到&b&全连接&/b&&b&DNN&/b&&b&的结构里下层神经元和所有上层神经元都能够形成连接&/b&,带来的潜在问题是&b&参数数量的膨胀&/b&。假设输入的是一幅像素为1K*1K的图像,隐含层有1M个节点,光这一层就有10^12个权重需要训练,这不仅容易过拟合,而且极容易陷入局部最优。另外,图像中有固有的局部模式(比如轮廓、边界,人的眼睛、鼻子、嘴等)可以利用,显然应该将图像处理中的概念和神经网络技术相结合。此时我们可以祭出题主所说的卷积神经网络CNN。对于CNN来说,并不是所有上下层神经元都能直接相连,而是&b&通过“卷积核”作为中介。同一个卷积核在所有图像内是共享的,图像通过卷积操作后仍然保留原先的位置关系。&/b&两层之间的卷积传输的示意图如下:&/p&&br&&figure&&img src=&https://pic3.zhimg.com/50/440765dbaabd_b.jpg& data-rawwidth=&866& data-rawheight=&457& class=&origin_image zh-lightbox-thumb& width=&866& data-original=&https://pic3.zhimg.com/50/440765dbaabd_r.jpg&&&/figure&&p&&b&&i&图3&/i&&/b&&i&卷积神经网络隐含层(摘自Theano&/i&&i&教程)&/i&&/p&&br&&p&通过一个例子简单说明卷积神经网络的结构。假设图3中m-1=1是输入层,我们需要识别一幅彩色图像,这幅图像具有四个通道ARGB(透明度和红绿蓝,对应了四幅相同大小的图像),假设卷积核大小为100*100,共使用100个卷积核w1到w100(从直觉来看,每个卷积核应该学习到不同的结构特征)。用w1在ARGB图像上进行卷积操作,可以得到隐含层的第一幅图像;这幅隐含层图像左上角第一个像素是四幅输入图像左上角100*100区域内像素的加权求和,以此类推。同理,算上其他卷积核,隐含层对应100幅“图像”。每幅图像对是对原始图像中不同特征的响应。按照这样的结构继续传递下去。CNN中还有max-pooling等操作进一步提高鲁棒性。&/p&&br&&figure&&img src=&https://pic3.zhimg.com/50/c71cd39abe8b0dd29e229fda_b.jpg& data-rawwidth=&866& data-rawheight=&203& class=&origin_image zh-lightbox-thumb& width=&866& data-original=&https://pic3.zhimg.com/50/c71cd39abe8b0dd29e229fda_r.jpg&&&/figure&&br&&p&&b&&i&图4&/i&&/b&&i&一个典型的卷积神经网络结构,注意到最后一层实际上是一个全连接层(摘自Theano&/i&&i&教程)&/i&&/p&&br&&p&在这个例子里,我们注意到&b&输入层到隐含层的参数瞬间降低到了&/b&&b&100*100*100=10^6&/b&&b&个&/b&!这使得我们能够用已有的训练数据得到良好的模型。题主所说的适用于图像识别,正是由于&b&CNN&/b&&b&模型限制参数了个数并挖掘了局部结构的这个特点&/b&。顺着同样的思路,利用语音语谱结构中的局部信息,CNN照样能应用在语音识别中。&/p&&br&&p&全连接的DNN还存在着另一个问题——无法对时间序列上的变化进行建模。然而,&b&样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要&/b&。对了适应这种需求,就出现了题主所说的另一种神经网络结构——循环神经网络RNN。&/p&&br&&p&在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward Neural Networks)。而在&b&RNN&/b&&b&中,神经元的输出可以在下一个时间戳直接作用到自身&/b&,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出!表示成图就是这样的:&/p&&br&&figure&&img src=&https://pic2.zhimg.com/50/bef6acad53eb47757af9d_b.jpg& data-rawwidth=&866& data-rawheight=&441& class=&origin_image zh-lightbox-thumb& width=&866& data-original=&https://pic2.zhimg.com/50/bef6acad53eb47757af9d_r.jpg&&&/figure&&p&&b&&i&图5&/i&&/b&&i& RNN&/i&&i&网络结构&/i&&/p&&br&&p&我们可以看到在隐含层节点之间增加了互连。为了分析方便,我们常将RNN在时间上进行展开,得到如图6所示的结构:&/p&&br&&figure&&img src=&https://pic2.zhimg.com/50/c2ebfd25f0e90aa66d363a_b.jpg& data-rawwidth=&866& data-rawheight=&348& class=&origin_image zh-lightbox-thumb& width=&866& data-original=&https://pic2.zhimg.com/50/c2ebfd25f0e90aa66d363a_r.jpg&&&/figure&&p&&b&&i&图6&/i&&/b&&i& RNN&/i&&i&在时间上进行展开&/i&&/p&&br&&p&Cool,&b&(&/b&&b&t+1&/b&&b&)时刻网络的最终结果O(t+1)&/b&&b&是该时刻输入和所有历史共同作用的结果&/b&!这就达到了对时间序列建模的目的。&/p&&br&&p&不知题主是否发现,RNN可以看成一个在时间上传递的神经网络,它的深度是时间的长度!正如我们上面所说,&b&“梯度消失”现象又要出现了,只不过这次发生在时间轴上&/b&。对于t时刻来说,它产生的梯度在时间轴上向历史传播几层之后就消失了,根本就无法影响太遥远的过去。因此,之前说“所有历史”共同作用只是理想的情况,在实际中,这种影响也就只能维持若干个时间戳。&/p&&br&&p&为了解决时间上的梯度消失,机器学习领域发展出了&b&长短时记忆单元&/b&&b&LSTM&/b&&b&,通过门的开关实现时间上记忆功能,并防止梯度消失&/b&,一个LSTM单元长这个样子:&/p&&br&&figure&&img src=&https://pic2.zhimg.com/50/a8fd41f250fdf0a43812fb_b.jpg& data-rawwidth=&866& data-rawheight=&555& class=&origin_image zh-lightbox-thumb& width=&866& data-original=&https://pic2.zhimg.com/50/a8fd41f250fdf0a43812fb_r.jpg&&&/figure&&p&&b&&i&图7 &/i&&/b&&i&LSTM&/i&&i&的模样&/i&&/p&&br&&p&除了题主疑惑的三种网络,和我之前提到的深度残差学习、LSTM外,深度学习还有许多其他的结构。举个例子,RNN既然能继承历史信息,是不是也能吸收点未来的信息呢?因为在序列信号分析中,如果我能预知未来,对识别一定也是有所帮助的。因此就有了&b&双向&/b&&b&RNN&/b&&b&、双向&/b&&b&LSTM&/b&&b&,同时利用历史和未来的信息。&/b&&/p&&br&&figure&&img src=&https://pic2.zhimg.com/50/a3ab3ac8ecdafda617db0c_b.jpg& data-rawwidth=&866& data-rawheight=&365& class=&origin_image zh-lig

我要回帖

更多关于 清华大学2o18灵取 的文章

 

随机推荐