五分钟解释什么是蒙特卡罗(Monte Carlo Method)方法

我们经常在各类算法中看到”蒙特卡罗”(Monte Carlo)的字样, 比如MCMC(Markov Chain Monte Carlo) , 还有AlphaGo使用的蒙特卡洛搜索树. 其实, “蒙特卡罗”并不是一个特定算法, 它是一个思想或者方法的统称. 听起来很神秘, 其实用正常”人话”就能简单解释.

维基百科对蒙特卡罗方法英语:Monte Carlo method)给出的解释是:

二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。

与它对应的是确定性算法

所以说, 蒙特卡罗算出的值, 不是精确的而是一个估计, 但是在人们可以接受的错误范围.

下面是维基百科上一个很直观的例子:

330px-pi_30k

使用蒙特卡洛方法估算π值. 放置30000个随机点后,π的估算值与真实值相差0.07%.

这张图其实很简单, 就像我们玩飞镖一样, 随机地在一个方形平面上投掷30000个飞镖, 事先我们并不知道圆周率π的值究竟是多少, 但是我们知道这里有1/4的圆, 于是我们把红色面积上的点数m, 和蓝色面积上的点数n, 以及圆周率π的关系, 可以写出一个约等于的式子:

π ≈ 4m/(n+m) 继续阅读五分钟解释什么是蒙特卡罗(Monte Carlo Method)方法

用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则

line search(一维搜索,或线搜索)是最优化(Optimization)算法中的一个基础步骤/算法。它可以分为精确的一维搜索以及不精确的一维搜索两大类。
在本文中,我想用“人话”解释一下不精确的一维搜索的两大准则:Armijo-Goldstein准则 & Wolfe-Powell准则。
之所以这样说,是因为我读到的所有最优化的书或资料,从来没有一个可以用初学者都能理解的方式来解释这两个准则,它们要么是长篇大论、把一堆数学公式丢给你去琢磨;要么是简短省略、直接略过了解释的步骤就一句话跨越千山万水得出了结论。
每当看到这些书的时候,我脑子里就一个反应:你们就不能写人话吗?

我下面就尝试用通俗的语言来描述一下这两个准则。

【1】为什么要遵循这些准则
由于采用了不精确的一维搜索,所以,为了能让算法收敛(即:求得极小值),人们逐渐发现、证明了一些规律,当你遵循这些规律的时候,算法就很有可能收敛。因此,为了达到让算法收敛的目的,我们就要遵循这些准则。如果你不愿意遵循这些已经公认有效的准则,而是要按自己的准则来设计算法,那么恭喜你,如果你能证明你的做法是有效的,未来若干年后,书本里可能也会出现你的名字。

 

【2】Armijo-Goldstein准则
此准则是在196X年的时候由Armijo和Goldstein提出的,当然我没有具体去搜过这俩人是谁。在有的资料里,你可能会看到“Armijo rule”(Armijo准则)的说法,可能是同一回事,不过,任何一个对此作出重要贡献的人都是不可抹杀的,不是么?

Armijo-Goldstein准则的核心思想有两个:①目标函数值应该有足够的下降;②一维搜索的步长α不应该太小。 继续阅读用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则

Ubuntu 怎么升级 TensorFlow 到最新版0.10 ?

第一步:

$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl

第二步:

安装 TensorFlow:

# Python 2

$ sudo pip install --upgrade $TF_BINARY_URL

# Python 3

$ sudo pip3 install --upgrade $TF_BINARY_URL

参考文献:

 

常见的几种最优化方法

学机器学习的小伙伴, 怎么能不懂一点最优化方法, 今天, David 9带大家来安利一下几种常见的最优化方法.

阅读目录

我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题“在一定成本下,如何使利润最大化”等。最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称。随着学习的深入,博主越来越发现最优化方法的重要性,学习和工作中遇到的大多问题都可以建模成一种最优化模型进行求解,比如我们现在学习的机器学习算法,大部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优化,从而训练出最好的模型。常见的最优化方法有梯度下降法、牛顿法和拟牛顿法、共轭梯度法等等。

1. 梯度下降法(Gradient Descent)

梯度下降法是最早最简单,也是最为常用的最优化方法。梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的。梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法“。最速下降法越接近目标值,步长越小,前进越慢。梯度下降法的搜索迭代示意图如下图所示:

Untitled

继续阅读常见的几种最优化方法

究竟什么是Word2vec ? Skip-Gram模型和Continuous Bag of Words(CBOW)模型 ?

上一期的Pycon 2016 tensorflow 研讨会总结 — tensorflow 手把手入门 #第二讲 中, 谈到过word2vec, 但是究竟什么是Word2vec ? 以及skip-Gram模型和CBOW模型究竟是什么? 也许还有小伙伴不是很明白, 这一次我们来好好讲一下这两种word2vec:

  • 连续Bag-of-Words (COBW)
    • 从上下文来预测一个文字
  •  Skip-Gram
    • 从一个文字来预测上下文

其实, 用一个向量唯一标识一个word已经提出有一段时间了. Tomáš Mikolov 的word2vec算法的一个不同之处在于, 他把一个word映射到高维(50到300维), 并且在这个维度上有了很多有意思的语言学特性, 比如单词”Rome”的表达vec(‘Rome’), 可以是vec(‘Paris’) – vec(‘France’) + vec(‘Italy’)的计算结果.

接下来, 上word2vec示意图:

screen-shot-2015-04-10-at-4-16-00-pm

很显然, word2vec是只有一个隐层的全连接神经网络, 用来预测给定单词的关联度大的单词. 继续阅读究竟什么是Word2vec ? Skip-Gram模型和Continuous Bag of Words(CBOW)模型 ?

重磅: php weekly, pycoders weekly 收集数据集合 开放下载

今天David 9 给大家开放一个很棒的数据集, 收集了迄今为止的phpweekly和pycoders上的所有HTML数据, 不可多得的技术引导.

http://www.phpweekly.com/

http://pycoders.com/

项目地址:

https://github.com/yanchao727/crawl_pycoder

phpweekly 所有数据路径: https://github.com/yanchao727/crawl_pycoder/tree/master/crawl_pycoder/spiders/php_weekly_dump

pycoders 所有数据路径:

https://github.com/yanchao727/crawl_pycoder/tree/master/crawl_pycoder/spiders/content

Pycon 2016 tensorflow 研讨会总结 — tensorflow 手把手入门 #第二讲 word2vec

上一期我们讲到Pycon 2016 tensorflow 研讨会总结 — tensorflow 手把手入门 #第一讲 . 今天是我们第二讲, 来趴一趴word2vec.

什么是word2vec?

用来学习文字向量表达的模型 (相关文本文字的的特征向量).

  • 向量空间模型解决了NLP中数据稀疏问题, 如果文字是离散的. 即, 把文字映射到相邻的空间点上.

立刻上图感受一下word2vec:

1

Untitled

这里看看与文字’Cat’接近的词汇, 一目了然啊~如果一定要给’cat’一个向量描述, 上图左边这一列特征和权重是不是挺合理的呢? 嘿嘿~~~ 继续阅读Pycon 2016 tensorflow 研讨会总结 — tensorflow 手把手入门 #第二讲 word2vec