AI界的集邮学?回眸ES,粒子群PSO,遗传(进化)算法,GA等无梯度优化方法

“盾从防御看是美的,矛则从射击的敏捷和力量看是美的”

—— 苏格拉底

实验物理学家卢瑟福说过:“所有科学要么是物理,要么是集邮” 。相较其他学科,物理学也许对宇宙大一统的解释有一定的优越性。如在研究半衰期过程中就会被一种大自然的神奇所折服(弱核力)。

然而“集邮”并不是没有意义。苏格拉底说过,“盾从防御看是美的,矛则从射击的敏捷和力量看是美的”。不能因为深度学习理论薄弱,就去否认深度网络的实际效用。收集大自然的“邮票”加以利用也许成就感不那么高,但它可能非常有效 ,甚至在某些角度不乏美感。

比如在我们AI机器学习领域就有这样一种“集邮”学:其囊括遗传算法进化策略算法(ES)粒子群算法(PSO),多数都是以模仿自然为依据,还有一个流行好听的称呼:无梯度优化算法(gradient-free,derivative-free)facebook开源的Nevergrad库也是来自这种优化方法)

这些“离经叛道”的优化算法,不像SVM极具数学根基,但在某些场合非常适用:

拿粒子群算法(PSO)来讲,如上图,是粒子群在平面上找到极小值的过程,其本质是模拟了群鸟飞行或群鱼相互协作的搜索过程:

其核心公式也是贯彻了相互协作的原则:

其中vi(t+1)是下一个时刻的粒子速度,它由三个因素决定:

继续阅读AI界的集邮学?回眸ES,粒子群PSO,遗传(进化)算法,GA等无梯度优化方法

【工具】亲测Py-Spy:无中断python性能监控分析器,pyspy, Pyflame, ptrace

很多钻研机器学习(深度学习)的朋友其实并不熟悉python语言本身,这就导致写完代码后,无法定位程序“瓶颈”。往往有同学写完训练(预测)模型,但是代码运行时就非常慢,却找不准原因。

David 这里就推荐一款开源性能分析工具:py-spy

来自:https://github.com/benfred/py-spy

py-spy会监控process_vm_readv系统调用的信息,从而抽样得到一个python进程的函数调用时间统计。把最耗时间的那些函数排在前面。

如上图,即使你的程序已经在运行中,你也可以运行以下命令进行无中断的性能监控与分析:

yy@desktop:~$  py-spy --pid 12345

其中12345是已经在运行中的进程号 。

继续阅读【工具】亲测Py-Spy:无中断python性能监控分析器,pyspy, Pyflame, ptrace

【独家】当量子计算遇上神经网络与深度学习,QNN初探( Quantum Neural Networks),David 9的量子计算系列#1

曾经的存在主义与结构主义的争论,在量子世界中似乎用概率和大量抽样完成了和解 — David 9

上世纪60年代哲学界有一场关于存在主义结构主义的争论:存在主义认为一个人的发展是由“自由意识”和欲望主导的; 结构主义认为占主导的其实是社会中的经济、政治、伦理、宗教等结构性因素,人只是巨大结构中的一部分。

究竟是什么塑造了一个人也许难以确定。而对于量子世界,一个qubit(量子比特)的状态,不仅受到量子系统的磁场影响,qubit本身也有自身状态的变化概率和扰动。我们一会儿可以看到,量子系统的输出,即那个qubit的最终观测状态,是用概率和大量抽样判定的:

在细讲QNN前(量子神经网络其实是一个量子系统),David 9 有必要介绍一下量子计算本身的一些基础知识 。

首先,量子计算与传统计算机的不同,可从qubit(量子比特)说起,我们知道与电子计算机非“0”“1”相比,qubit的状态可能同时介于“0”和“1”之间

即所谓的“薛定谔的猫”的叠加态(superposition):

\(\frac{1} {\sqrt{2}}\)(|0>+|1>) (在量子物理中符号|x>表示状态x)

你们可能会问David,为什么状态系数是 1/\(\sqrt{2}\) ? 这是量子物理中的一个约定(规范化),即平方和等于1

 α^2+β^2=1

其中αβ就是状态的系数,是不是让你联想到圆形几何 ?

是的,在量子物理中可以把qubit想象成粒子球体(叠加或非叠加态):

三维世界中qubit的自旋状态非常灵活,可以上自旋(|0>),可以下自旋(|1>),可以像地球一样斜着自旋

继续阅读【独家】当量子计算遇上神经网络与深度学习,QNN初探( Quantum Neural Networks),David 9的量子计算系列#1

端到端基于模型的GAIL对抗模仿学习,Model-based GAIL,David 9的填坑贴

嘿,你这个叫GAIL小家伙,跟着大人学的时候,自己也要看看下一步— David 9

接着上次的GAIL讨论(GAN+增强学习),我们还有一个坑未填。即,基于模型的GAIL对抗模仿学习。首先回顾一下强化学习的简单体系:

1. 如果RL(强化学习)训练中给出回报(reward),其算法有我们熟悉的价值迭代value iteration算法和策略policy iteration算法,以及DPL(Direct Policy Learning假设一个policy)。

2. 如果没有明确回报(reward)给出,就涉及到更有意思的模仿学习IRL(Inverse Reinforcement Learning)。 一个实际的例子就是上次聊到的GAIL算法,简单说是假设回报函数,用GAN去识别目前的策略是否符合假设的回报函数(应有的策略):

来自论文:http://proceedings.mlr.press/v70/baram17a/baram17a.pdf

此处GAIL就产生一个问题,如上图,GAN判别器D可以判别生成器的策略被模仿对象(专家策略)之间的区别,但是,当把行为错误δa反向传播时,只能估算一个大概的梯度δHV 给生成器(往往不稳定并且高方差的)。这就导致一个很明显的漏洞,这个判别器D只能根据当前的行为a被模仿者的状态x1模仿者的状态x2做判别,如果模仿者和被模仿者像下面这样:

继续阅读端到端基于模型的GAIL对抗模仿学习,Model-based GAIL,David 9的填坑贴

7个你可能在2018错过的开源python AI项目与机器学习库,David 9的收藏

2018也许是AutoML(自动化机器学习)的探索元年。就让我们从AutoML聊起。

1. AdaNet — 一个基于TensorFlow的开源神经网络自动学习项目

也许你之前听过Auto-Keras Auto-Sklearn ,但是如果要认真去做神经网络的AutoML,AdaNet 有许多值得借鉴的地方。

如上图,AdaNet会在网络层中尝试使用不用的候选(Candidates)结构和参数。并且自己维护一个Adanet loss(带正则):

继续阅读7个你可能在2018错过的开源python AI项目与机器学习库,David 9的收藏

GAN+增强学习, 从IRL和模仿学习, 聊到TRPO算法和GAIL框架, David 9来自读者的探讨,策略学习算法填坑与挖坑

如果你想成为大师,是先理解大师做法的底层思路,再自己根据这些底层思路采取行动? 还是先模仿大师行为,再慢慢推敲大师的底层思路?或许本质上,两种方法是一样的。 — David 9

聊到强人工智能,许多人无疑会提到RL (增强学习) 。事实上,RL和MDP(马尔科夫决策过程) 都可以归为策略学习算法的范畴,而策略学习的大家庭远远不只有RL和MDP:

来自:https://www.slideshare.net/samchoi7/recent-trends-in-neural-net-policy-learning

我们熟知的RL是给出行为reward(回报)的,最常见的两种RL如下

1. 可以先假设一个价值函数(value function)然后不断通过reward来学习更新使得这个价值函数收敛。价值迭代value iteration算法和策略policy iteration算法就是其中两个算法(参考:what-is-the-difference-between-value-iteration-and-policy-iteration)。之前David 9也提到过价值迭代:NIPS 2016论文精选#1—Value Iteration Networks 价值迭代网络继续阅读GAN+增强学习, 从IRL和模仿学习, 聊到TRPO算法和GAIL框架, David 9来自读者的探讨,策略学习算法填坑与挖坑

CTC的直观理解(Connectionist Temporal Classification连接时序分类),单行文本时序分类识别的端到端方法

把基于概率的自动化叫做AI是否有些可笑? — David 9

原文:An Intuitive Explanation of Connectionist Temporal Classification

聊到CTC(Connectionist Temporal Classification),很多人的第一反应是ctc擅长单行验证码识别:

两组谷歌验证码示例

是的,ctc可以提高单行文本识别鲁棒性(不同长度不同位置 )。今天David 9分享的这篇文章用几个重点直观的见解把ctc讲的简洁易懂,所以在这里就和大家一起补一补ctc 。

首先ctc算不上一个框架,更像是连接在神经网络后的一个归纳字符连接性的操作

来自:https://towardsdatascience.com/intuitively-understanding-connectionist-temporal-classification-3797e43a86c

cnn提取图像像素特征,rnn提取图像时序特征,而ctc归纳字符间的连接特性。

那么CTC有什么好处?

因手写字符的随机性,人工可以标注字符出现的像素范围,但是太过麻烦,ctc可以告诉我们哪些像素范围对应的字符

手写字符的单行像素标注, 来自:https://towardsdatascience.com/intuitively-understanding-connectionist-temporal-classification-3797e43a86c

如上图标注“t”的位置出现t字符,标注o的区域出现o字符。 继续阅读CTC的直观理解(Connectionist Temporal Classification连接时序分类),单行文本时序分类识别的端到端方法