#12 机器学习能力自测题—看看你的机器学习知识能打几分?不容错过的机器学习试题与术语

一直苦于没有办法自测一下机器学习知识掌握程度,最近看到一篇Ankit Gupta写的博客Solutions for Skilltest Machine Learning : Revealed。有40题机器学习自测题,马上可以看看你的机器学习知识能打几分?顺便还能查漏补缺相关术语,以及SVM, 隐马尔科夫, 特征选择, 神经网络, 线性回归等众多知识点.

以下是试题, 附答案:

Q1:在一个n维的空间中, 最好的检测outlier(离群点)的方法是:

A. 作正态分布概率图

B. 作盒形图

C. 马氏距离

D. 作散点图

答案:C

马氏距离是基于卡方分布的,度量多元outlier利群点的统计方法。更多请详见:这里和”各种距离“。

 

Q2:对数几率回归(logistics regression)和一般回归分析有什么区别?: 继续阅读#12 机器学习能力自测题—看看你的机器学习知识能打几分?不容错过的机器学习试题与术语

机器学习美国哪家强? 卡内基梅隆(CMU)?斯坦福? 伯克利? 哥伦比亚? MIT?威斯康星?

最近看到一篇Quora很好地解答了机器学习界的知名高校相关问题。机器学习究竟美国哪家强? 卡内基梅隆(CMU)?斯坦福? 伯克利? 哥伦比亚? MIT?还是威斯康星?总结了所有评论,这几个名校都有大牛潜伏,但是值得注意的是,CMU有一整个机器学习系,是一个巨大的团体,其它大学也有很强的小团队, 但是团队比较小,要谨慎选择自己的感兴趣点。来看下面一些的评论:

Jordan Boyd-Graber, CS计算机教授的回答:

首先,我在我的答案可能会有一些语言偏差; 我可能会给机器学习和语言学的交叉学科更高的优先级。

其他人给出了明显的答案:斯坦福,伯克利,CMU,哥伦比亚大学,UW和麻省理工学院。这些大学本身在一个类别中。

在下一层级有许多人(没有特定的顺序):TTI,Alberta,UBC,Madison,Edinburgh,Duke,UT Austin,马萨诸塞,密歇根,U Penn,ETH,UCSC,霍普金斯,多伦多,UCSD,布朗, ,Georgia Tech,Cambridge,MPI Tuebingen,UCL,Oxford,Cornell。几个非常好的教授和良好的记录,出色的博士学生。还有一些我忘了(对不起!)。

但是,正如其他评论者所说,个人喜好和适应,以及一个顾问,比其他事情重要。有很多伟大的教授是他们领域的世界专家,他们不在机器学习的大阵营(例如,加州理工学院的Yisong Yue,麦格理的Mark Johnson)。底线是找到教授,去任何地方,做你想做的工作。

最后,如果我没有提到马里兰州和科罗拉多州,他们有很好的招聘记录教授乔丹·博伊德·格拉伯,这是我认为比较大学的最重要的标准。

Igor Markov, Michigan EECS教授- 目前在Google的回答

CMU有一个整个的机器学习系 – 这点很难与之竞争。 伯克利是强大的,主要是由于与统计学的密切关系(Michael Jordan+更多)。 在麻省理工学院,纽约大学,普林斯顿,多伦多和加州理工学院有非常强但很小的机器学习小组(这些信息可能会因聘请新教授而过时)。 斯坦福大学有几个有名的研究人员,但是小组不大(Sebastian Thrun和Andrew Ng不在那里了)。

密歇根现在有一个相对较大的ML组通过CSE和ECE传播 – 部分通过最近招聘— Clay Scott @ ECE,Laura Balzano @ ECE,Honglak Lee @ CSE,Jake Abernethy @ CSE等等,部分通过更多 (Satinder Baveja),部分是因为在相关领域的研究人员/教授在应用ML到网络,信号处理,机器人感测和导航等方面具有强大的专业知识(Mingyan Liu,Al Hero,Ed Olson等)。

继续阅读机器学习美国哪家强? 卡内基梅隆(CMU)?斯坦福? 伯克利? 哥伦比亚? MIT?威斯康星?

系列论文分析预告—卡耐基梅隆大学 机器学习专业 历年最佳论文

预告:

David 9 最近翻到收藏已久的链接: 卡耐基梅隆大学机器学习专业 历年最佳论文 . 其中包括3大部分:

  1. “经过时间考验奖”(Test of Time Awards)
  2. “最佳学位论文”(Dissertation Awards)
  3. “最佳与亚军论文奖”(Best Paper and Runner up Awards)

David 9打算就其中有意思的内容和杰出的贡献, 做几期博客分析, 敬请期待. 继续阅读系列论文分析预告—卡耐基梅隆大学 机器学习专业 历年最佳论文

#11 基于能量模型的生成对抗网络–生成对抗网络进阶

在文章“手把手教你写一个生成对抗网络”中,我们谈到过生成对抗网络。意犹未尽的是,只是了解生成对抗网络的基本原理和算法形式,对于训练结果还没有仔细研究。

最近拜读了机器学习四大神之一Yann LeCun (燕乐存 目前在facebook就职) 今年发表的论文“ENERGY-BASED GENERATIVE ADVERSARIAL NETWORK”。基于能量模型的生成对抗网络,训练结果真的很不错。不像一般的生成网络,生成的图片像素随机性大,字体边界模糊。看下图论文在MNIST集上的比较:

来自:论文 ENERGY-BASED GENERATIVE ADVERSARIAL NETWORK
来自:论文 ENERGY-BASED GENERATIVE ADVERSARIAL NETWORK

左边是一般GAN(生成对抗网络)的生成数字, 右边就是论文的改进EBGAN(基于能量的生成对抗网络)。可以很明显地看出,改进的生成数字比较清晰,连接也比较流畅 。传统GAN生成的数字就比较模糊,像素连贯性较差继续阅读#11 基于能量模型的生成对抗网络–生成对抗网络进阶

手把手教你写一个生成对抗网络 — 生成对抗网络代码全解析, 详细代码解析(TensorFlow, numpy, matplotlib, scipy)

今天我们接着上一讲“#9 生成对抗网络101 终极入门与通俗解析”, 手把手教你写一个生成对抗网络。参考代码是:https://github.com/AYLIEN/gan-intro

关键python库: TensorFlow, numpy, matplotlib, scipy

我们上次讲过,生成对抗网络同时训练两个模型, 叫做生成器判断器. 生成器竭尽全力模仿真实分布生成数据; 判断器竭尽全力区分出真实样本和生成器生成的模仿样本. 直到判断器无法区分出真实样本和模仿样本为止.

out
来自:http://blog.aylien.com/introduction-generative-adversarial-networks-code-tensorflow/

上图是一个生成对抗网络的训练过程,我们所要讲解的代码就是要实现这样的训练过程。
其中, 绿色线的分布是一个高斯分布(真实分布),期望和方差都是固定值,所以分布稳定。红色线的分布是生成器分布,他在训练过程中与判断器对抗,不断改变分布模仿绿色线高斯分布. 整个过程不断模仿绿色线蓝色线的分布就是判断器,约定为, 概率密度越高, 认为真实数据的可能性越大. 可以看到蓝线在真实数据期望4的地方,蓝色线概率密度越来越小, 即, 判断器难区分出生成器和判断器. 继续阅读手把手教你写一个生成对抗网络 — 生成对抗网络代码全解析, 详细代码解析(TensorFlow, numpy, matplotlib, scipy)

深度理解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

#9 生成对抗网络101 终极入门与通俗解析

我们能生成/创造我们的真实世界,才能说明我们是完完全全理解了它

David 9 要写一期生成对抗网络。

实在是因为,

第一:对抗网络最近太火了。第二:  生成模型太有意思了。让计算机自己去创造东西,不再是科幻!(有用过Prisma的朋友一定体验过)。没体验过的可以瞧瞧这篇文章:”关于Prisma:那些你知道的和不知道的

生成模型通过训练大量数据, 学习自身模型, 最后通过自身模型产生逼近真实分布的模拟分布. 用这个宝贵的”分布”生成新的数据. 因此, 判别模型的目标是得到关于 的分布 P(y|X), 而生成模型的侧重是得到关于X分布 P(y, X) 或 P(x|y)P(y). 即, 判别模型的目标是给定一张图片, 请告诉我这是”长颈鹿”还是”斑马”, 而, 生成模型的目标是告诉你词语: “长颈鹿”, 请生成一张画有”长颈鹿”的图片吧~ 下面这张图片来自slideshare 可以说明问题:

http://www.slideshare.net/shaochuan/spatially-coherent-latent-topic-model-for-concurrent-object
来自: http://www.slideshare.net/shaochuan/spatially-coherent-latent-topic-model-for-concurrent-object

所以, 生成模型可以从大量数据中生成你从未见过的, 但是符合条件的样本.

难怪, 我们可以调教神经网络, 让他的画风和梵高一样. 最后输入一张图片, 它会输出模拟梵高画风的这张图片的油画.

言归正传, 为啥对抗网络在生成模型中受到追捧 ? 生成对抗网络最近为啥这么火 , 到底好在哪里? 

那就必须谈到生成对抗网络和一般生成模型的区别了. 继续阅读#9 生成对抗网络101 终极入门与通俗解析