
但是MultiHeadAttentionTensorflow 的層似乎更靈活:
- 它不需要
key_dim * num_heads = embed_dim。喜歡:
layer = tf.keras.layers.MultiHeadAttention(num_heads = 2, key_dim = 4)
x = tf.keras.Input(shape=[3, 5])
layer(x, x)
# no error
tf.MHA圖層中權重矩陣的深度是否設定為key_dim * num_heads不管embed_dim?這樣 Q/K/V 仍然可以被適當地分割num_heads。
- 但是,tf.MHA 層的輸出深度(默認情況下)保證為
embed_dim. 所以最后還有一個帶embed_dim節點的dense layer來保證維度?
uj5u.com熱心網友回復:
是的,對于 1 和 2。您可以通過以下方式探測權重:
layer = tf.keras.layers.MultiHeadAttention(num_heads = 2, key_dim = 4, use_bias=False) #Set use_bias=False for simplicity.
x = tf.keras.Input(shape=[3, 5])
layer(x, x)
獲取關聯的權重,
weight_names = ['query', 'keys', 'values', 'proj']
for name, out in zip(weight_names,layer.get_weights()):
print(name, out.shape)
輸出形狀:
query (5, 2, 4) # (embed_dim, num_heads, key_dim)
keys (5, 2, 4) # (embed_dim, num_heads, key_dim)
values (5, 2, 4) # (embed_dim, num_heads, value_dim/key_dim)
proj (2, 4, 5) # (num_heads, key_dim, embed_dim)
uj5u.com熱心網友回復:
在 Multi-Head Attention 中,我們根據嵌入維度拆分輸入大小。怎么樣?讓我們舉個例子...
#Take an arbitrarily input of with embed_size = 512
x_embed = tf.random.normal((64,100,512))
現在,如果你想在 Multi-Head Attention 中使用 8 個頭。那么512//8您的嵌入大小512應該可以被許多頭數整除……這是為什么呢?因為這將決定你每一個注意力的大小。
Number of heads = 8
embed size = 512
Attention Dims = embed_size//Number of heads
如果你的頭數不能被 embed_size 整除,那么它會在重塑時造成麻煩!但是怎么辦?讓我們研究一下...
batch_dims = 64
no_of_heads = 8
seq_dims = 100
attn_dims = 64
tf.reshape(x (batch_dims, no_of_heads, seq_dims, attn_dims))
#After reshaping x shape would be
shape(64 , 8 , 100 , 64)
重要的提示
tf.keras.layers.MultiHeadAttention()作業方式相同,您的查詢可能seq_length與鍵和值不同,但它們的嵌入維度必須相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/534564.html
上一篇:在處理上述例外([Errno13]Permissiondenied:'new1234567.csv')的程序中,又發生了一個例外
