Existe-t-il un moyen de calculer le nombre total de paramètres dans un réseau LSTM?.
J'ai trouvé un exemple mais je ne suis pas sûr de la correction ceci est ou si je l'ai bien compris.
Par exemple, considérons l'exemple suivant: -
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.layers import Embedding
from keras.layers import LSTM
model = Sequential()
model.add(LSTM(256, input_dim=4096, input_length=16))
model.summary()
____________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
====================================================================================================
lstm_1 (LSTM) (None, 256) 4457472 lstm_input_1[0][0]
====================================================================================================
Total params: 4457472
____________________________________________________________________________________________________
Selon ma compréhension, n
est la longueur du vecteur d’entrée. Et m
est le nombre de pas de temps. et dans cet exemple, ils considèrent que le nombre de couches cachées est égal à 1.
D'où selon la formule dans le post.4(nm+n^2)
dans mon exemple m=16
; n=4096
; num_of_units=256
4*((4096*16)+(4096*4096))*256 = 17246978048
Pourquoi y a-t-il une telle différence? Ai-je mal compris l'exemple ou la formule était-elle fausse?
Non - le nombre de paramètres d'une couche LSTM dans Keras est égal à:
params = 4 * ((size_of_input + 1) * size_of_output + size_of_output^2)
1
supplémentaire provient de termes de biais. Donc n
est la taille de l'entrée (augmenté du terme de biais) et m
est la taille de la sortie d'une couche LSTM.
Alors finalement:
4 * (4097 * 256 + 256^2) = 4457472
num_params = [(num_units + input_dim + 1) * num_units] * 4
num_units + input_dim: concat [h (t-1), x (t)]
+ 1: biais
* 4: il y a 4 couches de réseau de neurones (boîte jaune) {W_forget, W_input, W_output, W_cell}
model.add(LSTM(units=256, input_dim=4096, input_length=16))
[(256 + 4096 + 1) * 256] * 4 = 4457472
PS: num_units = num_hidden_units = output_dims
Formule en expansion pour @JohnStrong :
4 signifie que nous avons différentes variables de pondération et de biais pour 3 portes (lecture/écriture/froget) et - 4-ème - pour l'état état de la cellule (dans la même état caché). (Ceux-ci sont partagés entre des pas de temps le long d'un vecteur d'état caché particulier)
4 * lstm_hidden_state_size * (lstm_inputs_size + bias_variable + lstm_outputs_size)
comme la sortie LSTM (y) est h (état caché) par approche, donc, sans projection supplémentaire, pour les sorties LSTM, nous avons:
lstm_hidden_state_size = lstm_outputs_size
disons que c'est d:
d = lstm_hidden_state_size = lstm_outputs_size
Ensuite
params = 4 * d * ((lstm_inputs_size + 1) + d) = 4 * ((lstm_inputs_size + 1) * d + d^2)
Équations LSTM (via deeplearning.ai Coursera)