Candidate sampling:NCE loss和negative sample

在工作中用到了類似于negative sample的方法,才發現我其實并不了解candidate sampling。于是看了一些相關資料,在此簡單總結一些相關內容。

主要內容來自tensorflow的candidate_sampling和卡耐基梅隆大學一個學生寫的一份notesNotes on Noise Contrastive Estimation and Negative Sampling,還有一部分參考了tensorflow的nce_loss和sampled_softmax_loss的文檔。

What is Candidate Sampling

首先,什么是candidate sampling呢?假設我們有這樣一個問題,給定一個樣本集,其中每個樣本由(x_i, T_i),其中x_i是輸入特征,T_i是一個target小集合,滿足T \subset L, |T| << |L|。我們的目標是學習一個F(x, y),使得給定一個x,我們可以預測出類別y為正的可能性。

如果我們使用正常的softmax方法,那么在計算每一個sample時,我們都需要遍歷整個集合|L|,對每一個可能的y計算一次F(x, y),這是非常昂貴的操作。尤其是在NLP的相關預測中,這一操作代價更加高昂。所以candidate sampling的方法被提了出來:在計算每一個sample時,我們從整個標簽集合或者負標簽集合中隨機采樣出一個小的candidate集合S,將ST一起組成當前的candidate集合C = S \cup T,并在C上計算F(x, y)

常見的candidate sampling方法的特性可以見下表:

在這個表中,K(x)是一個不依賴于候選類的任意函數。 由于Softmax涉及歸一化,因此添加這樣的函數不會影響計算的概率。Q(y|x)S_i中類y的期望概率或者期望個數。

NCE和nagetive sample可以適應于T_i是multiset的情況,在這種情況下,P(y|x)等于T_i中類y的期望個數。NCE,negative sampling和sampled logistic可以適應于S_i是multiset的情況,在這種情況下,Q(y|x)等于S_i中類y的期望個數。

Noise Contrastive Estimation (NCE)

我們考慮一種簡單的也是最常用的情況,|T| = 1。以經典的word預測為例,此時T= {t_i}。我們給定經驗分布\widetilde{P}(x)\widetilde{P}(t|x),則每一個訓練集中的正樣本都相當于從\widetilde{P}(x)采樣出一個x_i,并在這個x的基礎上在\widetilde{P}(t|x)上采樣出t_i,并標定label d = 1。同時我們從分布Q(x)中采樣出k個noise samples,則

P(d, t|x)= \begin{cases} \frac{k}{1 + k}Q(x) & \text{d=0}\\ \frac{1}{1 + k}\widetilde{P}(t|x)& \text{d=1} \end{cases}

那么使用條件概率公式,我們就可以寫出:

P(d = 0| t, x) = \frac{k * Q(x)}{\widetilde{P}(t|x) + k * Q(x)}

P(d = 1| t, x) = \frac{\widetilde{P}(t|x)}{\widetilde{P}(t|x) + k * Q(x)}

在神經網絡算法中,我們使用P_\theta(t,x)來代替\widetilde{P}(t|x),并試圖用梯度下降法來訓練\theta

Negative Sampling

Negative Sampling是NCE的一種近似,比較值得注意的是,negative sampling對于分布Q有強依賴,NCE則沒有這個問題。

tensorflow實現

NCE loss在tensorflow中的文檔可以參考tf.nn.nce_loss。要注意的是,使用這種方法時,標簽必須按照frequency的降序排序,因為默認的采樣方法是tf.nn.log_uniform_candidate_sampler。當然我們也可以實現自己的采樣方法。

Negative sampling則用sampled_softmax_loss來實現,注意sampled_softmax_loss只能處理一個正label的情況。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388997.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388997.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388997.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

golang key map 所有_Map的底層實現 為什么遍歷Map總是亂序的

Golang中Map的底層結構其實提到Map&#xff0c;一般想到的底層實現就是哈希表&#xff0c;哈希表的結構主要是Hashcode 數組。存儲kv時&#xff0c;首先將k通過hashcode后對數組長度取余&#xff0c;決定需要放入的數組的index當數組對應的index已有元素時&#xff0c;此時產生…

樸素貝葉斯分類器 文本分類_構建災難響應的文本分類器

樸素貝葉斯分類器 文本分類背景 (Background) Following a disaster, typically you will get millions and millions of communications, either direct or via social media, right at the time when disaster response organizations have the least capacity to filter and…

第二輪沖次會議第六次

今天早上八點我們進行了站立會議 此次站立會議我們開了30分鐘 參加會議的人員&#xff1a; 黃睿麒 侯熙磊 會議內容&#xff1a;我們今天討論了如何分離界面&#xff0c;是在顯示上進行限制從而達到不同引用展現不同便簽信息&#xff0c;還是單獨開一個界面從而實現顯示不同界面…

markdown 鏈接跳轉到標題_我是如何使用 Vim 高效率寫 Markdown 的

本文僅適合于對vim有一定了解的人閱讀&#xff0c;沒有了解的人可以看看文中的視頻我使用 neovim 代替 vim &#xff0c;有些插件是 neovim 獨占&#xff0c; neovim 和 vim 的區別請自行 google系統: Manjaro(Linux)前言之前我一直使用的是 vscode 和 typora 作為 markdown 編…

nginx運用

1、nginx的 命令 start nginx 這樣&#xff0c;nginx 服務就啟動了。打開任務管理器&#xff0c;查看 nginx.exe 進程&#xff0c;有二個進程會顯示&#xff0c;占用系統資源&#xff0c;那是相當的少。然后再打開瀏覽器&#xff0c;輸入 http://127.0.0.1/ 就可以看到nginx的…

數據修復案例

/*--數據修復案例 如何在數據庫文件損壞&#xff08;日志文件完好&#xff09;情況下&#xff0c;進行恢復 --(收藏整理)--*/ --測試步驟 --1.建一個測試數據庫test create database test go use test go -…

Seaborn:Python

Seaborn is a data visualization library built on top of matplotlib and closely integrated with pandas data structures in Python. Visualization is the central part of Seaborn which helps in exploration and understanding of data.Seaborn是建立在matplotlib之上…

利用日志還原數據庫

USE masterGO-- 創建測試數據庫CREATE DATABASE db_test GO -- 對數據庫進行備份BACKUP DATABASE db_testTO DISK c:/db_test.bakWITH FORMATGO -- 創建測試表CREATE TABLE db_test.dbo.tb_test( ID int) -- 延時 1 秒鐘,再進行后面的操作(這是由于SQL Server的時間精度…

Springboot集成BeanValidation擴展一:錯誤提示信息加公共模板

Bean Validator擴展 1、需求 ? 在使用validator時&#xff0c;有個需求就是公用錯誤提示信息&#xff0c;什么意思&#xff1f; 舉個例子&#xff1a; ? NotEmpty非空判斷&#xff0c;在資源文件中我不想每個非空判斷都寫”不能為空“&#xff0c;只需要寫”###“&#xff0c…

福大軟工 · 第十次作業 - 項目測評(團隊)

寫在前面 本次作業測試報告鏈接林燊大哥第一部分 調研&#xff0c;評測 一、評測 軟件的bug&#xff0c;功能評測&#xff0c;黑箱測試 1.下載并使用&#xff0c;描述最簡單直觀的個人第一次上手體驗 IOS端 UI界面簡單明了&#xff0c;是我喜歡的極簡風格。課程模塊界面簡潔優雅…

銷貨清單數據_2020年8月數據科學閱讀清單

銷貨清單數據Note: I am not affiliated with any of the writers in this article. These are simply books and essays that I’m excited to share with you. There are no referrals or a cent going in my pocket from the authors or publishers mentioned. Reading is a…

c++運行不出結果_fastjson 不出網利用總結

點擊藍字 關注我們 聲明 本文作者:flashine 本文字數:2382 閱讀時長:20分鐘 附件/鏈接:點擊查看原文下載 聲明:請勿用作違法用途,否則后果自負 本文屬于WgpSec原創獎勵計劃,未經許可禁止轉載 前言 之前做項目在內網測到了一個fastjson反序列化漏洞,使用dnslo…

FocusBI:租房分析可視化(PowerBI網址體驗)

微信公眾號&#xff1a;FocusBI關注可了解更多的商業智能、數據倉庫、數據庫開發、爬蟲知識及滬深股市數據推送。問題或建議&#xff0c;請關注公眾號發送消息留言;如果你覺得FocusBI對你有幫助&#xff0c;歡迎轉發朋友圈或在文章末尾點贊[1] 《商業智能教程》pdf下載地址 …

米其林餐廳 鹽之花_在世界范圍內探索《米其林指南》

米其林餐廳 鹽之花Among the culinary world, there are few greater accolades for a restaurant than being awarded a Michelin star (or three!), or being listed as one of the best in the world by a reputable guide. Foodies and fine dine lovers like myself, see …

require_once的用法

require_once 語句和 require 語句完全相同&#xff0c;唯一區別是 PHP 會檢查該文件是否已經被包含過&#xff0c;如果是則不會再次包含。 參見 include_once 的文檔來理解 _once 的含義&#xff0c;并理解與沒有 _once 時候有什么不同。 有一個文件a.php,里面有一個變量$var1…

差值平方和匹配_純前端實現圖片的模板匹配

基礎介紹模板匹配是指在當前圖像A里尋找與圖像B最相似的部分&#xff0c;本文中將圖像A稱為模板圖像&#xff0c;將圖像B稱為搜索匹配圖像。引言&#xff1a;一般在Opencv里實現此種功能非常方便&#xff1a;直接調用result cv2.matchTemplate(templ, search, method)templ 為…

藍牙耳機音量大解決辦法_長時間使用藍牙耳機的危害這么大?我們到底該選什么藍牙耳機呢?...

藍牙耳機避免了耳機線纏結&#xff0c;使人活動更自由&#xff0c;給人們帶來了更加方便、舒適的聽覺體驗。但近日&#xff0c;英國《每日郵報》刊文表示&#xff0c;藍牙耳機可能會危害人體健康。美國加州大學伯克利分校公共健康教授喬爾莫斯科維茨博士表示&#xff0c;已有研…

JVM基礎系列第10講:垃圾回收的幾種類型

我們經常會聽到許多垃圾回收的術語&#xff0c;例如&#xff1a;Minor GC、Major GC、Young GC、Old GC、Full GC、Stop-The-World 等。但這些 GC 術語到底指的是什么&#xff0c;它們之間的區別到底是什么&#xff1f;今天我們就來詳細說說。 Minor GC 從年輕代空間回收內存被…

模擬退火學習

模擬退火學習 作業部落網上講的不錯的(他好像還有一些其他的東西、、、) 引入 對于一些題目&#xff0c;無法直接算出答案或者想不到正解&#xff0c;想到隨機找答案&#xff0c;那么模擬退火就是一種有系統方法的隨機算法 沒用的不需要了解的來源 百度百科...... 模擬退火算法…

spotify 數據分析_我的Spotify流歷史分析

spotify 數據分析Spotisis /spo-ti-sis/ noun The analysis of one’s Spotify streaming history using Python.Spotisis / spo-ti-sis / 名詞使用Python分析一個人的Spotify流歷史。 I was reading through a lot of data science related guides and project ideas when I …