Wenjun's blog

  • Home

  • About

  • Tags

  • Categories

  • Archives

Embedding 在airbnb房源排序中的应用 (KDD2018 best paper)

Posted on 2019-03-14 | Edited on 2019-03-17 | In 机器学习

Airbnb 的这篇论文《Real-time Personalization using Embeddings for Search Ranking at Airbnb》拿了KDD 2018 的best paper,初次看到这篇文章还是觉得很吃惊的,这么简单地一篇文章也能拿best paper。但细看之后觉得还是有不少工程上可以借鉴学习的地方。在介绍这篇文章之后先讨论一下如何用Word2vec在推荐中做Item Embeddings。

Embedding 在airbnb房源排序中的应用 (KDD2018 best paper)

Airbnb 的这篇论文《Real-time Personalization using Embeddings for Search Ranking at Airbnb》拿了KDD 2018 的best paper,初次看到这篇文章还是觉得很吃惊的,这么简单地一篇文章也能拿best paper。但细看之后觉得还是有不少工程上可以借鉴学习的地方。在介绍这篇文章之后先讨论一下如何用Word2vec在推荐中做Item Embeddings。

Word2vec 用于Item Embeddings

Word2vec 用于做词向量相信大家都比较熟悉了,研究生阶段我利用Word2vec的变形在双语词嵌入上做了一些尝试。工作之后才开始接触推荐系统,知道了有人利用Word2vec来做 Item Embeddings,放到item向量学习当然也可以说Node2vec或者 Graph Embeddings。开始我是有点质疑这样做的有效性,Word2vec 能用无监督的方式得到词向量,主要在于语言是有”结构性”的,是有“规律可循”的。例如“吃饭“总是在一起出现,或者说”吃面“,”吃肉“。就是因为有这样的规律,所以才能用word2vec训练语言模型下(也可以参考词向量的分布式假设)。但是在推荐中有这样的规律吗?从统计的角度上说,看了某个item1会经常去看另外某个item2。答案当然是存在,这是item-based CF的基本思路。所以Word2vec做ICF类召回还是很有效的。

推荐系统中,Word2vec以及它变种方法用于召回越来越常见了,很多人也夸张的说:万物皆可 Embedding,基本思路都是利用用户的点击历史看作一个”句子”,但是慢慢地在我心中有个疑问,为什么在做推荐的时候没有人想到使用负样本呢?因为用word2vec 学习item 向量时,利用上下文预测中心的item,并且选取一些负样本训练,模型其实认为点了item1就不会点它的负样本item1_neg了。(当然这里也必须选取一些负样本,如果没有负样本这里最终优化到每个item embedding都相等且norm=1,就能使得word2vec的交叉熵loss为0了。)既然在推荐系统的中有负样本,为啥不能利用到word2vec 中训练呢?在nlp中由于是无监督学习,所以只能随机的选取一些其它词来作为负样本。推荐系统与自然语言存在的差异是,我们能搜集到负样本,也应该加以利用。一方面随机选取负样本有概率落在正样本上,另一方面,这样的负样本不是更加置信吗,也更加具有”区分度“。我解释一下这里的“区分度”,如果用户喜欢看了一个”Dota游戏“的视频,这个时候负采样一个”娱乐“视频是完全没有问题的吧,但是这个视频上下文中还有一个”CS游戏“的视频我也没看,(这在推荐系统中常见,因为推荐系统会通过用的兴趣”游戏“召回这些视频)这样如果我选”CS游戏“的视频作为负样本是不是比”娱乐“的更好呢,因为我就是不喜欢CS而喜欢Dota,这样训练的Embeddings更加具有区分度。

上述这个问题一直是我的疑问,当然还没有时间去验证,结果看到这篇文章,完全解决了我之前的疑惑。这篇文章从这些方面说明了很多问题,并且结合了很多在Airbnb场景下的工程问题,仍然值得仔细研究。

Airbnb 中的 Embedding

Listing Embeddings

首先指明一下这里的Listing 就是推荐系统中的item。

Airbnb与其他得到embedding 的方式类似,利用用的点击历史,然后上下文预测的方式训练listing embedding。

公式如下:

利用Skip-Gram + 负采样的方式训练上述公式,$\text{v}_l$ 是listing 的表示向量,$\text{v}_c’$是网络参数,$D_n$是负采样的样本集合。

当然Airbnb不仅仅是这样做,因为有些房子不仅是用户点击过,而且是用户booked的,这里只有一个listing。也就是说在airbnb的场景中,用户看了很多房源之后最后booked了一个房源。既然是这样,airbnb希望充分利用起这样的监督信息。如Figure1,中心的listing不仅去预测它的上下文还去预测一个booked listing。这是一个global context,并且在这个序列中一直是不变的。所以它的优化目标添加了一项:

值得注意的是这里使用的参数$v_{l_b}’$与上述的$v_c’$不一样,这其实可以看作是两个不同的task,一个只是在学习中心listing与周围listing的关系,而另一个task想学习的是这一串序列所有的listing与最后的booked linsting有另外一种关系,很显然这是不一样的。另外$v_{l_b}$这里的参数量还是挺大的,是看了l然后最后选了b的所有集合大小。

这样当然还不够,为了学习更强的差异性,也就是用户会看某个房源,但不会看相同市场的其它房源,注意之前负采样是所有里面随机,而这里是选用相同的市场的其它的房源。当然这两种关系仍然是不同的,所以添加一项负采样,并且参数都不一样,如下:

最后总结这个优化目标:

  • $v_l$ 是中心房源的向量,$v’$都表示网络参数
  • $D_p$ 是房源对(l,c)集合,l,c在都在一个窗口内。
  • $D_n$ 是房源对(l,c)的负采样集合。
  • $l_b$ 是用户看过这一系列房源最终预定的房源。一个序列只有一个。
  • $D_{m_n}$是与$l$同一个市场的负采样集合。

$v_{m_n}’$是参数量大小就是每个市场下房源的集合,如果每个房源只属于一个市场,那么它就和房源字典$V$大小相同。

基于embedding 的相似房源推荐

有了每个房源的embedding 表示之后,之后可以将它利用在i2i的召回上,简单上来说就是通过用户的点击历史来推荐与这些房源相似的房源,这个相似度是通过向量的距离来计算的。

值得一提的是,Airbnb有两点比较特别

  • 1.分市场找到最相似的房源
  • 2.不仅利用了点击历史$H_c$,而且利用未点击的记录 $H_s$,

所以它定义了两个相似:

由于Airbnb的场景是推荐房源,所以限制推荐候选房源所属地非常重要。第二点计算跳过的房源相似分,这样相当于一种负反馈的机制,也就说对于那些用户跳过的房源,只要候选房源与他们相似,就不容易被推荐。

房源冷启动问题

冷启动一直是推荐系统很重要问题,这里给了一种冷启动的方法,对于新的listing embedding,因为没有用户行为数据,它利用3个相同类别,相似价格的listing embedding求平均得到。

user-type 和listing-type embedding

仅仅有两个房源之间的相似性还不够,Airbnb希望能直接学习user embedding和listing embedding,然后计算它们的相似性来直接影响排序模型。

首先他们将用户和listing都分别聚类,具有相似特征的user会聚到同一个user-type,而具有相似特征listing聚到相同的listing-type。这里的相似特征指的是基础属性,例如用户最近booked3个房子,用户年龄等等。最终表示成这样的一个id:SF_lg1_dt1_f p1_pp1_nb1_ppn2_ppn3_c2_nr3_l5s3_g5s3,每两个下划线中间表示一个基础特征,所有基础特征相同的user都映射到相同的id。listing的映射也是同理。这样做的目的主要是因为某些user listing的稀疏性,很多用户和listing的行为数较少,比如一个user只有3次点击历史,这样的user直接放进模型中肯定学的不好,但是又不能忽视这样的user,因为这直接决定了embedding 的覆盖量。所以Airbnb想出这种方式来提高覆盖量,listing 的做法也是类似的道理。

由于Airbnb的场景是为了用户预订房源,所以在学习user embedding的时候只利用用户的booked listing历史。它的优化目标如下:

其中$v_{u_t}$表示user-type的embedding,$v_c’$是网络参数,$D_{book}$是用户的booked listing历史集合,$D_{neg}$是负采样的集合。

而对于list-type的embedding通过下面的目标训练:

值得注意的时候这里使用的是相同的网络参数$v_c’$,所以通过这种方式能将user-type和listing-type的向量学到同一个空间内。这部分内容可以参考paragraph2vec中的PV-DBOW模型,与之目标相似。

这里还有一个负反馈的方式就是利用了用户rejection的 listing,那这写listing作为负样本。改造之后的目标是:

至此,Airbnb这篇论文的几种embedding技术介绍完了,总的来说就是通过skipGram+负采样的训练方式,然后在考虑两点在实际的工程中变形:1.如何构造点击序列,2.如何负采样。Airbnb的经验告诉我们负采样的时候充分利用一些监督信息是很有帮助的。

参考文章

  • Airbnb爱彼迎房源排序中的嵌入(Embedding)技术

  • 从KDD 2018 Best Paper看Airbnb实时搜索排序中的Embedding技巧

  • 不一样的论文解读2018 KDD best paper: Embeddings at Airbnb

  • Real-time Personalization using Embeddings for Search Ranking at Airbnb

简书爬虫API实现 (python代码)

Posted on 2016-12-14 | Edited on 2019-03-14 | In 技术

特别喜欢简书这个网站,上面有很多优秀的作者,很多文章也写的非常好。最近想来有空的时候就写了 个简书爬虫,抓取某个专题下的所有文章,为了完整性就完成以下一些功能。

特别喜欢简书这个网站,上面有很多优秀的作者,很多文章也写的非常好。最近想来有空的时候就写了 个简书爬虫,抓取某个专题下的所有文章,为了完整性就完成以下一些功能。

直接贴代码链接: wenjunoy/jianshu-spider-python ,相关的使用介绍在代码readme 也能看到。

简要介绍

本代码主要是提供一系列的API,用于爬取简书上的内容。可以抓取简书上用户相关信息,写的文章。还有抓取简书上所有的专题和文集,获取专题和文集的相关信息和所有文章。

不保证代码一直有效(如果简书网站结构和API发生变化)

依赖

1
2
3
BeautifulSoup
urllib2
requests

如何使用

获取代码:

1
git clone git@github.com:wenjunoy/jianshu-spider-python.git

获取用户个人信息

url形式: http://www.jianshu.com/users/< ID >/latest_articles
获取user的相关内容,包括基本信息(关注数,粉丝,文章数,字数,获得的喜欢),所有的文章,关注的人,和被关注的人。

1
2
3
4
5
6
from jianshu.jianshu import User
user = User(user_id='81840abcd13b')
user.get_user_info() # 获取基本信息
user.get_article_list() # 获取文章列表
user.get_following() # 获取关注的用户
user.get_followers() # 获取被关注的用户

通过登入自己的账户还可以获取喜欢的文章id(文章的url是 http://www.jianshu.com/p/< id >),收藏的文章和关注的专题最新的文章。必需在jianshu/config.py 设置COOKIE。

1
2
3
user.get_favourites_articles()
user.get_bookmarks_articles()
user.get_subscription_notes()

通过通知页面可以绘制你的 简书文章-关注曲线

1
2
from jianshu.plot import draw_niti
draw_niti(user_id='81840abcd13b')

关注曲线

参考简书作者-treelake的文章绘制你的简书曲线

获取所有的专题

根据主页的主题广场可以获取所有的专题ID

专题广场

1
2
3
4
5
from jianshu.jianshu import HomePage
home = HomePage()
home.get_collections_hot() # 获取热门专题
home.get_collections_recommend() #获取推荐专题
home.get_collections_city() # 获取城市专题

通过参数order_by* 和max_get的设置获取你想要的专题顺序和数目。

获取专题内容

url形式: http://www.jianshu.com/collection/< ID >
通过专题的ID可以获取该专题的相关内容,包括专题的管理员,关注此专题的用户以及文章列表。

1
2
3
4
5
from jianshu.jianshu import Collection
collection = Collection('40d81e34a7fb')
collection.get_authors()
collection.get_subscribers()
collection.get_article_list()

获取文集内容

url 形式: http://www.jianshu.com/notebooks/< ID >/latest
通过文集的ID可以获取该文集的相关内容,包括基本信息,文集的作者,关注的人和文章列表。

1
2
3
4
5
from jianshu.jianshu import Notebooks
note = Notebooks('3864458')
note.get_author_id()
note.get_subscribers()
note.get_article_list()

获取文章内容

url形式: http://www.jianshu.com/p/< ID >
通过文章的ID和获取文章的相关内容,基本信息(字数,阅读量,评论数和打赏数),文章的内容(可以选择删除网页标签和换行符),还可以下载文章内的所有图片。

1
2
3
4
5
from jianshu.jianshu import Article
art = Article('af14524650e2')
art.get_base_info() # 基本信息
art.get_article_text() # 文章的内容
art.get_all_imageUrl() # 获取文章的图片并保存

获取2015年精选文章

url: http://www.jianshu.com/zodiac/2015

1
2
zo = Zodiac()
zo.get_articles()

该代码只是简书爬虫的一系列的API,爬虫机制还需要自己去完成。目前只支持单线程。

Neural Network for NLP (reading list)

Posted on 2016-11-10 | Edited on 2019-03-14 | In NLP

A reading list for Embedding, CNN classification and LSTM.

Embedding

  • learning representations by back-propagating errors, PDF (Hinton 1986, distributed representation)
  • A Neural Probabilistic Language Model, PDF Bengio 2003
  • Efficient Estimation of Word Representations in Vector Space, PDF T Mikolov 2013
  • Sequence to Sequence Learning with Neural Networks, PDF NIPS 2014 Google
  • Semi-supervised Sequence Learning, PDF NIPS 2015 Google

  • Distributed Representations of Sentences and Documents, PDF, github-code1, github-code2 {Paragraph Vectors, 2014}

  • Skip-Thoughts Vectors github code {Skip-Thpughts vectors, 2015}

  • Learning Distributed Representations of Sentences from Unlabelled Data arxiv, github {SDAE, Fast}

CNN classification

  • A Convolutional Neural Network for Modelling Sentences, PDF ACL 2014. Nal Kalchbrenner, Edward Grefenstette and Phil Blunsom. [convnet for sentences, dynamic, k-max pooling, stacked ]

  • Convolutional Neural Networks for Sentence Classification, arxiv : 2014. Kim, Yoon. [code -theano ,code - keras] [convnet for sentences]

  • Convolutional Neural Network Architectures for Matching Natural Language Sentences, pdf NIPS 2014, Baotian Hu, Zhengdong Lu, Hang Li, etc. [sentence matching, ARC-I, ARC-II]

  • “Relation Classification via Convolutional Deep Neural Network“, PDF COLING 2014,Daojian Zeng, Kang Liu, Siwei Lai, Guangyou Zhou and Jun Zhao [Relation Classification, word feature, Position feature ]

  • Effective Use ofWord Order for Text Categorization with Convolutional Neural Networks, arXiv 2014, Rie Johnson, Tong Zhang . [Text categorization, Word Order,seq-CNN for text, bow-CNN for text, parallel CNN ]

  • Character-level Convolutional Networks for Text Classification, arxiv NIPS 2015, {character-level CNN}

  • Semi-supervised Convolutional Neural Networks for Text Categorization via Region Embedding, PDF NIPS 2015, Rie Johnson, Tong Zhang

  • Recurrent Convolutional Neural Networks for Text Classification ,LINK AAAI2015, (RCNN)

  • The Forest Convolutional Network: Compositional Distributional Semantics with a Neural Chart and without Binarization, pdf EMNLP 2015, Phong Le and Willem Zuidema. [Tree CNN ]

LSTM

  • Supervised and Semi-Supervised Text Categorization using LSTM for Region Embeddings, Rie Johnson, Tong Zhang PDF ICML 2016 [one hot LSTM]

机器学习——机器学习概论

Posted on 2016-08-22 | Edited on 2019-03-14 | In 机器学习

上半年的alphago围棋大战李世石,以4:1的比分大胜李世石——[新浪科技-AlphaGo最终局战胜李世石 人机大战总比分1:4],这也让人工智能再一次的吸引了全世界人的目观,其中的一些词汇也是火了一把,人工智能(Artificial intelligence),深度学习(Deep learning)以及DeepMind。这里稍微解释以上几个词汇。


上半年的alphago围棋大战李世石,以4:1的比分大胜李世石——新浪科技-AlphaGo最终局战胜李世石 人机大战总比分1:4,这也让人工智能再一次的吸引了全世界人的目观,其中的一些词汇也是火了一把,人工智能(Artificial intelligence),深度学习(Deep learning)以及DeepMind。这里稍微解释以上几个词汇。

人工智能:人工智能格式计算机科学的一个分支,它研究的是计算机模拟人的意识,思维方式来处理问题。就是说计算机能像人一样思考。

深度学习:深度学习是只是机器学习的一类方法,机器学习是人工智能的一个分支,主要是实现人工智能的一些方法,可以说是方法论。

DeepMind:DeepMind只是一个组织,主要研究方向也就是深度学习相关内容。现在被Google收购

机器学习概论

深度学习是一种特殊的机器学习(machine learning)方法,为了更好的理解深度学习,首先要对机器学习的主要内容有一个大致的了解。接下来的一些章节是机器学习的一些重要的方法。这样对于新手读者或者那些想要对机器学习有一个更加广阔了解的人来说基本都能全面覆盖。如果你对机器学习的基本方法比较了解可以略过这些内容。

我们先定义学习算法到底是什么,提出以下的例子:线性回归算法(Linear regression algorithm)。然后,我们会继续描述如何拟合训练数据发现其模式,把该模式推广到新的数据中。这其实就是学习的基本定义,能从训练数据中学到“知识”,然后把该“知识”应用到新的数据中。大部分机器学习算法需要学习的其实是模型的参数。为了得到该学习的模型一般是最小化一个代价函数,该函数需要求解的未知数就是模型的参数,而该模型的已知变量就是训练数据集。机器学习的本质是应用统计学习,统计训练数据的模型得到一系列的规律。

大部分的机器学习方法可划分成以下两种:监督学习(supervised learning)和无监督学习(unsupervised learning)。对于这两种分类,我也会给出一些学习算法的实例。大部分的机器学习(深度学习)问题都是通过随机梯度下降的方法解决的,随机梯度下降是一种优化算法,简单来说就是求解代价函数的方法。所以把机器学习可以看成是以下的几个组成:一个代价函数,一个模型,一个数据集和一种求解的算法。

学习算法

一个机器学习算法其实就是能从数据中学到“知识”的一种方法。但是如何定义学习呢?Mitchell 1997年给了一个定义:一个计算机程序通过经验E完成了一个任务T,评价它的性能的办法是P。所以这章的内容将会从机器学习的任务T,评价方法P和经验E来展开。

机器学习任务

机器学习可以解决一些人类能够解决的任务,如果是提供一些训练数据和一个任务,机器学习能做的效果也是接近于人类的。一般的,机器学习要做的事情是对于一个样本该如何处理。这个样本可以用特征来表示,也就是说一个样本可以通过一个n维的向量来表示,$x \in R^n$。比如一幅图像可以用像素值来表示。

许多任务都能通过机器学习来解决,包括以下的任务:

分类(classification)

在这个任务中,计算机程序需要讲一个样本分在K个类中的一个。K是指所有的类别的个数。为了解决这个问题需要得打这样一个函数$f: R^n \rightarrow {1,…,K}$,该函数$y=f(x)$可以表示从样本x到类别标签y的映射。这样的一个函数就能解决我们需要的分类任务。一般的,函数f的输出是一个概率分布,它是指样本x属于每一个类别的概率,概率最高的那个即是x的类标。一个分类的例子就是物体识别(Object Recognitions),即给定一张图像,判断这张图像属于什么物体。

CIFAR-10

现在解决物体识别任务基本最好的方法都是深度学习(Krizhevsky et al 2012)

回归任务(Regression)

在这个任务中,计算机程序需要的是在给定一个输入时,输出一个数值。解决该任务需要得到的函数是 $f:R^n \rightarrow R$,该任务与分类任务很像但不同的地方是输出是一个数值(连续的)而不是一个类标(离散的)。例如我们要预测从某地到另一地所需要的时间,输入的可能是两个地点或者一连串地点的坐标信息,需要输出的是花费的时间time。再比如本文开始alphago下围棋问题,计算机程序要做的是在当前状态下判断最佳的下棋位置,即计算每一个空位的得分。

机器翻译(Machine Translation)

在机器翻译的任务中,给定某种语言的一个文字序列,需要翻译成给定语言,即得到另一个文字序列。比如中文翻译成英文,现在常用到的一些应用包括Google翻译,百度翻译都是机器学习的成果。现在机器翻译大都是基于深度学习的一些方法。

其实还包括许多的机器学习任务,比如推荐系统,结构输出,聚类,目标检测等。还可以通过应用分成三大类,一个是对于图像的处理,还有一个是对于文本处理和语音。对于图像比如给图像着色,找出图像中的人脸,找出背景图,识别图片中的物体,描述一幅图像等。对于文本处理比如机器翻译,文本分类,文本的情感分析,文本总结,阅读理解等。语音可以是语音识别,生成语音等。能想到的很多任务都是机器学习的常见任务,大概机器学习的终极目标就是解决人类能解决的所有问题吧。

性能方法

为了评价一个机器学习算法的能力好坏,需要设计一个性能的评价方法P,不同的机器学习任务一般有不同的评价方法。对于一个分类任务,评价办法就是对于给定一个测试集合,分类之后计算其分类的正确率(Accuracy),即算法分类得到正确结果的比例,也可以用错误率来评价。正确率越高(错误率越低)则该算法的性能越好,否则越差。而对于一个回归问题,可以计算预测结果与正确结果的误差来评价。总误差越小说明算法的性能越好。对于一些其他的机器学习的评价也可以通过误差来计算。有了评价方法就可以判断机器学习算法的性能,人们根据这个来挑战更加好的机器学习算法。

参考

  • 《Deep Learning》, Yoshua Bengio et al.
  • 《ImageNet Classification with Deep Convolutional Neural Networks》
  • The CIFAR-10 dataset

Word Embedding (A neural probabilistic langulage model)

Posted on 2016-07-25 | Edited on 2019-03-14 | In NLP

神经网络模型不仅可以得到语言模型的参数还顺便得到了词向量,即word embedding(南大周志华翻译成词嵌入),亦即得到了词的向量表示。最早用神经网络的思路训练神经网络的模型是百度IDL的徐伟2000提出的。而这篇《A neural probabilistic langulage model》是Bingio在2003年发表在JMLR上的文章。

本文需要概率论与随机过程的相关知识

语言模型

语言模型听起来非常高大上,其实做的事情很简单,计算一个句子出现的概率,或者说一组“单词”能组成一个句子的概率,例如:对于下面的两句话,s1.我在图书馆看书;s2.我在图书馆做饭。很明显s2不符合常理,而s1很合理,怎么会在图书馆做饭能,不应该是在厨房吗?在厨房做饭是大家基于平时的经验得到的结果,也就是该句子发生的概率更大或者更加合理。用概率的形式表达就是:$p(s1)>p(s2)$。但是一个句子出现的概率怎么计算呢?这就是语言模型的任务。

语言模型是根据一定的训练集合(语料库)得到的模型,该模型一般可以:
1).预测一个句子出现的概率;
2).根据不完整的句子前几个词来预测下一个词。一般的语言模型也就是统计语言模型。

统计语言模型可以计算一个句子的概率,接下来我们形式化的表示该模型。假设一个句子由T个词构成$S=(w_1,w_2,…,w_T)$,其中$w_i$表示一个单词,用$w_i^j$第$i$个词到第$j$个词的序列,则$w_1,w_2,…,w_T$的联合概率也就是S出现的概率计算如下:
$$p(S)=p(w_1^T)=p(w_1,w_2,…,w_T)$$

这就是句子的概率,根据 bayes公式得到:
$$p(w_1^T) = p(w_1)p(w_2|w_1)p(w_3|w_1^2)…p(w_T|w_1^{T-1})$$

其中的条件概率$p(w_1),p(w_2|w_1),p(w_3|w_1^2),…,p(w_T|w_1^{T-1})$就是语言模型的参数,如果得到了这些参数,我们就能够知道该句子的概率。上述例子s1=”我在/图书馆/看书”的概率计算如下:
$p(s1)=p(我在)p(图书馆|我在)p(看书|我在/图书馆)$

常见的参数求解的方法有n-gram模型,决策树,最大熵模型以及本文要介绍的神经网络模型。为了对参数的求解有更好理解,先介绍n-gram 模型。

N-gram 模型

由bayes定理有:
$$p(w_k|w_1^{k-1})=\frac {p(w_1^k)}{p(w_1^{k-1})}$$

$p(w_1^k)$表示词序列$w_1^k$出现的概率,这个概率可以通过预料中的计算所有该序列的数目得到。

$$p(w_1^k)=\frac {count(w_1^k)}{词序列综合}$$

$count(w_1^k)$表示词序列$w_1^k$在语料中出现的次数。同理:

$$p(w_1^{k-1})=\frac {count(w_1^{k-1})}{词序列综合}$$

这样两个概率相除就得到了条件概率:
$$p(w_k|w_1^{k-1})=\frac {count(w_1^k)}{count(w_1^{k-1})}$$

通过上式我们知道一个词的出现是和该词前面所有的词都相关,如果假设一个词的出现只和前面固定的词相关,比如在 Markov假设中,一个状态只和前一个状态相关。如果设定这样的一个固定值,可以降低不少的复杂度。另外一方面,从常识来看,一个词的出现只与它相邻的词相关,与较远距离的词几乎没有关系。这就是n-gram模型的基本思想,他做了一个n-1阶的Markov假设。

$$p(w_k|w_1^{k-1})=\frac {count(w_{k-n+1}^k)}{count(w_{k-n+1}^{k-1})}$$

n的大小完全决定于参数的规模,一般来说,n越大模型的效果也更好。但是由于其复杂度,一般n也不会取太大。

以上面的例子s1=”我在/ 图书馆/ 看书”中, 条件概率$p(看书|我在/图书馆)= \frac {count(我在/图书馆/看书)}{count(我在/图书馆)}$。

而1-gram模型中条件概率可以近似成 $p(看书|我在/图书馆)=p(看书|图书馆)=\frac {count(图书馆/看书)}{count(图书馆)}$。

神经网络模型(A neural probabilistic langulage model)

神经网络模型不仅可以得到语言模型的参数还顺便得到了词向量,即word embedding(南大周志华翻译成词嵌入),亦即得到了词的向量表示。最早用神经网络的思路训练神经网络的模型是百度IDL的徐伟2000提出的。而这篇《A neural probabilistic langulage model》是Bingio在2003年发表在JMLR上的文章。

Bengio的神经网络模型仍然是基于n-gram模型。

图中的wt-n+1,…,wt-1表示$w_t$的前n-1个词,现在同样的通过前n-1个词来预测下一个词$w_t$。以前n-1个词为输入层,中间一个隐藏层,输出层是softmax层,用来预测下一个词。或者简化成如下的四层:输入层-投影层-隐藏层-输出层。假设词可以用m维的向量来表示,输入层到投影层的过程就是将n-1个词的表示连接起来得到一个(n-1)m维的向量$X_w$,投影层到隐藏层是一个全连接的过程,得到一个$n_t$维度的向量$Z_w$,参数是W和p,然后隐藏层到输出层也是全连接的方式,输出层的维度等于字典的大小N,参数是U和q。

其中前向计算的过程如下:
$$z_w = tanh(Wx_w+p)$$

$$y_w = Uz_w+q$$
记过计算得到一个长度为N的向量$y_w$,用softmax归一化之后得到每个单词的概率。
$$p(w_t|w_{t-n+1},…w_{t-2},w_{t-1}) = \frac {e^{y_w^i}}{\sum e^{y_w^i}}$$

$i$表示在字典中的第$i$个词。这里需要求的参数包括:1)词向量$v(w)$,2)神经网络的参数$(W,p,U,q)$,用随机梯度下降的方法就能求解了。

优点:
1.直接得到了词向量的表示和语言模型。
2.基于词向量的模型自带平滑的功能,得到的概率不可能为零。

参考

1.word2vec 中的数学原理详解
2.Deep Learning in NLP (一)词向量和语言模型
2.NNLM: Y. Bengio, R. Ducharme, P. Vincent. A neural probabilistic language model, JMLR 2003

Word Representation

Posted on 2016-07-24 | Edited on 2019-03-14 | In NLP

任何信息在计算机内的存储方式都是数字,更加具体的说是0-1的二进制码。为了能够让生活中的语言能够存储于计算机中,我们会给所有的字符(包括字母字符,汉子等所有的其他语言文字)一个编码方式

编码

任何信息在计算机内的存储方式都是数字,更加具体的说是0-1的二进制码。为了能够让生活中的语言能够存储于计算机中,我们会给所有的字符(包括字母字符,汉子等所有的其他语言文字)一个编码方式,比如小写字母a在计算机中编码的十进制是97,大写字母A的编码是65。只要每个字符的编码能够区别于其他的字符就行。当然为了处理更加复杂的问题,比如单词,词语。同样需要用“数字”去表示它们。这里的数字就是指向量。

one-hot 表示

one-hot词表示方式是构造与词字典相同长度的向量,所有的词按照一定次序,向量的某个维度不为0,表示该位置的词。也就是说词向量的表示其中一位不为0,其余的都是零。
例如:
字典只有5个词
V = {“don’t”, “hate”, “I”, “it”, “love”}
e.g. : hate=[0,1,0,0,0], it=[0,0,0,1,0]

对于一句话可以有两种表示方式:一种是将对于的词向量拼接起来,还有一种是计算句子中每个词出现的频数。
D=”I love it”
sequential 表示方式:[00100 | 00001 | 00010]
bag of words(BOW)表示方式:[00111]

seq的表示方式具有词序的信息,长度是随着句子的长度增长而 增长,而bow表示方式没有词序信息,但是长度固定。

对于one-hot的表示方式存在以下的三点缺点:

  • 每个词的向量长度等于词汇表的长度,英语常见单词50000,中文的更加多,常见的词汇至少500000。对于seq的表示方式将是无法接受的。
  • 虽然BOW的长度固定,但是BOW的表示方式没有词序。
  • 这种表示方式丧失了词的语义信息。

word2vec (Distributed representation)

word2vec就是一种word 的低维表示方式,或者称为distributed representation.[1],[2]
这两篇Paper都是Google 的 Tomas Mikolov 2013年的工作,并公布了代码。他提出了两个模型CBOW和Skip-gram。其实更早做word 的distributed representation的是 bengio 2003 年的paper “A Neural Probabilistic Language Model”[3]

word2vec方法有两个重要的特点,一个是速度快,另一个是具有语义信息,如果两个词的含义比较接近的话,它们在向量空间也比较接近;并且能够得到如下的类似于”A-B = C-D”,比如“中国- 北京 = 法国-巴黎”,即北京市中国的首都,巴黎是法国的首都。word2vec得到的向量是低维的,一般维度在50-200维,相比于one-hot的几万维甚至几十万维大大降低了存储效率。word2vec的出现也为后来的自然语言理解的研究提供了极大的便利。

参考

[1].Distributed Representations of Words and Phrases and their Compositionality
[2].Efficient Estimation of Word Representations in Vector Space
[3].A Neural Probabilistic Language Model

Deep learning-Dropout, DropConnect

Posted on 2016-05-30 | Edited on 2019-03-14 | In 机器学习

Dropout :训练神经网络模型时,如果训练样本比较少,为了防止模型过拟合,可以使用Dropout来一定程度的减少过拟合。Dropout是Hinton 在2012年提出来的。

Dropout

训练神经网络模型时,如果训练样本比较少,为了防止模型过拟合,可以使用Dropout来一定程度的减少过拟合。Dropout是Hinton 在2012年提出来的。


Dropout是指在模型训练时随机的让隐层节点的权重变成0,暂时认为这些节点不是网络结构的一部分,但是会把它们的权重保留下来(不更新)上图帮助理解。

我使用的是Matlab的Deeplearning 的工具包https://github.com/rasmusbergpalm/DeepLearnToolbox, 我只使用的是简单地单隐层的感知机,数据是MNIST手写数字识别,该数据一共有60000个训练样本和10000个测试样本。图片大小是28 * 28,网络结构的层数是[784 512 10],100次迭代,minibatch大小是100,我做了在没有dropout和有dropout的实验对比。dropout的值是0.5,即以0.5的概率随机参数隐层节点。
代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
load mnist_uint8
train_x = double(train_x(1:60000,:)) / 255;
train_y = double(train_y(1:60000,:));
test_x = double(test_x(1:10000,:)) / 255;
test_y = double(test_y(1:10000,:));
[train_x ,mu, sigma] = zscore(train_x);
test_x = normalize(test_x, mu,sigma);

%% without dropout
rand(0);
nn = nnsetup([ 784 512 10]);
opts.numepochs = 100;
opts.batchsize = 100;
[nn, L] = nntrain(nn, train_x, train_y, opts);
[er, bad] = nntest(nn, test_x, test_y);
str = sprintf('testing error rate is : %f', er);
disp(str);

%% with dropout
rand(0);
nn = nnsetup([784 512 10]);
nn.dropoutFraction = 0.5;
opts.batchsize = 100;
opts.numepochs = 100;
nn = nntrain(nn, train_x, train_y, opts);
[er, bad] = nntest(nn, test_x, test_y);
str = sprintf('test error rate is : %f', er);
disp(str);

实验结果是:
test error rate is : 0.035200
With dropout, test error rate is : 0.031400

参考资料:

  • 论文:《Improving neural networks by preventing co-adaptation of featuredetectors》
  • https://github.com/rasmusbergpalm/DeepLearnToolbox
  • Deep learning:四十一(Dropout简单理解)

DropConnect

神经网络一般在大规模标签数据分类表现的很好,但是一帮需要更多的层数和更多的神经元,单数如果没有规范化的话,数百万和数十亿的参数很可能导致模型的过拟合。
现有的Regularization方法:

  • $l_1$ 或者 $l_2$ 惩罚
  • 贝叶斯的方法
  • 早停
  • 以上提到的Dropout方法[Hinton et al.2012]

DropConnect与Dropout不同的地方是在训练神经网络模型过程中,它不是随机的将隐层节点的输出变成0,而是将节点中的每个与其相连的输入权值以1-p的概率变成0。(一个是输出一个是输入)


在MNITS数据集上的实验结果,分别是no-Drop,dropout和dropconnect的对比。

DropConnect的主页有源码可下载:DropConnect project page

参考资料

  • 《Regularization of Neural Networks using DropConnect》
  • Deep learning:四十六(DropConnect简单理解)
  • DropConnect slides
  • DropConnect project page

Hexo主题换成Tranquilpeak

Posted on 2016-05-28 | Edited on 2019-03-14 | In 技术

Tranilpeak主题美观,较多的自定义图片显示,适合图文并茂的博客。

Tranilpeak主题美观,较多的自定义图片显示,适合图文并茂的博客。

主题安装

方式一:下载主题:hexo-theme-tranquilpeak-built-for-production-1.7.1,解压缩之后重命名为tanilpeak复制到你的博客themes目录下。

方式二:采用git的方式获取,这样可以随时pull最新的版本,当时不是直接git clone就行了,还需要自己build。参考Sven Flickinger的文章

1
2
3
4
5
6
7
8
9
cd <your hexo dir>
git submodule add https://github.com/LouisBarranqueiro/tranquilpeak-hexo-theme themes/tranquilpeak
cd themes/tranquilpeak

# install bower and grunt if not already installed
npm install -g bower grunt-cli
npm install
bower install
grunt build

Hexo的设置

hexo目录下的_config.yml修改如下设置:

1
2
theme: tranquilpeak
post_assert_folder: true

设置post_asset_folder可以使用封面,缩略图功能。

tranquilpeak设置

theme/tranquilpeak的详细配置文件_config.yml可以定制更加多的详细内容,下面进行讲解。

image_dir

默认的图片存储位置

siderbar

左侧的菜单项和作者链接设置在这里完成,菜单包括:home,categories,tags,archives,search,about,可以根据自己的需求增删菜单内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
sidebar:
menu:
home:
title: global.home
url: /
icon: home
categories:
title: global.categories
url: /all-categories
icon: bookmark
tags:
title: global.tags
url: /all-tags
icon: tags
archives:
title: global.archives
url: /all-archives
icon: archive
search:
title: global.search
url: /#search
icon: search
# `st-search-show-outputs` classes are used to open swiftype search window
class: st-search-show-outputs
about:
title: global.about
url: /#about
icon: question
author_links:
github:
title: global.github
url: https://github.com/wenjunoy
icon: github

  • title: title只显示的题目,全局已经设定了,也可以设定自己想要的内容。
  • url: url是指链接,可以是其他链接,也可以是本网站下的目录。
  • icon: icon是指显示的图标。可以在Font Awesome找到你所需要的icon。

菜单和作者链接

Author

1
2
3
4
5
6
author:
email:
location:
picture:
twitter:
google_plus:

上述内容会显示在如下的作者信息中

Customization

1
2
3
4
5
6
7
8
9
10
11
sidebar_behavior: 1 #siderbar的样式,1-4的选择
clear_reading: true
thumbnail_image: true #是否显示缩略图
thumbnail_image_position: right #显示缩略图的位置,有right,left,bottom
auto_thumbnail_image: true #自动选择文章中第一幅图片为缩略图
cover_image: cover.jpg #背景图片
favicon: favicon.png #你的头像
image_gallery: true
archive_pagination: true #使用archives
category_pagination: true #使用分类
tag_pagination: true #使用标签

使用page页面

使用all-categories页面

如果你对文章有分类的话,可以使用all-categories页面,更方便的查找你的文章.
hexo new page "all-categories",在source产生一个新的文件夹all-categories,文件夹内的文件index.md修改成如下:

1
2
3
4
5
---
title: "all-categories"
layout: "all-categories"
comments: false
---

在siderbar的categories的url就可以设置成/all-categories

categories

使用all-tags页面

如果你对文章有标签,可以使用all-tags页面。
hexo new page "all-tags",在source产生一个新的文件夹all-tags,文件夹内的文件index.md修改成如下:

1
2
3
4
5
---
title: "all-tags"
layout: "all-tags"
comments: false
---

在siderbar中tags的url就可以设置成/all-tags

tags

使用all-archives页面

archives是对所有的文章按月份分类的,添加archives页面的方式如下:hexo new page "all-archives",在source产生一个新的文件夹all-archives,文件夹内的文件index.md修改成如下:

1
2
3
4
5
---
title: "all-archives"
layout: "all-archives"
comments: false
---

在siderbar中tags的url可以设置成/all-archives

archives

个性化的文章内容

除了文章的基本内容之外,Tranquilpeak还添加了个性化的内容,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
title: 认识Markdown
date: 2016-04-14 09:47:13
tags:
- Markdown
categories:
- 技术
##tranquilpeak添加的属性
keywords:
- javascript
- hexo
clearReading: true
thumbnailImage: image-1.png
thumbnailImagePosition: right
autoThumbnailImage: yes
metaAlignment: center
coverImage: image-2.png
coverCaption: "A beautiful sunrise"
coverMeta: out
comments: false

thumbnailImage设置的是文章的缩略图,让文章更加有吸引力。thumbnailImagePosition是设置缩略图显示的位置,默认是right。autoThumbnailImage是设置是否默认的缩略图,选取文章中第一幅图作为缩略图。

coverImage是设置文章内顶部覆盖一张图片。官网给出的例子,coverCaption是图片的描述。

<!-- excerpt -->和<!-- more -->可以设置文章在首页显示的内容,<!--toc-->可以设置文章的目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
* Block comment
*/
#include <vector>
using namespace std; // line comment
namespace foo {
typedef struct Struct {
int field;
} Typedef;
enum Enum {Foo = 1, Bar = 2};
Typedef *globalVar;
extern Typedef *externVar;
template<typename T, int N>
class Class {
T n;
public:
void function(int paramName) {
int *localVar = new int[1];
this->n = N;
label:
printf("Formatted string %d\n\g", localVar[0]);
printf(R"**(Formatted raw-string %d\n)**", 1);
std::cout << (1 << 2) << std::endl;
#define FOO(A) A
#ifdef DEBUG
printf("debug");
#endif
}
};
}

参考内容:

官方文档——User documentation

《时间的朋友》读书笔记

Posted on 2016-05-27 | Edited on 2019-03-14 | In 读书笔记

时间的朋友是2015年底逻辑思维的罗振宇在水立方的一场演讲,并出版了书籍《时间的朋友》,书籍比演讲的内容更加丰富。

时间的朋友 | 图片来自网络

时间的朋友是2015年底逻辑思维的罗振宇在水立方的一场演讲,并出版了书籍《时间的朋友》,书籍比演讲的内容更加丰富。

罗振宇是自媒体视频脱口秀《罗辑思维》主讲人,互联网知识型社群试水者,资深媒体人和传播专家。

这次演讲的内容是关于商业文明,过去一年的变化,未来一年的想象。创业是今年变量最大的话题,从创业热到资本寒冬,发生着怎样的变化。

为什么要做时间的朋友?人的本质,其实是一段有意义的时间。因为人拥有的只是时间,耗费的也只是时间。无意义的时间就像是活在黑洞中,时间停止但是毫无意义。时间是这个空间上的第四个维度,虽然我们不能看到时间上的变化,但是你所做的每一件事至少是时间在变,你没办法撇开时间的维度干任何事情。所有人都应该看到时间的力量。

这本书中,从头至尾贯穿了一个思路——用生物学的“演化论”来透视商业现象。说到生物演化论,达尔文的“物竞天择,适者生存”指导我们理解生物进化的本质,自然总是选择那些优良的变异而淘汰那些弱者。但是我们人类好像是一个另类,自然选择的剪刀再也没有用了。人类文明不允许残忍地淘汰失败者,吃的再胖也不能拖去喂狼;性选择好像也没有用了,就算长得丑,但我们可以掏出房产证说服丈母娘;就算是人类引以为豪的智力也不能作为淘汰的理由,谁说理工科的博士好找对象?

那人类还怎么进步呢?好在我们除了自己身上的这个生殖器,还有三个生殖器:思想、技术和资本。

其中思想繁殖的最快,让每个人都不同于他人。只要我们在思考、感知和交流,我们的大脑就在不断交合、怀孕和生娃。所以虽然我们的肉身在原地踏步,但是我们的文明却一直在飞速的演化。每一个勾搭的眼神,每一个听懂的字句,每一交头接耳、神交默会,都是一次思想的繁殖,都在让你成为另一个迥然不同的物种。

2015年发生的事:

这个时代,我们不在需要统一的“十大新闻”的标准,你有你的大事,我有我的大事。

互联网恐慌

进入2015年,毫无疑问“互联网”使我们这个时代的最为深刻的变量,但是互联网的发展速度着实让我们恐慌,似乎所有人都要涌向这一行业,也似乎无畏任何后果。有个老板说“我愿意吧前半生的所有积累都扔进去,拼死一搏换取互联网转型成功”。

O2O大战与合并狂潮

O2O(Online to Offline, 又称为离线商务模式)。2015年的O2O,看起是《花好月圆》实则《没玩没了》,反正赚足了眼球。滴滴快的合并,58赶集合并,美团大众点评合并,携程去哪儿合并都发生在2015年。为啥要合并,钱烧不动了啊。“据不完全统计,打车行业在2015年烧了200亿元。”,美团每有1元钱的收入,实际上是亏掉2.7元等等例子。饿了么CEO曾说:“谁先考虑盈利谁就输了”。多么可怕的竞争市场,不过反正他们不虚,烧的是投资人的钱。

IP大爆发

图片来自网络

《拜年孤独》里有句话:世界新生伊始,许多事物还没有名字,提到的时候尚需要用手指指点点。

判断一个内容是不是IP,只看一个标准:它能否凭借自身的吸引力,挣脱单一平台的束缚,在多个平台上获得流量,进行分发。

比如前段时间最火的电视剧《欢乐颂》,谁又知道小说《欢乐颂》的版权被人买下被拍成电视剧,电视剧赚的钱何止是小说的千倍万倍,不仅是电视剧本身,只要有流量的地方就可以干很多事情,互联网时代当然是广告最赚钱。看准了IP你就看准了钱。

支付大战

微信支付与支付宝的大战从来没有停止,14年开始的微信红包开始点燃了这场战火。

阿里巴巴的数据帝国

阿里巴巴集团 | 图片来自网络

互联网时代,大家都忙着收集数据,谁掌握了数据谁就是赢家。“大数据”,“机器学习”,“人工智能”这些名词已经不是只有本专业学生才知道的了。接下来一年的IP是什么?这个顾客会打算买什么衣服,喜欢看什么电影?这些问题的回答都可以基于大数据的分析和机器学习的方法得到结果。最重要的当然是数据和分析办法。阿里巴巴无疑是这方面的巨头之一。

沉默的微信

微信,让世界看到你!| 图片来自网络

腾讯和阿里巴巴是中国互联网上的双雄。腾讯最核心的竞争一个是QQ,另一个就是微信,而且微信正在以极大的速率替代QQ。微信是目前手机上最受欢迎最重要的的时通信软件,甚至其重要性可以达到因为16G的iPhone跑不动微信而导致其卖的特别差这样的程度。微信是中文时间最优影响力的媒体,数据显示,2015.8有超过1000万的微信公众号存在,以每天新增1.5万个的速度增长。微信已经不仅仅是聊天工具,它还是电商平台,最大的媒体平台,移动互联网的流量入口,支付入口,社交网络……

小米和华为

14年的小米赚足了眼球,也是因为小米,中国的智能手机发展有了一个新的开始,它让很多和我一样钱不多的人都用上了不错的手机。小米的成功正如它官网上所说:“专注、极致、口碑”。这种把客户放在第一位,用心做产品,科技民主化的公式怎能不成功。而15年大家都说小米正在走下坡路,正是因为手机行业突飞猛进的发展,但是我觉得小米正在寻求其他的出路。

15年的第三季度,华为反超小米,成为中国最成功的手机公司。这来自于它的“专注”,华为专注做手机,自己做芯片,自己做云存储。而小米等其他厂商都严重依赖高通芯片。依赖必定造成局限。

2015年中国商业三个概念:

进托邦

进托邦是指,自启蒙时代和科学发明以来,我们每一年的创造都比我们每一年的破坏多出那么一丁点

了不起的不对称

增长之所以不可逆转,乃是由于‘了不起的不对称’。创造通常略多于摧毁,这正是进化 的神通所在。源源不断的人类注意力和思想所用于发明新工具、设计新娱乐和创造新需求。然而无论一下给创新是多么的微不足道和不符合逻辑,他都将成为其他创新启动的平台。

复利

这是“了不起的不对称”在当代人类文明中混成一片的表现。即使从一个很短的时间来看,它也不再试微不足道的、缓慢的进展,而已经是一个飞速的进程。

1.必须尊重未来——因为时间的开放性

2.必须尊重过去——因为时间的连续性

3.必须尊重速度——因为时间在加快

4.必须尊重真诚——因为在时间面前,一切无所遁形

“没有任何道路可以通向真诚,真诚本身就是道路”。真诚是我们的一种内心状态,没有任何方法,矫饰,策略,技术可以抵抗,除非你本就真诚。

Machine Learning and Deep earning 简介

Posted on 2016-05-26 | Edited on 2019-03-14 | In 机器学习

1-Layer Nets (Logistic Regression)
一般化的函数模型是$f(x)=\sigma(w^Tx+ b)$ 参数 $w\in R^d$,b是偏差项

1-Layer Nets (Logistic Regression)

一般化的函数模型是
$$f(x)=\sigma(w^Tx+ b)$$
参数 $w\in R^d$,b是偏差项

$\sigma$ 是非线性的方程,一般是sigmod 函数: $\sigma (x)=1 / (1+exp(-x))$.
有的时候也可以写成 $f(x)=\sigma (w^T x)$, 当 $w=[w,b]$ 和 $x=[x,1]$

一些其他的非线性方程,比如: $f(x)=(e^x-e^{-x}) / (e^x+e^{-x}))$

以下分别是sigmod函数和tanh的函数图像:

$tanh(z)$函数是sigmod函数的变种。它的取值范围是[-1,1],而sigmod函数是[0,1].
最后要说明的是,有一个等式我们以后会经常用到:如果选择 $ f(z) = 1/(1+\exp(-z)) $ ,也就是sigmoid函数,那么它的导数就是 $ f’(z) = f(z) (1-f(z)) $ (如果选择tanh函数,那它的导数就是 $ f’(z) = 1- (f(z))^2$ ,你可以根据sigmoid(或tanh)函数的定义自行推导这个等式。

sigmoid激活函数的值域为 [0,1];如果我们使用双曲正切型激活函数,那么应该选用 -1 和 +1 作为标签

Training 1-Layer Nets: Gradient

我们假定使用最下二乘误差函数 Loss(w)
$$Loss(w) = 1/2 \sum_m(\sigma(w^Tx^{(m)}) - y^{(m)})^2$$
梯度是:
$$\nabla_mLoss=\sum_m\sigma(w^Tx^{(m) }- y^{(m)})\sigma’(w^Tx^{(m) })x{(m)}$$
可以计算出$\sigma (x)=1 / (1+exp(-x))$,$$\sigma ‘(x)=\sigma(x) (1-\sigma(x))$$
$\nabla_mLoss$ 写成如下的形式:
$$\nabla_mLoss=\sum_mError^{(m)}\sigma’(in^{(m)})x^{(m)}$$

算法

1.Gradient decent (GD)

  1. 初始化参数W
  2. 计算梯度$$\nabla_mLoss=\sum_mError^{(m)}\sigma’(in^{(m)})x^{(m)}$$
  3. $w\longleftarrow w-\gamma(\nabla_mLoss)$, $\gamma$是learning rate
  4. 重复2,3步骤直到调节满足(收敛条件)

随机梯度下降 (SGD)

  1. 初始化参数W
  2. 对于每一个训练样本$(x^{(m)},y^{(m)})$
  3. $w\longleftarrow w-\gamma(\nabla_mLoss)$,$\gamma$ 是learning rate
  4. 重复2,3步骤直到调节满足(收敛条件)
12

Wen Jun

Wllcome to wenjun's blog
20 posts
5 categories
14 tags
GitHub E-Mail
© 2020 Wen Jun
Powered by Hexo v3.8.0
|
Theme – NexT.Muse v7.0.1