Я изучаю модели внимания и их реализации в керасе. При поиске я наткнулся на эти два метода first и second , с помощью которых мы можем создать слой внимания в keras
# First method
class Attention(tf.keras.Model):
def __init__(self, units):
super(Attention, self).__init__()
self.W1 = tf.keras.layers.Dense(units)
self.W2 = tf.keras.layers.Dense(units)
self.V = tf.keras.layers.Dense(1)
def call(self, features, hidden):
hidden_with_time_axis = tf.expand_dims(hidden, 1)
score = tf.nn.tanh(self.W1(features) + self.W2(hidden_with_time_axis))
attention_weights = tf.nn.softmax(self.V(score), axis=1)
context_vector = attention_weights * features
context_vector = tf.reduce_sum(context_vector, axis=1)
return context_vector, attention_weights
# Second method
activations = LSTM(units, return_sequences=True)(embedded)
# compute importance for each step
attention = Dense(1, activation='tanh')(activations)
attention = Flatten()(attention)
attention = Activation('softmax')(attention)
attention = RepeatVector(units)(attention)
attention = Permute([2, 1])(attention)
sent_representation = merge([activations, attention], mode='mul')
* * * * * * Математическая модель * * * * * * * * * *
Если мы посмотрим на первый метод, то это была прямая реализация математики внимания, тогда как второй метод, который имеет большее количество посещений в интернете, - нет.
Мое настоящее сомнение в этих строках во втором методе
attention = RepeatVector(units)(attention)
attention = Permute([2, 1])(attention)
sent_representation = merge([activations, attention], mode='mul')
- Какая правильная реализация для внимания?
- Что такое интуиция за слоем
RepeatVector
и Permute
во втором методе?
- В первом методе
W1
, W2
- веса; почему плотный слой считается здесь весом?
- Почему значение
V
считается плотным слоем из одной единицы?
- Что такое
V(score)
делать?