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

从SRU小小的学术争议,可以学到什么?关于SRU简单循环单元,David 9 有几点想说

人类只是不择手段存活的预设算法,他们以为设计精密就能发号施令,但他们只是“乘客” — 《西部世界》

前不久SRU(简单循环单元)遭到了Quasi-RNN 的质疑,认为SRU只是Quasi-RNN的卷积窗口为1时的特殊情况,原帖在这里(需要梯子):

www.facebook.com/cho.k.hyun/posts/10208564563785149

SRU作者自己的解释在这里(不要梯子):

https://www.zhihu.com/question/65244705/answer/229364472

就争议本身David 9 不做任何评判,毕竟,一旦开始辩驳,人类就会不自觉地向着自己的利益方向靠近, 正如《西部世界》里所说:“人类只是不择手段存活的预设算法 ”

David 9 不喜欢八卦

所以,从这起小小的学术争议,David 9关注的是,我们可以学到什么 ?这里记录一下我的总结:

1. 论文起名要简洁,意图要清晰。

为什么之前Quasi-RNN没有火一把,而SRU却在社交网络上传了那么远?许多人忽略的一点是,SRU起名很好很简洁。如果作者起名叫“Yet another simple RNN acceleration method” ,恐怕就没人凑热闹了。SRU还能让人联想到GRU,会不会是下一代GRU呢?一些不明真相的网友就蠢蠢欲动了。

所以,写文章前,有必要想个好名字,让大家快速了解你的工作,为你传播。(不要刻意营销就好)

2. 论文要和相似idea的文章做充分对比,提前指出自己工作中非常不同的那一部分。 继续阅读从SRU小小的学术争议,可以学到什么?关于SRU简单循环单元,David 9 有几点想说

PyCon 2018数据科学talk盘点#1,入坑PyTorch前你需要知道的事,为什么要用PyTorch,以及PyTorch与TensorFlow的区别

一年一度的PyCon大会上周在俄亥俄Cleveland举行,youtube上早早放出了talk列表。虽然PyCon聚焦Python语言本身,但是关于数据科学AI的talk也不在少数。

David 9感兴趣talk之一就是来自PyLadiesStephanie Kim关于PyTorch介绍

太多小伙伴问David 9 哪个深度学习框架好?用TensorFlow还是PyTorch好 ?

现在是时候结合这个talk给大家讲清楚了。

首先,框架各有自己的优势,关键是你项目需要和个人喜好:

Stephanie Kim在PyCon2018上的talk:https://www.youtube.com/watch?v=LEkyvEZoDZg&t=1464s

如果你的项目和RNN强相关,并且希望写RNN模型的时候更轻松敏捷,或者,你是从事科学研究的人员,那么PyTorch更适合你; 如果你项目定位是一个稳定产品(TensorFlow Serving),或者你注重高效训练,并且想把模型移植到轻量级移动端(TensorFlow Lite), 那么选择Tensorflow更合适。 继续阅读PyCon 2018数据科学talk盘点#1,入坑PyTorch前你需要知道的事,为什么要用PyTorch,以及PyTorch与TensorFlow的区别

你想要的神经网络自动设计,谷歌大脑帮你实现了:用参数共享高效地搜索神经网络架构(ENAS)

所有高级的创造,似乎都有一些“搜索”和“拼凑”的“智能” — David 9

模型自动设计已经不是新鲜事(H2O 的AutoML谷歌的CLOUD AUTOML)。但是,高效的神经网络自动设计还是一个较有挑战性的课题(单纯用CV选模型太耗时间) 。谷歌大脑的这篇新论文就提供了一种高效的搜索方法,称之为:Efficient Neural Architecture Search(ENAS)

对于老版本强化学习的NAS,需要21天搜索出的cnn模型,ENAS只需要3小时就可以搜索出相同准确率的模型:

例子:对于CIFAR-10数据集ENAS搜索出的具有4.23%错误率的模型,只需要3小时左右。 来自:https://arxiv.org/pdf/1802.03268.pdf

作者把这样的效率提高归功于候选子模型的参数共享上(相似子模型可以模仿迁移学习使用已有的权重,而不需要从头训练)。

为简单起见,我们先从生成四个计算节点的RNN循环神经网络进行解释:

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

即使是只有四个计算节点的RNN,也有多种有向无环图(DAG)的生成可能,如上左图,红色的箭头生成的RNN才是我们在右图中看到RNN。 继续阅读你想要的神经网络自动设计,谷歌大脑帮你实现了:用参数共享高效地搜索神经网络架构(ENAS)

David 9的循环神经网络(RNN)入门帖:向量到序列,序列到序列,双向RNN,马尔科夫化

rnn似乎更擅长信息的保存和更新,而cnn似乎更擅长精确的特征提取;rnn输入输出尺寸灵活,而cnn尺寸相对刻板。— David 9

聊到循环神经网络RNN,我们第一反应可能是:时间序列 (time sequence)。

确实,RNN擅长时间相关的应用(自然语言,视频识别,音频分析)。但为什么CNN不容易处理时间序列而RNN可以? 为什么我们之前说过RNN有一定的记忆能力?

数学上,如果我们想要预测一个单词x 的后一个单词y,我们需要3个主要元素(输入单词xx上下文状态h1;通过xh1输出下一个单词的函数比如softmax):

来自:http://suriyadeepan.github.io/2017-01-07-unfolding-rnn/

数学计算如下:

htan(W1x+b1)

tan(W2h1+b2)

softma(o)

上面是一个很简单的有向无环图(DAG), 继续阅读David 9的循环神经网络(RNN)入门帖:向量到序列,序列到序列,双向RNN,马尔科夫化

当RNN神经网络遇上NER(命名实体识别):双向LSTM,条件随机场(CRF),层叠Stack LSTM, 字母嵌入

命名实体识别 (NER)语义理解中的一个重要课题。NER就像自然语言领域的“目标检测”。找到文档D 中的名词实体还不够,许多情况下,我们需要了解这个名词是表示地点(location)人名(Person)还是组织(Organization),等等:

来自:https://www.slideshare.net/bperz/15-sdmpolyglot-ner

上图是NER输出一个句子后标记名词的示例。

在神经网络出现之前,几乎所有NER半监督或者非监督的方法,都要依靠手工的单词特征或者外部的监督库(如gazetteer)达到最好的识别效果。

手工的单词特征可以方便提炼出类似前缀,后缀,词根,如:

-ance, —ancy 表示:行为,性质,状态/ distance距离,currency流通
-ant,ent 表示:人,…的/ assistant助手,excellent优秀的
ary 表示:地点,人,事物/ library图书馆,military军事

可以知道-ant结尾的单词很可能是指,而-ary结尾更可能指的地点

外部的监督库(如gazetteer),把一些同种类的实体聚合在一起做成一个库,可以帮助识别同一个意思的实体,如:

auntie其实和aunt一个意思:姨妈

Mikey其实是Mike的昵称,都是人名

今天所讲的这篇卡内基梅隆大学的论文,用RNN神经网络的相关技术避开使用这些人工特征,并能达到与之相当的准确率。

为了获取上述的前缀,后缀,词根等相关特征,文章对每个单词的每个字母训练一个双向LSTM,把双向LSTM的输出作为单词的特殊embedding,和预训练eStack LSTM的算法识别命名实体,感兴趣可以继续阅读原论文。mbedding合成最后的词嵌入(final embedding):

上图是对单词Mars(火星)构建字母级别的双向LSTM,并合并到预训练的单词embedding (来自:https://arxiv.org/pdf/1603.01360.pdf )

双向LSTM可以捕捉字母拼写的一些规律(前缀,后缀,词根), 预训练的embedding可以捕捉全局上单词间的相似度。两者结合我们得到了更好的词嵌入(embedding)。 继续阅读当RNN神经网络遇上NER(命名实体识别):双向LSTM,条件随机场(CRF),层叠Stack LSTM, 字母嵌入

ICLR2018抢先看!RNN在空间定位训练中呈现的网格状表征:海马体的内嗅皮质与RNN一致表征

如果不能像上帝那样创造, 那么就试着模仿吧 — David 9在哪听过

ICLR我们知道ICLR的中文全称是:国际学习表征大会。今天讲的文章就非常贴合学习表征这一主题 。我们知道哺乳动物海马体中的内嗅皮质(entorhinal cortex)简称EC,是神经科学中公认的管理空间定位的器官:

来自:https://protoplasmix.wordpress.com/2012/03/30/memory-boost-for-dementia-patients/

2013《自然》上发表的一篇论文更是研究了内嗅皮质中细胞活跃度和动物所处空间位置的关系:

来自:https://openreview.net/pdf?id=B17JTOe0-

上图是内嗅皮质中的几种细胞在方块空间坐标中的活跃度(红色代表相当活跃)。有些叫做grid cell(格子细胞),它们在空间中间隔的地方总是显得较活跃;有一些细胞叫border cell(边缘细胞),当动物走到区域边缘时,这些细胞显得相当活跃。 继续阅读ICLR2018抢先看!RNN在空间定位训练中呈现的网格状表征:海马体的内嗅皮质与RNN一致表征