0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

詳解神經(jīng)網(wǎng)絡嵌入的概念

電子工程師 ? 來源:工程師曾玲 ? 2019-06-08 14:47 ? 次閱讀

深度學習的一個顯著成功應用是嵌入,這是一種將離散變量表示為連續(xù)向量的方法。這項技術已經(jīng)有了實際的應用,其中有在機器翻譯中使用詞嵌入和類別變量中使用實體嵌入。

近年來,神經(jīng)網(wǎng)絡在圖像分割、自然語言處理、時間序列預測等方面的應用有了很大的發(fā)展。深度學習的一個顯著成功應用是嵌入,這是一種將離散變量表示為連續(xù)向量的方法。這項技術已經(jīng)有了實際的應用,其中有在機器翻譯中使用詞嵌入和類別變量中使用實體嵌。

在本文中,我將解釋什么是神經(jīng)網(wǎng)絡嵌入,為什么要使用它們,以及如何學習它們。我們會在真正的問題的上下文中討論這些概念:將Wikipedia上的所有圖書表示為向量,并創(chuàng)建圖書推薦系統(tǒng)。


Wikipedia上所有書的神經(jīng)網(wǎng)絡嵌入

嵌入

嵌入是一個從離散變量到連續(xù)數(shù)字向量的映射。在神經(jīng)網(wǎng)絡的上下文中,embeddings是低維的, 離散變量用學習到的連續(xù)向量表示。神經(jīng)網(wǎng)絡嵌入是有用的,因為它們可以減少類別變量的維數(shù),并有意義地在轉(zhuǎn)換空間中表示類別。

神經(jīng)網(wǎng)絡嵌入有3個主要目的:

① 在嵌入空間中查找最近的鄰居。這些鄰居可以用于根據(jù)用戶興趣或聚類類別提出建議。

② 作為監(jiān)督任務的機器學習模型的輸入。

③ 用于概念的可視化和類別之間的關系的可視化。

這意味著在圖書項目中,使用神經(jīng)網(wǎng)絡嵌入,我們可以把維基百科上所有的37000篇圖書文章,用一個具有50個數(shù)字的向量來表示每一篇文章。此外,由于嵌入式是學習的,在我們的學習問題上下文中更相似的書籍在嵌入式空間中更接近。

神經(jīng)網(wǎng)絡嵌入克服了用獨熱編碼表示分類變量的兩個局限性:

獨熱編碼的局限性

獨熱編碼類別變量的操作實際上是一個簡單的嵌入,其中每個類別都映射到一個不同的向量。這個過程采用離散實體,并將每個觀察結(jié)果映射到一個只有一個1的向量中。

獨熱編碼技術有兩個主要缺點:

① 對于高基數(shù)變量—那些具有許多類別的變量—轉(zhuǎn)換之后向量的維數(shù)變得太大了。

② 這種映射是完全沒有監(jiān)督的:“相似”的類別在嵌入空間中并沒有彼此放置得更靠近。

第一個問題很好理解:對于每個額外的類別(稱為實體),我們必須向一個熱編碼向量添加另一個數(shù)字。如果我們在Wikipedia上有37000本書,那么表示這些書需要為每本書提供37000維的向量,這使得針對這種表示的任何機器學習模型的訓練都是不可行的。

第二個問題同樣是有局限的:獨熱編碼不會將相似的實體彼此靠近的放在向量空間中。如果我們使用余弦距離來度量向量之間的相似性,那么經(jīng)過獨熱編碼后,實體之間的相似性為0。

這意味著,《戰(zhàn)爭與和平》和《安娜?卡列尼娜》(這兩本書都是列夫?托爾斯泰(Leo Tolstoy)的經(jīng)典著作)這樣的實體彼此之間的距離,并不比《戰(zhàn)爭與和平》與《銀河系漫游指南》之間的距離更近。

# One Hot Encoding Categoricals

books = ["War and Peace", "Anna Karenina",

"The Hitchhiker's Guide to the Galaxy"]

books_encoded = [[1, 0, 0],

[0, 1, 0],

[0, 0, 1]]

Similarity (dot product) between First and Second = 0

Similarity (dot product) between Second and Third = 0

Similarity (dot product) between First and Third = 0

考慮到這兩個問題,表示類別變量的理想解決方案是需要更少的數(shù)字,而不是類別的數(shù)量,并且將類似的類別放在更靠近的位置。

# Idealized Representation of Embedding

books = ["War and Peace", "Anna Karenina",

"The Hitchhiker's Guide to the Galaxy"]

books_encoded_ideal = [[0.53, 0.85],

[0.60, 0.80],

[-0.78, -0.62]]

Similarity (dot product) between First and Second = 0.99

Similarity (dot product) between Second and Third = -0.94

Similarity (dot product) between First and Third = -0.97

為了更好地表示類別實體,我們可以使用嵌入神經(jīng)網(wǎng)絡和監(jiān)督任務來學習嵌入。

學習嵌入

使用one-hot編碼的主要問題是轉(zhuǎn)換不依賴于任何監(jiān)督。我們可以通過在有監(jiān)督的任務中使用神經(jīng)網(wǎng)絡來學習嵌入,從而大大改進嵌入。嵌入形成參數(shù)—網(wǎng)絡的權(quán)重—經(jīng)過調(diào)整以最小化任務上的損失。得到的嵌入向量表示類別,其中相似的類別(相對于任務)彼此更接近。

例如,如果我們有一個包含50,000個單詞的電影評論集合,我們可以使用一個訓練好的嵌入式神經(jīng)網(wǎng)絡來預測評論是的情感,從而為每個單詞學習100維的嵌入。詞匯表中與正面評價相關的單詞,如“brilliant”或“excellent”,將在嵌入空間中出現(xiàn)得更近,因為網(wǎng)絡已經(jīng)了解到它們都與正面評價相關。

詳解神經(jīng)網(wǎng)絡嵌入的概念

電影句子中的詞嵌入

在上面給出的書的例子中,我們的監(jiān)督任務可以是“確定一本書是否是列夫·托爾斯泰寫的”,由此產(chǎn)生的嵌入將使托爾斯泰寫的書彼此更接近。解決如何創(chuàng)建監(jiān)督任務來生成相關表示的問題是嵌入過程中最困難的部分。

實現(xiàn)

在Wikipedia book項目中,監(jiān)督學習任務被設置為預測一本書的文章中是否出現(xiàn)了指向Wikipedia頁面的給定鏈接。我們提供成對的(書名、鏈接)訓練示例,其中混合了正樣本對和負樣本對。這種設置基于這樣的假設,即鏈接到類似Wikipedia頁面的書籍彼此相似。因此,由此產(chǎn)生的嵌入應該將類似的書籍更緊密地放置在向量空間中。

我使用的網(wǎng)絡有兩個平行的嵌入層,分別映射書和wikilink,用來區(qū)分50維向量,還有一個點積層,將嵌入的內(nèi)容組合成一個數(shù)字,用于預測。嵌入是網(wǎng)絡的參數(shù)或權(quán)重,在訓練過程中進行調(diào)整,以最小化監(jiān)督任務的損失。

在Keras代碼中,這看起來像這樣(如果你不完全理解代碼,不要擔心,直接跳到圖像):

# Both inputs are 1-dimensional

book = Input(name = 'book', shape = [1])

link = Input(name = 'link', shape = [1])

# Embedding the book (shape will be (None, 1, 50))

book_embedding = Embedding(name = 'book_embedding',

input_dim = len(book_index),

output_dim = embedding_size)(book)

# Embedding the link (shape will be (None, 1, 50))

link_embedding = Embedding(name = 'link_embedding',

input_dim = len(link_index),

output_dim = embedding_size)(link)

# Merge the layers with a dot product along the second axis (shape will be (None, 1, 1))

merged = Dot(name = 'dot_product', normalize = True, axes = 2)([book_embedding, link_embedding])

# Reshape to be a single number (shape will be (None, 1))

merged = Reshape(target_shape = [1])(merged)

# Output neuron

out = Dense(1, activation = 'sigmoid')(merged)

model = Model(inputs = [book, link], outputs = out)

# Minimize binary cross entropy

model.compile(optimizer = 'Adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

雖然在有監(jiān)督的機器學習任務中,目標通常是訓練一個模型對新數(shù)據(jù)進行預測,但在這個嵌入模型中,預測只是達到目的的一種手段。我們想要的是嵌入權(quán)值,將書籍和鏈接表示為連續(xù)向量。

嵌入本身并不那么有趣,它們只是數(shù)字的向量:

詳解神經(jīng)網(wǎng)絡嵌入的概念

來自書籍推薦嵌入模型的示例嵌入

然而,嵌入可以用于前面列出的3個目的,對于這個項目,我們主要感興趣的是推薦基于最近鄰的書籍。為了計算相似性,我們?nèi)∫槐緯M行查詢,找到它的向量與其他所有圖書向量的點積。(如果我們的嵌入是標準化的,那么這個點積就是向量之間的cos距離,范圍從-1(最不相似)到+1(最相似)。我們也可以用歐氏距離來度量相似性。

這是我建立的圖書嵌入模型的輸出:

Books closest to War and Peace.

Book: War and Peace Similarity: 1.0

Book: Anna Karenina Similarity: 0.79

Book: The Master and Margarita Similarity: 0.77

Book: Doctor Zhivago (novel) Similarity: 0.76

Book: Dead Souls Similarity: 0.75

(向量與自身的余弦相似度必須為1.0)。經(jīng)過降維(見下圖),可以得到如下圖:

詳解神經(jīng)網(wǎng)絡嵌入的概念

書的嵌入以及最近的鄰居

我們可以清楚地看到學習嵌入的價值!現(xiàn)在,維基百科上每一本書都有一個50個數(shù)字的向量表示,相似的書彼此之間距離更近。

嵌入可視化

嵌入的最酷的部分之一是,它們可以用來可視化概念,例如“小說”或“非小說”之間的關系。這需要進一步的降維技術來將維度降為2或3。最常用的約簡方法本身就是一種嵌入方法:t分布隨機鄰接嵌入(TSNE)。

我們可以把維基百科上所有書籍的37000個原始維度,用神經(jīng)網(wǎng)絡嵌入將它們映射到50個維度,然后用TSNE將它們映射到2個維度。結(jié)果如下:

詳解神經(jīng)網(wǎng)絡嵌入的概念

在Wikipedia上的所有37000本書的嵌入

(TSNE是一種流形學習技術,這意味著它試圖將高維數(shù)據(jù)映射到低維流形,創(chuàng)建一個試圖維護數(shù)據(jù)內(nèi)部局部結(jié)構(gòu)的嵌入。它幾乎只用于可視化,因為輸出是隨機的,不支持轉(zhuǎn)換新數(shù)據(jù)。一個正在興起的替代方案是統(tǒng)一流形近似和投影,UMAP,它更快,并且支持將新數(shù)據(jù)轉(zhuǎn)換到嵌入空間中)。

這本身并不是很有用,但是一旦我們開始根據(jù)不同的書的特點給它上色,它就會變得很有洞察力。

用流派對嵌入上色

我們可以清楚地看到屬于同一類型的書籍的分組。這并不完美,但仍然令人印象深刻的是,我們可以用兩個數(shù)字來表示維基百科上的所有書籍,這兩個數(shù)字仍然能夠捕捉到不同類型之間的差異。

書的例子(即將發(fā)表的完整文章)展示了神經(jīng)網(wǎng)絡嵌入的價值:我們有一個類別對象的向量表示,它是低維的,并且在嵌入空間中將相似的實體彼此放置得更近。

交互式可視化

靜態(tài)圖的問題是,我們不能真正地研究數(shù)據(jù)并研究變量之間的分組或關系。為了解決這個問題,TensorFlow開發(fā)了projector,這是一個在線應用程序,可以讓我們可視化并與嵌入進行交互。我將很快發(fā)布一篇關于如何使用這個工具的文章,但是現(xiàn)在,結(jié)果如下:

使用projector交互式探索書籍嵌入

結(jié)論

神經(jīng)網(wǎng)絡嵌入是學習離散數(shù)據(jù)作為連續(xù)向量的低維表示。這些嵌入克服了傳統(tǒng)編碼方法的限制,可以用于查找最近的鄰居、輸入到另一個模型和可視化。

雖然很多深度學習的概念都是在學術術語中討論的,但是神經(jīng)網(wǎng)絡嵌入既直觀又相對容易實現(xiàn)。我堅信任何人都可以學習深度學習并使用Keras這樣的庫構(gòu)建深度學習解決方案。嵌入是處理離散變量的有效工具,是深度學習的一個有用應用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關推薦

    卷積神經(jīng)網(wǎng)絡入門資料

    卷積神經(jīng)網(wǎng)絡入門詳解
    發(fā)表于 02-12 13:58

    【PYNQ-Z2試用體驗】神經(jīng)網(wǎng)絡基礎知識

    前言前面我們通過notebook,完成了在PYNQ-Z2開發(fā)板上編寫并運行python程序。我們的最終目的是基于神經(jīng)網(wǎng)絡,完成手寫的數(shù)字識別。在這之前,有必要講一下神經(jīng)網(wǎng)絡的基本概念和工作原理。何為
    發(fā)表于 03-03 22:10

    卷積神經(jīng)網(wǎng)絡如何使用

    卷積神經(jīng)網(wǎng)絡(CNN)究竟是什么,鑒于神經(jīng)網(wǎng)絡在工程上經(jīng)歷了曲折的歷史,您為什么還會在意它呢? 對于這些非常中肯的問題,我們似乎可以給出相對簡明的答案。
    發(fā)表于 07-17 07:21

    【案例分享】ART神經(jīng)網(wǎng)絡與SOM神經(jīng)網(wǎng)絡

    今天學習了兩個神經(jīng)網(wǎng)絡,分別是自適應諧振(ART)神經(jīng)網(wǎng)絡與自組織映射(SOM)神經(jīng)網(wǎng)絡。整體感覺不是很難,只不過一些最基礎的概念容易理解不清。首先ART
    發(fā)表于 07-21 04:30

    如何構(gòu)建神經(jīng)網(wǎng)絡

    原文鏈接:http://tecdat.cn/?p=5725 神經(jīng)網(wǎng)絡是一種基于現(xiàn)有數(shù)據(jù)創(chuàng)建預測的計算系統(tǒng)。如何構(gòu)建神經(jīng)網(wǎng)絡?神經(jīng)網(wǎng)絡包括:輸入層:根據(jù)現(xiàn)有數(shù)據(jù)獲取輸入的層隱藏層:使用反向傳播優(yōu)化輸入變量權(quán)重的層,以提高模型的預測
    發(fā)表于 07-12 08:02

    輕量化神經(jīng)網(wǎng)絡的相關資料下載

    原文鏈接:【嵌入式AI部署&基礎網(wǎng)絡篇】輕量化神經(jīng)網(wǎng)絡精述--MobileNet V1-3、ShuffleNet V1-2、NasNet深度神經(jīng)網(wǎng)絡模型被廣泛應用在圖像分類、物體檢測等
    發(fā)表于 12-14 07:35

    卷積神經(jīng)網(wǎng)絡一維卷積的處理過程

    以前的神經(jīng)網(wǎng)絡幾乎都是部署在云端(服務器上),設備端采集到數(shù)據(jù)通過網(wǎng)絡發(fā)送給服務器做inference(推理),結(jié)果再通過網(wǎng)絡返回給設備端。如今越來越多的神經(jīng)網(wǎng)絡部署在
    發(fā)表于 12-23 06:16

    人工神經(jīng)網(wǎng)絡基礎描述詳解

    本文主要對人工神經(jīng)網(wǎng)絡基礎進行了描述,主要包括人工神經(jīng)網(wǎng)絡概念、發(fā)展、特點、結(jié)構(gòu)、模型。 本文是個科普文,來自網(wǎng)絡資料的整理。 一、 人工神經(jīng)網(wǎng)絡
    發(fā)表于 11-15 15:41 ?3.8w次閱讀
    人工<b class='flag-5'>神經(jīng)網(wǎng)絡</b>基礎描述<b class='flag-5'>詳解</b>

    概念到結(jié)構(gòu)、算法解析卷積神經(jīng)網(wǎng)絡

    本文是對卷積神經(jīng)網(wǎng)絡的基礎進行介紹,主要內(nèi)容包含卷積神經(jīng)網(wǎng)絡概念、卷積神經(jīng)網(wǎng)絡結(jié)構(gòu)、卷積神經(jīng)網(wǎng)絡求解、卷積
    發(fā)表于 12-05 11:32 ?7次下載

    什么是模糊神經(jīng)網(wǎng)絡_模糊神經(jīng)網(wǎng)絡原理詳解

    模糊神經(jīng)網(wǎng)絡就是模糊理論同神經(jīng)網(wǎng)絡相結(jié)合的產(chǎn)物,它匯集了神經(jīng)網(wǎng)絡與模糊理論的優(yōu)點,集學習、聯(lián)想、識別、信息處理于一體。
    發(fā)表于 12-29 14:40 ?4.9w次閱讀
    什么是模糊<b class='flag-5'>神經(jīng)網(wǎng)絡</b>_模糊<b class='flag-5'>神經(jīng)網(wǎng)絡</b>原理<b class='flag-5'>詳解</b>

    反向傳播神經(jīng)網(wǎng)絡概念是什么

    神經(jīng)網(wǎng)絡在許多領域都有廣泛的應用,如圖像識別、自然語言處理、語音識別等。 BP神經(jīng)網(wǎng)絡概念 BP神經(jīng)網(wǎng)絡是一種多層前饋神經(jīng)網(wǎng)絡,它由輸入層
    的頭像 發(fā)表于 07-03 11:06 ?432次閱讀

    循環(huán)神經(jīng)網(wǎng)絡的基本概念

    循環(huán)神經(jīng)網(wǎng)絡的基本概念、循環(huán)機制、長短時記憶網(wǎng)絡(LSTM)、門控循環(huán)單元(GRU)等方面進行介紹。 循環(huán)神經(jīng)網(wǎng)絡的基本概念 循環(huán)
    的頭像 發(fā)表于 07-04 14:31 ?476次閱讀

    遞歸神經(jīng)網(wǎng)絡是循環(huán)神經(jīng)網(wǎng)絡

    遞歸神經(jīng)網(wǎng)絡(Recurrent Neural Network,簡稱RNN)和循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,簡稱RNN)實際上是同一個概念,只是不同的翻譯方式
    的頭像 發(fā)表于 07-04 14:54 ?552次閱讀

    rnn是遞歸神經(jīng)網(wǎng)絡還是循環(huán)神經(jīng)網(wǎng)絡

    : 循環(huán)神經(jīng)網(wǎng)絡的基本概念 循環(huán)神經(jīng)網(wǎng)絡是一種具有時間序列特性的神經(jīng)網(wǎng)絡,它能夠處理序列數(shù)據(jù),具有記憶功能。與傳統(tǒng)的前饋神經(jīng)網(wǎng)絡不同,循環(huán)
    的頭像 發(fā)表于 07-05 09:52 ?437次閱讀

    卷積神經(jīng)網(wǎng)絡的基本概念、原理及特點

    的基本概念、原理、特點以及在不同領域的應用情況。 一、卷積神經(jīng)網(wǎng)絡的基本概念 卷積神經(jīng)網(wǎng)絡是一種深度學習算法,它由多層卷積層和池化層堆疊而成。卷積層負責提取圖像中的局部特征,而池化層則
    的頭像 發(fā)表于 07-11 14:38 ?576次閱讀