前言

近几年人工智能的浪潮袭来,日常生活中的资讯获取、按下的每一次手机快门、出国旅游时翻译app的每一次转译,背后都掺杂着复杂的人工智能算法。与此同时,机器学习、深度学习、强化学习、计算机视觉、自然语言处理这些陌生的概念开始频繁出现在公众号、自媒体乃至电视电台的每一个角落。

然而人工智能对于初学者来说并不是那么地友好,除了要掌握Python编程语言,还需要面对各式各样的程序运行环境配置问题。

我在学习人工智能的过程中,发现了微软家出品的免费且功能强大的云端Jupyter notebook服务器:Microsoft Azure notebooks,更为重要的是它无须任何的配置和翻墙。此外搭配Juno app,可以实现iPad连接Microsoft Azure notebooks,彻底破除iPad无法编程的限制。

什么是 Jupyter notebook?

面对人工智能无限的可能性和光明的技术前景,大家纷纷摩拳擦掌跃跃欲试,然而编程语言、算法基础以及运行环境成为三座大山挡在每一位渴望入门的初学者面前,Jupyter notebook则提供了一个友好易用的解决方案。

The notebook extends the console-based approach to interactive computing in a qualitatively new direction, providing a web-based application suitable for capturing the whole computation process: developing, documenting, and executing code, as well as communicating the results.

按照Jupyter notebook官网说法,Jupyter notebook是基于网页的用于交互计算的应用程序。

  1. Jupyter广泛应用于数据科学生态圈,它提供了多种语言的REPL(Read-Eval-Print-Loop)环境并且可以非常简便地安装。配合丰富的插件和扩展,既可以在上面编程,也可以书写数学公式,更可以直接生产幻灯片展示。
  2. 此外它优秀的交互性和UI设计,让它用起来好像一张稿纸,你可以用它记录你思考探索的每一个环节,每一个单元(cell)运行结果直接出现在单元的后面。并能方便快捷地插入或生产格式图表。
  3. 很多网站/机构都支持,例如Github上可以直接展示运行的结果,Coursera上著名的深度学习系列课程用Jupyter notebook作为作业载体,海外很多高校人工智能相关课程也将其作为配套的运行环境。

如果上面的解释还无法说服你使用Jupyter notebook,不妨看一看知乎上的问题《数据分析为什么常用Jupyter而不是直接使用Python脚本或Excel》

通过下面这个视频,可以直观了解Jupyter notebook的编写流程和运行方式。

文字版的教程可以参考《[译]给初学者的Jupyter Notebook教程》以及《基于Jupyter Notebook从头学习机器学习|入门资料

Jupyter notebook的缺点在于:

  1. 需要颇为繁琐的安装和配置(尤其是依赖的软件包管理),此外还要时不时地更新已安装的软件版本。如果安装在本地,随着时间推移环境变得复杂维护起来较为吃力;如果安装在云端,则需要更为复杂的配置,有时还会产生云服务的费用。
  2. 运行前需要启动Jupyter notebook服务器,因此无法随时随地访问和编写。notebook本身可以托管在第三方(如Github),但是无法动态加载和编辑。
  3. 作为初学者,往往不希望花费太多精力在环境配置和维护上,随时能打开一个运行着的notebook就开始编程是大家的目标。

什么是 Microsoft Azure notebooks

Microsoft Azure notebooks是微软出品的搭建在Azure云服务上的Jupyter notebooks服务器,根据官网介绍,它支持包括Python2、Python3、R和F#在内的多门编程语言。

如何创建并运行Azure notebooks

想要创建Azure notebooks,首先需要拥有微软的账号,这个账号和Office系列软件的账号是通用的。每个账户下可以创建多个项目(Project),每个项目下可以创建多个Azure notebooks。惊喜的是微软收购Github之后,现在还支持从Github的代码仓库(repository)直接上传到Azure notebooks。

创建好项目之后,在项目的主页可以看到该项目下的所有文件,包括Azure notebooks和其他类型的文件。

除了可以设置项目的可见性(是否公开),还可以添加额外的运行环境(例如是否在初始化notebooks之前运行一个shell脚本。具体设置参见官方文档


默认情况下项目的运行环境是Free Computer tier,硬件资源是4GB内存和1GB的数据存储。如果订阅了Azure云服务,可以创建更大规格的运行环境,但需要另外付费。

打开Azure notebooks之后,界面和键盘快捷键和普通Jupyter notebooks完全一样。

Azure notebooks功能详解

1. Terminal终端的使用

在项目主页可以打开运行环境的Linux终端,在这个终端可以通过标准Linux命令行完成诸如数据下载、编辑和管理文件、进程检查等等操作。甚至可以通过pip或conda命令来安装项目的依赖包

2. 放映模式(slideshow)

Azure notebooks预装了Jupyter的Slideshow扩展(RISE),因此可以直接以放映模式呈现notebooks。

3. 访问数据资源

人工智能项目往往需要使用大量数据来训练算法,Azure notebooks支持从电脑上传或从URL下载数据文件,并直接在notebooks中访问。同时也支持将程序处理出的数据导出成文件。如果数据本身已经存在于Azure云储存,Azure notebooks也提供了很好的集成。

4. 使用Azure内置的机器学习服务

Azure notebooks集成了自家的机器学习服务(Azure Machine Learning Service)。Azure的机器学习服务提供了基于云端的运行环境,支持数据准备、训练算法、测试、部署、管理和监控等机器学习项目的所有环节。

在创建项目时,只需要从特定的Github上的Azure/MachineLearningNotebooks仓库导入即可。详细设置参见官方文档

优秀的Azure notebooks项目

由于Azure notebooks允许设置公开项目,因此涌现了一大批高质量的优秀笔记本。官网上也推荐了包括Python编程语言、数据分析、数据科学、Azure机器学习入门等笔记,都是可用于学习提升的优质资源。

Juno:iPad上的Jupyter客户端

Azure notebooks是基于浏览器的在线Jupyter服务器,我在无意中发现,已经有国外大神Alex Staravoitau开发了一款 基于iOS的Jupyter客户端:Juno。并且Juno的Pro版本(98元人民币)支持连接Azure notebooks服务器,这样一来就可以使用iPad编写Python代码,开发人工智能项目。

Juno界面

Juno完全还原了Jupyter notebooks的所有功能,免费版本提供了Python、Numpy、Matplotlib和SciPy的示例教程,可以在Juno的Jupyter服务器上编辑并运行。

在界面右上角可以对notebooks的内核进行控制,并可以通过屏幕右下角运行代码块。

Juno快捷键

iPad连接上键盘之后,长按Command键可以看到Juno支持三页的快捷键。通过这些快捷键基本覆盖了Jupyter notebooks的常用操作。

令我比较意外的是,Juno甚至还提供了完整的Jupyter command!激活方法是点击顶端中部的notebooks名弹出下拉菜单,选择“Jupyter Commands”

Juno Pro

升级到Juno Pro后,可以令其通过IP地址+端口号的方式连接到任意的Jupyter notebook服务器。也可以连接到第三方Jupyter notebooks服务提供商如Microsoft Azure Notebooks。Juno Pro目前的售价是98元,个人觉得如果有在iPad上编写Jupyter notebook的需求,不妨考虑升级到Pro。

结语

有了Azure notebook,我们再不用花费时间和精力安装配置自己的Jupyter服务,只需要联网就可以访问到免费快捷的在线Jupyter notebook,并且无缝对接微软的人工智能软件包。另一方面,完备的功能和快捷键让Juno拥有了接近原生Jupyter notebooks的体验。两者结合极大地解放了我们的工作地点和环境,也为iPad生态注入更为强大的生产力。