Perbedaan antara satu unit LSTM dan 3-unit jaringan saraf LSTM

12

LSTM dalam kode Keras berikut

input_t = Input((4, 1))
output_t = LSTM(1)(input_t)
model = Model(inputs=input_t, outputs=output_t)
print(model.summary())

dapat direpresentasikan sebagai

Saya mengerti bahwa ketika kita memanggil model.predict(np.array([[[1],[2],[3],[4]]]))(hanya) unit LSTM terlebih dahulu memproses vektor [1], kemudian [2] ditambah umpan balik dari input sebelumnya dan seterusnya hingga vektor [4]. Dengan kata lain .x1=[1],x2=[2],x3=[3],x4=[4]

Saya tidak mengerti bagaimana jaringan saraf berikut akan memproses urutan input yang sama [1],[2],[3],[4]

 input_t = Input((4, 1))
 output_t = LSTM(3)(input_t)
 model = Model(inputs=input_t, outputs=output_t)
 print(model.summary())

Dalam NN ini kami memiliki tiga unit LSTM. Bagaimana mereka memproses urutan [1],[2],[3],[4]? Apakah mereka saling berhubungan satu sama lain? Apakah mereka memproses urutan input secara paralel atau apakah satu unit memproses urutan input dan kemudian inputnya dimasukkan ke unit LSTM kedua dan seterusnya? Bisakah seseorang secara skematis menggunakan gambar ini menjelaskan seluruh proses?

Bayram Kuliyev
sumber

Jawaban:

7

Dalam Keras LSTM(n)berarti "buat layer LSTM yang terdiri dari unit LSTM. Gambar berikut menunjukkan apa layer dan unit (atau neuron) itu, dan gambar paling kanan menunjukkan struktur internal unit LSTM tunggal.

masukkan deskripsi gambar di sini

Gambar berikut menunjukkan bagaimana seluruh lapisan LSTM beroperasi.

masukkan deskripsi gambar di sini

Seperti yang kita ketahui layer LSTM memproses urutan, yaitu, . Pada setiap langkah layer (setiap neuron) mengambil input , output dari langkah sebelumnya , dan bias , dan menghasilkan vektor . Koordinat adalah output dari neuron / unit, dan karenanya ukuran vektor sama dengan jumlah unit / neuron. Proses ini berlanjut hingga .x1,,xNtxtht1bhththtxN

Sekarang mari kita menghitung jumlah parameter untuk LSTM(1)dan LSTM(3)dan membandingkannya dengan apa yang menunjukkan Keras ketika kita sebut model.summary().

Biarkan menjadi ukuran vektor dan menjadi ukuran vektor (ini juga merupakan jumlah neuron / unit). Setiap neuron / unit mengambil vektor input, output dari langkah sebelumnya, dan bias yang membuat parameter (bobot). Tapi kita harus jumlah neuron dan jadi kita harus parameter. Akhirnya setiap unit memiliki 4 bobot (lihat gambar paling kanan, kotak kuning) dan kami memiliki rumus berikut untuk sejumlah parameter: inpxtouthtinp+out+1outout×(inp+out+1)

4out(inp+out+1)

Mari kita bandingkan dengan apa yang dihasilkan Keras.

Contoh 1.

 t1 = Input(shape=(1, 1))
 t2 = LSTM(1)(t1)
 model = Model(inputs=t1, outputs=t2)
 print(model.summary())

  Layer (type)                 Output Shape              Param #   
  =================================================================
  input_2 (InputLayer)         (None, 1, 1)              0         
  _________________________________________________________________
  lstm_2 (LSTM)                (None, 1)                 12        
  =================================================================
  Total params: 12
  Trainable params: 12
  Non-trainable params: 0
  _________________________________________________________________

Jumlah unit adalah 1, ukuran vektor input adalah 1, jadi .4×1×(1+1+1)=12

Contoh 2.

  input_t = Input((4, 2))
  output_t = LSTM(3)(input_t)
  model = Model(inputs=input_t, outputs=output_t)
  print(model.summary())

    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    input_6 (InputLayer)         (None, 4, 2)              0         
    _________________________________________________________________
    lstm_6 (LSTM)                (None, 3)                 72        
    =================================================================
    Total params: 72
    Trainable params: 72
    Non-trainable params: 0

Jumlah unit adalah 3, ukuran vektor input adalah 2, jadi4×3×(2+3+1)=72

fade2black
sumber
1

Saya biasanya bekerja dengan Tensorflow tapi seperti yang saya lihat di dokumentasi itu mirip dengan Keras.

Pada dasarnya, ketika Anda menelepon LSTM(3)Anda TIDAK membuat LSTM satu sama lain seperti pada gambar ini 1 . Ini adalah masalah yang sangat berbeda.

Namun, saat Anda membuat, LSTM(3)Anda membuat LSTM dengan 3 unit tersembunyi atau sel tersembunyi . Pada kode Anda, 3 akan menjadi dimensi sel dalam di LSTM. Apa artinya? Ini berarti bahwa dimensi keadaan tersembunyi dan dimensi keadaan keluaran akan sama dengan parameter unit tersembunyi Anda.

Alih-alih membayangkan LSTM sebagai sesuatu yang mendapatkan urutan skalar dan memberi dan mengeluarkan skalar, bayangkan ini: Anda memiliki urutan panjang T dengan 512 nilai masing-masing T jadi [Batchsize, T, 512]. Pada timestemp pertama T = 1, Anda akan memberi makan LSTM dengan nilai-nilai 512 ini sekaligus dan ini berkat unit tersembunyi.

Saya melampirkan beberapa referensi dan tautan jika penjelasan saya tidak terlalu jelas. Q Referensi , S Referensi .

2 Tumpukan LSTM

Guillem
sumber