Memahami unit LSTM vs. sel

32

Saya telah mempelajari LSTM untuk sementara waktu. Saya mengerti pada tingkat tinggi bagaimana semuanya bekerja. Namun, akan mengimplementasikannya menggunakan Tensorflow saya perhatikan bahwa BasicLSTMCell memerlukan sejumlah unit (yaitu num_units) parameter.

Dari ini penjelasan yang sangat menyeluruh LSTMs, saya sudah mengumpulkan bahwa satu satuan LSTM adalah salah satu dari berikut ini

Unit LSTM

yang sebenarnya merupakan unit GRU.

Saya berasumsi bahwa parameter num_unitsdari BasicLSTMCellmengacu pada berapa banyak dari kita ingin menghubungkan satu sama lain dalam sebuah layer.

Itu meninggalkan pertanyaan - apa itu "sel" dalam konteks ini? Apakah "sel" setara dengan lapisan dalam jaringan saraf umpan-maju normal?

nbro
sumber
Saya masih bingung, saya sedang membaca colah.github.io/posts/2015-08-Understanding-LSTMs dan saya mengerti itu. Bagaimana istilah sel berlaku sehubungan dengan artikel itu? Tampaknya sel LSTM dalam artikel tersebut adalah vektor seperti pada Tensorflow, kan?
Pinocchio

Jawaban:

17

Terminologi ini sayangnya tidak konsisten. num_unitsdi TensorFlow adalah sejumlah negara yang tersembunyi, yaitu dimensi dalam persamaan yang Anda berikan.ht

Juga, dari https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/api_docs/python/functions_and_classes/shard9/tf.nn.rnn_cell.RNNCell.md :

Definisi sel dalam paket ini berbeda dari definisi yang digunakan dalam literatur. Dalam literatur, sel mengacu pada objek dengan output skalar tunggal. Definisi dalam paket ini mengacu pada array horizontal dari unit-unit tersebut.

"Lapisan LSTM" mungkin lebih eksplisit, contoh :

def lstm_layer(tparams, state_below, options, prefix='lstm', mask=None):
    nsteps = state_below.shape[0]
    if state_below.ndim == 3:
        n_samples = state_below.shape[1]
    else:
        n_samples = 1

    assert mask is not None
    […]
Franck Dernoncourt
sumber
Ah, begitu, jadi "sel" adalah num_unitarray horizontal berukuran sel LSTM yang saling berhubungan. Masuk akal. Jadi itu akan dianalogikan dengan lapisan tersembunyi di jaringan umpan maju standar?
* Unit negara LSTM
@rec Itu benar
Franck Dernoncourt
1
@ Scorax misalnya, jika input dari jaringan saraf adalah deret waktu dengan 10 langkah waktu, dimensi horizontal memiliki 10 elemen.
Franck Dernoncourt
1
Saya masih bingung, saya sedang membaca colah.github.io/posts/2015-08-Understanding-LSTMs dan saya mengerti itu. Bagaimana istilah sel berlaku sehubungan dengan artikel itu? Tampaknya sel LSTM dalam artikel tersebut adalah vektor seperti pada Tensorflow, kan?
Pinocchio
4

Kebanyakan diagram LSTM / RNN hanya menunjukkan sel-sel yang tersembunyi tetapi tidak pernah unit dari sel-sel itu. Karena itu, kebingungan. Setiap lapisan tersembunyi memiliki sel tersembunyi, sebanyak jumlah langkah waktu. Dan selanjutnya, setiap sel tersembunyi terdiri dari beberapa unit tersembunyi, seperti pada diagram di bawah ini. Oleh karena itu, dimensi matriks lapisan tersembunyi di RNN adalah (jumlah langkah waktu, jumlah unit tersembunyi).

masukkan deskripsi gambar di sini

Garima Jain
sumber
4

Meskipun masalah ini hampir sama dengan yang saya jawab dalam jawaban ini , saya ingin menggambarkan masalah ini, yang juga sedikit membingungkan saya hari ini dalam model seq2seq (terima kasih atas jawaban @Franck Dernoncourt), dalam grafik. Dalam diagram enkode sederhana ini:

masukkan deskripsi gambar di sini

hsaya

Lerner Zhang
sumber
Saya percaya num_units = npada angka ini
notilas
-1

Menurut pendapat saya, sel berarti simpul seperti sel tersembunyi yang juga disebut simpul tersembunyi, untuk model LSTM multilayer, jumlah sel dapat dihitung dengan time_steps * num_layers, dan num_units sama dengan time_steps

pengguna210864
sumber
-1

Unit-unit dalam Keras adalah dimensi ruang output, yang sama dengan panjang penundaan (time_step) jaringan yang berulang.

keras.layers.LSTM(units, activation='tanh', ....)

https://keras.io/layers/recurrent/

notilas
sumber