Go语言实现神经网络,golang 神经网络框架

人工智能和Python是什么关系?

人工智能和Python的渊源在于。就像我们统计数据或选择用excel制作表格时,因为在需要用到加减乘除或者、函数等时,只需要套用公司就可以。因为SUM、AVERAGE等这样的函数运行的背后,是C++/C#等语言已经编写好了代码,所以Excel只是工具和展现形式并不是它做计算。同理在学习人工智能时Python只是用来操作深度学习框架的工具,实际负责运算的主要模块并不依靠Python,真正起作用的是也是一大堆复杂的C++ / CUDA程序。

成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、成都网站建设、渭滨网络推广、微信平台小程序开发、渭滨网络营销、渭滨企业策划、渭滨品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供渭滨建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

深度学习人工智能时,自己计算太复杂,还要写C++代码操作,这时程序员就想要不搞一套类似复杂的Excel配置表,直接搭建神经网络、填参数、导入数据,一点按钮就直接开始训练模型、得出结果。这个方法简单实用可是神经网络搭建起来太复杂,需要填写的参数太多,各种五花八门的选项也很难做成直观的图形工具。只能用一个类似Python的相对好用的语言,通过简化的程序代码来搭建神经网络、填写参数、导入数据,并调用执行函数进行训练。通过这种语言来描述模型、传递参数、转换好输入数据,然后扔到复杂的深度学习框架里面去计算。那么为什么会选择Python?

科学家们很早就喜欢用Python实验算法,也善于使用numpy做科学计算,用pyplot画数据图。恰好Google内部用Python也非常多,所以采用Python也是必然的。除Python外,实际上TensorFlow框架还支持JavaScript、c++、Java、GO、等语言。按说人工智能算法用这些也可以。但是官方说了,除Python之外的语言不一定承诺API稳定性。所以人工智能和Python就密不可分了。

关于人工智能和Python的关系,青藤小编就和您分享到这里了。如果您对python编程有浓厚的兴趣,希望这篇文章可以为您提供帮助。如果您还想了解更多关于python编程的技巧及素材等内容,可以点击本站的其他文章进行学习。

人工智能和python有什么关系?

提到人工智能就一定会提到Python,有的初学者甚至认为人工智能和Python是划等号的,其实Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,开始时是用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。而人工智能通俗讲就是人为的通过嵌入式技术把程序写入机器中使其实现智能化。显然人工智能和Python是两个不同的概念。人工智能和Python的渊源在于。就像我们统计数据或选择用excel制作表格时,因为在需要用到加减乘除或者、函数等时,只需要套用公司就可以。因为SUM、AVERAGE等这样的函数运行的背后,是C++/C#等语言已经编写好了代码,所以Excel只是工具和展现形式并不是它做计算。同理在学习人工智能时Python只是用来操作深度学习框架的工具,实际负责运算的主要模块并不依靠Python,真正起作用的是也是一大堆复杂的C++

/ CUDA程序。

深度学习人工智能时,自己计算太复杂,还要写C++代码操作,这时程序员就想要不搞一套类似复杂的Excel配置表,直接搭建神经网络、填参数、导入数据,一点按钮就直接开始训练模型、得出结果。这个方法简单实用可是神经网络搭建起来太复杂,需要填写的参数太多,各种五花八门的选项也很难做成直观的图形工具。只能用一个类似Python的相对好用的语言,通过简化的程序代码来搭建神经网络、填写参数、导入数据,并调用执行函数进行训练。通过这种语言来描述模型、传递参数、转换好输入数据,然后扔到复杂的深度学习框架里面去计算。那么为什么会选择Python?科学家们很早就喜欢用Python实验算法,也善于使用numpy做科学计算,用pyplot画数据图。恰好Google内部用Python也非常多,所以采用Python也是必然的。除Python外,实际上TensorFlow框架还支持JavaScript、c++、Java、GO、等语言。按说人工智能算法用这些也可以。但是官方说了,除Python之外的语言不一定承诺API稳定性。所以人工智能和Python就密不可分了。单说人工智能的核心算法,那是是完全依赖于C/C++的,因为是计算密集型,需要非常精细的优化,还需要GPU、专用硬件之类的接口,这些都只有C/C++能做到。所以某种意义上其实C/C++才是人工智能领域最重要的语言。Python是这些库的API

binding,要开发一个其他语言到C/C++的跨语言接口,Python是最容易的,比其他语言的ffi门槛要低不少,CPython的C

API是双向融合的,可以直接对外暴露封装过的Python对象,还可以允许用户通过继承这些自定义对象来引入新特性,甚至可以从C代码当中再调用Python的函数。Python一直都是科学计算和数据分析的重要工具,Python是这些库的API

binding,要开发一个其他语言到C/C++的跨语言接口,Python是最容易的,比其他语言的ffi门槛要低不少,CPython的C

API是双向融合的,可以直接对外暴露封装过的Python对象,还可以允许用户通过继承这些自定义对象来引入新特性,甚至可以从C代码当中再调用Python的函数。都说时势造英雄,也可以说是人工智能和Python互相之间成就者对方,人工智能算法促进Python的发展,而Python也让算法更加简单。

神经网络如何外推:从前馈网络到图网络

How Neural Networks Extrapolate: From Feedforward to Graph Neural Networks

ICLR2021最高分论文            

52页论文,正文占9页,主要都是附录,不过附录里很多图片(一页就一两张图),排除这些一页一图的,只有40页

我们研究用梯度下降法训练的神经网络如何外推,也就是说,它们在训练分布的支持之外学习什么。以前的工作报告了使用神经网络进行外推时混合的实证结果:虽然前馈神经网络,即多层感知器(MLP)在某些简单任务中外推效果不好,但图形神经网络(GNN)——带有MLP模块的结构化网络——在更复杂的任务中取得了一些成功。为了得到理论解释,我们确定了MLPs和GNNs外推良好的条件。首先,我们量化了ReLU-MLPs从原点沿任意方向快速收敛到线性函数的观测结果,这意味着ReLU-MLPs不能外推大多数非线性函数。但是,当训练分布足够“多样化”时,他们可以证明学习线性目标函数。其次,在分析GNNs的成功和局限性时,这些结果提出了一个假设,我们提供了理论和经验证据:GNNs在将算法任务外推到新数据(例如。,较大的图或边权重)依赖于编码体系结构或特征中特定于任务的非线性。我们的理论分析建立在过度参数化网络与神经切线核的联系上。根据经验,我们的理论适用于不同的培训环境

1简介

人类在许多任务中推断得很好。例如,我们可以对任意大的数应用算术。人们可能想知道,神经网络是否也能做到这一点,并将其推广到任意远离训练数据的示例中(Lake et al.,2017)。奇怪的是,以前的工作报告混合外推结果与神经网络。早期的工作表明,前馈神经网络,又称多层感知器(MLPs),在学习简单多项式函数时不能很好地进行外推(BarnardWessels,1992;HaleySoloway,1992年)。然而,最近的研究表明,图神经网络(GNNs)(Scarselli et al.,2009)是一类具有MLP构建块的结构化网络,在具有挑战性的算法任务中,如预测物理系统的时间演化(Battaglia et al.,2016),可以推广到比训练图大得多的图,学习图形算法(Velickovic et al.,2020),求解数学方程(LampleCharton,2020)。

为了解释这个难题,我们正式研究了梯度下降(GD)训练的神经网络是如何外推的,即它们在训练分布的支持之外学习什么。我们说,如果一个神经网络在训练分布之外学习了一个任务,它就能很好地进行外推。乍一看,似乎神经网络可以在训练分布之外任意行为,因为它们具有高容量(Zhang et al.,2017),并且是通用逼近器(Cybenko,1989;Funahashi,1989年;Hornik等人,1989年;库尔科娃,1992年)。然而,神经网络受到梯度下降训练的限制(Hardt等人,2016;Soudry等人,2018年)。在我们的分析中,我们通过类比过参数化神经网络的训练动态和通过神经切线核(NTK)的核回归,明确考虑了这种隐式偏差(Jacot等人,2018)。

从前馈网络、最简单的神经网络和更复杂的体系结构(如GNNs)的构建块开始,我们建立了由GD训练的具有ReLU激活的过参数mlp的预测从原点沿任意方向收敛到线性函数。我们证明了两层网络的收敛速度,并从经验上观察到收敛经常发生在训练数据附近(图1),这表明ReLU-MLPs不能很好地外推大多数非线性任务。我们强调,我们的结果并不是基于ReLU网络具有有限多个线性区域的事实(Arora et al.,2018;HaninRolnick,2019年;Hein等人,2019年)。虽然有有限多个线性区域意味着ReLU MLPs最终会变为线性,但MLPs是否会学习到接近训练分布的正确目标函数并没有说明。相比之下,我们的结果是非渐近的,并且量化了MLPs将学习什么样的函数接近于训练分布。其次,我们确定了mlp外推良好的条件:任务是线性的,训练分布的几何结构是充分“多样化”的。据我们所知,我们的结果是这种前馈神经网络的第一个外推结果。

然后,我们将我们对前馈神经网络的见解与GNNs联系起来,以解释GNNs在某些算法任务中外推得好的原因。先前的工作报告了可以通过动态规划(DP)解决的任务的成功外推(Bellman,1966),其计算结构与GNNs一致(Xu等人,2020)。DP更新通常可以分解为非线性和线性步骤。因此,我们假设GD训练的GNN可以在DP任务中很好地外推,如果我们在架构和输入表示中编码适当的非线性(图2)。重要的是,编码非线性可能不需要GNNs插值,因为MLP模块可以很容易地学习训练分布中的许多非线性函数(Cybenko,1989;Hornik等人,1989年;Xu等人,2020),但GNNs正确外推至关重要。我们使用图NTK(Du等人,2019b)证明了简化情况下的这一假设。在经验上,我们验证了三个DP任务的假设:最大度、最短路径和n体问题。我们证明了具有适当结构、输入表示和训练分布的GNNs可以很好地预测具有未知大小、结构、边权值和节点特征的图。我们的理论解释了以往工作的经验成功,并指出了它们的局限性:成功的外推依赖于编码任务特定的非线性,这需要领域知识或广泛的模型搜索。从更广泛的角度来看,我们的见解超越了GNNs,并广泛应用于其他神经网络。

总之,我们研究神经网络如何外推。首先,由GD训练的ReLU-mlp以O(1/t)的速率沿原点方向收敛为线性函数。其次,为了解释为什么GNNs在一些算法任务中可以很好地外推,我们证明了ReLU-MLPs在线性任务中可以很好地外推,从而引出一个假设:当适当的非线性被编码到结构和特征中时,神经网络可以很好地外推。我们用一个简化的例子证明了这个假设,并为更一般的情况提供了经验支持。

1.1相关工作

早期的工作显示了MLP不能很好地外推的示例任务,例如学习简单多项式(BarnardWessels,1992;HaleySoloway,1992年)。相反,我们展示了ReLU MLPs如何外推的一般模式,并确定MLPs外推良好的条件。最近的工作研究了在NTK和平均场两种情况下,梯度下降对MLP产生的隐性偏差(Bietti和Mairal,2019;ChizatBach,2018年;Song等人,2018年)。与我们的结果相关,一些工作表明MLP预测收敛于“简单”分段线性函数,例如,具有很少的线性区域(HaninRolnick,2019;Maennel等人,2018年;Savarese等人,2019年;威廉姆斯等人,2019年)。我们的工作不同之处在于,这些工作都没有明确研究外推法,有些只关注一维输入。最近的研究还表明,在NTK区域的高维环境中,MLP在某些标度极限下至多是一个渐近线性预测因子(Ba等人,2020;Ghorbani等人,2019年)。我们研究不同的设置(外推),我们的分析是非渐近性质,不依赖于随机矩阵理论。

先前的工作通过在较大的图上进行测试来探索GNN外推(Battaglia et al.,2018;Santoro等人,2018年;萨克斯顿等人,2019年;Velickovic等人,2020年)。我们是第一个从理论上研究GNN外推法的人,我们完成了外推法的概念,包括看不见的特征和结构。

2准备工作

3前馈神经网络如何外推

前馈网络是最简单的神经网络和更复杂的体系结构(如GNNs)的构建块,因此我们首先研究它们在GD训练时是如何外推的。在本文中,我们假设ReLU激活。第3.3节包含其他激活的初步结果。

3.1 RELU MLP的线性外推行为

通过架构,ReLU网络学习分段线性函数,但是在训练数据的支持之外,这些区域究竟是什么样的呢?图1举例说明了当GD对各种非线性函数进行训练时,ReLU MLP如何进行外推。这些例子表明,在训练支持之外,预测很快就会沿着原点的方向线性化。我们通过线性回归对MLPs的预测进行了系统的验证:决定系数(R2)总是大于0.99(附录C.2)。也就是说,ReLU MLPs几乎立即在训练数据范围之外“线性化”。

我们使用GD通过神经切线核(NTK)训练的神经网络的隐式偏差来形式化这个观察:GD训练的过参数化网络的优化轨迹等价于具有特定神经切线核的核回归的轨迹,在一系列被称为“NTK制度”的假设下(Jacot等人,2018年)。我们在这里提供了一个非正式的定义;更多详情,请参阅Jacot等人(2018)和附录A。

定义2。

(非正式)在NTK区域训练的神经网络是无限宽的,以一定的比例随机初始化,并且由GD以无穷小的步长训练。

先前的工作通过NTK分析过参数化神经网络的优化和分布泛化(Allen-Zhu等人,2019a;b类;Arora等人,2019a;b类;曹顾,2019;杜等人,2019c;一个;李亮,2018;日田和铃木,2021年)。相反,我们分析外推。

定理1将我们从图1中观察到的结果形式化:在训练数据范围之外,沿着原点的任何方向tv,两层ReLU MLP的预测迅速收敛为速率为O(1/t)的线性函数。线性系数β收敛速度中的常数项依赖于训练数据和方向v。证据见附录B.1

定理1

ReLU网络具有有限多个线性区域(Arora等人,2018;汉宁和罗尔尼克,2019),因此他们的预测最终成为线性。相反,定理1是一个更细粒度的分析MLP如何外推,并提供了收敛速度。虽然定理1假设两层网络处于NTK状态,但实验证实,线性外推行为发生在具有不同深度、宽度、学习速率和批量大小的网络上(附录C.1和C.2)。我们的证明技术也可能扩展到更深层次的网络。

图4a提供了一个更积极的结果:MLP在许多不同的超参数上很好地外推了线性目标函数。虽然学习线性函数一开始似乎非常有限,但在第4节中,这一见解将有助于解释GNN在非线性实际任务中的外推特性。在此之前,我们首先从理论上分析了MLPs外推的好时机。

3.2当RELU MLPS可证明外推井

图4a显示,当目标函数为线性时,MLP可以很好地外推。然而,这并不总是正确的。在本节中,我们展示了成功的外推依赖于训练数据的几何结构。直观地说,训练分布必须足够“多样化”,以便进行正确的推断

我们提供了两个条件,将训练数据的几何结构与外推联系起来。引理1指出,过参数化的mlp只需二维例子就可以学习线性目标函数。

实验:训练数据的几何结构影响外推。

定理2中的条件形式化了一种直觉,即训练分布必须是“多样的”,才能成功地进行外推,例如,D包括所有方向。从经验上讲,当满足定理2的条件时(图4b中的“all”),外推误差确实很小。相反,当训练示例仅限于某些方向时,外推误差要大得多(图4b和图3)。

与之前的工作相关,定理2提出了为什么虚假相关性可能会损害外推,补充了因果关系论点(Arjovsky et al.,2019;Peters等人,2016年;Rojas Carulla等人,2018年)。当训练数据具有虚假相关性时,某些特征组合丢失;e、 例如,骆驼可能只出现在沙漠中的图像收集。因此,定理2的条件不再成立,模型可能外推错误。定理2也类似于线性模型的可辨识条件,但更为严格。如果训练数据具有全(特征)秩,我们可以唯一地识别一个线性函数。mlp更具表现力,因此识别线性目标函数需要附加约束。

综上所述,我们分析了ReLU-MLPs是如何外推的,并提供了两个启示:(1)MLPs由于其线性外推而不能外推大多数非线性任务(定理1);当目标函数是线性函数时,如果训练分布是“多样的”(定理2),mlp可以很好地外推。在下一节中,这些结果将帮助我们理解更复杂的网络是如何外推的。

3.3具有其他激活功能的MLPS

在继续讨论GNNs之前,我们通过对其他激活函数tanh的实验来完成MLPs的描述σ(x) =tanh(x),余弦σ(x) =cos(x)(LapedesFarber,1987年;McCaughan,1997年;Sopena和Alquezar,1994),和σ(x) =x2(杜和李,2018;Livni等人,2014年)。详情见附录C.4。当激活函数和目标函数相似时,MLPs外推效果较好;e、 例如,当学习tanh时,tanh激活可以很好地推断,但不能推断其他功能(图5)。而且,每个激活函数都有不同的局限性。要用tanh激活外推tanh函数,训练数据范围必须足够宽。当学习具有二次激活的二次函数时,只有两层网络可以很好地进行外推,而更多的层可以得到更高阶的多项式。对于高维数据,余弦激活很难优化,因此我们只考虑一维/二维余弦目标函数。

4图形神经网络如何外推

上面,我们看到非线性任务中的外推对于MLP来说是困难的。尽管存在这一局限性,GNNs在一些非线性算法任务中表现出了很好的外推能力,如直观物理(Battaglia et al.,2016;Janner等人,2019),图算法(Battaglia等人,2018;Velickovic等人,2020)和符号数学(LampleCharton,2020)。为了解决这个差异,我们建立在MLP结果的基础上,研究GD训练的GNNs是如何外推的。

4.1假设:线性算法对齐有助于外推

我们从一个例子开始:训练GNNs来解决最短路径问题。对于这项任务,先前的工作观察到,具有最小聚集的改进GNN架构可以推广到比训练集中的图更大的图(Battaglia et al.,2018;Velickovic等人,2020):

我们首先提供一个直观的解释(图2a)。最短路径可通过Bellman-Ford(BF)算法(Bellman,1958)求解,并进行以下更新

其中w(v,u)是边(v,u)的权重,d[k][u]是k步内到节点u的最短距离。这两个方程可以很容易地对齐:如果GNNs的MLP模块学习一个线性函数d[k],那么它将模拟BF算法−1] [v]+w(v,u)。由于mlp可以外推线性任务,这种“对齐”可以解释为什么GNNs可以在这个任务中很好地外推。

为了进行比较,我们可以解释为什么我们不希望GNN使用更常用的和聚合(Eqn。1) 在这项任务中推断得很好。对于和聚合,MLP模块需要学习一个非线性函数来模拟BF算法,但定理1表明,它们不会在训练支持之外外推大多数非线性函数。

我们可以将上述直觉推广到其他算法任务。许多GNNs外推良好的任务可以通过动态规划(DP)来解决(Bellman,1966),这是一种具有类似GNNs(Eqn)的递归结构的算法范式。1) (Xu等人,2020年)。

定义3。动态规划(DP)是一个带有更新的递归过程

其中答案[k][s]是迭代k和状态s索引的子问题的解决方案,DP Update是一个任务特定的更新函数,它基于上一次迭代解决子问题。从更广泛的角度出发,我们假设:如果我们将适当的非线性编码到模型结构和输入表示中,使MLP模块只需要学习接近线性的步骤,那么所得到的神经网络就可以很好地外推。

假设1。

我们的假设建立在(Xu等人,2020)的算法对齐框架之上,该框架指出,如果模块“对齐”以便于学习(可能是非线性)函数,则神经网络插值良好。成功的外推更难:模块需要与线性函数对齐。

线性算法对准的应用。

一般来说,线性算法对准不局限于GNN,广泛应用于神经网络。为了满足这种情况,我们可以在结构或输入表示中编码适当的非线性操作(图2)。使用GNNs学习DP算法是在体系结构中编码非线性的一个例子(Battaglia等人,2018;Corso等人,2020年)。另一个例子是对体系结构中的日志和exp变换进行编码,以帮助外推算术任务中的乘法(Trask等人,2018;MadsenJohansen,2020年)。神经符号程序进一步发展,并对符号操作库进行编码,以帮助推断(Johnson等人,2017年;Mao等人,2019年;易等,2018年)。

对于某些任务,更改输入表示可能更容易(图2b)。有时,我们可以将目标函数f分解为f=g◦ 将h嵌入特征嵌入h和一个简单的目标函数g中,我们的模型可以很好地推断。我们可以通过使用领域知识通过专门的特征或特征转换获得h(LampleCharton,2020;Webb等人,2020年),或通过X\D中未标记的未标记的未标记的分发数据的表示学习(例如,BERT)(Chen等人,2020年);Devlin等人,2019年;胡等,2020;Mikolov等人,2013b;Peters等人,2018年)。这为表示如何帮助在不同应用领域进行外推提供了新的视角。例如,在自然语言处理中,预处理表示(Mikolov等人,2013a;WuDredze,2019)和使用领域知识进行特征转换(袁等,2020年;Zhang等人,2019)帮助模型在语言之间进行概括,这是一种特殊的外推。在定量金融中,确定正确的“因素”或特征对于深入学习模型至关重要,因为金融市场可能经常处于外推制度中(Banz,1981;法兰西,1993年;罗斯,1976)。

线性算法对齐解释了文献中成功的外推,并指出外推一般更难:编码适当的非线性通常需要领域专家或模型搜索。其次,我们为我们的假设提供理论和实证支持。

4.2理论和经验支持

我们验证了我们对三个DP任务的假设:最大度、最短路径和n-体问题,并证明了最大度假设。我们强调了图结构在外推中的作用。

理论分析。

我们从一个简单而基本的任务开始:学习一个图的最大度,一个DP的特例。作为定理1的推论,常用的基于和的GNN(Eqn。1) 无法很好地推断(证据见附录B.4)。

推论1。

具有和聚集和和和读出的GNNs在最大程度上不能很好地外推。为了实现线性算法对齐,我们可以对读出器中唯一的非线性max函数进行编码。定理3证实了具有最大读数的GNN在这个任务中可以很好地外推。

定理3并不是紧跟定理2,因为GNNs中的MLP模块只接受间接的监视。我们分析图NTK(Du等人,2019b)来证明附录B.5中的定理3。虽然定理3假设相同的节点特征,但我们在经验上观察到相同和不相同特征的相似结果(附录中的图16)。

条件的解释。

定理3中的条件类似于定理2中的条件。这两个定理都需要不同的训练数据,用定理3中的图结构或定理2中的方向来度量。在定理3中,如果所有训练图都具有相同的最大或最小节点度,例如,当训练数据来自以下族之一时,违反了该条件:路径、C-正则图(具有C度的正则图)、圈和阶梯。

实验:有助于推断的架构。

我们用两个DP任务来验证我们的理论分析:最大度和最短路径(详见附录C.5和C.6)。而以前的工作只测试不同大小的图(Battaglia et al.,2018;Velickovic等人,2020),我们还测试了具有不可见结构、边权重和节点特征的图。结果支持了我们的理论。对于最大度,具有最大读数的GNNs优于具有和读数的GNNs(图6a),证实了推论1和定理3。对于最短路径,具有最小读数和最小聚集的GNN优于具有和读数的GNN(图6a)。

实验证实了训练图结构的重要性(图7)。有趣的是,这两个任务支持不同的图结构。对于最大度,如定理3所预测的,当训练在树、完全图、扩张图和一般图上时,GNNs外推效果很好,当训练在4-正则图、圈图或梯形图上时,外推误差更大。对于最短路径,当我们改变训练图的稀疏性时,外推误差遵循U形曲线(附录中的图7b和图18)。直觉上,在稀疏或稠密图上训练的模型可能学习退化解。

实验:有助于推断的表征。

最后,我们展示了一个很好的输入表示帮助外推。我们研究了n体问题(Battaglia等人,2016;Watters等人,2017年)(附录C.7),即预测重力系统中n个物体的时间演化。根据之前的工作,输入是一个完整的图形,其中节点是对象(Battaglia等人,2016)。

5与其他分布外设置的连接

我们讨论几个相关的设置。直观地说,从我们上述结果的观点来看,相关设置中的方法可以通过1)学习超出训练数据范围的有用非线性和2)将相关测试数据映射到训练数据范围来改进外推。

领域适应研究对特定目标领域的泛化(Ben-David等人,2010;Blitzer等人,2008年;Mansour等人,2009年)。典型的策略会调整训练过程:例如,使用来自目标域的未标记样本来对齐目标和源分布(Ganin等人,2016;赵等,2018)。在训练期间使用目标域数据可能会导致有用的非线性,并可能通过匹配目标和源分布来减轻外推,尽管学习映射的正确性取决于标签分布(Zhao等人,2019)。

对大量未标记数据的自监督学习可以学习超出标记训练数据范围的有用非线性(Chen et al.,2020;Devlin等人,2019年;He等人,2020年;Peters等人,2018年)。因此,我们的结果提出了一个解释,为什么像BERT这样的预训练表示可以提高分布外鲁棒性(Hendrycks et al.,2020)。此外,自监督学习可以将语义相似的数据映射到相似的表示,因此映射后的一些域外实例可能会落入训练分布中。

不变模型旨在学习在多个训练分布中尊重特定不变性的特征(Arjovsky et al.,2019;Rojas Carulla等人,2018年;周等人,2021)。如果模型真的学习到了这些不变性,这可能发生在线性情况下,当存在混杂或反因果变量时(Ahuja等人,2021;Rosenfeld等人,2021),这可能从本质上增加了训练数据范围,因为模型可以忽略不变特征的变化。

分布鲁棒性考虑了数据分布的小干扰,并确保模型在这些干扰下表现良好(GohSim,2010;Sagawa等人,2020年;Sinha等人,2018年;StaibJegelka,2019年)。相反,我们看的是更多的全局扰动。尽管如此,人们还是希望,有助于外推的修改通常也能提高对局部扰动的鲁棒性。

6结论

本文是一个初步的步骤,正式了解如何神经网络训练梯度下降外推。我们确定了MLPs和GNNs按期望外推的条件。我们还提出了一种解释,说明GNNs在复杂的算法任务中是如何能够很好地进行外推的:在架构和特性中编码适当的非线性可以帮助外推。我们的结果和假设与本文和文献中的实证结果一致

曾道人说:“为什么职业规划浪费时间呢”?

近期和朋友聊天时听到了这样一个观点:在今天这个多变的社会里,做职业规划,根本就是一件浪费时间的事情。

因为各行业的变化实在是太快了,今天你规划在这个行业里好好大干一番,可能明天整个行业就突然完蛋了。

你根本没法预料10年甚至两年以后你所处的行业会发生什么,在这种情况下进行个人的职业规划,没有任何意义。

我相信有很多人,跟前面这位朋友所持的观点是一致的,那么我们今天就来聊一聊,在这个瞬息万变的时代,对于年轻人来说,是否有必要进行职业规划?

诚然,这个社会确实是多变的,每时每刻都有新鲜的东西从不知道什么地方冒出来,每分每秒,也有太多曾经辉煌过的东西慢慢消失。

也许你前两年一脚踏进了共享经济的风口当中,本打算用5~10年的时间干出一番事业来,谁曾想一夜之间风没了,猪掉下来了,你的一番事业还见不到影子,拿到手的却是一封裁员通知。

行业是如此,而技能甚至也会过时,前两年大火的Go语言,现如今在招聘需求里面已经难以见到,今天所有的招聘都在抢AI,抢神经网络方面的人才,但再过几年会怎样谁都不知道。

大时代的变化如浪潮一般风起云涌,而个人在其中难免会觉得变化来得太快,自己跟不上节奏。

从这一点看来,似乎我们的确难以把控、预测行业的变化。而这个时候去制定什么5年10年的职业规划,看起来似乎真的没有了太大意义。

然而,如果你真的这样想,那恐怕你在思维上已经陷入了一种误区。

无论行业和社会上发生多大的变化与倾覆,个人的成长轨迹始终是连贯且统一的。

职业规划,不是让我们对行业的发展,甚至未来有可能出现的行业进行未卜先知式的预测,而是回归于个人成长的本身,让我们能够时刻提醒自己在人生的某个阶段应该做什么,以及应该做到什么。

很多人把职业生涯规划想的太过复杂,其实这种规划没有那么神奇,你甚至可以简单理解成一个人给自己在不同阶段制定的不同目标,然后再规划一个合理的达成路径罢了。

哪怕是一个没学历、没背景、没技能的年轻人,在当今社会他也能找到一份自己可以从事的工作,比如去送外卖。

送外卖虽然辛苦,但收入也并不算太低。

当然,送外卖不管怎么说,也不是一个可以一直做下去的工作。但是只要他有心,勤奋一些,节俭一些,做几年就能凑出一辆车的首付。

这时候,不用送外卖了,去开网约车吧!虽然依旧辛苦,可也不同风吹日晒,风里来雨里去了不是吗?

再往后,有了更多的钱,还可以换辆商务车跑专车,或者换辆SUV跑旅游专车,收入将会有明显的提升,工作强度也能适应年龄的增长。

事实上,就连《骆驼祥子》中的祥子虽然不懂“职业生涯规划”是什么意思,但他也有自己对人生未来发展的思虑与考量:租几年车,买辆自己的车,成家立业,多买几辆车,开个车行。

只可惜,祥子遭遇的是整个大时代的悲哀,而我们面临的,其实是蓬勃向上的社会机遇。

我们在这里思考一下,一个人,如果对自己的职业生涯缺乏规划会怎样?

对于绝大多数人来说,缺乏对职业生涯的规划,会使其迷失在行业变化的颠簸,与日复一日的简单劳作中。

现在在很多行业里都有一种现象叫做“35岁焦虑”。

所谓的35岁焦虑就是指疼一个人35岁时,他会渐渐变得患得患失,焦躁不安,感觉自己的人生压力倍增。

原因很简单,一方面年龄的增长,精力的衰退,让人感觉自己的竞争力越来越弱,而身后跟着一群群虎视眈眈的“后浪”们,随时准备把自己拍在沙滩上。

另一方面,上有父母,下有子女,手头没有存款,只有尚余20来年的房贷车贷。

今天早上听说公司高层又在讲“狼性”,讲“996”,看看自己三高的体检单,想要换份工作,却发现招聘网站上纷纷写着“年龄35岁以下”。

在这种情况下, 又怎么可能不焦虑呢?

可是换个角度再来想一想,35 40来岁,其实正是一个人事业的黄金时期,如果一个人在行业中有所建树,拥有一定的资源与能力,40岁对于多数的管理岗来说,刚刚是他实现个人价值的开始。

那为什么却有这么多人在面临着35岁焦虑呢?其本质就在于对于很多人来说,职业生涯缺少规划,导致他错过了应该积累的时期。

对于一个对自己的职业有明确规划的人来说,跟别人最大的不同就是,他会非常关注自己目前的职业状态是否“可持续”。

而对于缺乏职业规划的人来说,他们的职场生涯往往是“得过一天是一天。”

当一个人对自己的职业生涯缺乏规划的时候,他所能考虑到的往往只有眼前。

而要命的是,如果一个人越是只能看到眼前,那么他越难以获得持续的精进,生活就会变得越不稳定,就越需要疲于奔命,就越是只能先顾眼前。毫无疑问,这是个可悲的恶性循环。

看看我们身边有多少人正处于现在这样的状态呢,明明知道自己目前的工作没有前途,明明知道这个行业已经是日薄西山,却受困于当下的条件,难以做出足够的决心,只能先这么耗下去。

可耗下去的结果会是什么你我他都心知肚明,而在这一次又一次的拖延之中,他最大的损失,就是自己的光阴。

因此职业生涯其实非常重要,对于年轻人来说更是如此。

我们需要做的不是去预测自己在未来多少年实现财富自由,在什么时候做成公司的老总,而是明确的搞清楚,如何在正确的阶段做正确的事情。

通常来说,我们会把职业生涯分为四个部分:技能学习期、职业尝试期、职业稳定期、职业成熟期。

而每个时期,都有各自的重点与目标。

比如正处在学习期刚刚踏入职场的年轻人,最不应该追求的就是所谓的稳定,因为在这个事情,你需要做的是试错找到自己最适合的道路。

很多人批评现在年轻人不够稳重,一言不合就辞职,然而说实话,在我看来很多情况下“不喜欢,所以要换工作”其实是年轻人的正当诉求。

对于年轻人来说资历是最大的资本,这个时候负担小,精力旺盛,学习能力强,拿出几年的时间去试错,这点代价放到他整个职业生涯的旅程上来看根本就是微乎其微。

我曾经招聘过一个应届生,以美工的身份入职,一个月的试用期里,小伙子的工作可以说是可圈可点。

眼看就要转正了,他就突然跑来辞职,给出的理由是他觉得这份工作并不是他想做的,他不喜欢这个职业,他真正想做的是去做影视后期,尽管他没有相关的经验。

小伙子辞职了之后,我关注了一段时间他的动态,很快他找了一家做后期的工作室去实习。

学习了半年之后,又离开了那家工作,重新找了一份正式的后期工作。

到了现在他已经开了一家小工作室,专门从事高端婚礼年会的创意视频制作工作。

从很多角度来说,像他这种毫无经验就裸辞,然后又跑去贸然进入一个完全陌生的行业,很明显是一个不合理也不理智的选择。

但是,如果他是一个本身对自身看的很轻,又对自己的职业生涯有着明确规划的人,那么这一步的果断,其实正是他对未来奠定良好发展的基础。

学习期之后,当一个人的职业生涯进入了稳定期,这个时候他最重要的就是开始积累自己的能力与经验。

谨慎选择一份在未来几年相对稳定,且能够让自己获得持续成长的行业,在行业中不断的深耕下去,稳定期的积累多寡,往往也就决定了他成熟期的收获。

到了职业生涯的成熟期,前面所做的一切努力都开始得到回报,或许前面几年你的收入并没有很高,但到了此时你会发现,自己的收入增长开始变得后劲十足。

在自身的发展之下,好一些会成为行业当中的优秀之人,差一点也是经验丰富可以倚靠的老成持重之人。

学人工智能,要学哪些?

人工智能是python语言的一大应用领域,python也是最适合人工智能的语言,需要学习python,以下是学习大纲:

阶段一:Python开发基础

Python全栈开发与人工智能之Python开发基础知识学习内容包括:Python基础语法、数据类型、字符编码、文件操作、函数、装饰器、迭代器、内置方法、常用模块等。

阶段二:Python高级编程和数据库开发

Python全栈开发与人工智能之Python高级编程和数据库开发知识学习内容包括:面向对象开发、Socket网络编程、线程、进程、队列、IO多路模型、Mysql数据库开发等。

阶段三:前端开发

Python全栈开发与人工智能之前端开发知识学习内容包括:Html、CSS、JavaScript开发、Jquerybootstrap开发、前端框架VUE开发等。

阶段四:WEB框架开发

Python全栈开发与人工智能之WEB框架开发学习内容包括:Django框架基础、Django框架进阶、BBS+Blog实战项目开发、缓存和队列中间件、Flask框架学习、Tornado框架学习、Restful API等。

阶段五:爬虫开发

Python全栈开发与人工智能之爬虫开发学习内容包括:爬虫开发实战。

阶段六:全栈项目实战

Python全栈开发与人工智能之全栈项目实战学习内容包括:企业应用工具学习、CRM客户关系管理系统开发、路飞学城在线教育平台开发等。

阶段七:数据分析

Python全栈开发与人工智能之数据分析学习内容包括:金融量化分析。

阶段八:人工智能

Python全栈开发与人工智能之人工智能学习内容包括:机器学习、数据分析 、图像识别、自然语言翻译等。

阶段九:自动化运维开发

Python全栈开发与人工智能之自动化运维开发学习内容包括:CMDB资产管理系统开发、IT审计+主机管理系统开发、分布式主机监控系统开发等。

阶段十:高并发语言GO开发

Python全栈开发与人工智能之高并发语言GO开发学习内容包括:GO语言基础、数据类型与文件IO操作、函数和面向对象、并发编程等。

2017程序员该学习些什么技术

事实上,如果列入Java,那么React、jQuery等等,或者其他多种软件包或框架也都需要被列入进来,然而这些显然会在未来几年中逐步更新换代的。考虑到篇幅所限就不多叙述别的知识了。)

1.Go语言

今年10月的TIOBE编程语言人气榜上,Go语言得到了简单但有力的描述:“谷歌的Go语言几乎无可匹敌,而这主要是受到Docker等Go语言编写的容器应用方案的大力推动。”

尽管Go语言最初的目的有实验性质,但Docker以及其它企业都把它作为自身基础设施的有力支柱,而理由则非常简单:它拥有迅如闪电的编译与执行速度,可以使用简单方法(Goroutines)支持并发机制,并且也为程序员们提供大量选项来构建并维护现有及新型技术。然而Go语言的好处需要到代码量达到一定量之后才能体会出来,比如当你遇见一个cpp文件一个小时都编译不完的时候,你就知道简化语法增加编译速度有多重要了。Go同样面向对象,但它不存在类型结构。

以下为Go语言中的“Hello World”编写方式:

package main import "fmt" func main() { fmt.Println("Hello, World") }

2.Rust

与火狐浏览器同宗同源的Rust是一类系统编程语言,它运行速度极快、不存在段错误并且可以保障安全。与Go不同,Rust并不具备垃圾回收机制(Go的垃圾回收机制速度很快),因此Rust编程适用于嵌入式系统。

与Go类似,Rust依赖于代码分支结构——但Rust更为复杂。两种语言都是免费,并且它们都拥有自己的支持工具生态系统。Rust博客主页中的“稳定性即可交付性”口号正是Rust的理念所在; 其在RedMonkt及其它编程语言榜单上皆拥有不俗表现,其未来发展自然值得关注。

下面来看一段出色的Rust代码示例:

let number = 13; println!("Tell me about {}", number); match number { // Match a single value 1 = println!("One!"), // Match several values 2 | 3 | 5 | 7 | 11 = println!("This is a prime"), // Match an inclusive range 13...19 = println!("A teen"), // Handle the rest of cases _ = println!("Ain't special"), } let boolean = true; // Match is an expression too let binary = match boolean { // The arms of a match must cover all the possible values false = 0, true = 1, }; println!("{} - {}", boolean, binary); }

3.Git

时至今日,每个人都需要使用版本控制系统(简称VCS)。VCS实际上就是一套容纳代码及数据的存储库。它能够追踪变更,并使用开源meld等diff工具进行变更查看。

各类VCS的工作原理大体相同。大家需要利用源代码文件建立一个项目,而后即可随时对其进行检查、编辑而后确认(提交)。

由Linux之父Linus Torvalds编写的Git是一套分布式VCS,因此其可供团队成员以远程方式使用各自的文件进行编辑,而后将变更的结果进行合并。如果存在冲突,也就是两位成员对同一文件提交了不同编辑结果,Git则会在合并时以高亮方式显示冲突部分。接着,大家必须手动编辑并修改这些内容。从人气角度讲,Git已然所向披靡。

4.HTML

在今天探讨的四种技术中,HTML显然最为简单。HTML是网页标记语言,是浏览器能够阅读的语言。只要你写的东西想要浏览器能正确显示出来,那就要懂HTML。其中的/代表着关闭标签,而且大多数HTML标签都利用这种开放标签加/关闭标签的形式起效。(对于以HTML起始的内容,标头可选且为文档中的不可见部分,而本体则容纳可见部分。)

大多数其它HTML标签用于实现布局与文本格式; 其同样易于使用。尽管HTML的技术标准已经相当陈旧,但其仍然被广泛使用——如果大家尚不了解,请一定找点时间进行学习。

5.Python

如果,只能选择掌握一种编程语言,那么我的答案是Python。早在互联网诞生之前,Basic是每一位开发者所必须了解的语言选项; 如今Python就是新时代下的Basic。这是一种通用型编程语言,虽然没人会利用其编写那些“重量级”应用——例如游戏或者操作系统(这类应用仍然使用C++)。

Python易于学习,且使用缩进而非大括号标记结构。以下代码来自Python维基词条:

parents, babies = (1, 1) while babies 100: print 'This generation has {0} babies'.format(babies) parents, babies = (babies, parents + babies)

Python语言带有解释特性,因此大家可以在Python shell中尝试各种命令丈表达式。其速度很快,但相比优化型编译语言稍慢一点。它拥有规模庞大的资源库,且可通过多种方式实现进一步提速。大家可以使用pypy等替代性方案或者利用Cython将其编译为C; 如果大家了解C语言,也能够编写自己的C、Go或者Rust扩展。

Python在科学家群体中亦大受欢迎。最近推出的英特尔Python(免费)使得Python成为一种面向机器学习的可用语言,其适用场景包括大数据、神经网络以及其它相关技术。英特尔打造的这套发行版包含超过100套软件包(NumPy、SciPy等),且专门进行了优化以使用英特尔MKL及英特尔TBB库——二者内置于其中且可免费使用。大部分高强度任务都可由这些经过优化的英特尔库负责执行。

6.Linux

即使大家身为专业Windows用户及程序员,Linux同样值得加以关注,它能帮助您更快地学习,它还能使用多种技术方案。举例来说,Python、Go以及Rust就更适合在Linux平台上使用。(要在Windows上进行Rust程序编译,大家需要使用微软VC++或者MinGW——这是一套GNU编译器与工具集合,专门用于Windows平台上的开发与运行任务)。

对于Windows用户,大家只需要下载免费VirtualBox并安装一套Linux发行版(我个人推荐Ubuntu 14.04 LTS或者16.04 LTS)即可开始Linux之旅。在此之后,大家即可学习Linux,安装各类编程语言,运行本地LAMP(Linux Apache MySQL PHP)Web服务器甚至尝试进行开发工作。


当前名称:Go语言实现神经网络,golang 神经网络框架
链接URL:http://scyanting.com/article/hdsooc.html