SageMath and Python on Jupyter

SageMath 是一个开源免费的数学软件,综合了大量的开源数学软件,用Python当做软件基本语言。因此,可以在使用Python的过程中,把SageMath当做一个额外功能模块来用。当然,如果是编程来使用,则这样用就够了。不过,SageMath和Python合起来还可以当做“计算器”来使用。这个时候,就最好有一个图形界面,并且能够把结果也在必要的时候做图形呈现,最好还能够分享。

Jupyter就是这样一个界面环境。

有两个方法可以通过Jupyter来集成使用SageMath和Python。

  1. 第一,安装完成SageMath之后,在SageMath界面下打开Jupyter。例如,$./SageMath/sage -n jupyter。前面的SageMath是SageMath的安装目录。SageMath自带了Jupyter,因此,不用重新安装Jupyter。
  2. 第二,单独安装Jupyter和SageMath。在Jupyter界面下打开SageMath。为了能够让Jupyter知道SageMath在哪里,我们需要安装一个Jupyter拓展包,通过下面的命令:$sudo jupyter kernelspec install SageMath/local/share/jupyter/kernels/sagemath。其中的SageMath是SageMath的安装目录。之后,就可以通过运行jupyter notebook来实现通过Jupyter来使用SageMath和Python了。
  3. 如果你还想在任意的目录下都能够通过运行jupyter notebook来实现通过Jupyter来使用SageMath和Python,则还需要修改路径设定,让系统知道SageMath的sage文件和bin文件存在哪里。例如,通过在.bashrc中增加一行:export SAGE_ROOT=SageMath。其中SageMath是SageMath的安装目录,例如/opt/SageMath。以及添加路径,例如 export Path=SageMath:$PATH 来实现。

    注意,这是linux系统,Python是默认系统性安装的。如果其他系统,可能还需要在Jupyter下配置Python。

    安装一个可以在网上完成这个计算——通过Jupyter来集成使用SageMath和Python——的服务器。甚至可以考虑建一个包含机器学习功能的服务器,例如通过anaconda(可以连接上TensorFlow或者其他机器学习包)。如果使用anaconda则可以采用清华anaconda软件仓库

    如果希望其他用户也能够使用这个带了SageMath内核的jupyter notebook,则还需要安装JupyterHub。

《系统科学导引》挑错贴

所有《系统科学导引》电子版和纸质版的读者,如果你发现内容错误、错别字等各种形式的错误,可以在这里回帖。先谢谢亲爱的读者你了。

尤其是在上我的课的读者,不管是实际课堂的还是网上课堂的,如果发现错误,请在这里留下一句话。例如,可以简单地说,PXX,(第X段,)某某字,或者某部分内容,应该考虑修改,或者应该改成什么什么。

推荐MIT6.034《人工智能》课程

最近,在看了偏技术和技巧的当然同样很不错的Andrew Ng的人工智能课程之后,偶然翻到了推荐MIT的Patrick Henry Winston《人工智能》课程。其中对于,人工智能到底什么的探讨,并且从大量的具体的人工智能系统的背后算法来讨论人工智能是什么的角度,给了我非常深刻的启发:实际上,任何问题的解决,如果我们都明确地找到出来——知识基础、思考方式——是什么,那么,我们都可以找到这些问题、知识和方式的表示,于是,在这个表示的基础上,把问题解决变成一个可操作的问题。这个时候,这个问题的解决,还需要智能吗?那么,哪些问题的解决,是可以这样人工智能化的呢,还是说其实大量现在看起来还不能够人工智能化的问题,实际上仅仅是问题、知识和思考方式还不明确,或者是表示没有找到,而已呢?如果是这样,那么,到底,什么智能是不能人工的那部分智能呢?

这样的思考,甚至给我我在教系统科学导引的时候的一个非常好的例子:任何解决非平庸问题的算法或者说软件系统,其实都是系统——所谓的系统就是一定要找出来尽量少的明确的知识、思考方式的集合,并且明确表示出来问题、知识和方式,于是剩下的事情,只不过是尝试和组合。例如,符号积分算法就是依赖于一个非常有限的知识:20个左右的基本积分公式、12个左右的简单积分变换、12个左右的经验积分变换,加上决策树的思考方式:从起点开始,到终点,每一次都对被积函数做上面的变换或者查公式。仅此而已。实际上,任何一个软件工程的问题,同样需要找到这样的基础知识、基础操作、思考方式,然后构建一个解决某一类问题的完备的系统。

顺便,在讲解目标树决策树的时候Winston强调了,把一个东西明确提出来的威力:“我们给它一个名字,就有了掌控和运用它的力量(When you name it, you have power over it)”。

沿着这个——把问题解决的知识基础(积分公式和变换)和思维方式(决策树)分开并且在知识内部和方式方法内部都找到尽可能少的核心元素来构建一个生成体系的——系统性思考的角度做展开,我发现其深刻的价值远远不止以上这些。我先列出来我扩大了的一张表:

  1. 最好能够成系统的问题。成系统的意思就是其中有少数核心问题,其他的问题可以通过这些核心问题运用系联来生成,或者倒过来其他问题可以通过系联归并到核心的问题。
  2. 成系统的知识基础。成系统的意思就是其中有一些核心知识,其他的知识可以通过这些核心知识,依靠系联来生成。
  3. 运用上面的知识基础来解决上面的问题的思维方式和分析方法,最好也是成系统的,也就是说有联系可生成。
  4. 如何提出这些问题,有没有一般的方法?例如抓住联系来问问题也就是系联性思考,例如批判性思维,例如试验和实践的检验。
  5. 如何得到这些知识?可以通过构设这些知识发现的问题场景来从发现知识的过程中学会这些知识。其中从现实到模型的抽象化过程可能特别的重要。逻辑推理和数学计算可能也是重要的一环。
  6. 如何掌握这些思维方式分析方法?同样从使用这些方式方法来提出和解决问题的过程中来体验和掌握这些方式方法。
  7. 如果以上的问题都有了比较好的回答,是不是存在一个高效率的教和学的方式,例如一个可以性化的学习顺序,以及一个可以个性化的学习问题发现和解决的系统?

在整理了这张表之后,我发现,实际上,前面三条是软件系统或者是问题解决的关键步骤,加上后面的三条则是教和学的关键——教和学不仅要让学习者学会知识和方法,还需要学会创造知识、创造方式方法、创造性地运用知识和方式方法。

实际上,构建学科概念地图,就在梳理和解决前三条,并且最好整理出来一个生成的体系。而从概念地图开始,选择具体的例子来体现学科大图景,实际上,就是关注后面的四条。

这一切的一切,都是为了“教的更少,学得更多”,让学习者建立起来一个生成已有的甚至全新的知识和方式方法的体系,而这样的生成系统的关键就是系统的思想——系统的元素和元素之间的联系,以及具有生成能力的核心的元素。

也就是说,教和学的目标不是知识,知识仅仅是媒介,我们通过这个媒介来习得获取知识的思维方式和分析方法,然后,当我们有了这个学科的研究对象和问题之后,把这些方式方法用到对象和问题上,原则上,可以重新把知识和知识体系发展和构建出来。

这正好就是我所说的,“以学科大图景为目标的”,“以批判性思维和系联性思考为基础的”,“理解型学习”。

后续,继续总结。

2018年《学会学习和思考》结课寄语

课程结束了,大部分同学在技能和理念上的表现都不错。其他技能理念的表现上稍微差一点的那几位,学习努力程度也很不错,而且至少懂得了这个学习方法和思维方式是什么。所以,为大家的表现贺。

经过这个课程的折磨之后,我希望大家看到下面几个词的时候能够想起来一些东西。我把这样的词整理一下。

我们传授的思考方式是:系联性思考、批判性思维、以及各个学科的学科思维方式。我们传授的学习方法是:以学科大图景为目标以系联性思考、批判性思维为基础以概念地图为工具(熟练以后工具可以去掉)的理解型学习

批判性思维表现为:含义不清楚的词意义不明确的句子我不用,没有经过我的理性的考察的东西不能成为我进一步思考的基础,判断论断命题最好都是实验可检验的。

系联性思考表现为:通过思考一个东西和其他的东西的关系来明白这个东西,同时注意分析和综合,也就是需要把一个东西不断地拆分下去来明白这个东西是什么,同时还要注意不断地从拆分出来的下一层回到上面,问整体合起来说明什么。

很多时候,系联性思考和批判性思维合起来,可以体现为WHWM四问:主要说了什么(What),怎么说的(How,例子、逻辑、展开),为什么说这个为什么这样说(Why),我觉得怎么样(Meaningful)。或者,当“我”自己来表达的时候,问:主要想表达什么(What),怎么表达(How),为什么说这个为什么这样说(Why),接收我信息的人会觉得怎么样(Meaningful)。

学科大图景是指:一个学科的典型对象、典型问题、典型思维方式、典型分析方法、和世界以及其他学科的关系。

同时,我还希望你从这门课中学到教的理念和方法:教的更少,学得更多。首先,理念上,我们教的目标是学习和思考的方法、学科大图景、以及对学科的体验欣赏和责任感。为了达到这个目标中的每一条,我们都需要大量的具体知识和具体研究工作的例子。但是,知识和研究工作本身并不是教和学的目标,它们仅仅是达到这个目标所需要的材料。很多时候,只要我们整理清楚了一个学科的大图景,并且把这个学科的概念和概念相互关系搞清楚,例如通过制作概念地图,那么,就可以选择尽量少的具体知识和研究工作的例子,来实现这个教和学的目标。因此,其次,实践上,我们要大概知道如何来设计和实践能够达到这样的目标的课程:学科大图景列出来、概念地图画出来、以大图景为指导精选概念和概念联系,实践过程中注意抓住学生真正困扰的地方(这个时候概念地图做为大脑探测器,也可以发挥作用,就像我上课跟你们的交流一样),然后做好引导,做到忍住——就是不教,但是有作业要完成。顺便,这里也体现另一条教和学的理念:做中学,折腾着学,给学生犯错的机会然后狠狠扒皮。

为什么我们会把学习和思考的方法、学科大图景、以及对学科的体验欣赏和责任感当做教和学的直接目标呢?因为我们相信,人类学习的最终目标是创造知识和创造性地使用知识。而对于这两点来说,没有理解透彻(也就是建立相互联系、概念和生活和实际世界的联系)的没有方向感的知识,仅仅会起到阻碍创新的作用,使得人的脑子更加僵化。为了理解这一部分,请再次阅读一下Whitehead的《教育的目的》以及吴金闪的《教的更少,学得更多》。

希望通过这个课程的学习,大家现在和以后,都能够做到,教的更少,学得更多,学得更累,学得更开心,更具有创造性。

我希望有一天,所有的老师的教学目标所有的学生的学习目标都不再是一个搜索引擎或者一个手机,而是创造者。

这个世界有三种人(见Ken Robinson Ted Talk),不能被改变的人(un-touched),能够被改变的人(touched and moved),和改变者(mover)。具有更多的Mover的希望,就在你们身上了。让我们一起来创造出来更多的创造者,更多的Mover。

再一次分享我的签名档,共勉。
Live to make a difference(活着就是为了搞出点不一样)
Be ambitious, be determined (有野望,持之如初)
World spins on dreamers like you(世界因你的梦想而转)
See through connections(洞澈联系)
Teach Less, Learn More (教的更少,学得更多)
Learning for understanding the world and ourselves(为了理解世界和自己而教和学)
Don’t tell me facts, let me think; Don’t teach me knowledge, let me learn (不要告诉我事实,让我想想;不要教给我知识,让我学习)

《学会学习和思考》开课了,最大的解放是学习力的解放

2018年的《学会学习和思考》课程开始了。这个课程将在一个月的时间内,周一到周五每天晚上三个小时来上课。上课的主要形式就是老师做理念和技术的启发——学生学习和展示——听众批判——老师总结和再次启发——学生学习和展示…。

第一次课主要就是在学什么为什么方面做了一些刺激和铺垫(实际上还起到体现批判性思维的作用),提了提学科大图景,提了提分析和综合,接着也稍微用例子阐述了一下联系可以怎样用于帮助学习,并介绍了一下概念地图。

然后,就让学生自己来选择自己感兴趣的主题,提出问题(不能是自己已经知道答案的问题,必须有学科和探索的过程;必须站在老师的立场回答,我如果要教这些东西给学生,对学生会有点意义或者启发吗?),并自己展开学习,接着作报告(预期周四开始)。

这样的学习就好像把你扔到水里学游泳,甚至连游向哪里我都不管,只告诉你,要用你的手脚和身体啊,自己来琢磨啊,唯一要考虑的就是你的动作和水还有你的状态的关系,然后就希望你可以学会游泳。

这其实就是最根本的学习方法,有人保证你不被淹死的情况下,你自己来摸索。甚至,我们那些少量的方向性指导——这里就是批判性思维、系联性思考、学科大图景、概念地图——都不应该直接给你,而是让你通过探索通过喝水呛水自己来学会。你的哪个动作,水会给你怎样的反应,这些都是你自己要总结的,都是针对那个你自己要学会的“水”的。我们老师们不是那个具体“水”的专家,也不负责教会你那个“水”。

这就是最好的学习方法,通过折腾、探索,自己来找到适合自己适合自己喜欢的“水”的学习方法,找到以后没准还能稍微推广到其他的“水”上。有了理念和大概的方法,就要靠你们自己领悟了。希望你们自己领悟出来。你们先游,快淹死了,然后突破(当然,对我们来说最好中间我们的指导还起到了一点作用,但是没必要),就学会了。

我就是那个教练,时不时地拿棍子杵一下,告诉你哪里游的不好,或者拿个小饼,说哪里游得不错。“水性”必须你们自己去琢磨出来,尽管实际上这样的不教而教对我们这些教练的要求更高了。更简单的方法是按照一个流程或者动作套路教会你这件具体的事情,具体的知识。但是,我们选择了让你自己来,我们只提供思想、方法上的指导,以及小鞭子和小饼干。

想象一下,一旦你们的学习能力提高了,更短的时间学到更多东西了,并且这样的学习方法还能够用于大量你感兴趣的知识的学习,并且还能帮助更多的人做到。这是一件多么大的改变啊,这将会在多大程度上提高生产力啊。想一想节省下来的时间和金钱,还有避免掉的那些学习过程中的无望迷失(当然,学会怎么学的过程中有另一种痛苦——没有套路的痛苦),想一想得到提高的创造性。这将是人类的解放啊。

Free your learning ability, change the world.
社会的下一个变革,就应该是学习力的解放。