資料來源:CS224n: Natural Language Processing with Deep Learning (Winter 2017) https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1174/
聲明:非原創(chuàng)诬辈,不用于商業(yè)用途酵使,根據(jù)個(gè)人筆記習(xí)慣,進(jìn)行整理改編自http://www.hankcs.com/?s=CS224n%E7%AC%94%E8%AE%B0
Lecture 2 -- Word Vector Representations: word2vec
1.詞義 Word meaning (15 mins)
1.1 如何表示一個(gè)詞語的意思 How do we represent the meaning of a word?
先來看看如何定義“meaning”的意思焙糟,英文中meaning代表人或文字想要表達(dá)的idea口渔。這是個(gè)遞歸的定義,估計(jì)查詢idea詞典會用meaning去解釋它穿撮。
中文中“意思”的意思更加有意思:
他說:“她這個(gè)人真有意思(funny)缺脉』居”她說:“他這個(gè)人怪有意思的(funny)」ダ瘢”于是人們以為他們有了意思(wish)业踢,并讓他向她意思意思(express)。他火了:“我根本沒有那個(gè)意思(thought)礁扮!”她也生氣了:“你們這么說是什么意思(intention)知举?”事后有人說:“真有意思(funny)√粒”也有人說:“真沒意思(nonsense)”雇锡。(原文見《生活報(bào)》1994.11.13.第六版)[吳尉天,1999]
——《統(tǒng)計(jì)自然語言處理》
語言學(xué)中“meaning”近似于“指代倦畅、所指遮糖、符號”。
1.2 計(jì)算機(jī)如何處理詞語的意思 How do we have usable meaning in a computer?
過去幾個(gè)世紀(jì)里一直用的是分類 taxonomy 詞典叠赐。計(jì)算語言學(xué)中常見的方式是 WordNet 那樣的詞庫欲账。比如NLTK中可以通過WordNet查詢熊貓panda的上位詞關(guān)系 hypernyms (is-a) relationships,得到“食肉動(dòng)物”“動(dòng)物”之類的上位詞芭概。也可以查詢“good”的同義詞——“honorable受人尊敬的”“ripe熟了”赛不。
WordNet:A Lexical Database for English。是由Princeton 大學(xué)的心理學(xué)家罢洲,語言學(xué)家和計(jì)算機(jī)工程師聯(lián)合設(shè)計(jì)的一種基于認(rèn)知語言學(xué)的英語詞典踢故。它不是光把單詞以字母順序排列,而且按照單詞的意義組成一個(gè)“單詞的網(wǎng)絡(luò)”惹苗。它是一個(gè)覆蓋范圍寬廣的英語詞匯語義網(wǎng)殿较。名詞,動(dòng)詞桩蓉,形容詞和副詞各自被組織成一個(gè)同義詞的網(wǎng)絡(luò)淋纲,每個(gè)同義詞集合都代表一個(gè)基本的語義概念,并且這些集合之間也由各種關(guān)系連接院究。WordNet包含描述概念含義洽瞬,一義多詞,一詞多義业汰,類別歸屬伙窃,近義,反義等問題样漆。
1.3 離散表征的問題 Problems with this discrete representation
-
這種discrete representation雖然是種語言學(xué)資源为障,但丟失了細(xì)微區(qū)別 nuances。
- 比如這些同義詞的意思實(shí)際上還是有微妙的差別:adept, expert, good, practiced, proficient, skillful
缺少新詞
主觀化
需要耗費(fèi)大量人力去整理
-
無法計(jì)算準(zhǔn)確的詞語相似度 word similarity
- 比如 精通 比 好 更接近 專家
無論是規(guī)則學(xué)派,還是統(tǒng)計(jì)學(xué)派产场,絕大多數(shù)NLP學(xué)家都將詞語作為最小單位鹅髓。
事實(shí)上舞竿,詞語只是詞表長度的one-hot向量京景,這是一種localist representation(大概是借用localist“局部”的意項(xiàng))。
在不同的語料中骗奖,詞表大小不同确徙。Google的1TB語料詞匯量是1300萬,這個(gè)向量的確太長了执桌。
1.4 從符號表示到分布式表示 From symbolic to distributed representations
詞語在符號表示上體現(xiàn)不出意義的相似性鄙皇。
one-hot向量是正交 orthogonal 的,無法通過任何運(yùn)算得到相似度仰挣。
1.5 基于分布相似性的表示 Distributional similarity based representations
You shall know a word by the company it keeps.——J. R. Firth
如果你能把單詞放到正確的上下文中去伴逸,才說明你掌握了它的意義,這是現(xiàn)代統(tǒng)計(jì)自然語言處理 modern statistical NLP最成功的思想之一:
1.6 通過向量定義詞語含義 Word meaning is defined in terms of vectors
給每一個(gè)單詞構(gòu)造一個(gè)向量膘壶,我們會選擇一個(gè)密集向量 dense vector 错蝴,讓它可以預(yù)測目標(biāo)單詞所在文本的其他詞匯,所有其他詞匯也是由一個(gè)個(gè)向量組成颓芭。
我們可以使用一些相似性方法顷锰,比如兩個(gè)向量間的點(diǎn)積,以便于它可以預(yù)測兩個(gè)單詞的相似度亡问。
通過某種聰明的算法實(shí)現(xiàn)遞歸 recursive官紫,根據(jù)向量來調(diào)整向量,這樣這些詞匯就可以預(yù)測上下文的其他詞匯州藕。
分布式相似度 Distributional similarity束世,是一種關(guān)于詞匯語義的理論,即你可以通過理解單詞出現(xiàn)的上下文床玻,來描述詞匯的意思毁涉。
分布式表示 distributed representations (dense vector representation)與符號表示 symbolic representations(localist representation、one-hot representation)相對笨枯。
分布式表示和含義幾乎總是通過分布相似性來構(gòu)建的薪丁。
<u style="box-sizing: border-box;">[備注]這中間講了一大段分布式和分布式表示的區(qū)別,但是沒有聽懂馅精,也不是很重要严嗜。。洲敢。</u>
2.Word2vec的介紹 Word2vec introduction (20 mins)
2.1 學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)單詞嵌入的基本思想 Basic idea of learning neural network word embeddings
我們定義了一個(gè)模型漫玄,其目的是用詞向量的方式來預(yù)測 中心詞 wt 和 上下文 context 之間的關(guān)系(運(yùn)用一些概率的方法,根據(jù)給定單詞預(yù)測上下文單詞出現(xiàn)的概率)
p(context|wt ) = …
損失函數(shù) loss function定義如下:
J = 1 ? p(w ?t |w t )
理想狀態(tài)下,我們可以準(zhǔn)確預(yù)測 中心詞 wt 周圍的詞睦优,這里的w ?t 表示圍繞在 中心詞wt 周圍的其他詞渗常。如果我們可以根據(jù) t 精準(zhǔn)預(yù)測這些上下文,那么概率p 就為1汗盘,損失函數(shù)J 為0皱碘。
如果有25%的概率預(yù)測對,那就是說隐孽,我們有75%的概率的損失或失敗癌椿,這就是一個(gè)損失函數(shù)的值。
我們將會在大型語料庫 big language corpus的各個(gè)位置重復(fù)這樣的操作菱阵,我們的目標(biāo)是調(diào)整詞匯向量表示 vector representations of words 從而最小化損失函數(shù) minimize this loss**踢俄。
實(shí)際上,除了設(shè)置這樣一個(gè)預(yù)測目標(biāo)以外晴及,也做不了其他的都办。只是讓每個(gè)單詞的向量都能預(yù)測其周圍的詞匯,反之亦然虑稼。通過深度學(xué)習(xí)訓(xùn)練后琳钉,這些詞向量的輸出 outputs 在表示單詞意思方面如此強(qiáng)大, 在處理各種類似問題上也非常有用动雹。
2.2 直接學(xué)習(xí)低維詞向量 Directly learning low-dimensional word vectors
這其實(shí)并不是多么新潮的主意槽卫,很早就有一些研究了:
? Learning representations by 誤差反向傳播 back-propagating errors (Rumelhart et al., 1986)
? 神經(jīng)概率語言模型 A neural probabilistic language model (Bengio et al., 2003) 中使用誤差反向傳播算法來做詞匯表示
? NLP (almost) from Scratch (Collobert & Weston, 2008)
? A recent, even simpler and faster model: word2vec (Mikolov et al. 2013) 可以用來處理數(shù)十億單詞的文本,并生成非常棒的單詞表示
只不過以前一直沒有引起重視胰蝠,直到Bengio展示了它的用處之大歼培。后來研究才開始火熱起來,并逐漸出現(xiàn)了更快更工業(yè)化的模型茸塞。
2.3 word2vec的主要思路 Main idea of word2vec
通過單詞和上下文彼此預(yù)測 Predict between every word and its context words!
生成詞匯向量兩個(gè)算法:
Skip-grams (SG):預(yù)測上下文
Continuous Bag of Words (CBOW):預(yù)測目標(biāo)單詞
效率中等的兩種訓(xùn)練方法:
Hierarchical softmax
Negative sampling 負(fù)采樣
但在這門課里躲庄,只會講Nai?ve softmax(效率低)。
兩種算法和兩種訓(xùn)練方法的四種組合原理推導(dǎo)和代碼分析:http://www.hankcs.com/nlp/word2vec.html
2.4 Skip-gram預(yù)測 Skip-gram prediction
中心思想:在每一個(gè)估算步 estimation step都取一個(gè)詞作為中心詞匯 center word 钾虐,然后嘗試去預(yù)測它一定范圍內(nèi)的上下文 context的詞匯噪窘。
注意這里雖然有四條線,但這個(gè)模型中只定義一個(gè)概率分布 probability distribution效扫,即給定一個(gè)中心詞匯倔监,某個(gè)單詞在它上下文中出現(xiàn)的概率。(因?yàn)檫@只是個(gè)詞袋模型而已菌仁,與位置無關(guān))
Bag-of-words詞袋模型:對于一篇文檔來說浩习,假定不考慮文檔內(nèi)的詞的順序關(guān)系和語法,只考慮該文檔是否出現(xiàn)過這個(gè)單詞济丘。
我們會選取詞匯的向量表示谱秽,學(xué)習(xí)就是要最大化這些概率分布值洽蛀。這一個(gè)概率分布就是輸出 output,也就是出現(xiàn)在中心詞匯周圍的上下文的一個(gè)輸出疟赊。
個(gè)人理解:每個(gè)詞郊供,對于這個(gè)中心詞而言,出現(xiàn)在周圍近哟,都有一個(gè)概率分布吧驮审。那把所有的關(guān)于該中心詞的周圍概率分布拼在一塊,形成的one-hot向量椅挣,再經(jīng)過softmax就是輸出头岔。再把所有的中心詞形成的向量拼在一起,就是一個(gè)矩陣鼠证。
2.5 word2vec細(xì)節(jié) Details of word2vec
全部看完后,還是沒看懂的話推薦一篇文章 http://www.reibang.com/p/da235893e4a5
定義一個(gè)半徑 m靠抑,窗口 就是圍繞中心詞的大小為 2m 距離的詞匯(參照上圖)量九,中心詞前后大小各為 m 。
在一篇文章中颂碧,遍歷文本中的所有位置荠列,對于每個(gè)位置,我們通過窗口大小內(nèi)的上下文詞匯得到了一個(gè)概率载城。
接下來就是設(shè)置模型的參數(shù) parameter肌似,讓上下文中所有詞匯出現(xiàn)的概率都盡可能的高。
公式里的 θ 就是模型的參數(shù)诉瓦,也就是每個(gè)單詞的向量表示的唯一參數(shù)川队。
每一個(gè)中心單詞 t (1≤t≤T),目標(biāo)函數(shù)定義為所有位置的預(yù)測結(jié)果的乘積:
個(gè)人理解睬澡,根據(jù)公式通俗地舉個(gè)例子:m=2固额,T=100。假設(shè)第3個(gè)中心詞為w3煞聪,在參數(shù)θ下斗躏,P(w1|w3)、P(w2|w3)昔脯、P(w4|w3)啄糙、P(w5|w3)這四個(gè)概率的乘積就是所要求的中心詞w3關(guān)于上下文的概率,然后再將這100個(gè)中心詞的概率累乘云稚,就得到了目標(biāo)函數(shù)隧饼。我們的目標(biāo)呢,就是通過調(diào)整我們的參數(shù)θ要最大化這個(gè)目標(biāo)函數(shù)碱鳞。
注意:在這里m=2是超參數(shù) hyper parameters桑李,而不是參數(shù),此處可以當(dāng)做常量看待。
對如上的公式取對數(shù)贵白,將所有的求積操作轉(zhuǎn)換成求和操作率拒,緊接著取每個(gè)位置上的平均值 1/T,相當(dāng)于對每個(gè)詞匯進(jìn)行歸一化處理 normalization 禁荒。
我們通常喜歡最小化問題猬膨,而不喜歡最大化問題。因此對已經(jīng)取了對數(shù)的公式再加上負(fù)號呛伴,也就是得到了一個(gè)負(fù)對數(shù)似然 negative log likelihood勃痴,也就是模型的負(fù)對數(shù)分布。
2.6 目標(biāo)函數(shù)細(xì)節(jié) The objective function – details
這些術(shù)語都是一樣的热康。損失函數(shù) Loss function = 代價(jià)函數(shù) cost function = 目標(biāo)函數(shù) objective function沛申,不用擔(dān)心用錯(cuò)了。
對于負(fù)對數(shù)似然來講姐军,常用的損失函數(shù)為交叉熵 Cross-entropy loss铁材。
對于one-hot的wt+j目標(biāo),訣竅就是只預(yù)測一個(gè)當(dāng)前的單詞奕锌,在這個(gè)準(zhǔn)則下著觉,交叉熵?fù)p失函數(shù)里剩下的只有一項(xiàng),那就是負(fù)對數(shù)似然惊暴。
2.7 Word2Vec細(xì)節(jié) Details of Word2Vec
預(yù)測每個(gè)單詞的窗口范圍(半徑為m)內(nèi)的上下文單詞饼丘。
對于p(wt+j|wt),最簡單的公式就是Softmax函數(shù)辽话。
o 是輸出的上下文詞語中的確切某一個(gè)的索引肄鸽,c 是中心詞匯的索引 indices,都是指針對整個(gè)詞匯表空間屡穗。
uo 是對應(yīng)的上下文詞向量(輸出向量 output vector)贴捡,vc 是詞向量(中心向量 center vector)。
2.8 點(diǎn)積 Dot products
復(fù)習(xí)一下課程開頭所說的baby math:
首先由兩個(gè)單詞向量村砂,求他們的點(diǎn)積烂斋,也就是取出相應(yīng)的項(xiàng),求他們的積础废,然后將所得的乘積求和汛骂。得到了兩個(gè)向量的點(diǎn)積之后,將他們轉(zhuǎn)換成Softmax形式评腺。
這其實(shí)就是一種粗糙的相似度計(jì)算方法帘瞭,兩個(gè)向量的相似度越高,點(diǎn)積 dot products 就越大蒿讥。
2.9 Softmax:從實(shí)數(shù)空間到概率分布的標(biāo)準(zhǔn)映射方法 Softmax function: Standard map from ?V to a probability distribution
指數(shù)函數(shù)一定可以把實(shí)數(shù)映射成正數(shù)蝶念,為求解概率分布提供了一個(gè)很好的基礎(chǔ)抛腕。然后歸一化得到概率。
softmax之所叫softmax媒殉,是因?yàn)橹笖?shù)函數(shù)會導(dǎo)致較大的數(shù)變得更大担敌,小數(shù)變得微不足道;這種選擇作用類似于max函數(shù)廷蓉。
提問:其實(shí)未必非得用softmax全封,只要能保證是正的才方便計(jì)算概率,如果正數(shù)很多桃犬,相加除以總數(shù)也是可以的刹悴。
提問:用兩個(gè)向量而不用一個(gè),因?yàn)檎邇蓚€(gè)表示相互獨(dú)立攒暇,當(dāng)做優(yōu)化的時(shí)候土匀,不會相互耦合,在實(shí)際中也更好操作扯饶,所以每個(gè)單詞都有兩個(gè)向量恒削。
提問:這個(gè)模型與中心詞的位置無關(guān),只有在詞匯表中的ID有關(guān)尾序。
2.10 Skipgram
別看這張圖有點(diǎn)亂,但其實(shí)條理很清晰躯砰,基本一圖流地說明了問題每币。
wt 是one-hot向量,代表了一個(gè)詞琢歇。(事先對單詞的編碼兰怠,是ID不是位置)Vx1,V行1列李茫,比如說該文本中有10000個(gè)不同的詞揭保,那么V=10000,其中只有一個(gè)位置為1魄宏,其余位置為0秸侣。
W 是由所有中心詞匯的向量表示組成的矩陣 word embedding matrix,也就是隱藏層權(quán)重矩陣宠互,也就是最終我們所需要的參數(shù)θ味榛。矩陣大小為dxV,d行V列予跌,d一般是自己取值搏色,可以取300,可以理解為隱藏層神經(jīng)元個(gè)數(shù)券册。那么該矩陣就是300x10000频轿,300行垂涯,10000列,每一列代表每個(gè)單詞的300維的中心詞向量航邢,每一行代表一個(gè)10000維的詞向量和隱藏層單個(gè)神經(jīng)元連接的權(quán)重向量耕赘。
vc=Wwt 是根據(jù) wt 與 W相乘之后的結(jié)果,實(shí)際上不需要矩陣相乘操作翠忠,只需要在矩陣W中找到相對應(yīng)的列即可鞠苟。vc 就是我們所需要的中心詞的向量表示。dx1秽之,d行1列当娱。
W' 是上下文單詞矩陣context word matrix ,也就是輸出層權(quán)重矩陣考榨。矩陣大小Vxd跨细,與W相反。
W'vc = [uxTvc] 相當(dāng)于中心詞vc 和詞匯表中所有上下文單詞都分別求內(nèi)積河质,每個(gè)上下文單詞是一個(gè)概率冀惭,把所有上下文單詞概率拼在一起就組成一個(gè)向量。Vx1掀鹅,V行1列散休,也就是一個(gè)10000維的向量,正好對應(yīng)這個(gè)中心詞和所有單詞表內(nèi)的詞的相似度乐尊。
p(x|c)=softmax(uxTvc)戚丸,求出來的概率可能包括負(fù)值,因此選擇softmax扔嵌,得到一個(gè)滿足概率分布的矩陣限府。
最后與與真實(shí)值進(jìn)行對比,計(jì)算損失即可痢缎。
[備注]該圖與PPT上的圖不一致胁勺。
Word2Vec的整個(gè)建模過程實(shí)際上與自編碼器(auto-encoder)的思想很相似,即先基于訓(xùn)練數(shù)據(jù)構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)独旷,當(dāng)這個(gè)模型訓(xùn)練好以后署穗,我們并不會用這個(gè)訓(xùn)練好的模型處理新的任務(wù),我們真正需要的是這個(gè)模型通過訓(xùn)練數(shù)據(jù)所學(xué)得的參數(shù)势告,例如隱層的權(quán)重矩陣蛇捌。訓(xùn)練完成后,我們會將輸出層“砍掉”咱台,僅保留隱層络拌。
隱藏層沒有使用任何激活函數(shù),但是輸出層使用了sotfmax回溺。
官方筆記里有非手寫版春贸,一樣的意思:
這兩個(gè)矩陣都含有V個(gè)詞向量混萝,也就是說同一個(gè)詞有兩個(gè)詞向量,哪個(gè)作為最終的萍恕、提供給其他應(yīng)用使用的embeddings呢逸嘀?有兩種策略,要么加起來允粤,要么拼接起來崭倘。在CS224n的編程練習(xí)中,采取的是拼接起來的策略:
# concatenate the input and output word vectors
wordVectors = np.concatenate((wordVectors[:nWords,:], wordVectors[nWords:,:]),axis=0)
# wordVectors = wordVectors[:nWords,:] + wordVectors[nWords:,:]
他們管W中的向量叫input vector类垫,W'中的向量叫output vector司光。
2.11 訓(xùn)練模型:計(jì)算參數(shù)向量的梯度 To train the model: Compute all vector gradients!
把所有參數(shù)寫進(jìn)向量θ,對d維的詞向量和大小V的詞表來講悉患,有:
由于上述兩個(gè)矩陣的原因残家,所以θ的維度中有個(gè)2。模型的學(xué)習(xí)當(dāng)然是梯度法了售躁。
3.研究展示 Research highlight (Danqi) (5 mins)
Paper:A Simple but Tough-to-beat Baseline for Sentence Embeddings (ICLR 2017)
在自然語言處理中坞淮,核心問題就是我們怎樣才能定義可以編碼句子含義的向量表示 Sentence embedding。
有了句子表示后陪捷,我們可以通過求解兩個(gè)向量的內(nèi)積 inner product來計(jì)算句子相似性sentence similarity回窘。
我們還可以將句子表示作為特征去處理一些句子分類任務(wù) sentence classification,例如情感分析市袖。
構(gòu)造句子向量表示毫玖,最簡單的方法就是使用詞袋 Bag-of-words (BoW)。就是求出詞的向量表示凌盯,然后取平均值。
這篇論文本質(zhì)上給出的是一個(gè)非常簡單的無監(jiān)督模型:加權(quán)詞袋weighted Bag-of-words 句子表示 + 移除一些特定方向 remove some special direction烹玉。
第一步:就是計(jì)算向量表示的平均值驰怎,不過每個(gè)單詞都有一個(gè)獨(dú)立的權(quán)重。這里a是一個(gè)常數(shù)二打,p(w)表示該單詞出現(xiàn)的頻率县忌。這意味著平均表示除以單詞頻率的權(quán)重。
第二步:我們算出所有這些句子的向量表示后继效,我們計(jì)算第一主成分症杏,然后減去第一主成分上的投影。
他們計(jì)算上下文的句子相似性瑞信,證明這個(gè)簡單的方法遠(yuǎn)遠(yuǎn)好于其他所有方法厉颤。還有對于一些監(jiān)督學(xué)習(xí)任務(wù),比如句子分類凡简,方法依然優(yōu)秀逼友。
4.目標(biāo)梯度函數(shù) Word2vec objective function gradients (25 mins)
有用的基礎(chǔ)知識:(后面白板上有解釋這個(gè)公式)
鏈?zhǔn)揭?guī)則:如果y = f(u) 并且 u = g(x)精肃,那么等價(jià)于 y = f ( g( x ) )
推導(dǎo)過程:最大化目標(biāo)函數(shù)也就是最小化負(fù)對數(shù)似然。
每個(gè)單詞有兩個(gè)向量表示帜乞,一個(gè)是中心詞center word向量司抱,記為v,一個(gè)是上下文詞context word向量黎烈,記為u习柠。
這里是對向量求偏導(dǎo)榨呆,而不是對變量求偏導(dǎo)爬骤。
視頻里的提問挺有意思的挥吵,這里沒有做記錄误澳。
更清晰的公式參考:http://www.hankcs.com/nlp/word2vec.html#h3-5
5.損失/目標(biāo)函數(shù) Cost/Objective functions
梯度有了剃幌,參數(shù)減去梯度就能朝著最小值走了关带。
5.1梯度下降 Gradient Descent
公式只是一個(gè)位置更新公式葵硕。θnew是新的位置竞穷,θold是舊的位置梳庆,α是步長暖途,也叫學(xué)習(xí)率。朝哪個(gè)方向走呢膏执,就是J(θ)關(guān)于θold的偏導(dǎo)數(shù)驻售,也就是損失函數(shù)。
因此根據(jù)梯度下降公式更米,已知當(dāng)前的參數(shù)值欺栗,計(jì)算出這個(gè)位置的梯度值,從中選取一定的步長征峦,可以得到新的參數(shù)值迟几,這個(gè)新的參數(shù)值可以讓目標(biāo)函數(shù)的值變小一點(diǎn),我們就是朝著最小值的方向移動(dòng)栏笆。
5.2 普通梯度下降代碼 Vanilla Gradient Descent Code
while True:
theta_grad = evaluate_gradient(J , corpus , theta) # theta_grad 是J(θ)關(guān)于θ的偏導(dǎo)
theta = theta - alpha * theta_grad # theta 是新的參數(shù)
5.3 直觀講解 Intuition
對于兩個(gè)參數(shù)上的簡單凸函數(shù)类腮。等高線表示目標(biāo)函數(shù)的級別。
5.4 隨機(jī)梯度下降法 Stochastic Gradient Descent(SGD)
當(dāng)數(shù)據(jù)特別大時(shí)蛉加,做一次簡單的梯度更新都需要非常久的時(shí)間蚜枢。
因此我們采取隨機(jī)梯度下降法。只選取文本的一個(gè)位置针饥,有了一個(gè)中心詞匯厂抽,以及它周圍的詞,我們每移動(dòng)一個(gè)位置丁眼,對所有的參數(shù)求解梯度筷凤,然后使用這個(gè)位置的梯度估計(jì)值,這樣就前進(jìn)了一小步户盯。如果你想想用它來處理單詞向量學(xué)習(xí)之類的事情嵌施,這種梯度估計(jì)是及其及其粗糙的饲化,因?yàn)椋覀冎辉谝粋€(gè)位置這么做吗伤,這個(gè)位置周圍只有幾個(gè)單詞吃靠,我們就看不到大部分參數(shù),這就是一種非常粗糙的梯度估計(jì)足淆。
while True:
window = sample_window(corpus) # 選取部分點(diǎn)
theta_grad = evaluate_gradient(J , window , theta) # theta_grad 是J(θ)關(guān)于θ的偏導(dǎo)
theta = theta - alpha * theta_grad # theta 是新的參數(shù)
神經(jīng)網(wǎng)絡(luò)算法喜歡噪音巢块。
但是這種方法有兩個(gè)優(yōu)點(diǎn),一個(gè)是計(jì)算速度快巧号。比如說可以從百萬級的數(shù)據(jù)中提取100個(gè)數(shù)據(jù)點(diǎn)進(jìn)行計(jì)算族奢,算一個(gè)不是那么準(zhǔn)確的數(shù),時(shí)間節(jié)約了近10000倍丹鸿,就算多走了幾倍的路也值得越走。還有一個(gè)優(yōu)點(diǎn)是能夠自動(dòng)逃離比較差的局部最優(yōu)點(diǎn),實(shí)際情況下比GD效果更好靠欢。