深度 | 对比深度学习十大框架:TensorFlow最流行但并不是最好

本文经 机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载
选自Medium
机器之心编译参与:吴攀、朱思颖、李亚洲

2016 年已经过去,BEEVA Labs 数据分析师 Ricardo Guerrero Gomez-Ol 近日在 Medium 上发表了一篇文章,盘点了目前最流行的深度学习框架。为什么要做这一个盘点呢?他写道:「我常听到人们谈论深度学习——我该从哪里开始呢?TensorFlow 是现在最流行的吧?我听说 Caffe 很常用,但会不会太难了?在 BEEVA Labs,我们常常需要应对许多不同的深度学习库,所以我希望能够将我们的发现和感想分享出来,帮助那些刚刚进入深度学习这一美丽世界的人。」

TensorFlow

链接:https://www.tensorflow.org/

对于那些听说过深度学习但还没有太过专门深入的人来说,TensorFlow 是他们最喜欢的深度学习框架,但在这里我要澄清一些事实。

在 TensorFlow 的官网上,它被定义为「一个用于机器智能的开源软件库」,但我觉得应该这么定义:TensorFlow 是一个使用数据流图(data flow graphs)进行数值计算的开源软件库。在这里,他们没有将 TensorFlow 包含在「深度学习框架」范围内,而是和 Theano 一起被包含在「图编译器(graph compilers)」类别中。 继续阅读深度 | 对比深度学习十大框架:TensorFlow最流行但并不是最好

用python做贝叶斯A/B测试 — 贝叶斯A/B测试入门 以及“共轭先验”是什么?

如果不再假设一个分布的参数是固定的,而是去寻找这个参数可能的分布,就可以理解超参数的意义 — David 9

A/B测试一直是David 9想cover的知识点,今天又邂逅一篇相关文章:“tl;dr Bayesian A/B Testing with Python”。于是今天决定讲解一下如何“用python做贝叶斯A/B测试”。所以,现在,两个重要的知识点是 A/B 测试 和 “共轭先验”。

关于A/B测试,其实概念非常简单,简单来说,就是为同一个目标制定两个方案(比如两个页面),让一部分用户使用 A 方案,另一部分用户使用 B 方案,记录下用户的使用情况,看哪个方案更符合设计。A/B测试已经在Web上得到广泛的应用,可以用于增加转化率注册率等网页指标[3].

很显然,A方案的转化率可以看作一个二项分布:

继续阅读用python做贝叶斯A/B测试 — 贝叶斯A/B测试入门 以及“共轭先验”是什么?

Stanford教授Daphne Koller 概率图模型 — 终极入门 第三讲 马尔可夫网络 (Markov Networks)

贝叶斯网络中的一些基本直觉,不能直接使用到马尔可夫网络 — David 9

上一讲, 我们介绍了模板模型 今天我们要把注意力放到无向图模型,以及马尔可夫网络 (Markov Networks). 事实上之所以叫做无向图模型,只是因为概率图中的边可以是双向的:

这里的Φ1[A, B] 称为一个factor(因素)。但是Φ1[A, B]并不是有用的分布。如上图, Φ1[A, B]只是代表AB边之间各种组合的概率,并不是A和B联合概率。因为A和B联合概率的取值同时也被C和D影响(仅仅一条边的情况不能说明问题)。

另外,不要以为 P = Φ1(A, B) * Φ2(B, C) * Φ3(C, D) * Φ4(A, D) 就是这个图的联合概率继续阅读Stanford教授Daphne Koller 概率图模型 — 终极入门 第三讲 马尔可夫网络 (Markov Networks)

Stanford教授Daphne Koller 概率图模型 — 终极入门 第二讲 模板模型 (Template Models)

模板模型 , 是机器学习模型进行时空上复制的一种有效方法 — David 9

接着上一讲, 有向图模型与贝叶斯网络基础 这一讲我们关注模板模型 (Template Models). “模板模型”在机器学习领域, 并非常用的术语, 但是在许多概率图模型中, 都有”模板模型”的影子.

所以, “模板模型”这样有价值的概率图模型抽象思想, 值得用一篇文章来解释解释.

首先, 模板模型 (Template Models)顾名思义, 是用模板的思维建立出的模型. 许多非常复杂的图模型, 事实上是可以简化的. 简化时, 通过共享通用的变量, 通用的概率图结构, 可以归纳出通用的模板模型, 达到类似复用的效果.

还记得我们讲过的动态主题模型 ? 动态主题模型正是在不同的时间点上, 复制主题模型的. 这里, 主题模型就是一个模型模型. 模版模型描述了模版变量如何从模版中继承依赖关系,同样应用的典型例子有: 动态贝叶斯模型DBN隐马尔科夫模型HMM, 盘模型Plate Models

在来看一下课程试题, 加深对模板模型的印象:

继续阅读Stanford教授Daphne Koller 概率图模型 — 终极入门 第二讲 模板模型 (Template Models)

Stanford教授Daphne Koller 概率图模型 — 终极入门 第一讲 有向图模型与贝叶斯网络基础

图模型或者概率图模型(Probabilistic Graphical Model), 是每个机器学习领域数据科学家的必备工具. 今天的终极入门我们讲解斯坦福教授Daphne Koller 概率图模型在coursera上的教程. 简洁地把要点拿出来分享给大家.

概率图模型可以是有向无环图 或者无向图

概率图模型是用图来表示变量概率依赖关系的理论。因为概率的依赖关系可以是单向的, 也可以是双向的, 所以概率图模型可以是有向无环图(如贝叶斯网络), 也可以是双向的有环图(如马尔可夫网络) . 继续阅读Stanford教授Daphne Koller 概率图模型 — 终极入门 第一讲 有向图模型与贝叶斯网络基础

深度理解TensorFlow框架,编程原理 —— 第二讲 编程接口和可视化工具TensorBoard

上一讲解读了TensorFlow的抽象编程模型。这一讲,我们上手解读TensorFlow编程接口和可视化工具TensorBoard。

TensorFlow支持C++和Python两种接口。C++的接口有限,而Python提供了丰富的接口,并且有numpy等高效数值处理做后盾。所以,推荐使用Python接口。

接下来,我们手把手教大家用Python接口训练一个输入层和一个输出层的多层感知器(MLP),用来识别MNIST手写字数据集。首先我们导入tensorflow库,下载文件到指定目录。

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

# Download and extract the MNIST data set.
# Retrieve the labels as one-hot-encoded vectors.
mnist = input_data.read_data_sets("/tmp/mnist", one_hot=True)

其中read_data_sets()方法是tensorflow例子程序中提供的下载MNIST数据集的方法,直接使用就可完成数据下载。

接下来,我们需要注册一个流图,在里面定义一系列计算操作:

graph = tf.Graph()
# Set our graph as the one to add nodes to
with graph.as_default():
    # Placeholder for input examples (None = variable dimension)
    examples = tf.placeholder(shape=[None, 784], dtype=tf.float32)
    # Placeholder for labels
    labels = tf.placeholder(shape=[None, 10], dtype=tf.float32)

    weights = tf.Variable(tf.truncated_normal(shape=[784, 10], stddev=0.1))
    bias = tf.Variable(tf.constant(0.05, shape=[10]))
    # Apply an affine transformation to the input features
    logits = tf.matmul(examples, weights) + bias
    estimates = tf.nn.softmax(logits)
    # Compute the cross-entropy
    cross_entropy = -tf.reduce_sum(labels * tf.log(estimates),
    reduction_indices=[1])
    # And finally the loss
    loss = tf.reduce_mean(cross_entropy)
    # Create a gradient-descent optimizer that minimizes the loss.
    # We choose a learning rate of 0.05
    optimizer = tf.train.GradientDescentOptimizer(0.05).minimize(loss)
    # Find the indices where the predictions were correct
    correct_predictions = tf.equal(tf.argmax(estimates, dimension=1),
    tf.argmax(labels, dimension=1))
    accuracy = tf.reduce_mean(tf.cast(correct_predictions,
    tf.float32))

其中

graph = tf.Graph()
# Set our graph as the one to add nodes to
with graph.as_default():

这两句是定义流图并且,开始声明流图中的计算操作。 继续阅读深度理解TensorFlow框架,编程原理 —— 第二讲 编程接口和可视化工具TensorBoard

深度理解TensorFlow框架,编程原理 —— 第一讲 抽象编程模型

最近读到一篇来自慕尼黑工业大学的论文”A Tour of TensorFlow” , 内容比Tensorflow官方文档更全面深刻, 所以把自己的一些读后心得分享给大家. 做成两次博客. 下一讲会在不久后更新.

首先TensorFlow框架大名鼎鼎大家一定听说过,第一, 比较新,第二,是Google开源的大项目,来看看TensorFlow在历史上机器学习时间线:

qq%e6%88%aa%e5%9b%be20161017164108
25年以来发布的机器学习库时间线 来自:论文 “A Tour of TensorFlow”

TensorFlow是不是挺年轻?但是它的名气自发布以来没有下降的态势,相反,很多人把它称作机器学习界的“Android”。可见这个框架多么受人爱戴。

切入正题,TensorFlow是一个全面的可扩展框架,它试图能够支持任何机器学习,建模算法,而且它现在已经支持分布式计算模型。当然,想象空间还不仅这些,怪不得那些人叫它机器学习界的“Android”。

TensorFlow最大的亮点之一是它的抽象编程模型。它使用的流图计算框架是其他机器学习框架中很少见的。因而,执行模型,优化方式等等都和其他框架有所不同:

1.  流图计算框架

先上一张TensorFlow官网gif图,感受下:

tensors_flowing

机器模型在训练时,会有很多次迭代(比如10000次)。而每一次迭代,上图的演示就是一次迭代的过程。训练10000次,这个流图就要“流动”10000次。 继续阅读深度理解TensorFlow框架,编程原理 —— 第一讲 抽象编程模型