#让AI替你写代码, pix2code: 从图片生成前端代码, 用CNN+LSTM构建端到端网络

将来, AI会替你完成一部分项目代码, 也许就从简单的前端代码开始 — David 9

不久前Uizard 放出一篇有意思的论文(详见youtube上demo), 目标很简单: 试图从设计原型图直接生成源代码, 为了证实可行性, 文章的做法是, 首先从原型图生成DSL(领域专用语言):

来自: https://arxiv.org/pdf/1705.07962.pdf

左边是设计原型图, 右边是对应的DSL, 是描述了GUI的格式化语言. 如: 第一行有一个label和一个switch按钮.

剩下的只要把DSL语言编程成源代码即可 .

cd compiler

# compile .gui file to Android XML UI
./android-compiler.py <input file path>.gui

# compile .gui file to iOS Storyboard
./ios-compiler.py <input file path>.gui

# compile .gui file to HTML/CSS (Bootstrap style)
./web-compiler.py <input file path>.gui

最吸引David 9的, 其实是作者结合CNN与LSTM的方法. 我们知道, CNN擅长抽取图片特征, 而RNN擅长学习文本和序列规律, 只要把这两组”上下文”集成起来, 我们就有信心知道一张设计原型图的”语义”, 每个语义对应一个DSL, 最后根据DSL生成源代码即可.

来看看文章中的做法: 继续阅读#让AI替你写代码, pix2code: 从图片生成前端代码, 用CNN+LSTM构建端到端网络

CVPR 2017之#RNN论文精选, 小数据学习: 基于关注点的循环比较器(Attentive Recurrent Comparators)

“小数据”激发我们从人类学习本质的角度思考问题. — David 9

如果要得到生成模型分类模型, 我们可以用GAN或CNN等深度网络. 而对于”小数据“我们往往要换一种思路, 利用RNN的”记忆”能力在图片中反复”琢磨”图像的线条等特征:

来自: https://github.com/sanyam5/arc-pytorch

通过反复寻求好的”关注点”, 我们用一张样本图片, 就能比较新图片与之差异, 以及和原图片是同一个文字的可能性. 这正是所谓的one shot learning, 即, 从一个样本学习到该样本的整个类. 没错 , “小数据”的泛化能力真是惊人 ! 甚至击败了KNNSIAMESE NETWORK等传统相似度比较方式。 继续阅读CVPR 2017之#RNN论文精选, 小数据学习: 基于关注点的循环比较器(Attentive Recurrent Comparators)

KDD 2017精选#1 用”模仿和类比”挖掘加速创新 , GRU循环神经网络新用法(Best paper award 最佳论文奖)

An essential [of an inventor] is a logical mind that sees analogies. — Thomas Edison

很难想象如果所有创新工作交给AI去做, 人类存在的意义是什么?

今年KDD2017最佳论文(Accelerating Innovation Through Analogy Mining) 向这个方向迈进了一步. 作者试图从庞大的专利和文献库中, 挑选出可以激发发明者灵感的想法, 呈现给发明者(USPTO上就有900万多的专利)

如对于一个带电池的手机壳的初始idea:

来自: https://arxiv.org/pdf/1706.05585.pdf

通过”模仿和类别“挖掘, 模型可以搜索并提供下面idea的提示, 呈现给发明者:

上图是一个Flash充电时的卡扣装置, 和一个自带电源的USB插座, 都是对比模仿初始idea从庞大文献中找出的两个类似idea.

最后, 一个发明人看到以上这些启发和提示, 发明出了以下产品:

来自: https://arxiv.org/pdf/1706.05585.pdf

一个履带式的发电器, 戴在身上, 人体移动时, 就可以发电蓄电. 可见, 模型做出的前两个发明提示对发明者有一定的帮助. (模型给出了不完全相似但是很相关的启发) 继续阅读KDD 2017精选#1 用”模仿和类比”挖掘加速创新 , GRU循环神经网络新用法(Best paper award 最佳论文奖)

业界 | 扒一扒Facebook人工智能谈判模型 — Facebook开源的”端到端”强化学习模型

端到端学习是那么吸引人, 因为它与理想的”自治”学习是那么近. — David 9

我们离完全”自治”的AI系统还很远很远, 没有自我采集样本的能力, 没有自己构建模型的能力, 也缺少”端到端” 学什么就像什么的灵活性. 而最近Facebook 人工智能研究所(FAIR)的研究人员公开了一个具有谈判新能力的对话智能体(dialog agents),并开源了其代码, 在”端到端” 这一方向上更进了一步:

这篇文章的突破仅限于智能对话, 更像是一篇专利, 教大家如何用一堆神经网络训练一个智能对话来获得谈判最终利益. 另外值得注意的是该pytorch项目虽然开源, 但是是经过 creativecommonsNonCommercial 4.0 非商业化协议保护的, 即, 你可以研究和使用代码, 但是你不能直接用它做商业用途.

言归正传, David 9 想说的是, 这个近乎科幻的对话机器人, 其实并没有那么神奇.

首先看看Facebook一伙人怎么收集对话(dialog)数据的 :

Facebook这伙人收集的数据是从亚马逊 Mechanical Turk 交易网站上 买来的, $0.15一个对话, 总共买了5808个对话. 继续阅读业界 | 扒一扒Facebook人工智能谈判模型 — Facebook开源的”端到端”强化学习模型

ICLR 2017论文精选#3 机器自我编程—用”递归” 提高神经编程解释器(NPI)的泛化能力(Best paper award 最佳论文奖)

机器自主编程的发展比我们想象的要快, 并且, 人们容易忽略的是, 互联网上数不尽的源代码本身是高质量的”训练数据”. —— David 9

今天的最佳论文, 是伯克利改进去年 DeepMind 突破性论文: NPI (神经编程解释器). 论文题为: MAKING NEURAL PROGRAMMING ARCHITECTURES GENERALIZE VIA RECURSION

能够让机器自己具有推理能力和编程能力一直是人们梦想, 而如今, 即使深度学习和神经网络发展壮大, 我们在这一领域依然是”婴儿学步”. 去年DeepMind的论文NEURAL PROGRAMMER-INTERPRETERS (NPI) 又似乎让我们看到了曙光. 一旦研究能在工业界大范围应用, 使用伪代码编程, 甚至构造”自治”的下一代互联网都成为可能.

言归正传, 伯克利的这篇论文对去年NPI的改进, 已经能够模拟简单的冒泡排序,拓扑排序,快速排序, 小学生进位加法运算等简单算法. 基本目标如下:

上图蓝色部分是NPI核心, 目标是训练出一个神经网络(往往基础是LSTM), 来模拟一个程序的行为. 最后训练出一个和目标程序行为一样的神经网络.

读者可能好奇训练数据是什么? 继续阅读ICLR 2017论文精选#3 机器自我编程—用”递归” 提高神经编程解释器(NPI)的泛化能力(Best paper award 最佳论文奖)

#7 每个人都能徒手写递归神经网络–手把手教你写一个RNN

总结: 我总是从迷你程序中学到很多。这个教程用python写了一个很简单迷你程序讲解递归神经网络。

递归神经网络即RNN和一般神经网络有什么不同?出门左转我们一篇博客已经讲过了传统的神经网络不能够基于前面的已分类场景来推断接下来的场景分类,但是RNN确有一定记忆功能。废话少说,上图:

basic_recurrence_singleton 继续阅读#7 每个人都能徒手写递归神经网络–手把手教你写一个RNN

#5 Deep learning RNN-RBM简单理解

前言:

本文主要是bengio的deep learning tutorial教程主页中最后一个sample:rnn-rbm in polyphonic music. 即用RNN-RBM来model复调音乐,训练过程中采用的是midi格式的音频文件,接着用建好的model来产生复调音乐。对音乐建模的难点在与每首乐曲中帧间是高度时间相关的(这样样本的维度会很高),用普通的网络模型是不能搞定的(普通设计网络模型没有考虑时间维度,图模型中的HMM有这方面的能力),这种情况下可以采用RNN来处理,这里的RNN为recurrent neural network中文为循环神经网络,另外还有一种RNN为recursive neural network翻为递归神经网络。本文中指的是循环神经网络。

 

RNN简单介绍:

首先来看RNN和普通的feed-forward网络有什么不同。RNN的网络框架如下:

23214434-ef7947ebef344d86b21e0d0550dc833d 继续阅读#5 Deep learning RNN-RBM简单理解