Hiểu mô hình tuần tự

Machine Translation với Keras

Thushan Ganegedara

Data Scientist and Author

Đầu vào chuỗi thời gian và mô hình tuần tự

  • Câu là một đầu vào chuỗi thời gian
    • Từ hiện tại bị ảnh hưởng bởi các từ trước đó
    • Ví dụ: He went to the pool for a ....
  • Bộ mã hóa/giải mã dùng mô hình học máy
    • Mô hình học từ đầu vào chuỗi thời gian
    • Các mô hình này gọi là mô hình tuần tự
Machine Translation với Keras

Mô hình tuần tự

  • Mô hình tuần tự
    • Duyệt qua đầu vào và tạo đầu ra ở mỗi bước thời gian

Kiến trúc mô hình tuần tự

Machine Translation với Keras

Bộ mã hóa như mô hình tuần tự

  • GRU - Gated Recurrent Unit

Các đơn vị hồi quy có cổng

Machine Translation với Keras

Giới thiệu tầng GRU

Ở bước thời gian 1, tầng GRU:

  • Nhận đầu vào "We"
  • Nhận trạng thái đầu (0,0)
  • Xuất trạng thái mới (0.8, 0.3)

GRU 1

Machine Translation với Keras

Giới thiệu tầng GRU

Ở bước thời gian 2, tầng GRU:

  • Nhận đầu vào "like"
  • Nhận trạng thái đầu (0.8,0.3)
  • Xuất trạng thái mới (0.5, 0.9)

Trạng thái ẩn là “bộ nhớ” của những gì mô hình đã thấy

GRU 2

Machine Translation với Keras

Ôn Keras (Functional API)

  • Keras có hai đối tượng chính: LayerModel.
  • Tầng đầu vào
    • inp = keras.layers.Input(shape=(...))
  • Tầng ẩn
    • layer = keras.layers.GRU(...)
  • Đầu ra
    • out = layer(inp)
  • Mô hình
    • model = Model(inputs=inp, outputs=out)
Machine Translation với Keras

Hiểu dạng của dữ liệu

  • Dữ liệu tuần tự có 3 chiều
    • Chiều batch (ví dụ: batch = nhóm câu)
    • Chiều thời gian - độ dài chuỗi
    • Chiều đầu vào (ví dụ: độ dài one-hot)
  • Dạng input của mô hình GRU
    • (Batch, Time, Input)
    • (kích thước batch, độ dài chuỗi, độ dài one-hot)

Dữ liệu đầu vào

Machine Translation với Keras

Cài đặt GRU với Keras

Định nghĩa các tầng Keras

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

Định nghĩa mô hình Keras

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

Cài đặt GRU với Keras

Dự đoán với mô hình Keras

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 với Keras

Cài đặt GRU với Keras

GRU nhận số mẫu bất kỳ trong một batch

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 với Keras

Tham số return_state của tầng GRU

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 với Keras

Tham số return_sequences của tầng GRU

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 với Keras

Ayo berlatih!

Machine Translation với Keras

Preparing Video For Download...