99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

一個能同時完成四個任務的的深度神經(jīng)網(wǎng)絡

DPVg_AI_era ? 來源:lp ? 2019-03-07 08:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文構建了一個能同時完成四個任務的的深度神經(jīng)網(wǎng)絡: 生成圖像描述、生成相似單詞、以圖搜圖和根據(jù)描述搜圖。傳統(tǒng)上這些任務分別需要一個模型,但我們現(xiàn)在要用一個模型來完成所有這些任務。

眾所周知,神經(jīng)網(wǎng)絡十分擅長處理特定領域的任務(narrow task),但在處理多任務時結果并不是那么理想。

這與人類的大腦不同,人類的大腦能夠在多樣化任務中使用相同的概念。例如,假如你從來沒聽說過“分形”(fractal),請看下面這張圖:

數(shù)學之美:分形圖像

上圖是一個分形圖像。在看到一張分形圖像后,人能夠處理多個與之相關的任務:

在一組圖像中,區(qū)分一只貓的圖像和分形圖像;

在一張紙上,粗略地畫一個分形圖像;

將分形圖像與非分形圖像進行分類;

閉上眼睛,想象一下分形圖像是什么樣子的。

那么,你是如何完成這些任務的呢?大腦中有專門的神經(jīng)網(wǎng)絡來處理這些任務嗎?

現(xiàn)代神經(jīng)科學認為,大腦中的信息是在不同的部位進行分享和交流的。對于這種多任務性能是如何發(fā)生的,答案可能在于如何在神經(jīng)網(wǎng)絡中存儲和解釋數(shù)據(jù)。

“表示”的精彩世界

顧名思義,“表示”(representation)就是信息在網(wǎng)絡中編碼的方式。當一個單詞、一個句子或一幅圖像(或其他任何東西)作為輸入提供給一個訓練好的神經(jīng)網(wǎng)絡時,它就隨著權重乘以輸入和應用激活在連續(xù)的層上進行轉換。最后,在輸出層,我們得到一串數(shù)字,我們將其解釋為類的標簽或股票價格,或網(wǎng)絡為之訓練的任何其他任務。

輸入->輸出的神奇轉換是由連續(xù)層中發(fā)生的輸入轉換產(chǎn)生的。輸入數(shù)據(jù)的這些轉換即稱為“表示”(representations)。一個關鍵的想法是,每一層都讓下一層更容易地完成它的工作。使連續(xù)層的周期變得更容易的過程會導致激活(特定層上輸入數(shù)據(jù)的轉換)變得有意義。

有意義是指什么呢?讓我們看下面的示例,該示例展示了圖像分類器中不同層的激活。

圖像分類網(wǎng)絡的作用是將像素空間中的圖像轉化為更高級的概念空間。例如,一張汽車的圖像最初被表示為RGB值,在第一層開始被表示為邊緣空間,然后在第二層被表示為圓圈和基本形狀空間,在倒數(shù)第二層,它將開始表示為高級對象(如車輪、車門等)。

這種越來越豐富的表示(由于深度網(wǎng)絡的分層性質而自動出現(xiàn))使得圖像分類的任務變得簡單。最后一層要做的就是斟酌,比如說,車輪和車門的概念更像汽車,耳朵和眼睛的概念更像人。

你能用這些表示做什么?

由于這些中間層存儲有意義的輸入數(shù)據(jù)編碼,所以可以對多個任務使用相同的信息。例如,你可以使用一個語言模型(一個經(jīng)過訓練的、用于預測下一個單詞的遞歸神經(jīng)網(wǎng)絡),并解釋某個特定神經(jīng)元的激活,從而預測句子帶有的情緒。

一個令人驚訝的事實是,情感神經(jīng)元是在無監(jiān)督的語言建模任務中自然產(chǎn)生的。網(wǎng)絡被訓練去預測下一個單詞,它的任務中并沒有被要求去預測情感。也許情感是一個非常有用的概念,以至于網(wǎng)絡為了更好地進行語言建模而發(fā)明它。

一旦你理解了“表示”這個概念,你就會開始從完全不同的角度來理解深層神經(jīng)網(wǎng)絡。你會開始將感知表示(sensing representations)作為一種可轉換的語言,使不同的網(wǎng)絡(或同一網(wǎng)絡的不同部分)能夠彼此通信。

通過構建一個四合一的網(wǎng)絡來探索表示

為了充分理解“表示”,讓我們來構建一個能同時完成四個任務的的深度神經(jīng)網(wǎng)絡:

圖像描述生成器:給定圖像,為其生成描述

相似單詞生成器:給定一個單詞,查找與之相似的其他單詞

視覺相似的圖像搜索:給定一幅圖像,找出與之最相似的圖像

通過描述圖像內(nèi)容進行搜索:給出文本描述,搜索具有所描述的內(nèi)容的圖像

這里的每一個任務本身就是一個項目,傳統(tǒng)上分別需要一個模型。但我們現(xiàn)在要用一個模型來做所有這些任務。

Pytorch代碼:

https://github.com/paraschopra/one-network-many-uses

第一部分:看圖說話(Image Captioning)

在網(wǎng)上有很多實現(xiàn)Image Captioning的很好的教程,所以這里不打算深入講解。我的實現(xiàn)與這個教程中的完全相同:https://daniel.lasiman.com/post/image-captioning/。關鍵的區(qū)別在于,我的實現(xiàn)是在Pytorch中實現(xiàn)的,而這個教程使用的是Keras。

接下來,你需要下載Flickr8K數(shù)據(jù)集。你還需要下載圖像描述。提取“caption_datasets”文件夾中的文字描述。

模型

Image Captioning一般有兩個組成部分:

a)圖像編碼器(image encoder),它接收輸入圖像并以一種對圖像描述有意義的格式來表示圖像;

b)圖說解碼器(caption decoder),它接受圖像表示,并輸出文本描述。

image encoder是一個深度卷積網(wǎng)絡,caption decoder則是傳統(tǒng)的LSTM/GRU遞歸神經(jīng)網(wǎng)絡。當然,我們可以從頭開始訓練它們。但這樣做需要比我們現(xiàn)有的(8k圖像)更多的數(shù)據(jù)和更長的訓練時間。因此,我們不從頭開始訓練圖像編碼器,而是使用一個預訓練的圖像分類器,并使用它的pre-final層的激活。

這是一個示例。我使用PyTorch modelzoo中可用的Inception網(wǎng)絡,該網(wǎng)絡在ImageNet上進行了訓練,可以對100個類別的圖像進行分類,并使用它來提供一個可以輸入給遞歸神經(jīng)網(wǎng)絡中的表示。

請注意,Inception network從未針對圖說生成任務進行過訓練。然而,它的確有效!

我們也可以使用一個預訓練的語言模型來作為caption decoder。但這一次,由于我重新實現(xiàn)了一個運行良好的模型,所以可以從頭開始訓練解碼器。

完整的模型架構如下圖所示:

你可以從頭開始訓練模型,但是需要在CPU上花費幾天時間(我還沒有針對GPU進行優(yōu)化)。但不用擔心,你也可以享受一個已經(jīng)訓練完成的模型。(如果你是從頭開始訓練,請注意,我在大約40 epochs時停止訓練,當時運行的平均損失約為2.8)。

性能

我實現(xiàn)了性能良好的beam search方法。下面是網(wǎng)絡為測試集中的圖像生成的圖說示例(以前從未見過)。

用我自己的照片試試,讓我們看看網(wǎng)絡生成的圖說是什么:

效果不錯!令人印象深刻的是,網(wǎng)絡知道這張照片里有一個穿著白色T恤的男人。但語法有點偏離(我相信通過更多的訓練可以修正),但基本的要點抓住了。

如果輸入的圖像包含網(wǎng)絡從未見過的東西,它往往會失敗。例如,我很好奇網(wǎng)絡會給iPhone X的圖像貼上什么樣的標簽。

效果不太好。但總的來說,我對它的表現(xiàn)非常滿意,這為我們使用網(wǎng)絡在學習給圖像生成圖說時開發(fā)的“表示”來構建其他功能提供了良好的基礎。

第二部分:查找相似單詞

回想一下我們?nèi)绾螐膱D像表示中解碼圖說。我們將該表示提供給LSTM/GRU網(wǎng)絡,生成一個輸出,將其解釋為第一個單詞,然后將第一個單詞返回到網(wǎng)絡以生成第二個單詞。這個過程一直持續(xù)到網(wǎng)絡生成一個表示句子結束的特殊標記為止。

為了將單詞反饋到網(wǎng)絡中,我們需要將單詞轉換為表示,再輸入給網(wǎng)絡。這意味著,如果輸入層包含300個神經(jīng)元,那么對于所有圖說中的8000多個不同的單詞,我們需要有一個300個相關聯(lián)的數(shù)字,唯一地指定那個單詞。將單詞字典轉換成數(shù)字表示的過程稱為詞匯嵌入(或詞匯表示)。

我們可以下載和使用已經(jīng)存在的詞匯嵌入,如word2vec或GLoVE。但在這個示例中,我們從頭開始學習詞匯嵌入。我們從隨機生成的詞匯嵌入開始,探索在訓練結束時,網(wǎng)絡對單詞的了解。

由于我們無法想象100維的數(shù)字空間,我們將使用一種稱為t-SNE的奇妙技術來在2維中可視化學習的詞匯嵌入。t-SNE是一種降維技術,它試圖使高維空間中的鄰域同時也是低維空間中的鄰域。

詞匯嵌入的可視化

讓我們來看看caption decoder學習到的詞匯嵌入空間(不像其他語言任務有數(shù)百萬單詞和句子,我們的解碼器在訓練數(shù)據(jù)集中只有~30k的句子)。

因此,我們的網(wǎng)絡已經(jīng)了解到像“play”、“plays”和“playing”這樣的詞匯是非常相似的(它們具有相似的表示形式,如紅色箭頭所示的緊密聚類)。讓我們在這個二維空間中探索另一個區(qū)域:

這個區(qū)域似乎有一堆數(shù)字——“two”、“three”、“four”、“five”,等等。

上圖,它知道people和children兩個單詞相似。而且,它還隱式地推斷出了物體的形狀。

相似詞匯

我們可以使用100維表示(100-dimensional representation)來構建一個函數(shù),該函數(shù)提出與輸入單詞最相似的單詞。它的工作原理很簡單:采用100維的表示,并找出它與數(shù)據(jù)庫中所有其他單詞的余弦相似度。

讓我們來看看與“boy”這個單詞最相似的單詞:

結果不錯?!癛ider”除外,但“kids”、“kid”和“toddler”都是正確的。

這個網(wǎng)絡認為與“chasing”相似的詞匯是:

“Chases”是可以的,但我不確定為什么它認為“police”與“chasing”類似。

單詞類比(Word analogies)

關于詞匯嵌入的一個令人興奮的事實是,你可以對它們進行微積分。你可以用兩個單詞(如“king”和“queen”)并減去它們的表示來得到一個方向。當你把這個方向應用到另一個詞的表示上(如“man”),你會得到一個與實際類似詞(比如“woman”)很接近的表示。這就是為什么word2vec一經(jīng)推出就如此受歡迎的原因:

我很好奇通過caption decoder學習到的表示是否具有類似的屬性。盡管我持懷疑態(tài)度,因為訓練數(shù)據(jù)并不大(大約3萬個句子),我還是嘗試了一下。

網(wǎng)絡學習到的類比并不完美(有些單詞字面上出現(xiàn)的次數(shù)<10次,所以網(wǎng)絡沒有足夠的信息可供學習)。但仍有一些類比。

如果riding對應sitting,那么walking對應什么呢?我的網(wǎng)絡認為應該是“l(fā)aying”(這個結果還不錯!)

同樣,如果“man”的復數(shù)是“men”,那么“woman”的復數(shù)應該是什么呢:

第二個結果是“women”,相當不錯了。

最后,如果grass對應green,那么sky對應什么呢:

網(wǎng)絡認為sky對應silver或grey的,雖然沒有出現(xiàn)blue,但它給的結果都是顏色詞。令人驚訝的是,這個網(wǎng)絡能夠推斷顏色的方向。

第三部分:查找相似圖像

如果單詞表示將類似的單詞聚在一起,那么圖像表示(Inception支持的圖像編碼器輸出)呢?我將相同的t-SNE技術應用于圖像表示(在caption decoder的第一步中作為輸入的300-dimensional tensor)。

可視化

這些點是不同圖像的表示(不是全部8K圖像,大約是100張圖像的樣本)。紅色箭頭指向附近的一組表示的聚類。

賽車的圖像被聚類在一起。

孩子們在森林/草地玩耍的圖像也被聚類在一起。

籃球運動員的圖像被聚類在一起。

查找與輸入圖像相似的圖像

對于查找相似單詞任務,我們被限制在測試集詞匯表中尋找相似的單詞(如果測試集中不存在某個單詞,我們的caption decoder就不會學習它的嵌入)。然而,對于類似的圖像任務,我們有一個圖像表示生成器(image representation generator),它可以接受任何輸入圖像并生成其編碼。

這意味著我們可以使用余弦相似度方法來構建一個按圖像搜索的功能,如下所示:

步驟1:獲取數(shù)據(jù)庫或目標文件夾中的所有圖像,并存儲它們的表示(由image encoder給出)

步驟2:當用戶希望搜索與已有圖像最相似的圖像時,使用新圖像的表示并在數(shù)據(jù)庫中找到最接近的圖像(由余弦相似度給出)

谷歌圖像可能正式使用這種(或類似的)方法來支持其反向圖像搜索功能。

讓我們看看這個網(wǎng)絡是如何工作的:

上面這張圖像是我自己的。我們使用的模型以前從未見過它。當我查詢類似圖像時,網(wǎng)絡從Flickr8K數(shù)據(jù)集輸出如下圖像:

是不是很像?我沒想到會有這么好的表現(xiàn),但我們確實做到了!

第四部分:通過描述查找圖像

在最后一部分中,我們將反向運行caption generator。因此,我們不是獲取圖像并為其生成標題,而是輸入標題(文本描述)并找到與之最匹配的圖像。

過程如下:

步驟1:不是從來自編碼器的300維圖像表示開始,而是從一個完全隨機的300維輸入張量開始

步驟2:凍結整個網(wǎng)絡的所有層(即指示PyTorch不要計算梯度)

步驟3:假設隨機生成的輸入張量來自image encoder,將其輸入到caption decoder中

步驟4:獲取給定隨機輸入時網(wǎng)絡生成的標題,并將其與用戶提供的標題進行比較

步驟5:計算比較生成的標題和用戶提供的標題的損失

步驟6:找到使損失最小的輸入張量的梯度

步驟7:根據(jù)梯度改變輸入張量的方向(根據(jù)學習率改變一小步)

繼續(xù)步驟4到步驟7,直到收斂或當損失低于某個閾值時為止

最后一步:取最終的輸入張量,并利用它的值,通過余弦相似度找到離它最近的圖像

結果相當神奇的:

我搜索了“a dog”,這是網(wǎng)絡找到的圖像:

搜索“a boy smiling”:

最后,搜索:

前兩個結果是:

以及

總結和挑戰(zhàn)

所有這些操作的代碼可以從github存儲庫下載執(zhí)行:

https://github.com/paraschopra/one-network-many-uses

這個存儲庫包括了用于數(shù)據(jù)預處理、模型描述、預訓練的圖說生成網(wǎng)絡、可視化的代碼。但不包括Flickr8K數(shù)據(jù)集或標題,需要單獨下載。

如果你想更進一步,這里有一個挑戰(zhàn):從給定的描述生成圖像。

這比本文中處理的要難10倍,但我感覺這是可行的。如果一項服務不僅能夠搜索與文本對應的圖像,而且能夠動態(tài)地生成圖像,那該多酷啊。

在未來,如果Google Images實現(xiàn)了這個功能,并能夠為不存在的圖像提供結果(比如“兩只獨角獸在披薩做成的地毯上飛翔”),我不會感到驚訝的。

就這樣。祝你能安全愉快地探索表示的世界。

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

    關注

    42

    文章

    4814

    瀏覽量

    103649
  • 圖像
    +關注

    關注

    2

    文章

    1094

    瀏覽量

    41274
  • 生成器
    +關注

    關注

    7

    文章

    322

    瀏覽量

    21901
  • 圖像分類
    +關注

    關注

    0

    文章

    96

    瀏覽量

    12168

原文標題:一個神經(jīng)網(wǎng)絡實現(xiàn)4大圖像任務,GitHub已開源

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    BP神經(jīng)網(wǎng)絡與卷積神經(jīng)網(wǎng)絡的比較

    BP神經(jīng)網(wǎng)絡與卷積神經(jīng)網(wǎng)絡在多個方面存在顯著差異,以下是對兩者的比較: 、結構特點 BP神經(jīng)網(wǎng)絡 : BP神經(jīng)網(wǎng)絡
    的頭像 發(fā)表于 02-12 15:53 ?673次閱讀

    BP神經(jīng)網(wǎng)絡的優(yōu)缺點分析

    BP神經(jīng)網(wǎng)絡(Back Propagation Neural Network)作為種常用的機器學習模型,具有顯著的優(yōu)點,同時也存在些不容忽視的缺點。以下是對BP
    的頭像 發(fā)表于 02-12 15:36 ?926次閱讀

    BP神經(jīng)網(wǎng)絡深度學習的關系

    ),是種多層前饋神經(jīng)網(wǎng)絡,它通過反向傳播算法進行訓練。BP神經(jīng)網(wǎng)絡由輸入層、或多個隱藏層和輸出層組成,通過逐層遞減的方式調(diào)整
    的頭像 發(fā)表于 02-12 15:15 ?863次閱讀

    深度學習入門:簡單神經(jīng)網(wǎng)絡的構建與實現(xiàn)

    深度學習中,神經(jīng)網(wǎng)絡是核心模型。今天我們用 Python 和 NumPy 構建簡單的神經(jīng)網(wǎng)絡神經(jīng)
    的頭像 發(fā)表于 01-23 13:52 ?531次閱讀

    人工神經(jīng)網(wǎng)絡的原理和多種神經(jīng)網(wǎng)絡架構方法

    在上篇文章中,我們介紹了傳統(tǒng)機器學習的基礎知識和多種算法。在本文中,我們會介紹人工神經(jīng)網(wǎng)絡的原理和多種神經(jīng)網(wǎng)絡架構方法,供各位老師選擇。 01 人工神經(jīng)網(wǎng)絡 ? 人工
    的頭像 發(fā)表于 01-09 10:24 ?1204次閱讀
    人工<b class='flag-5'>神經(jīng)網(wǎng)絡</b>的原理和多種<b class='flag-5'>神經(jīng)網(wǎng)絡</b>架構方法

    卷積神經(jīng)網(wǎng)絡的實現(xiàn)工具與框架

    卷積神經(jīng)網(wǎng)絡因其在圖像和視頻處理任務中的卓越性能而廣受歡迎。隨著深度學習技術的快速發(fā)展,多種實現(xiàn)工具和框架應運而生,為研究人員和開發(fā)者提供了強大的支持。 TensorFlow 概述
    的頭像 發(fā)表于 11-15 15:20 ?672次閱讀

    卷積神經(jīng)網(wǎng)絡與傳統(tǒng)神經(jīng)網(wǎng)絡的比較

    深度學習領域,神經(jīng)網(wǎng)絡模型被廣泛應用于各種任務,如圖像識別、自然語言處理和游戲智能等。其中,卷積神經(jīng)網(wǎng)絡(CNNs)和傳統(tǒng)神經(jīng)網(wǎng)絡是兩種常
    的頭像 發(fā)表于 11-15 14:53 ?1878次閱讀

    深度學習中的卷積神經(jīng)網(wǎng)絡模型

    深度學習近年來在多個領域取得了顯著的進展,尤其是在圖像識別、語音識別和自然語言處理等方面。卷積神經(jīng)網(wǎng)絡作為深度學習的分支,因其在圖像處理
    的頭像 發(fā)表于 11-15 14:52 ?847次閱讀

    卷積神經(jīng)網(wǎng)絡的基本原理與算法

    ),是深度學習的代表算法之。 、基本原理 卷積運算 卷積運算是卷積神經(jīng)網(wǎng)絡的核心,用于提取圖像中的局部特征。 定義卷積核:卷積核是
    的頭像 發(fā)表于 11-15 14:47 ?1785次閱讀

    LSTM神經(jīng)網(wǎng)絡的結構與工作機制

    的結構與工作機制的介紹: 、LSTM神經(jīng)網(wǎng)絡的結構 LSTM神經(jīng)網(wǎng)絡的結構主要包括以下幾個部分: 記憶單元(Memory Cell) : 記憶單元是LSTM網(wǎng)絡的核心,負責在整個序列
    的頭像 發(fā)表于 11-13 10:05 ?1632次閱讀

    LSTM神經(jīng)網(wǎng)絡與傳統(tǒng)RNN的區(qū)別

    深度學習領域,循環(huán)神經(jīng)網(wǎng)絡(RNN)因其能夠處理序列數(shù)據(jù)而受到廣泛關注。然而,傳統(tǒng)RNN在處理長序列時存在梯度消失或梯度爆炸的問題。為了解決這問題,LSTM(長短期記憶)神經(jīng)網(wǎng)絡
    的頭像 發(fā)表于 11-13 09:58 ?1218次閱讀

    使用LSTM神經(jīng)網(wǎng)絡處理自然語言處理任務

    自然語言處理(NLP)是人工智能領域的重要分支,它旨在使計算機能夠理解、解釋和生成人類語言。隨著深度學習技術的發(fā)展,特別是循環(huán)神經(jīng)網(wǎng)絡(RNN)及其變體——長短期記憶(LSTM)
    的頭像 發(fā)表于 11-13 09:56 ?1165次閱讀

    關于卷積神經(jīng)網(wǎng)絡,這些概念你厘清了么~

    小型網(wǎng)絡,它包含具有三輸入的輸入層、
    發(fā)表于 10-24 13:56

    【飛凌嵌入式OK3576-C開發(fā)板體驗】RKNN神經(jīng)網(wǎng)絡算法開發(fā)環(huán)境搭建

    download_model.sh 腳本,該腳本 將下載可用的 YOLOv5 ONNX 模型,并存放在當前 model 目錄下,參考命令如下: 安裝COCO數(shù)據(jù)集,在深度神經(jīng)網(wǎng)絡
    發(fā)表于 10-10 09:28

    FPGA在深度神經(jīng)網(wǎng)絡中的應用

    隨著人工智能技術的飛速發(fā)展,深度神經(jīng)網(wǎng)絡(Deep Neural Network, DNN)作為其核心算法之,在圖像識別、語音識別、自然語言處理等領域取得了顯著成果。然而,傳統(tǒng)的深度
    的頭像 發(fā)表于 07-24 10:42 ?1208次閱讀