jax可微分编程的笔记(5)

jax可微分编程的笔记(5)

第五章 JAX编程范式及即时编译

对于任意一门哲学的理论,都是先有世界观,然后才能有方法论
λ演算正是函数式编程的“世界观”

我曾经高傲地以为,尽管大数据,人工智能和量子计算正推动着
人类社会第四次工业革命的浪潮,但如果从理论的视角审视年轻
的人工智能,它实则远远无法被称为一门科学:应用领域的成功
唯独说明了自动微分框架自身的强大,依赖为数不多的核心算法
和变态膨胀的计算资源,基于自动微分框架的深度学习正霸道地
展现出数据与算力堆叠之下几可乱真的“智慧”。

滥觞于20世纪30年代的可计算理论,其中由邱奇提出的λ演算则以
貌似复杂的数学符号将其自身层层包裹。但是如果你走进那个由函
数和变量支撑起的奇妙世界,或许会被其基本假设的简洁和符号
系统的强大深深地震撼:它的优美程度完全不亚于可微分编程的
庞大框架本身!

5.1 函数式编程

编程范式是指软件工程中的编程风格,它既可以用于描述某一门
编程语言的设计风格,也可以用际描述某一段程序代码的编写思路。
不同的编程范式,其本质是思维方式的不同。编程范式主要有
函数式编程,结构化编程,面向对象编程,还有逻辑式编程等。

5.1.1 函数式编程的价值观

所谓的函数式编程,便是让代码的编写回归于严格的数学,
使人们仅仅专注于数据的处理流程,而非变量本身的取值
变化,其本质是思维方式的转化。

例如从函数的视角来看,在函数式编程中,我们期待所写出
的函数都是纯函数。纯函数不会产生任何可观测的副作用。
从函数的视角来看,无状态,时间不变性(也称为幂等性)
及空间不变性,正是数学意义上函数的特征。

从变量和赋值的视角出发,更加严格的函数式编程还强调
变量的不可变性。

尾递归这一技巧,在函数式编程中是极为常见的。

函数式编程的优点,在于每一个构成函数自身的独立性,
这样的独立性不仅仅可以减少代码运行过程中潜在的错误
还具有下述一系列可能的优点。
可缓存,可移植,自文档化,可测试,引用透明,并行。

5.1.2 JAX中的即时编译

即时编译是一种提高解释型程序性能的方法,通过在代码
执行过程中对其进行编译,提高程序的性能。目前对于即
时编译的讨论主要基于javascript语言展开。不过在jax中
我们同样可以使用jax,jit修饰符,实现对函数式风格的
代码的编译。

5.2 λ演算

λ演算可以被称为全世界最小的通用编程语言。
λ演算是函数式编程范式的思想来源。

5.2.1 λ演算的基本设定

变量,函数,赋值这三者构成了λ演算的核心。
从原则上来说,λ演算中的变量可以用除λ以外的
任意符号来表示,而符号λ则被留作函数的定义。熟悉Python
语法的读者或许不会对 “lambda x:(x,x)”这样的表达式感到
陌生。它接受任意类型的参数x作为函数的变量,返回一个
二元元组(x,x).在λ演算中,函数 lambda x:(x,x)对应着如下的
λ表达式: λx.xx
在“.”号之前的变量x代表函数的输入,在 "."号之后的“xx”代表
函数的输出。
 
在λ演算中,函数是“一等公民”。

5.2.2 λ演算中的布尔代数

从λ演算出发,演绎出布尔代数的基本结构。为此,我们定义
布尔变量T和F。它们对应着λ演算中的两个函数:
T:=λxy.x
T:=λxy.y
基于此,我们定义布尔代数的与运算and,或运算or, 非运算not
and:=λab.aba  or:=λab.aab  not:=λab.aFT

对于与运算满足如下的四个性质:
and T T = T      and T F =F   and F T  =F and F F =F

作为一个示例,我们检查and运算的第一条性质:
and T T = (λab.aba)(λxy.x)(λxy.x)
= (λa.(λb.aba))(λxy.x)(λxy.x)
= (λb.(λxy.x)b(λxy.x))(λxy.x)
= (λxy.x)(λxy.x)(λxy.x)
= (λxy.x)
        = T

其它的演绎过程与上述的过程是类似的。
cond(A M N) 与 (if A then M else N)是逻辑上完全等价的。

λ演算几乎不含有任何语法糖,直击编程的本质,即计算的底层
实现就是布尔代数的推理过程。布尔代数的运算符对应着电子
硬件的逻辑门,计算机底层的软硬件,在此实现了连通。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/706569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试笔记(二):软件测试流程

1 测试流程概述 软件测试流程包括: 测试计划:测试计划是指根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,使得随后所有的测试工作都围绕着测试需求来进行,同时适当选择测试内容&…

IDEA如何开启Dashboard

普通的面板 Run Dashboard面板 修改配置文件 找到项目的.idea文件夹 点击编辑workspace.xml文件 添加下方代码 <component name"RunDashboard"><option name"ruleStates"><list><RuleState><option name"name" valu…

【Linux】进程信号 --- 信号的产生 保存 捕捉递达

文章目录 信号的感知信号的结构描述 一、信号的产生1.通过键盘发送信号2.通过系统调用发送信号 二、信号的保存&#xff08;PCB内部的两张位图和一个函数指针数组&#xff09;理解三张数据结构表block pending haldler 三、通过代码编写 理解 信号的保存和递达1.信号集操作的库…

[极客大挑战 2019]LoveSQL1 题目分析与详解

一、题目简介&#xff1a; 二、通关思路&#xff1a; 1、首先查看页面源代码&#xff1a; 我们发现可以使用工具sqlmap来拿到flag&#xff0c;我们先尝试手动注入。 2、 打开靶机&#xff0c;映入眼帘的是登录界面&#xff0c;首先尝试万能密码能否破解。 username: 1 or 11…

深入理解ngx_http_proxy_connect_module模块(上)

目录 1. 缘起2. 分析验证环境的配置3. 配置指令3.1 proxy_connect3.2 proxy_connect_allow3.3 proxy_connect_connect_timeout3.4 proxy_connect_read_timeout3.5 proxy_connect_send_timeout3.6 proxy_connect_address3.7 proxy_connect_bind3.8 proxy_connect_response3.9 pr…

弱结构化日志 Flink SQL 怎么写?SLS SPL 来帮忙

作者&#xff1a;潘伟龙&#xff08;豁朗&#xff09; 背景 日志服务 SLS 是云原生观测与分析平台&#xff0c;为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务&#xff0c;基于日志服务的便捷的数据接入能力&#xff0c;可以将系统日志、业务日志等接入 …

《PCI Express体系结构导读》随记 —— 第II篇 第10章 MSI和MSI-X中断机制(1)

前言中曾提到&#xff1a;本章重点介绍MSI和MSI-X。 在PCI总线中&#xff0c;所有需要提交中断请求的设备&#xff0c;必须能够通过INTx引脚提交中断请求&#xff0c;而MSI机制是一个可选机制&#xff1b;而在PCIe总线中&#xff0c;PCIe设备必须支持MSI或者MSI-X中断请求机制&…

10.selenium的基本使用

selenium是一个关于爬虫功能python的库&#xff0c;它的整体逻辑与之前的请求爬虫思路不同。selenium是模拟出一个浏览器&#xff0c;你通过代码操作这个浏览器从而获取一些信息&#xff0c;比如执行click()就相当于点击了浏览器中的某个元素&#xff0c;相当于是针对浏览器的鼠…

PyTorch张量运算

诸神缄默不语-个人CSDN博文目录 在深度学习领域&#xff0c;张量是一种非常核心的数据结构&#xff0c;它是标量、向量和矩阵等数学概念的高维扩展。PyTorch作为一款流行的深度学习框架&#xff0c;提供了丰富的张量操作API&#xff0c;帮助研究人员和开发者有效地实现复杂的数…

一款开源.NET WPF界面库介绍

一款开源.NET WPF界面库介绍 这是一个WPF版的Layui前端UI样式库&#xff0c;该控件库参考了Web版本的LayUI风格&#xff0c;利用该控件库可以完成现代化UI客户端程序&#xff0c;让你的客户端看起来更加简洁丰富又不失美感 如何使用 步骤一 : 添加LayUI.Wpf Nuget包; Inst…

物联网APP开发:技术、挑战与前景

随着科技的快速发展&#xff0c;物联网&#xff08;IoT&#xff09;已经成为当今世界的重要趋势。物联网是将物理世界的各种“事物”与互联网连接起来&#xff0c;通过智能设备、传感器和执行器实现数据的收集、交换和处理&#xff0c;以改善生活和工作的方式。物联网APP是实现…

关于大数据学习之hadoop的安装

前部安装提示&#xff1a; 建议先将电脑中基础内容进行清洁&#xff0c;维持基础的极简主义&#xff0c; 通过这样的方式可以快速帮助我们完成软件的安装&#xff0c;同时也是符合计算机的基础网络结构&#xff0c; 什么是hadoop&#xff1f; 处理大数据的分布式存储和计算框…

LeetCode_Java_动态规划系列(3)(题目+思路+代码)

338.比特位计数 给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 class Solution {public int[] countBits(int n) {/** 思路&#xff1a;* 1.创建一个长度为 n…

pr2024 Premiere Pro 2024 mac v24.2.1中文激活版

Premiere Pro 2024 for Mac是Adobe公司推出的一款强大的视频编辑软件&#xff0c;专为Mac操作系统优化。它提供了丰富的剪辑工具、特效和音频处理选项&#xff0c;帮助用户轻松创建专业级的影视作品。 软件下载&#xff1a;pr2024 Premiere Pro 2024 mac v24.2.1中文激活版 无论…

java高级——反射

目录 反射概述反射的使用获取class对象的三种方式反射获取类的构造器1. 获取类中所有的构造器2. 获取单个构造器 反射获取构造器的作用反射获取成员变量反射变量赋值、取值获取类的成员方法反射对象类方法执行 反射简易框架案例案例需求实现步骤代码如下 反射概述 什么是反射 反…

【学习总结】什么是弹性负载均衡? LB和ELB的区别

[Q&A] 什么是 LB (Load Balancer) 负载均衡器&#xff1a; 这是一个广泛的概念&#xff0c;泛指任何用于在网络流量进入时进行分配以实现服务器集群间负载均衡的设备或服务。传统的负载均衡器可以是硬件设备&#xff0c;也可以是软件解决方案&#xff0c;其基本目标是将客…

关于Vue中npm install出现报错及解决方法

在Vue项目开发过程中&#xff0c;我们经常会使用npm工具来安装项目所需的依赖包。然而&#xff0c;有时候在执行npm install命令时会遇到各种报错&#xff0c;这可能会影响项目的正常开发和运行。本教程将介绍一些常见的npm install报错及其解决方法&#xff0c;帮助开发者更好…

利用 ChatGPT 提升个人工作、生活品质

利用 ChatGPT 提升个人工作、生活品质和个人智慧是一个多方面而又切实可行的方法。 以下是一些具体的建议&#xff1a; 获取信息和知识&#xff1a; ChatGPT 可以回答各种问题并提供相关信息和知识。你可以利用它来查询工作中遇到的问题、学习新的知识领域或是获取日常生活中的…

【JSON2WEB】06 JSON2WEB前端框架搭建

【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 前端技术路线太多了&#xff0c;知识点更多&…

HC32F460 是否有 RTC?在电池供电方案中该如何使用?

[技术问答]HC32F460 是否有 RTC&#xff1f;在电池供电方案中该如何使用&#xff1f;_hc32f460 rtc-CSDN博客 华大HC32A460 系列介绍&#xff08;三&#xff09;_华大单片机内部温度传感器-CSDN博客 HC32F460PETB-LQFP100-华大半导体有限公司 [【HC32F460开发板测评】&#xf…