Sequentiële modellen begrijpen

Machine Translation met Keras

Thushan Ganegedara

Data Scientist and Author

Tijdreeksinvoer en sequentiële modellen

  • Een zin is een tijdreeksinvoer
    • Huidig woord hangt af van vorige woorden
    • Bijv. He went to the pool for a ....
  • De encoder/decoder gebruikt een ML-model
    • Modellen die leren van tijdreeksinvoer
    • Deze heten sequentiële modellen
Machine Translation met Keras

Sequentiële modellen

  • Sequentiële modellen
    • Loopt door de invoer en geeft bij elke tijdstap een output

Architectuur sequentieel model

Machine Translation met Keras

Encoder als sequentieel model

  • GRU - Gated Recurrent Unit

Gated recurrent units

Machine Translation met Keras

Introductie tot de GRU-laag

Bij tijdstap 1 doet de GRU-laag het volgende:

  • Neemt de input "We" op
  • Neemt de begintoestand (0,0)
  • Geeft de nieuwe toestand (0,8, 0,3)

GRU 1

Machine Translation met Keras

Introductie tot GRU-laag

Bij tijdstap 2 doet de GRU-laag het volgende:

  • Neemt de input "like" op
  • Neemt de begintoestand (0,8, 0,3)
  • Geeft de nieuwe toestand (0,5, 0,9)

De verborgen toestand is het "geheugen" van wat het model zag

GRU 2

Machine Translation met Keras

Keras (Functional API) opfrissing

  • Keras heeft twee kernobjecten: Layer en Model.
  • Invoerlaag
    • inp = keras.layers.Input(shape=(...))
  • Verborgen laag
    • layer = keras.layers.GRU(...)
  • Uitvoer
    • out = layer(inp)
  • Model
    • model = Model(inputs=inp, outputs=out)
Machine Translation met Keras

De vorm van de data begrijpen

  • Sequentiële data is 3D
    • Batchdimensie (bijv. batch = groepen zinnen)
    • Tijdsdimensie — sequentielengte
    • Invoerdimensie (bijv. one-hot-vectorlengte)
  • Invoervorm GRU-model
    • (Batch, Tijd, Invoer)
    • (batchgrootte, sequentielengte, one-hot-lengte)

Invoergegevens

Machine Translation met Keras

GRU’s implementeren met Keras

Keras-lagen definiëren

inp = keras.layers.Input(batch_shape=(2,3,4))
gru_out = keras.layers.GRU(10)(inp)

Een Keras-model definiëren

model = keras.models.Model(inputs=inp, outputs=gru_out)
Machine Translation met Keras

GRU’s implementeren met Keras

Voorspellen met het Keras-model

x = np.random.normal(size=(2,3,4))
y = model.predict(x)
print("shape (y) =", y.shape, "\ny = \n", y)
shape (y) = (2, 10) 
y = 
[[ 0.2576233   0.01215531  ... -0.32517594  0.4483121 ],
 [ 0.54189587 -0.63834655  ... -0.4339783   0.4043917 ]]
Machine Translation met Keras

GRU’s implementeren met Keras

Een GRU die een willekeurig aantal samples per batch neemt

inp = keras.layers.Input(shape=(3,4))
gru_out = keras.layers.GRU(10)(inp)
model = keras.models.Model(inputs=inp, outputs=gru_out)
x = np.random.normal(size=(5,3,4))
y = model.predict(x)
print("y = \n", y)
y = 
 [[-1.3941444e-02 -3.3123985e-02 ... 6.5081201e-02  1.1245312e-01]
 [ 1.1409521e-03  3.6983326e-01 ... -3.4610277e-01 -3.4792548e-01]
 [ 2.5911796e-01 -3.9517123e-01 ... 5.8505309e-01  3.6908010e-01]
 [-2.8727052e-01 -5.1150680e-02 ... -1.9637148e-01 -1.5587148e-01]
 [ 3.1303680e-01  2.3338445e-01 ... 9.1499090e-04 -2.0590121e-01]]
Machine Translation met Keras

Argument return_state van GRU-laag

inp = keras.layers.Input(batch_shape=(2,3,4))
gru_out2, gru_state = keras.layers.GRU(10, return_state=True)(inp)
print("gru_out2.shape = ", gru_out2.shape)
print("gru_state.shape = ", gru_state.shape)
gru_out2.shape =  (2, 10)
gru_state.shape =  (2, 10)

GRU return_state

Machine Translation met Keras

Argument return_sequences van GRU-laag

inp = keras.layers.Input(batch_shape=(2,3,4))
gru_out3 = keras.layers.GRU(10, return_sequences=True)(inp)
print("gru_out3.shape = ", gru_out2.shape)
gru_out3.shape =  (2, 3, 10)

GRU return_sequences

Machine Translation met Keras

Laten we oefenen!

Machine Translation met Keras

Preparing Video For Download...