[英]Keras: good result with MLP but bad with Bidirectional LSTM
我用Keras
訓練了兩個神經網絡:一個MLP
和一個Bidirectional LSTM
。
我的任務是預測一個句子中的單詞順序,所以對於每個單詞,神經網絡都需要 output 一個實數。 當處理一個有N個單詞的句子時,對output中的N個實數進行排序,得到integer個數代表單詞position。
我在數據集上使用相同的數據集和相同的預處理。 唯一不同的是,在LSTM
數據集中,我添加了填充以獲得相同長度的序列。
在預測階段,使用LSTM
,我排除了從填充向量創建的預測,因為我在訓練階段屏蔽了它們。
MLP架構:
mlp = keras.models.Sequential()
# add input layer
mlp.add(
keras.layers.Dense(
units=training_dataset.shape[1],
input_shape = (training_dataset.shape[1],),
kernel_initializer=keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None),
activation='relu')
)
# add hidden layer
mlp.add(
keras.layers.Dense(
units=training_dataset.shape[1] + 10,
input_shape = (training_dataset.shape[1] + 10,),
kernel_initializer=keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None),
bias_initializer='zeros',
activation='relu')
)
# add output layer
mlp.add(
keras.layers.Dense(
units=1,
input_shape = (1, ),
kernel_initializer=keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None),
bias_initializer='zeros',
activation='linear')
)
雙向 LSTM 架構:
model = tf.keras.Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(Bidirectional(LSTM(units=20, return_sequences=True), input_shape=(timesteps, features)))
model.add(Dropout(0.2))
model.add(Dense(1, activation='linear'))
使用 LSTM 可以更好地解決該任務,它應該可以很好地捕獲單詞之間的依賴關系。
然而,使用MLP
我取得了很好的結果,但使用LSTM
的結果非常糟糕。
由於我是初學者,有人能理解我的LSTM
架構有什么問題嗎? 我快瘋了。
提前致謝。
對於這個問題,我對 MLP 表現更好其實並不感到驚訝。
LSTM 的體系結構,無論是否是雙向的,都假設位置對結構非常重要。 彼此相鄰的詞比更遠的詞更有可能相關。
但是對於您的問題,您已經刪除了該位置並正在嘗試恢復它。 對於這個問題,具有全局信息的 MLP 可以在排序方面做得更好。
也就是說,我認為還有一些工作要做來改進 LSTM model。
您可以做的一件事是確保每個 model 的復雜性相似。 您可以使用count_params輕松完成此操作。
mlp.count_params()
model.count_params()
如果我不得不猜測,你的 LSTM 要小得多。 只有 20 個units
,對於 NLP 問題來說似乎很小。 我將512
用於產品分類問題來處理字符級信息(大小為 128 的詞匯,大小為 50 的嵌入)。 在更大的數據集(如AWD-LSTM )上訓練的詞級模型可以進入數千個units
。
所以你可能想增加這個數字。 您可以通過增加 LSTM 中的units
數直到參數計數相似,從而在兩個模型之間進行比較。 但是你不必止步於此,你可以繼續增加尺寸,直到你開始過度擬合或者你的訓練開始花費太長時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.