Fork me on GitHub

Avro详细介绍

目录

  • 背景

  • 第一部分 Avro中的Schema

  • 第二部分 数据序列化和反序列化

  • 第二部分 命令行读写Avro文件

  • 第三部分 Avro的使用场景介绍

  • 第四部分 总结

  • 参考文献及资料

背景

同样的数据不同的表达,会直接影响后续任务的难易程度和有效性,因此寻找好的数据表示是机器学习的核心任务。

根据数据表示的提取方式(人工和自动)分为:

  • 表示学习(representation learning):自动学习数据的表示。

  • 特征工程(feature engineering):人工提起数据特征和表示。

比较:数据结构和算法紧密相连。数据表示和学习算法。

特征表达学习追溯到始祖象阶段,主要是无监督特征表达PCA和有监督特征表达LDA

但放在统计学习框架下,我们会碰到模型复杂性问题。这一问题的来源在于,设计的每个模型离真实的模型之间总会有偏差的存在,同时,模型的参数会导致其模型自身在寻优时存在波动,即会产生方差。因此,从统计意义来讲,一个好的模型需要在偏差和方差之间寻找平衡,如图1所示。在深度学习未包打天下之前的年代,这种平衡往往是通过控制模型的复杂性来获得的。对于复杂性的认识,这几十年来一直在变迁中。有通过控制模型的参数数量来实现的,如贝叶斯信息准则、Akaike信息准则;有从信息论的编码长度角度出发的,如Kolmogrov引出的最小描述长度,面向聚类的最小信息长度;有从数据几何结构出发的,如限束空间光滑性的流形约束;有从稀疏性角度出发的,如惩罚模型系数总量的L1范数;还有从模型结构的推广能力进行惩罚的,如统计机器学习中曾经盛行一时的VC维、最大边缘等约束。

那么,深度学习又是怎么玩的呢?不管采用什么样的结构,深度学习最明显的特点就是模型深,参数多。自2006年深度伯兹曼机的提出至今,残差网、稠密网、Inception网等各种深度学习模型的可调整参数的数量都在百万级甚至百万级的百倍以上。这带来一个好处,即他能表达一个远大于原有空间的空间,学术上称之为过完备空间。一般来说,在这个过完备空间上寻找不符合统计规律、但却具有优良品质的个例的机会就显著增大了。

那么为什么以前不做呢?一方面之前没有那么大规模的数据量,另一方面以前的工程技术也不支持考虑这么大规模的模型。目前多数已知的传感器成本降了不少、各种类型的数据获取成本也下来了,所以能看到PB级甚至ZB级的数据,如图像、语音、文本等。实在找不到数据的领域,还可以通过14年提出的生成式对抗网络来生成足够逼真的、海量的大数据。这两者都使得训练好的模型在刻画这个过完备空间的能力上增强了不少。

其次,工程技术上的革新也推动了深度学习的成功。深度学习的前身如多层感知器或其它神经网络模型在利用经典的反向传播算法调整模型的参数时,往往会陷入局部极小、过度拟合、会存在调参停滞的梯度消失、梯度爆炸等问题,还缺乏处理大规模数据需要的并行计算能力。这些问题,在近10年的深度学习发展中或多或少都得到了部分解决,比如通过规一化来防止梯度消失的Batch Normalization(批规范化)技术,考虑增强网络的稳定性、对网络层进行百分比随机采样的Drop Out技术,还有数据增广技术等。这使得深度学习在这个过完备空间搜索具有优良品质的个例的算力得到了显著增强。

总结

参考文献及资料

1、Avro项目官网 链接:https://avro.apache.org/docs/current/

2、Avro Tools API官方文档 链接:http://avro.apache.org/docs/1.7.4/api/java/org/apache/avro/tool/package-summary.html

socket http://layer0.authentise.com/getting-started-with-avro-and-python-3.html

0%