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连接时序分类),单行文本时序分类识别的端到端方法

聊聊目标检测中的多尺度检测(Multi-Scale),从YOLO,ssd到FPN,SNIPER,SSD填坑贴和极大极小目标识别

狙击手在放大倍焦前已经经历了大量的小目标训练,这样看似乎是RPN做的好 — David 9

之前在讲SSD时我们聊过SSD的目标检测是如何提高多尺度(较大或较小)物体检测率的。我们来回顾一下,首先,较大的卷积窗口可以卷积后看到较大的物体, 反之只能看到较小的图片. 想象用1*1的最小卷积窗口, 最后卷积的图片粒度和输入图片粒度一模一样. 但是如果用图片长*宽 的卷积窗口, 只能编码出一个大粒度的输出特征.

对于yolov1,每层使用同样大小的卷积窗口, 识别超大物体或者超小物体就变得无能为力(最后一层的输出特征图是固定7*7):

YOLO架构示意图

SSD就更进一步,最后一层的检测是由之前多个尺度(Multi-Scale)的特征图共同生成的:

SSD架构示意图

这样SSD在计算复杂度允许的情况下,在多尺度物体的检测上有所提高。但是SSD也有明显缺陷,其最后几层的所谓“多尺度”是有限的(如上图特征图尺寸越小,可以识别的物体越大)。对于极小的目标识别,SSD就显得无能为力了继续阅读聊聊目标检测中的多尺度检测(Multi-Scale),从YOLO,ssd到FPN,SNIPER,SSD填坑贴和极大极小目标识别

吴恩达新书《Machine Learning Yearning》读后感,验证(测试)集怎么选?如何高效分析性能?降低可避免偏差和方差?实操经验总结

如果你要选验证集或测试集,就选那些你预料未来数据的样子(Choose dev and test sets to reflect data you expect to get in the future and want to do well on)— 吴恩达

前不久吴恩达新书“机器学习念想”(Machine Learning Yearning)手稿完工(不知道这样翻译会不会被打。。)David 9 忍不住拜读 ,把读后感总结如下,欢迎指正和交流:

纵观全书分三部分:

  1. 怎么构建验证集和测试集?
  2. 如何构建有效的性能和错误分析机制 ?如何优化模型?
  3. 端到端模型的一些讨论

事实上,上手深度学习(机器学习)项目最先要做的和模型本身关系不大,而是构思性能验证系统和错误分析的有效机制。

艺术品最华丽的可能是最后的润色,但其构思、规划以及推敲往往占据大师平时更多心力

列奥纳多·达·芬奇《岩间圣母》草图(左), 和最后完整润色后画作(右)

同样,构建一个高效的深度学习系统,首先要有一个好的验证体系、推敲整理过的数据集、高效的错误分析机制,这样最后的润色(模型优化)才能水到渠成。

1. 谈谈验证(测试)集怎么选?

书中建议是,如果你要选验证集或测试集,就选那些你预料未来数据的样子。因此训练集样本分布不需要和验证集(测试集)相同。用白话说就是以你预料“现场”的样本分布为准。 继续阅读吴恩达新书《Machine Learning Yearning》读后感,验证(测试)集怎么选?如何高效分析性能?降低可避免偏差和方差?实操经验总结

谷歌大脑的“世界模型”(World Models)与基因学的一些思考,MDN-RNN与Evolution Strategies结合的初体验与源码

我们现在看到的智能算法都不是“可生长”的,遗传算法和ES只是强调了基因的“变异”,神经网络只是固定网络结构;而生物界的基因却可以指导蛋白质构成并且“生长”。— David 9

今年上半年谷歌大脑的“世界模型”(World Models)早已引起David 9的注意,今天终于有机会和大家叨叨。对于CarRacing-v0这个增强学习经典游戏:

来自:https://github.com/AdeelMufti/WorldModels

世界模型(World Models)与其他增强学习相比有一些明显优势:

来自:https://arxiv.org/abs/1803.10122

优势的来源David 9总结有两点:1. 模型拼接得足够巧妙,2. 抓住了一些“强视觉”游戏的“痛点”。 继续阅读谷歌大脑的“世界模型”(World Models)与基因学的一些思考,MDN-RNN与Evolution Strategies结合的初体验与源码

AutoKeras:开源AutoML初体验,自动搜索和构建最优深度模型,贝叶斯搜索器,以及mnist示例代码

20 美元/时的AutoML太贵?试试AutoKeras吧

自动搜索构建深度学习模型和调参一直是数据科学家们向往的工具,而我们知道Google AI发布的AutoML是要收费的,如果想要开源的而且想要对AutoML背后技术一探究竟的,可以看看这款AutoKeras

AutoKeras开发处于初期阶段,它基于Keras(也有pytorch),而keras我们知道是基于TensorFlow,所以GPU利用可以不用担心(只要你安装了gpu版TensorFlow即可)。由于Keras代码极其简洁,autokeras上手也较容易 。

所以直接上autokeras版mnist训练代码:

from keras.datasets import mnist
from autokeras.image_classifier import ImageClassifier

if __name__ == '__main__':
    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    x_train = x_train.reshape(x_train.shape + (1,))
    x_test = x_test.reshape(x_test.shape + (1,))

    clf = ImageClassifier(verbose=True, augment=False)
    clf.fit(x_train, y_train, time_limit=12 * 60 * 60)
    clf.final_fit(x_train, y_train, x_test, y_test, retrain=True)
    y = clf.evaluate(x_test, y_test)
    print(y * 100)

这里有几个要点,第一,代码需要在python3.6上跑否则会有兼容性问题(目前autokeras只支持python3.6), 继续阅读AutoKeras:开源AutoML初体验,自动搜索和构建最优深度模型,贝叶斯搜索器,以及mnist示例代码

GAN和VAE都out了?理解基于流的生成模型(flow-based): Glow,RealNVP和NICE,David 9的挖坑贴

生成模型一直以来让人沉醉,不仅因为支持许多有意思的应用落地,而且模型超预期的创造力总是让许多学者和厂商得以“秀肌肉”:

OpenAI Glow模型生成样本样例,在隐空间控制图像渐变

了解基于流的生成模型(flow-based)前,先回顾目前主流的两类生成模型GAN和VAE,David 9文章早已介绍过

VAE与GAN结构比较

GAN简单粗暴,用两个深度网络(判别器D和生成器G)交替学习使得生成器G可以模拟现实生成样本,但是缺陷也是明显的:GAN不能直接了当地给出一个样本的隐分布的表征(你可以生成一个明星,但是你无法马上生成一个“微笑的”或“年轻的”明星),即,你很难用隐变量随意操纵生成的样本,你只知道生成的是任意样本(除非你重新设计GAN,像我们以前谈到的cGAN或者FaderNetworks等等。。)

VAE思路就完全不同,它继承了古老的贝叶斯理论,相信一切的创造可以用抽样后验概率来缔造。

你想创造新样本?好的,但是真实分布空间X 太复杂了,我们先意淫一个后验空间Z吧: 继续阅读GAN和VAE都out了?理解基于流的生成模型(flow-based): Glow,RealNVP和NICE,David 9的挖坑贴