我自认为回答问题没问题,包括认真校对吧无错字后再发布,为何经常被判为审核不通过

神经网络何时才算训练成功成功背后的原因是什么?本文概述了用于训练神经网络的优化算法和理论


深度学习优化方法都有哪些?其理论依据是什么最近,来自伊利诺伊大学香槟分校(UIUC)的研究者孙若愚就此主题写了一篇长达 60 页的综述论文

孙若愚现任 UIUC 助理教授,本科毕业于北京大学数学系博士畢业于美国明尼苏达大学。其主要研究方向为数据分析


由于论文篇幅较长,机器之心选取了部分内容进行编译介绍更多详情参见原论攵。
这篇文章首先讨论了梯度爆炸/消失问题以及更通用的谱控制问题并讨论了一些实际解决方案,如初始化和归一化方法;其次本文綜述了神经网络训练过程中使用的一般优化方法,如 SGD、自适应梯度方法和分布式方法还介绍了这些算法的现有理论结果。最后本文综述了关于神经网络训练的全局问题的研究,包括糟糕的局部极小值上的结果、模式连接(mode connectivity)、彩票假设和无限宽度分析

引言 本文的主题昰了解成功训练神经网络的实用要素以及导致模型训练失败的可能因素。


假设你回到 1980 年想使用神经网络解决图像分类问题。如果从头开始训练那么你最初的几次尝试大概率无法得到合理的结果。是哪些本质变化使算法奏效了呢整体来看,(除了强大的硬件以外)你需偠三样东西:恰当的神经网络、恰当的训练算法和恰当的训练 trick

恰当的神经网络 这包括神经架构和激活函数。对于神经架构你可能想用臸少具备 5 个层和足够神经元的卷积网络来替换全连接网络。为了得到更好的性能你可能想将网络宽度增加到 20 甚至 100,并添加跳跃连接至於激活函数,ReLU 是不错的起点不过 tanh 和 swish 也可以。

恰当的训练算法 使用 SGD 并坚持到最后是一个不错的选择经过微调的常量步长已经足够好,而動量和自适应步长还可以提供额外的好处

恰当的训练 trick 恰当的初始化对开始算法训练非常重要。要想训练一个超过 10 层的网络通常需要用箌两个训练 trick:添加归一化层、添加跳跃连接。


这些设计选择中哪些是必要的目前我们对一些设计选择有所了解,包括初始化策略、归一囮方法、跳跃连接、过参数化(大宽度)和 SGD如下图 1 所示。
本文将优化的益处大致分为三部分:控制利普希茨常数(Lipschitz constant)实现更快收敛,獲得更好的损失分布(landscape)但是还有很多难以理解的设计选择,最显著的当属神经架构了
现在我们似乎无法理解神经架构这一复杂系统嘚每一部分,但目前已有的理解可以提供一些有用的见解

图 1:成功训练神经网络的几项主要设计选择(已具备理论理解)。它们对算法收敛的三个方面产生影响:实现收敛、实现更快收敛、获得更好的全局解这三项相互关联,这里只是大致的分类注意:存在其他重要嘚设计选择,尤其是神经架构目前我们并未在理论层面理解神经架构,因此本图未包含该项这些设计选择还有其他好处,如泛化(本圖同样未包含该项)
为保持本综述论文的简洁性,本文将主要关注使用前馈神经网络的监督学习问题不讨论更复杂的公式(如 GAN 和深度強化学习),也不涉及更复杂的架构(如 RNN、注意力和胶囊网络)在更宽泛的语境中,监督学习理论至少包含表示、优化和泛化本文专紸于优化,不过多讨论表示和泛化
本文的核心目标是理解神经网络结构(由多个变量连接构成的参数化)对优化算法设计和分析的影响,优化算法可以超出监督学习范式
本文适合对神经网络优化的理论理解感兴趣的研究者。了解优化方法及其基础理论有助于读者阅读本攵关于深度学习优化的现有综述文章针对的是一般的机器学习从业者,如 Goodfellow 等人所著《深度学习》的第 8 章这些综述文章通常不深入讨论優化的理论层面。而本文将更多地关注理论结果同时试图让无理论知识的读者也能理解。本文尽可能用简单的示例诠释直观概念而不昰解释定理的细节。

大方向:分解理论 研究理论时分解是一种有用且常见的元方法。本文首先简要综述优化在机器学习中的作用然后討论如何分解深度学习优化理论。

表示、优化和泛化 监督学习的目标是基于观测样本找出逼近底层函数的函数第一步就是找到能够表示期望函数的函数族(如神经网络);第二步是最小化特定损失函数,进而确定函数的参数;第三步是使用第二步找到的函数在未见过的测試数据上执行预测得到的误差就是测试误差。测试误差可被分解为表示误差、优化误差和泛化误差分别对应这三个步骤导致的误差。


茬机器学习中「表示」、「优化」和「泛化」经常被分开研究。例如在研究特定函数族的表示能力时,我们通常不关心它们能否很好哋解决优化问题在研究泛化误差时,我们通常假设找到了全局最优解类似地,在研究优化属性时我们常常不会明确考虑泛化误差(鈈过有时会假设表示误差为零)。

优化问题的分解 深度学习优化问题很复杂需要进一步分解。优化的过程可以分为三步:第一步是开始運行算法使之收敛至合理的解,如驻点;第二步是使算法尽快收敛;第三步是确保算法收敛至一个具备低目标值的解(如全局最小值)还有一个额外的步骤是获取优秀的测试准确率,但这超出了优化范畴这里不过多讨论。


简言之本文将优化问题划分为三部分:收敛、收敛速度和全局质量。

文章结构 本文第二章介绍了监督学习范式下典型神经网络优化问题的公式。


第三章介绍了反向传播并分析了對神经网络梯度下降应用经典收敛分析的难度。
第四章讨论了训练神经网络的 trick以及一些底层理论。这些方法依赖于神经网络打开了神經网络的黑箱。具体而言这部分讨论了梯度爆炸/消失这一主要挑战,以及更一般的谱控制(controlling spectrum)难题此外,第四章还综述了主要的解决方案如初始化和归一化方法。
第五章讨论了通用算法设计:将神经网络视作通用非凸优化问题具体而言,这部分综述了使用不同学习率的 SGD、自适应梯度方法、大规模分布式训练、二阶优化方法以及现有的收敛和迭代复杂度结果。
第六章综述了神经网络全局优化方面的研究包括全局分布、模型连接、彩票假设和无限宽度分析(如神经切线核)。
}

内阁大臣的建议是写在一张纸上贴在奏章上面,这叫做“票拟”而皇帝用红字做批示,称为“批红”按照规定,皇帝仅仅批写几本大多数的“批红”由司礼监的呔监按照皇帝的意思代笔。以往太监读书识字是被严令禁止的。明宣宗不仅改了这个规矩而且在他的鼓励下,宫里还成立了专门的太監学堂后人猜测:明宣宗这一做法,其目的就是让太监牵制内阁的权力久而久之,一种奇怪的政治格局出现了

     我们发现明朝内廷、外廷的机构完全对称。外有内阁内有司礼监,外有三法司内有东厂、锦衣卫,外廷有派往地方的总督、巡抚而内廷派往地方的也有鎮守太监、守备太监等等。这样内廷、外廷相互制约,才能确保皇帝的决策地位但是,这也造成了内外两大政治势力的争权夺利

     紫禁城东部的这片建筑在明代叫做文渊阁。明朝的内阁就设在这里在明朝万历年间,内阁首辅张居正让这个紫禁城里最不起眼的房子成为聲名显赫的所在在文渊阁办公的内阁成为实际上的政务决策者。

     表面上例行的政务流程似乎并没有改变,但决策权却出现了转移张居正是如何做到这一点的呢?

     首先当时的万历皇帝还是个孩子,张居正身为皇帝的老师很容易影响皇帝的决策。

     再者万历的“批红”是在司礼监冯保指导下完成,而冯保跟张居正关系密切

     张居正把自己的意见授意他人,写成奏章再由自己“票拟”赞同。幼年皇帝嘚批红自然毫无问题

     就这样,大臣的“奏章”阁臣的“票拟”,皇帝的 “批红”由张居正一手操控,达到空前一致他的新政也就毫无障碍地顺利推进。 自明初以来明朝的政务中心就在紫禁城这几个地方转换,权力的交替左右着明朝的国运。宫闱重重之中、争权奪权的阴谋时有发生

     至今人们称呼各国处理国家政务的最高行政机构,仍多按此习惯称为内阁内阁一词已成为政府首脑部门的代称。

         奣初沿用洪武十三年(公元1380年)废中书省,由皇帝直接统领六部并规定此后朝廷不得再立丞相,中央集权得到进一步加强,明永乐帝时設内阁机要之任开始归“内阁”。此后即无中书省这一机构

     侍郎二人,正三品掌贰令之职,朝廷大政参议焉临轩册命,为使则歭册书授之。四夷来朝则受其表疏而奏之;献贽币,则受以付有司

     主书四人,从七品上主事四人,从八品下有令史二十五人,书囹史五十人能书四人,蕃书译语十人乘驿二十人,传制十人亭长十八人,掌固二十四人装制敕匠一人,修补制敕匠五十人掌函、掌案各二十人。

     右散骑常侍二人右谏议大夫四人,右补阙六人右拾遗六人,掌如门下省

     起居舍人二人,从六品上掌修记言之史,录制诰德音如记事之制,季终以授国史有楷书手四人,典二人

     通事舍人十六人,从六品上掌朝见引纳、殿庭通奏。凡近臣入侍、文武就列则导其进退,而赞其拜起、出入之节


}

“微服务”的概念在 2014 年正式提出の后越来越多的团队开始用它来设计自己的业务系统,各种微服务框架和开发过程管理方法也同时兴起、不断成熟微服务设计方法清晰地定义了各个开发团队的业务边界,微服务框架以不同的方式实现了服务之间的协作与集成根据康威定律我们可以推导这样一种产品開发方法必然会映射到人员协作方式上去。还有同步兴起的 DevOps 运动它及时恰当地补齐了微服务开发过程中的技术方法,让微服务生态如虎添翼

经过几年的积累,人们开始意识到微服务从概念到实现,最后推广到整个组织这整个过程期间存在大量的挑战:服务之间的依賴管理、大量服务实例的运维、单个服务的独立部署,以及承担不同角色的微服务在同一个生态系统中的身份认证等都开始成为微服务團队需要直接面对的挑战。与此同时各类微服务框架也层出不穷,让开始接触微服务的开发人员眼花缭乱既难以区分它们的优劣、做絀合适的选型,又难以找到高效的学习路径

在 .NET 技术领域,微服务的挑战比起很多其他技术栈有过之而无不及.NET 技术在企业应用开发领域囿着长久的运用,因此有大量的存量应用需要面向服务化改造而 .NET Core 技术作为新一代 .NET 技术方向,无论是这一技术生态自身的完整性还是基於它的微服务框架体系,都处于持续的完善之中最后,在传统的企业应用开发领域并没有普遍采用持续交付等实践,当时所开发的应鼡也难以满足云原生应用所要求的诸多特性因此改造过程难度较大。

所幸 .NET Core 作为全新的 .NET 技术它不仅完全开源、跨平台,更面向云原生开發进行了大量而细致的优化它完全模块化,不依赖特定操作系统同时其文件系统、网络和配置等基础功能模块对跨平台、命令行等现玳化轻量级开发所要求的特性提供了优秀的支持。正是由于 .NET Core 作为基础开发平台天然适合云原生开发因此基于 Core 开发环境安装开始,紧接着詳细介绍了持续交付、API 优先和测试驱动等重要开发方法和思想本书探讨了人们对微服务的各种理解,以实际项目从各方面体现出本书作鍺对微服务的全方面诠释引导读者在直观的体验中建立自己的理解;同时,本书还主张把微服务和云原生实践结合运用书中通过解析┿二因子应用的各项特性,并分析它们在本书示例项目中的体现让读者对微服务和云原生的结合更为体系化。在本书的讲解过程中每當遇到可能存在不同做法的场景,作者总是详细论述各项考量、仔细比较各种可能的做法引发读者思考;同时,本书还大量探讨了传统應用开发中的典型做法以及在微服务和云原生开发时应该采纳的新方法,仔细解析其中缘由为存量应用的改造提供了直接指导。

在本書英文原版写作时.NET Core 还处于早期的 Core 的最新版已经是 Core 练习书中的示例项目时更为顺畅,译者对书中所涉及的示例代码进行了升级在升级过程中,部分代码需要经过改写才能与新版本的运行时或者依赖模块配合工作读者在使用书中的代码时,请自行将书中所涉及的

限于译者沝平等各方面原因本书在翻译时难免留下一些纰漏与错误,如承蒙读者指正则译者将倍感荣幸,其他读者也将一起获益请访问本书Φ文版代码仓库 与译者取得联系。

本书中文版的引进必将为 .NET 技术领域的微服务实践和云原生技术的普及做出重要贡献在此,译者特此感謝清华大学出版社的大力支持感谢张善友老师为本书译文提出的宝贵建议,感谢曾一起共事的翻译小组 WorkSharp 的同事们、特别是刘夏先生的指導感谢社区中关注本书的各位热心人士的激励和帮助。最后最需要致以真诚感谢的,是时常关心我的翻译工作、提醒我及时休息的父毋;以及忍受我用几个月的业余时间来翻译、却仍然要在翻译时随时提供参谋的爱人张圣奇:是你们无限的耐心和持续的支持才让本书的翻译工作得以顺利完成


几乎所有的当代软件工程都专注于缩短产品的上市时间。微服务是一种以服务为导向的演进式体系结构模式, 它优雅地消除了组织摩擦, 让团队和工程师们拥有在不断地进行交付、迭代和改进时所需的自主权可以预见,云原生时代的应用都是以微服务嘚形式出现

关于微服务,有不少书籍堪称经典但结合最新的Web框架 Core进行微服务开发时的思路、步骤和工具,是一本不可多的必读手册夲书由于成书较早,其示例代码所基于的.NET Core版本略显陈旧译者的努力一定程度上弥补了这一问题。最重要的是书中用大量篇幅讲述的关於开发功能强大且具有高伸缩性和韧性的微服务的思想不会过时的。另外本书还关注使用 Core是如何通过与容器技术的无缝兼容轻松提供这┅能力的。微服务的职责单一这意味着服务之间需要相互调用才能完成多个任务,或者各方合力才能完成较大的任务服务间的依赖与集成也是一项不可忽视的基本议题。基于事件集成以及借助服务发现机制为相互依赖的服务提供灵活调度是两项常见的服务集成方法,夲书对这两种方法都进行了完整介绍由于各个后端服务未必直接面对用户,因此微服务系统中的安全认证也与直接面对用户的系统有所鈈同本书深入讲解了几种常见的安全机制,供开发者根据实际情况选用

与本书基于 Core本身就是一系列的模块化组件,可添加到现有应用Φ同时,由于 Core自然适合作为微服务开发的基础框架有了优秀的框架,接下来我们要考虑的是如何避免再次陷入用一项新技术继续开發“新版本的一溜单体应用”。本书通过实际项目的深入演练以及同步的理论讲解,让读者在面对微服务生态构建过程中的各种场景时能做好充分准备。

不过我个人认为这本书还是缺少了一部分关于微服务生态系统的内部编排的内容, 容器是微服务部署的最佳方式嫆器作为现代基础设施上一种更细粒度的抽象,能有效降低占用空间和缩短启动时间、同时由于它提供了一种新的组件重用性级别所以能轻松地集成到整个开发生态系统中(例如持续集成和交付生命周期),微服务生态治理包括调度(包括部署、复制、扩展、复活、重新調度、升级、降级等)、资源管理(内存、CPU、存储空间、端口、IP、镜像等)和服务管理(即使用标签、分组、命名空间、负载均衡和准备僦绪检查将多个容器编排在一起)

一直以来,在我运营的“dotnet跨平台”公众号和各种线上线下场合我与很多朋友探讨和分享过微服务开發相关的经验。曾有很多朋友关心有没有微服务相关的入门材料。这本书借助实际项目系统地梳理了微服务开发的脉络,给初学者提供了行之有效的学习素材所以本书的引进是以见值得高兴的事情。

1.4.3 添加启动类和中间件
3.3 API优先的开发方式
3.3.1 为什么要用API优先
3.4 以測试优先的方式开发控制器
3.4.1 注入一个模拟的仓储
3.4.2 完成单元测试套件
3.5 创建持续集成流水线
3.7 运行团队服务的Docker镜像
4.1 微服务生态系統
4.1.2 服务间模型共用的策略
4.3.1 使用环境变量配置服务的URL
5.1 选择一种数据存储
5.2.1 创建数据库上下文
5.2.2 实现位置记录仓储接口
5.2.3 用EFCore內存提供程序进行测试
5.3 数据库是一种后端服务
5.4 对真实仓储进行集成测试
5.5 试运行数据服务
第6章 事件溯源与CQRS
第9章 微服务系统的配置
第10章 應用和微服务安全
第11章 开发实时应用和服务

组织大家一起来团购这本书看情况如果人多的话我们是否可以一起组织一次团购活动。因此創建了一个团购微信群

如果你扫码无法进入微信群,请加微信geffzhang我拉你入群。

}

我要回帖

更多关于 校对吧 的文章

更多推荐

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

点击添加站长微信