#15 增强学习101 闪电入门 reinforcement-learning

是先用自己的”套路”边试边学, 还是把所有情况都考虑之后再总结, 这是一个问题 — David 9

David 9 本人并不提倡用外部视角或者”黑箱”来看待”智能”和”机器学习”.

正如《西部世界》迷宫的中心是自己的内心. 神经网络发展到目前的深度学习, 正是因为内部的结构发生了变化(自编码器, 受限玻尔兹曼机, 改进的激活函数, 等等…) . 所以David 9 相信神经网络未来的发展在于人类对内部结构的新认知, 一定有更美的内部结构存在 !

而今天所说的增强学习, 未来更可能作为辅助外围框架, 而不是”智能核心”存在. 不过作为闪电入门, 我们有必要学习这一流行理论:

来自: http://www.cis.upenn.edu/~cis519/fall2015/lectures/14_ReinforcementLearning.pdf

没错, 这张图和文章特色图片是一个思想:

训练实体(Agent)不断地采取行动(action), 之后转到下一个状态(State), 并且获得一个回报(reward), 从而进一步更新训练实体Agent. 继续阅读#15 增强学习101 闪电入门 reinforcement-learning

卡内基梅隆大学(CMU),那些经受住时间考验的机器学习论文–第二弹:动态主题模型

这一弹,接着上一期,这次,我们要解释一种典型的机器学习算法——动态主题模型(Dynamic Topic Model)。

概率主题模型概率图模型是每个做文本挖掘的学者的必学课题。其中最常见的主题模型是隐含狄利克雷分布(LDA)。当然,本文的动态主题模型也是主题模型的一种,不过为了方便理解,我们还是来回顾一下LDA。

来自:https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation
来自:https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation

我们定义:

α 是狄利克雷先验的参数,是每个文档可能的主题分布

\theta _{m},当α 落实到一个文档m,\theta _{m}是文档m的主题模型。而且α代表的是狄利克雷分布,\theta _{m}代表的是多项式分布。 α很明显是\theta _{m}共轭先验

β狄利克雷先验的参数,但是,它是每个主题可能的文字分布

{\displaystyle z_{mn}} 是在文档m中,第n个文字的主题。 继续阅读卡内基梅隆大学(CMU),那些经受住时间考验的机器学习论文–第二弹:动态主题模型

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

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

以下是试题, 附答案:

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

A. 作正态分布概率图

B. 作盒形图

C. 马氏距离

D. 作散点图

答案:C

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

 

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

#10 随机森林101—用人话解释随机森林,用python使用随机森林

林子大了,什么“树”都有 !

最近神经网络被学界和业界都玩坏了。之前David 9也跟风一连几篇神经网络的文章。神经网络确实到了一个新高度,其他机器学习算法在目前甚至十年以内显得黯然失色。

但是,David 9不希望大家错过其他也很棒的机器学习算法比如随机森林。虽然不如神经网络在某些领域光芒万丈,随机森林因为其方便快捷的使用,以及训练模型的简单,目前依旧深受许多数据科学家的喜爱。

如果你的老板有一堆数据,想做数据挖掘,想找一点“高大上”的算法而且容易实现,选随机森林吧。不仅比神经网络门栏低,而且对于大多数情况的数据形式,都是可以训练的。而且,有时结果好的让你惊讶。

随机森林集成学习中的一种算法。下面这张图带大家回顾集成学习:

combining_classifiers_overview

之所以叫做随机森林,很明显,这个模型是通过许多决策树集成学习而来的。集成学习是啥?如果你还不知道,请看我们之前的博客:“#3 集成学习–机器学习中的群策群力 !”和“聊聊集成学习和”多样性”, “差异性”的那些事儿~”。 继续阅读#10 随机森林101—用人话解释随机森林,用python使用随机森林

#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