ปัญหา Vanishing Gradient
ปัญหา gradient อีกรูปแบบหนึ่งคือเมื่อ gradient มีค่าลดลงจนเข้าใกล้ศูนย์ (vanishing gradient) ซึ่งแก้ไขได้ยากกว่า เพราะตรวจจับได้ยากกว่ามาก หาก loss function ไม่ดีขึ้นในแต่ละขั้น จะรู้ได้อย่างไรว่าเป็นเพราะ gradient เป็นศูนย์จนน้ำหนักไม่ได้รับการอัปเดต หรือเพราะโมเดลเรียนรู้ไม่ได้?
ปัญหานี้เกิดขึ้นบ่อยในโมเดล RNN เมื่อต้องจดจำบริบทระยะยาว (เช่น ประโยคที่ยาวมาก)
ในแบบฝึกหัดนี้ จะสังเกตปัญหาดังกล่าวบนข้อมูล IMDB ที่คัดเลือกเฉพาะประโยคที่ยาวกว่าปกติ ข้อมูลถูกโหลดไว้ในตัวแปร X และ y รวมถึง class Sequential, SimpleRNN, Dense และ matplotlib.pyplot ในชื่อ plt โมเดลผ่านการ pre-train มาแล้ว 100 epochs โดยน้ำหนักและประวัติการฝึกถูกจัดเก็บไว้ในไฟล์ model_weights.h5 และตัวแปร history
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras
คำแนะนำการฝึกหัด
- เพิ่ม layer
SimpleRNNเข้าไปในโมเดล - โหลดน้ำหนักที่ผ่านการ pre-train มาแล้วเข้าสู่โมเดลโดยใช้เมธอด
.load_weights() - เพิ่มค่า accuracy ของข้อมูลฝึกที่อยู่ใน attribute
'acc'ลงในกราฟ - แสดงกราฟโดยใช้เมธอด
.show()
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Create the model
model = Sequential()
model.add(____(units=600, input_shape=(None, 1)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])
# Load pre-trained weights
model.____('model_weights.h5')
# Plot the accuracy x epoch graph
plt.plot(history.history[____])
plt.plot(history.history['val_acc'])
plt.legend(['train', 'val'], loc='upper left')
plt.____()