1. 程式人生 > >基於Hierarchical Softmax的CBOW模型

基於Hierarchical Softmax的CBOW模型

在看了許多文章之後,覺得應該記錄一下學習的成果以及看完許多文章之後疑惑的解答。

1.在神經網路訓練中都會有輸入,在這裡的輸入就是一箇中心詞的上下文的詞向量。但是都沒有回答此詞向量都是怎樣的出來的。終於在word2vec的原始碼中找到了答案。

vocab_size是詞彙表的詞的數量,layer1_size是詞向量的維度,依次為每一個詞初始化一個詞向量。

  1. for (a = 0; a < vocab_size; a++) for (b = 0; b < layer1_size; b++) {  
  2.     next_random = next_random * (unsigned longlong)25214903917 + 11;  
  3.     //初始化詞向量syn0,每一維的值為[-0.5, 0.5]/layer1_size範圍內的隨機數
  4.     syn0[a * layer1_size + b] = (((next_random & 0xFFFF) / (real)65536) - 0.5) / layer1_size;  
  5.   }  

2.從input到hidden(project)的運算過程就是將2c個詞向量加和,求平均值。

cw就是詞向量的個數。

for (c = 0; c < layer1_size; c++) neu1[c] += syn0[c + last_word * layer1_size];  

for (c = 0; c < layer1_size; c++) neu1[c] /= cw; 

3.求出的平均值向量就是hidden的輸入。

4.hidden到output的運算過程就是一顆haffuman樹。haffuman樹的建立由詞彙表中詞彙的頻度構成。根節點儲存的向量就是平均值向量。葉子節點儲存的是詞彙表中的詞彙。每個非葉子節點就代表深度神經網路中的一個神經元,葉子節點就代表output.

  1. //如果採用分層softmax優化
  2.         //根據Haffman樹上從根節點到當前詞的葉節點的路徑,遍歷所有經過的中間節點
  3.         if (hs) for (d = 0; d < vocab[word].codelen; d++) {  
  4.           f = 0;  
  5.           //l2為當前遍歷到的中間節點的向量在syn1中的起始位置
  6.           l2 = vocab[word].point[d] * layer1_size;  
  7.           //f為輸入向量neu1與中間結點向量的內積
  8.           for (c = 0; c < layer1_size; c++) f += neu1[c] * syn1[c + l2];  
  9.           //檢測f有沒有超出Sigmoid函式表的範圍
  10.           if (f <= -MAX_EXP) continue;  
  11.           elseif (f >= MAX_EXP) continue;  
  12.           //如果沒有超出範圍則對f進行Sigmoid變換
  13.           else f = expTable[(int)((f + MAX_EXP) * (EXP_TABLE_SIZE / MAX_EXP / 2))];  
  14.           //g是梯度和學習率的乘積
  15.           //學習率越大,則錯誤分類的懲罰也越大,對中間向量的修正量也越大
  16.           //注意!word2vec中將Haffman編碼為1的節點定義為負類,而將編碼為0的節點定義為正類
  17.           //即一個節點的label = 1 - d
  18.           g = (1 - vocab[word].code[d] - f) * alpha;  
  19.           //根據計算得到的修正量g和中間節點的向量更新累計誤差
  20.           for (c = 0; c < layer1_size; c++) neu1e[c] += g * syn1[c + l2];  
  21.           //根據計算得到的修正量g和輸入向量更新中間節點的向量值
  22.           //很好理解,假設vocab[word].code[d]編碼為1,即負類,其節點label為1-1=0
  23.           //sigmoid函式得到的值為(0,1)範圍內的數,大於label,很自然的,我們需要把這個中間節點的向量調小
  24.           //而此時的g = (label - f)*alpha是一個負值,作用在中間節點向量上時,剛好起到調小效果
  25. 相關推薦

    word2vec原理(二) 基於Hierarchical Softmax的模型

    轉自http://www.cnblogs.com/pinard/p/7243513.html  在word2vec原理(一) CBOW與Skip-Gram模型基礎中,我們講到了使用神經網路的方法來得到詞向量語言模型的原理和一些問題,現在我們開始關注word2vec的語言模型如何改進傳統的神經網路

    基於 Hierarchical Softmax 的 CBOW 模型

    關注:如何構造 P(w|context(w)) ? 1. 網路結構 樣本:(context(w),w),假設 context(w) 由 w 的前後各 c 個詞構成。 輸入層:包含(contex

    word2vec 中的數學原理詳解(四)基於 Hierarchical Softmax 的模型

    word2vec 是 Google 於 2013 年開源推出的一個用於獲取 word vector 的工具包,它簡單、高效,因此引起了很多人的關注。由於 word2vec 的作者 Tomas

    基於Hierarchical Softmax的CBOW模型

    在看了許多文章之後,覺得應該記錄一下學習的成果以及看完許多文章之後疑惑的解答。1.在神經網路訓練中都會有輸入,在這裡的輸入就是一箇中心詞的上下文的詞向量。但是都沒有回答此詞向量都是怎樣的出來的。終於在word2vec的原始碼中找到了答案。vocab_size是詞彙表的詞的數量

    Word2Vec概述與基於Hierarchical Softmax的CBOW和Skip-gram模型公式推導

    該文件是我在《Word2Vec_中的數學原理詳解》基礎上做的總結和一些新的描述,增加了程式碼與公式的對照和公式總彙(公式太多,彙總下看起來更方便),可以更加方便的加深對程式碼和公式理解。既然是總結,則一些很基礎的知識我沒有寫到,如果裡面的有些概念不熟悉,也可

    基於LVS-DR模型實現keepalived的主從架構

    lvs-dr、keepalived 在一個系統中,常常存在一些單點服務器,為了提高整個系統的穩定性,我們常常需要對這些單點服務做高可用配置,keepalived即為一種常用的高可用配置服務。 首先我們來了解一下神馬是keepalived? keepalived是一個基於VRRP協議來實

    基於狀態空間模型的PID控制器用M語言實現

    公式 可能 不足 什麽是 摩擦 生活 pid bsp 時間 前面講到如何將狀態空間量建模,現在用PID控制方法並通過m語言來實現: 搞清楚這兩個問題,加深對PID控制器的理解: u = Kp * (x_last - x(i)) +   Ki * (x_last - 2 *

    基於caffe的模型壓縮

    DeepCompression-caffe 精簡後的日誌: stage1 I1102 17:28:31.986773 29076 cmp_conv_layer.cpp:47] CONV THR: 0.115747 0.33 I1102 17:28:31.986806 29076 cmp_co

    Java簡單部落格系統(一)基於實體聯絡模型設計資料庫

      基本概念 簡單屬性:不能劃分為更小的部分(其他屬性)。 單值屬性:一個特定實體有隻有單獨的一個值。 派生屬性:可以從別的相關屬性或實體派生出來。 最簡單的部落格系統 (一)實體集:使用者,部落格,評論,實體及其屬性列出如下: (二)聯絡集: 以上設計的實體集,聯絡集表示如

    以圖搜圖之模型篇: 基於 InceptionV3 的模型 finetune

    cte nec inpu 大神 rms mode cto num 創建 在以圖搜圖的過程中,需要以來模型提取特征,通過特征之間的歐式距離來找到相似的圖形。 本次我們主要講訴以圖搜圖模型創建的方法。 本文主要參考了這位大神的文章, 傳送門在此: InceptionV3進行fi

    【看論文】之《基於YIQ彩色模型的成熟番茄影象分割識別_王新忠》

    論文資訊 題目:《基於YIQ彩色模型的成熟番茄影象分割識別》 作者:王新忠 作者單位:南京農業大學工學院 期刊名稱:中國農業工程學會2005年學術年會論文集 提交時間:2005年 摘要 分析了基於YIQ彩色模型,採用色度閾值分割法進行成熟番茄影象分割識別,並和RGB顏

    基於決策樹模型對 IRIS 資料集分類

    基於決策樹模型對 IRIS 資料集分類 文章目錄 基於決策樹模型對 IRIS 資料集分類 1 python 實現 載入資料集 視覺化資料集 分類和預測 計算準確率 2 基於MATLA

    基於自適應模型的無位置感測器pmsm模擬(simulink)

    目錄 1、PMSM系統控制模型​ 2、MRAS模組 4、we 5、引數設定 6、模擬結果 1、PMSM系統控制模型 2、MRAS模組 3、mars模組 4、we 5、引數設定 6、模擬結果  

    基於Java記憶體模型:Synchronized和Volatile的比較

    1.Java記憶體模型     1.Java記憶體模型 1.Java記憶體模型    1)  Java虛擬機器規範試圖定義一種Java記憶體模型,來遮蔽掉各種硬體和作業系統的記憶體訪問差異,以實現讓Java程式在各種平臺下都能

    基於深度學習模型Wide&Deep的推薦

    本實驗選用資料為UCI開源資料集,僅用於學習,請勿商用) Wide&Deep推薦演算法出自一篇論文《Wide&Deep Learning for RecommenderSystems》,Wide&Deep由兩部分組成,分別是Wide和Deep。先來說wide,表示的是generali

    基於BA網路模型的二部圖資料集生成

    1 import random 2 import networkx as nx 3 import matplotlib.pyplot as plt 4 5 6 def ba_bip_graph(n): 7 g = nx.DiGraph() 8 f = open("st

    【tornado】系列專案(一)之基於領域驅動模型架構設計的京東使用者管理後臺

    【tornado】系列專案(一)之基於領域驅動模型架構設計的京東使用者管理後臺      本博文將一步步揭祕京東等大型網站的領域驅動模型,致力於讓讀者完全掌握這種網路架構中的“高富帥”。 一、預備知識: 1.介面: python中並沒有類似java

    基於深度學習模型Wide&Deep的推薦

    本實驗選用資料為UCI開源資料集,僅用於學習,請勿商用) Wide&Deep推薦演算法出自一篇論文《Wide&Deep Learning for RecommenderSystems》,Wide&Deep由兩部分組成,分別是Wide和Deep。先來說wide,表示的是generali

    《推薦系統實踐》 程式實現 ——2.6 基於圖的模型

    PersonalRank演算法 在基於圖的模型中,給使用者A進行個性化推薦,實際是計算使用者A對所有物品的感興趣程度。 在PersonalRank演算法中,不區分使用者和商品,所以計算使用者A對所有物品的感興趣程度,即計算除使用者A外的所有節點B,C,a,b,

    python資料分析:商品資料化運營(下)——基於投票組合模型的異常檢測

    本案例用到的主要技術包括: 基本預處理:使用DictVectorizer將字串分類變數轉換為數值型變數、使用SMOTE對不均衡樣本做過抽樣處理。 資料建模:基於cross_val_score的交叉檢驗、基於LogisticRegression、RandomForest、