理解一維卷積

理解一維卷積下面是一個利用CNN進行NLP中的情感分類的例子,上圖中,輸入為表示為詞表為d=5,長度為7的矩陣的句子,1D卷積核為長度分別為(2,3,4)的各兩個,經過卷積並激活函數後,各自產生了(4x1, 5x1, 6x1)的各兩個feature map,每個feature map經過一次1D max pooling後(即取每個feature map的最大值)再concatenate為一個6x1的1D向量,經過一個全連接層再softmax激活即可進行情感分類預測。

0 Comments

深度學習中Keras中的Embedding層的理解與使用

單詞嵌入提供了單詞的密集表示及其相對含義,它們是對簡單包模型表示中使用的稀疏表示的改進,可以從文本數據中學習字嵌入,並在項目之間重複使用。它們也可以作為擬合文本數據的神經網絡的一部分來學習。 Word Embedding單詞嵌入是使用密集的矢量表示來表示單詞和文檔的一類方法。詞嵌入是對傳統的詞袋模型編碼方案的改進,傳統方法使用大而稀疏的矢量來表示每個單詞或者在矢量內對每個單詞進行評分以表示整個詞彙表,這些表示是稀疏的,因為每個詞彙的表示是巨大的,給定的詞或文檔主要由零值組成的大向量表示。相反,在嵌入中,單詞由密集向量表示,其中向量表示將單詞投影到連續向量空間中。向量空間中的單詞的位置是從文本中學習的,並且基於在使用單詞時圍繞單詞的單詞。學習到的向量空間中的單詞的位置被稱為它的嵌入:Embedding。從文本學習單詞嵌入方法的兩個流行例子包括: Word2Vec. GloVe.除了這些精心設計的方法之外,還可以將詞嵌入學習作為深度學習模型的一部分。這可能是一個較慢的方法,但可以通過這樣為特定數據集定制模型。 Keras Embedding Layer Keras提供了一個嵌入層,適用於文本數據的神經網絡。它要求輸入數據是整數編碼的,所以每個字都用一個唯一的整數表示。這個數據準備步驟可以使用Keras提供的Tokenizer API來執行。嵌入層用隨機權重進行初始化,並將學習訓練數據集中所有單詞的嵌入。它是一個靈活的圖層,可以以多種方式使用,例如:它可以單獨使用來學習一個單詞嵌入,以後可以保存並在另一個模型中使用。它可以用作深度學習模型的一部分,其中嵌入與模型本身一起學習。它可以用來加載預先訓練的詞嵌入模型,這是一種遷移學習。嵌入層被定義為網絡的第一個隱藏層。它必須指定3個參數: input_dim:這是文本數據中詞彙的取值可能數。例如,如果您的數據是整數編碼為0-9之間的值,那麼詞彙的大小就是10個單詞; output_dim:這是嵌入單詞的向量空間的大小。它為每個單詞定義了這個層的輸出向量的大小。例如,它可能是32或100甚至更大,可以視為具體問題的超參數; input_length:這是輸入序列的長度,就像您為Keras模型的任何輸入層所定義的一樣,也就是一次輸入帶有的詞彙個數。例如,如果您的所有輸入文檔都由1000個字組成,那麼input_length就是1000。例如,下面我們定義一個詞彙表為200的嵌入層(例如從0到199的整數編碼的字,包括0到199),一個32維的向量空間,其中將嵌入單詞,以及輸入文檔,每個單詞有50個單詞。 e = Embedding(input_dim=200, output_dim=32, input_length=50)嵌入層自帶學習的權重,如果將模型保存到文件中,則將包含嵌入圖層的權重。嵌入層的輸出是一個二維向量,每個單詞在輸入文本(輸入文檔)序列中嵌入一個。如果您希望直接將Dense層接到Embedding層後面,則必須先使用Flatten層將Embedding層的2D輸出矩陣平鋪為一維矢量。現在,讓我們看看我們如何在實踐中使用嵌入層。 學習Embedding的例子在本節中,我們將看看如何在文本分類問題上擬合神經網絡的同時學習單詞嵌入。我們將定義一個小問題,我們有10個文本文檔,每個文檔都有一個學生提交的工作評論。每個文本文檔被分類為正的“1”或負的“0”。這是一個簡單的情感分析問題。首先,我們將定義文檔及其類別標籤。 1 2 3 4 5 6 7 8 9 10 11…

0 Comments

神經網絡術語大百科:優化函數、激活函數、損失函數、正則方法的簡介

簡述關於神經網絡的各種優化函數(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)、各種激活函數(Sigmoid,Tanh、Hard Sigmoid、Softplus、ReLU、ElU、PReLU、RReLU)、各種損失函數以及正則方法的簡述,並附帶代碼實現例子。 優化函數先上兩張圖激活函數沒有激活函數,神經元就只是一個線性函數,那麼無論多少層的神經元疊加是沒有意義的。而主流激活函數也隨著神經網絡、深度學習的發展迭代進化了許多次代。 Sigmoid Sigmoid是S形狀的意思,又因為它是邏輯回歸的激活函數又叫logistic函數,函數式為$值域位於0-1,那麼對於邏輯回歸,這是對於二分類的一個很自然的表達,也就是概率處處連續可導不過呢,我們觀察它的形狀,可以得出,Sigmoid函數在兩端(靠近0和1的部分)梯度很小,這也意味著,如果神經元的輸出落到了這個地方,那麼它幾乎沒什麼梯度可以傳到後面,而隨著神經網絡的層層削弱,後面的層(靠近輸入的層)沒有多少梯度能傳過來,幾乎就“學不到什麼”了。這叫做梯度消失問題,一度是阻礙神經網絡往更深的層進化的主要困難,導致深度學習專家們絞盡腦汁想了許多方法來對抗這個問題,比如“Xavier and He Initialization”,比如我們要把weight隨機初始化為如下的範圍, sigmoid的另一個問題是它不是0均值的,Sigmoid函數的輸出值恆大於0,這會導致模型訓練的收斂速度變慢。舉例來講,對,如果所有均為正數或負數,那麼其對的導數總是正數或負數,這會導致如下圖紅色箭頭所示的階梯式更新,這顯然並非一個好的優化路徑。深度學習往往需要大量時間來處理大量數據,模型的收斂速度是尤為重要的。所以,總體上來講,訓練深度學習網絡盡量使用zero-centered數據(可以經過數據預處理實現) 和zero-centered輸出。如今,sigmoid函數應用最廣泛的在於其變種softmax在多元分類中,比如手寫數字識別,經過卷積神經網絡的處理,最後我們需要網絡輸出每個預測的概率值,最後預測為某一個數字,這裡就需要用到softmax,以下是softmax的Keras代碼,注意其中一個trick, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20…

0 Comments