Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

杜伟机器之心报道

这篇罕见的符号编程论文,让你在Jupyter Notebook中手绘草图并变成代码

据悉,本文是首个探索量子计算机编程手写图解范式的系统,也是为数不多的探索手写编程范式的论文之一。

当今,打字系统形成了计算机编程的事实标准和主导范式。然而,在编程出现时,最早的计算机编程符号是手写的,而非打出来的。例如,在著名的 1945 年第一份 EDVAC 报告中,冯 · 诺伊曼将图表与文本视作等同。实际上,当打字机界面被用于编程时,符号才被序列化并被称为编程「语言」。

最近,康奈尔大学研究团队创建了一个界面,允许用户在计算机代码中手写和画图,这是对传统打字型编程的挑战。

这个笔式界面被称为 Notate,它让基于网络和交互型计算数字笔记本(如 Jupyter notebooks)打开绘图画布,在传统的数字化计算机代码行中手写图。

就运行原理而言,在一个深度学习模型的加持下,Notate 界面连接了手写和文本编程上下文,即手写图中的符号可以引用文本代码,反之亦然。例如,Notate 能识别手写编程符号如「n」,然后将这些符号连接到它们的打字代码。

在具体的案例研究中,研究者演示了在 Jupyter notebook 代码单元内手绘量子电路图。详细介绍视频如下。

在 10 月 29 日至 11 月 2 日举行的 ACM 用户界面软件和技术研讨会上,Notate 的论文《Notational Programming for Notebook Environments: A Case Study with Quantum Circuits》获得了荣誉提名奖。论文一作为康奈尔大学信息科学博士生 Ian Arawjo。

他表示,「这样一个系统对于数据科学非常有用,尤其适用于绘制草图和图表,然后与文本代码进行互操作。」

图片

论文地址:https://ianarawjo.therottingcartridge.com/docs/Arawjo-Notational-Programming-UIST-2022.pdf

研究概览

本文中,研究者探讨了笔式硬件和机器学习的最新进展如何对一些编程实践进行重新配置。他们表达了这样一个愿景,即称之为符号编程(notational programming)的范式可以支持手写和打出符号之间的连通

因此,研究者认为可能不仅需要开发新的用户界面或者改进对流程图等现有符号的识别,还需要对历史上围绕编程出现的文化实践、表示和观念进行积极的重新配置。

为了探索符号编程,研究者设计了一个 Jupyter notebooks 的扩展——Notate,它能够在代码行内打开绘图画布,并允许函数在本地将画布中的对象接收为参数。Notate 架构传递这些对象作为局部作用域的参考,使得打字变量在手写上下文中被引用,反之亦然。他们将这种交互称为隐式跨上下文引用,通过进一步模糊「输入」和「输出」之间的区域对双峰编程(bimodal programming)以往的工作进行了扩展。

图片

下图为嵌入在 Jupyter notebook 中的系统的主界面,图①为绘图画布在一行代码单元内打开,图②为全屏模式,通过触摸或点击绘图画布访问,图③为基本工具栏。

图片

为了测试具体域中的符号编程界面和隐式跨上下文引用,研究者选择了量子计算,原因在于:量子计算的编程人员即使在打出代码时,也会经常在电路图和文本之间进行转换。Ashktorab 等人的一篇探索性论文注意到了笔式计算在量子计算领域中的应用潜力,但目前并没有出现这样的系统。

Ashktorab 等人论文地址:https://dl.acm.org/doi/10.1145/3290605.3300486

因此,研究者引入了一种 toy 符号 Qaw,它通过自定义门释义、捆绑线和递归等抽象功能增强了量子电路符号。下图为用来编写量子电路的一些常见符号。

图片

研究者使用深度学习和经典计算机视觉技术为 Qaw 的子集实现了一个解释器,如下为 Notate 系统中解释手写量子电路的过程,分为五步完成。

图片

为了验证 Notate 和 Qaw 原型的效果,研究者对 12 名熟悉 Python 和 notebook、但初学量子编程的程序员展开了一项研究。他们给参与者六个复杂度不断增加的电路,并让参与者将它们编写到机器中。研究者发现,几乎所有参与者都认为隐式跨上下文引用概念很直观,但得到的反馈表明还可以进一步改进调试基础设施、界面设计和识别率。

下图为其中一位参与者生成了类似于量子傅里叶变换主体的模式。电路 A 和 C 使用 Qaw 斜杠符号和隐式跨上下文引用实现递归定义。

图片

研究者还将 Notate 和 Qaw 与使用 IBM Qiskit API 进行量子编程的工作流程进行了比较,以验证自己方法的效果。结果表明,对于 Python 程序员而言,Qaw 在性能时间方面能够与 Qiskit 媲美,但仍需进一步研究以了解这些方法的相对优势。

更多技术细节请参阅原论文。

参考链接:https://news.cornell.edu/stories/2022/11/programming-tool-turns-handwriting-computer-code

理论量子编程Jupyter Notebook
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

Jupyter技术

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等 。

量子计算技术

量子计算结合了过去半个世纪以来两个最大的技术变革:信息技术和量子力学。如果我们使用量子力学的规则替换二进制逻辑来计算,某些难以攻克的计算任务将得到解决。追求通用量子计算机的一个重要目标是确定当前经典计算机无法承载的最小复杂度的计算任务。该交叉点被称为「量子霸权」边界,是在通向更强大和有用的计算技术的关键一步。

推荐文章
暂无评论
暂无评论~