常见的几种最优化方法

学机器学习的小伙伴, 怎么能不懂一点最优化方法, 今天, 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

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

一直想专门做一期关于Tensorflow的blog,这次终于有机会啦。这篇文章David 9打算手把手教大家入门Tensorflow,带大家总结Pycon 2016 tensorflow 研讨会:https://www.youtube.com/watch?v=GZBIPwdGtkk , 并且为大家解读第一个tensorflow例程. 另外, 文末有演讲PPT下载哦 !

什么是Tensorflow ?

Tensorflow是Google大脑团队开源的机器学习计算训练框架.

tensorflow
tensorflow

有几个重要点: 继续阅读Pycon 2016 tensorflow 研讨会总结 — tensorflow 手把手入门 #第一讲

深度学习中的激活函数导引–“深度学习大讲堂”微信公众号授权转载

最近读到一篇很不错的讲激活函数的文章,迫不及待地联系公众号,得到的转载允许,由David 9带给大家:

摘要

近年来,深度学习在计算机视觉领域取得了引人注目的成果,其中一个重要因素是激活函数的发展。新型激活函数ReLU克服了梯度消失,使得深度网络的直接监督式训练成为可能。本文将对激活函数的历史和近期进展进行总结和概括。

激活函数的定义与作用

在人工神经网络中,神经元节点的激活函数定义了对神经元输出的映射,简单来说,神经元的输出(例如,全连接网络中就是输入向量与权重向量的内积再加上偏置项)经过激活函数处理后再作为输出。加拿大蒙特利尔大学的Bengio教授在 ICML 2016 的文章[1]中给出了激活函数的定义:激活函数是映射 h:R→R,且几乎处处可导。
神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。因此,激活函数是深度神经网络中不可或缺的部分。

激活函数的历史发展与近期进展

从定义来看,几乎所有的连续可导函数都可以用作激活函数。但目前常见的多是分段线性和具有指数形状的非线性函数。下文将依次对它们进行总结。

Sigmoid

Sigmoid 是使用范围最广的一类激活函数,具有指数函数形状 。正式定义为:

QQ截图20160802113124

QQ截图20160802113344 继续阅读深度学习中的激活函数导引–“深度学习大讲堂”微信公众号授权转载

神经网络抵制过拟合神器:Dropout 手把手论文入门 — 深度学习 DL 番外篇

今天David 9要带大家读偶像Hinton等大牛的一篇论文,搞深度学习或者DL的朋友应该知道,那就是有名的Dropout方法。

学过神经网络的童鞋应该知道神经网络很容易过拟合。而且,如果要用集成学习的思想去训练非常多个神经网络,集成起来抵制过拟合,这样开销非常大并且也不一定有效。于是,这群大神提出了Dropout方法:在神经网络训练时,随机把一些神经单元去除,“瘦身”后的神经网络继续训练,最后的模型,是保留所有神经单元,但是神经的连接权重\(w\)乘上了一个刚才随机去除指数\(p\).

废话少说,上原理图:

QQ截图20160729101338

左边是标准神经网络,右边是使用Dropout的神经网络,可见只是连接度少了一些,并不影响模型继续训练。其实,Dropout动机和初衷非常有意思。 继续阅读神经网络抵制过拟合神器:Dropout 手把手论文入门 — 深度学习 DL 番外篇