加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 站长资讯 > 评论 > 正文

梯度下降是最好的程序员

发布时间:2021-04-28 12:00:11 所属栏目:评论 来源:互联网
导读:pathy 同时也回复到:「我们正向前移动了一点,与原来对程序有完整的定义不同,我们现在只是写一个大致的架构,这样的架构会通过权重参数化。如果我们有一个好的评估标准,那么最优化算法就能帮我们找到更好的解。」 这里 Karpathy 说的就是机器学习和编程的

pathy 同时也回复到:「我们正向前移动了一点,与原来对程序有完整的定义不同,我们现在只是写一个大致的架构,这样的架构会通过权重参数化。如果我们有一个好的评估标准,那么最优化算法就能帮我们找到更好的解。」

这里 Karpathy 说的就是机器学习和编程的区别,ML 会通过梯度下降等最优化方法自动搜索最优解。但这里有个问题,模型需要梯度才能向着最优前进,因此模型的很多部分都要求是可微的。鉴于这一点,很多人也就将 ML 称呼为可微编程了。

但是可微编程只能用于机器学习吗?它能不能扩展到其它领域,甚至成为编程语言的基本特性?答案是可以的,这就是 Julia 团队及 MIT 等其他研究机构正在尝试的。

近年来,机器学习模型越来越精妙,展现出了很多科学计算的特性,侧面凸显了机器学习框架的强大能力。研究者表示,由于广泛的科学计算和机器学习领域在底层结构上都需要线性代数的支持,因此有可能以可微编程的形式,创造一种新的计算基础设施。文中,研究人员提出了一种可微编程系统,它能在 Julia 语言中完成梯度计算,并成为 Julia 语言的第一级特性。这使得构建深度学习模型变得更直观。更重要的是,这令用户可以使用已有的 Julia 科学计算包去构建深度学习模型,并高效实现梯度计算。

那么可微编程与 TensorFlow 或 PyTorch 等 DL 框架又有什么不同,它的速度难道还要快于这些构建细算图的系统?研究者表示,可微编程会执行 source-to-source 的转换,自动微分转换基本上没有运行时开销,因此它要比反向传播的实际计算成本更有优势。ote 将源代码视为计算图,省略了中间语言的过程。更重要的是,通过控制流进行子梯度计算,这种梯度计算的方法可以应用在任何一种控制流分支上,具有代码的抽象性。

科学计算和机器学习的联姻:可微编程

咋一看,科学计算和机器学习分属不同的领域。现代机器学习在神经网络上的突破使得整个学科取得了极大的进步。神经网络可以解决很多不同的计算机科学问题,使得人们开始设计新的硬件和软件,以便于提升性能,处理极大量的标注数据,并能够同时将训练好的模型部署在设备上。科学计算与之相反,它拥有非常悠久的历史,且希望使用一系列从物理现象中获取的建模技术。

和典型的机器学习研究者不同,许多科学计算学家在数据量较少、但计算复杂度更高和范围更广的数据上进行研究。但是观察来看,科学计算和机器学习有共同点。两个领域都倾向于使用动态编程语言进行计算,如 Python、R 和 Julia。通常来说,Python 和 R 的关键性能模块都使用 C++和 Fortran,而 Julia 中则较少。而且两者的核心计算流程都是基于线性代数的,并且有硬件专门用于加速这种计算。

由于机器学习和科学计算都依赖线性代数,且已有大量硬件专门优化用于加速运算,因此可微编程具有进一步融合两者的潜力。使用何种语言完成这项工作呢?由于编程工作量的问题,研究人员仅选择在 Julia 语言上增加可微编程能力。选择这门语言的一个原因是,Julia 语言已有大量的机器学习和科学计算包,都是纯粹的 Julia 语言实现。这可以帮助他们在相对较多的应用中进行测试。

研究人员表示,已有的 Julia 程序包可以直接使用他们的系统,包括处理用户定义类、基于状态的控制流,以及通过「source-to-source」自动微分进行大量标量运算。论文展示了一些使用可微编程的案例。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读