GaiaEx AcademyGaiaEx Academy
TensorFlow, Keras และ TensorBoard สำหรับติดตามโมเดล
นักพัฒนาAI & ML12 min read

TensorFlow, Keras และ TensorBoard สำหรับติดตามโมเดล

เฟรมเวิร์ก ML ของ Google และแดชบอร์ดแสดงผลอันทรงพลัง

แชร์โพสต์

อีโคซิสเตม TensorFlow: มากกว่าแค่เฟรมเวิร์ก

TensorFlow พัฒนาโดย Google Brain และเปิดตัวในปี 2015 ไม่ใช่แค่ไลบรารี deep learning — มันคืออีโคซิสเตมทั้งหมดสำหรับสร้าง ฝึก deploy และติดตามโมเดล machine learning ในทุกขนาด แม้ PyTorch จะครองพื้นที่การวิจัย แต่ TensorFlow ยังคงเป็นพลังหลักของงานผลิต ถูก deploy ในระบบที่ประมวลผลการพยากรณ์หลายพันล้านครั้งต่อวันที่ Google, Airbnb, Twitter และบริษัทอื่น ๆ อีกหลายพัน

อีโคซิสเตมนี้ครอบคลุมวงจรชีวิต ML ทั้งหมด:

  • Keras — API ระดับสูงสำหรับสร้างและฝึกโมเดล ตอนนี้รวมเข้ากับ TensorFlow เต็มรูปแบบในชื่อ tf.keras
  • TensorBoard — เครื่องมือแสดงภาพสำหรับติดตามการฝึก เปรียบเทียบการทดลอง และดีบักโมเดล
  • tf.data — ไปป์ไลน์ข้อมูลประสิทธิภาพสูงสำหรับป้อนชุดข้อมูลขนาดใหญ่เข้าโมเดล
  • TensorFlow Serving — การให้บริการโมเดลระดับการผลิต พร้อมการจัดการเวอร์ชัน การรวมกลุ่มคำขอ และการเร่งด้วยฮาร์ดแวร์
  • TensorFlow Lite — รันไทม์ที่ปรับให้เหมาะสมสำหรับอุปกรณ์มือถือและ edge
  • TensorFlow.js — รันโมเดลได้โดยตรงในเบราว์เซอร์

ความกว้างนี้คือจุดแข็งที่สุดของ TensorFlow คุณสามารถทำต้นแบบโมเดลใน Jupyter notebook ด้วย Keras ฝึกมันบนคลัสเตอร์ GPU ติดตามการฝึกด้วย TensorBoard ให้บริการด้วย TF Serving หลัง API และ deploy เวอร์ชันที่บีบอัดไปยัง Raspberry Pi — ทั้งหมดนี้ภายในเฟรมเวิร์กเดียวกัน สำหรับแอปพลิเคชันทางการเงินที่คุณอาจต้องการโมเดลรันทั้งในเอนจินการเทรดบนคลาวด์ (เชื่อมต่อกับ API ของ GaiaEx) และบนเวิร์กสเตชันในเครื่องสำหรับการวิจัย ความหลากหลายนี้สำคัญมาก

วงจรชีวิต ML ของ TensorFlow (แบบย่อ) ข้อมูล Keras ฝึก TB logs ให้บริการ / edge กราฟเดียวกันสามารถป้อนทั้ง notebook วิจัยและงานผลิตได้ ถ้าคุณสร้างมาตรฐานให้กับสิ่งที่สร้างขึ้น (SavedModel) ไปป์ไลน์ tf.data ทำให้ GPU มีข้อมูลใช้ตลอด; TF Serving สลับเวอร์ชันโมเดลได้โดยไม่มี downtime
ทำต้นแบบ ฝึก สังเกต deploy — เทคสแตกเดียว หลายรันไทม์

Keras: Sequential และ Functional API สำหรับสร้างโมเดล

Keras ถูกออกแบบด้วยหลักการนำทางเดียว: ลดภาระทางความคิดในการสร้างโครงข่ายประสาทเทียม มันบรรลุสิ่งนี้ผ่าน API สร้างโมเดลสองแบบ แต่ละแบบเหมาะกับระดับความซับซ้อนที่แตกต่างกัน

Sequential API เป็นแบบที่ง่ายที่สุด — การเรียงชั้นแบบเชิงเส้น:

import tensorflow as tf
from tensorflow import keras

model = keras.Sequential([
    keras.layers.Dense(128, activation="relu", input_shape=(20,)),
    keras.layers.Dropout(0.3),
    keras.layers.Dense(64, activation="relu"),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(1, activation="sigmoid"),
])

สำหรับโมเดลที่มีอินพุตหลายตัว เอาต์พุตหลายตัว ชั้นที่ใช้ร่วมกัน หรือ skip connection Functional API ให้คุณควบคุมได้เต็มรูปแบบในระดับกราฟ:

price_input = keras.Input(shape=(60, 5), name="price_sequence")
meta_input = keras.Input(shape=(10,), name="metadata")

x = keras.layers.LSTM(64, return_sequences=True)(price_input)
x = keras.layers.LSTM(32)(x)

combined = keras.layers.concatenate([x, meta_input])
combined = keras.layers.Dense(64, activation="relu")(combined)
output = keras.layers.Dense(1, activation="sigmoid")(combined)

model = keras.Model(inputs=[price_input, meta_input],
                    outputs=output)

โมเดลนี้รับอินพุตสองตัว — ลำดับราคา 60 step ที่ประมวลผลด้วย LSTM ที่ซ้อนกัน และเวกเตอร์เมทาดาต้าของฟีเจอร์คงที่ — รวมทั้งสองเข้าด้วยกัน และให้ผลการพยากรณ์ทิศทาง สถาปัตยกรรมนี้พบทั่วไปใน ML ทางการเงินที่คุณต้องการผสมรูปแบบตามเวลา (การเคลื่อนไหวราคาล่าสุด) กับข้อมูลบริบท (รูปแบบความผันผวน อัตรา funding วันในสัปดาห์)

ชนิดชั้นสำคัญสำหรับแอปพลิเคชันทางการเงิน: Dense สำหรับฟีเจอร์แบบตาราง LSTM และ GRU สำหรับ time series Conv1D สำหรับเรียนรู้รูปแบบตามเวลาแบบท้องถิ่น และ MultiHeadAttention สำหรับการสร้างแบบจำลองลำดับสไตล์ transformer

การ Compile โมเดลและ Callback เพื่อการฝึกที่ฉลาดขึ้น

เมื่อสร้างแล้ว โมเดล Keras ต้องถูก compile ด้วยสามส่วนประกอบ: optimizer ฟังก์ชัน loss และเมตริกการประเมิน

model.compile(
    optimizer=keras.optimizers.Adam(learning_rate=1e-3),
    loss="binary_crossentropy",
    metrics=["accuracy", keras.metrics.AUC(name="auc")],
)

history = model.fit(
    X_train, y_train,
    epochs=100,
    batch_size=64,
    validation_data=(X_val, y_val),
    callbacks=[...],
)

Callback คือ hook ที่ดำเนินการ ณ จุดเฉพาะระหว่างการฝึก — หลังจากแต่ละ epoch แต่ละ batch หรือเมื่อเงื่อนไขบางอย่างได้รับการตอบสนอง พวกมันทำให้การจัดการการฝึกที่ปกติต้องติดตามด้วยมือเป็นแบบอัตโนมัติ:

  • EarlyStopping — หยุดการฝึกเมื่อ validation loss หยุดปรับปรุงไปเป็นเวลา patience epoch ป้องกัน overfitting และประหยัดการคำนวณ ตั้ง restore_best_weights=True เพื่อกลับไปยัง checkpoint ที่ดีที่สุดโดยอัตโนมัติ
  • ModelCheckpoint — บันทึกโมเดลทุกครั้งที่ประสิทธิภาพ validation ปรับปรุงขึ้น ไม่สูญเสียโมเดลที่ดีที่สุดของคุณจากการฝึกล่มหรือ overfitting ใน epoch ที่ตามมา
  • ReduceLROnPlateau — ลด learning rate เมื่อ validation loss หยุดนิ่ง สิ่งนี้มักปลดล็อกประสิทธิภาพเพิ่มเติมที่ learning rate คงที่พลาดไป — โมเดลก้าวใหญ่ในตอนแรก แล้วปรับละเอียดด้วยก้าวเล็กลง
callbacks = [
    keras.callbacks.EarlyStopping(
        monitor="val_loss", patience=15,
        restore_best_weights=True),
    keras.callbacks.ModelCheckpoint(
        "best_model.keras", monitor="val_auc",
        mode="max", save_best_only=True),
    keras.callbacks.ReduceLROnPlateau(
        monitor="val_loss", factor=0.5,
        patience=5, min_lr=1e-6),
    keras.callbacks.TensorBoard(log_dir="./logs"),
]

ใช้ EarlyStopping และ ModelCheckpoint ร่วมกันเสมอ การฝึกโมเดลทางการเงินด้วย epoch มากเกินไปแทบจะรับประกันการ overfitting — โมเดลเริ่มจดจำสัญญาณรบกวนในข้อมูลฝึก callback ทั้งสองนี้ทำให้แน่ใจว่าคุณหยุดในเวลาที่ถูกต้องและเก็บ weight ที่ถูกต้องไว้

TensorBoard: การแสดงภาพการฝึกและดีบักโมเดล

TensorBoard คือเครื่องมือแสดงภาพของ TensorFlow และเป็นหนึ่งในเครื่องมือที่มีค่าที่สุดในเวิร์กโฟลว์ของผู้ปฏิบัติงาน ML ใดก็ตาม — ไม่ว่าคุณจะใช้ TensorFlow, PyTorch หรือ JAX มันแปลง log การฝึกดิบให้เป็นแดชบอร์ดแบบโต้ตอบที่เผยให้เห็นสิ่งที่เกิดขึ้นภายในโมเดลของคุณ

เริ่ม TensorBoard โดยชี้ไปที่โฟลเดอร์ log ของคุณ:

# Terminal
tensorboard --logdir=./logs --port=6006

# หรือใน Jupyter notebook
%load_ext tensorboard
%tensorboard --logdir ./logs

การแสดงภาพสำคัญสำหรับการพัฒนาโมเดลทางการเงิน:

Scalars — กราฟ loss การฝึกและ validation ที่พล็อตตามเวลา ช่องว่างระหว่างพวกมันเผยให้เห็น overfitting: loss การฝึกที่ยังลดลงต่อไปในขณะที่ validation loss เพิ่มขึ้นหมายความว่าโมเดลของคุณกำลังจดจำสัญญาณรบกวน การฝึกที่มีสุขภาพดีแสดงทั้งสองกราฟลดลงพร้อมกัน โดยกราฟ validation อยู่สูงกว่ากราฟการฝึกเล็กน้อย

Histograms — การแจกแจงของ weight, bias และ activation ในแต่ละชั้นและ epoch จับตาดูการแจกแจง weight ที่ยุบตัวลงเป็นศูนย์ (gradient หายไป) ระเบิดไปเป็นค่าที่ใหญ่ (การฝึกไม่มีเสถียรภาพ) หรือ activation อิ่มตัวที่ 0 หรือ 1 (นิวรอนตาย) ปัญหาเหล่านี้มองไม่เห็นในกราฟ loss แต่เห็นได้ชัดใน histogram

Embeddings — โปรเจกต์ representation ที่มีมิติสูงลงในพื้นที่ 2D หรือ 3D โดยใช้ t-SNE หรือ PCA มองเห็นว่าโมเดลของคุณเรียนรู้ที่จะแยกแยะรูปแบบตลาด ประเภทสินทรัพย์ หรือสภาวะความผันผวนที่แตกต่างกันใน representation ภายในของมันหรือไม่

HParams — เปรียบเทียบการค้นหา hyperparameter ข้ามการทดลอง รันโมเดลเดียวกันด้วย learning rate สถาปัตยกรรม และค่า dropout ที่แตกต่างกัน แล้วระบุว่าชุดค่าผสมใดให้เมตริก validation ที่ดีที่สุด การเปรียบเทียบเชิงระบบนี้แทนที่การทดลองแบบสุ่มด้วยการเลือกโมเดลจากหลักฐาน

TensorBoard ยังทำงานกับ PyTorch ผ่านคลาส torch.utils.tensorboard.SummaryWriter — เครื่องมือแสดงภาพเป็นแบบไม่ผูกกับเฟรมเวิร์ก ซึ่งเป็นหนึ่งในเหตุผลที่ TensorBoard กลายเป็นมาตรฐานที่ใช้ในทางปฏิบัติทั่วอีโคซิสเตม ML

แผงของ TensorBoard (แนวคิด) Scalars train vs val loss Histograms weights / activations HParams compare runs Overfitting ปรากฏเป็นกราฟที่แยกออกจากกันก่อนที่มันจะปรากฏในการ backtest P&L ของคุณ
Scalars จับคุณภาพการฟิต; histograms จับชั้นที่พัง; HParams เปรียบเทียบการทดลอง

ไปป์ไลน์ tf.data และ TensorFlow Serving สำหรับงานผลิต

เมื่อชุดข้อมูลของคุณใหญ่เกินกว่าจะเก็บในความจำได้ — สถานการณ์ที่พบทั่วไปเมื่อทำงานกับข้อมูลระดับ tick จากตลาดแลกเปลี่ยนอย่าง GaiaEx — tf.data มอบไปป์ไลน์ข้อมูลที่มีประสิทธิภาพและทำงานแบบพาราเลลที่ทำให้ GPU ของคุณมีข้อมูลใช้ตลอดโดยไม่ต้องโหลดทั้งหมดในครั้งเดียว

dataset = tf.data.Dataset.from_tensor_slices((features, labels))
dataset = (dataset
    .window(60, shift=1, drop_remainder=True)
    .flat_map(lambda w: w.batch(60))
    .batch(64)
    .prefetch(tf.data.AUTOTUNE)
)

การเรียก prefetch(AUTOTUNE) มีความสำคัญ — มันให้การโหลดข้อมูลและการคำนวณโมเดลซ้อนทับกันได้ ดังนั้น GPU จะไม่ว่างงานรอ batch ถัดไป สำหรับชุดข้อมูลทางการเงินที่มี feature engineering ที่ซับซ้อน คุณสามารถเชื่อมโยงการแปลง .map() ที่รันแบบพาราเลล คำนวณตัวชี้วัดและ normalization แบบสด ๆ แทนที่จะคำนวณล่วงหน้าและเก็บไว้

TensorFlow Serving คือระบบระดับการผลิตสำหรับ deploy โมเดลหลัง gRPC หรือ REST API ประสิทธิภาพสูง มันจัดการการจัดการเวอร์ชันโมเดล (ให้บริการโมเดลใหม่พร้อมเก็บโมเดลเก่าไว้เป็น fallback) การรวมกลุ่มคำขอ (รวมคำขอ inference หลายคำขอเพื่อประสิทธิภาพ GPU) และการเร่งด้วยฮาร์ดแวร์ — ทั้งหมดนี้สำคัญสำหรับระบบเทรดที่ทั้งความหน่วงและความน่าเชื่อถือเป็นสิ่งสำคัญ

# Export a SavedModel
model.save("models/price_predictor/1")

# Serve with Docker
# docker run -p 8501:8501 \
#   --mount type=bind,source=$(pwd)/models,target=/models \
#   -e MODEL_NAME=price_predictor \
#   tensorflow/serving

สถาปัตยกรรมการผลิตแบบทั่วไป: บอทเทรดของคุณเชื่อมต่อกับฟีด WebSocket ของ GaiaEx คำนวณฟีเจอร์แบบเรียลไทม์ ส่งคำขอ inference ไปยัง TF Serving และรับผลการพยากรณ์ภายในมิลลิวินาทีระดับหลักเดียว เมื่อคุณฝึกใหม่ด้วยข้อมูลใหม่ ให้ deploy โมเดลที่อัปเดตเป็นเวอร์ชัน 2 — TF Serving จะสลับมันเข้ามาโดยไม่มี downtime

TensorFlow Lite, การ Deploy บน Edge และ TF เทียบกับ PyTorch

TensorFlow Lite บีบอัดโมเดลสำหรับ deploy บนอุปกรณ์มือถือ ระบบฝังตัว และฮาร์ดแวร์ edge ผ่านเทคนิคอย่าง quantization (แปลง weight แบบ 32-bit floating-point เป็นจำนวนเต็ม 8-bit) pruning (ลบ weight ที่ใกล้ศูนย์) และการปรับสถาปัตยกรรมให้เหมาะสม TF Lite สามารถลดขนาดโมเดลลง 4 เท่าหรือมากกว่า ในขณะที่รักษาความแม่นยำส่วนใหญ่ไว้ สิ่งนี้ทำให้การรัน inference บนอุปกรณ์ที่มีการคำนวณจำกัดเป็นไปได้โดยตรง — มีประโยชน์สำหรับโหนดเทรดแบบ edge หรือแดชบอร์ดติดตามที่ต้องทำงานเป็นอิสระจากโครงสร้างพื้นฐานคลาวด์

# Convert a Keras model to TF Lite
converter = tf.lite.TFLiteConverter.from_saved_model("models/v1")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()

with open("model.tflite", "wb") as f:
    f.write(tflite_model)

TensorFlow เทียบกับ PyTorch — คุณควรเลือกอะไรสำหรับแอปพลิเคชันทางการเงิน?

  • สำหรับการวิจัยและการทำต้นแบบ: PyTorch กราฟแบบไดนามิก API แบบ Pythonic และตำแหน่งที่ครองพื้นที่ในงานวิจัยเชิงวิชาการ หมายความว่าเปเปอร์จำนวนมากมีโค้ด PyTorch มาด้วย บทเรียนจำนวนมากใช้ PyTorch และการดีบักที่เข้าใจง่ายกว่า
  • สำหรับการ deploy ในงานผลิตขนาดใหญ่: TensorFlow ยังคงมีข้อได้เปรียบ TF Serving, TF Lite และ TensorFlow.js มอบเส้นทาง deploy ที่ผ่านการทดสอบจริงมาแล้ว ในขณะที่ TorchServe และ ONNX Runtime ของ PyTorch ยังคงพัฒนาไปสู่ระดับนั้น
  • โดยเฉพาะสำหรับ ML ทางการเงิน: เริ่มด้วย PyTorch สำหรับการพัฒนาโมเดลและการทดลอง ถ้าความต้องการงานผลิตของคุณเรียกร้องความเป็นผู้ใหญ่ของ TF Serving หรือการ deploy บน edge ของ TF Lite ให้แปลงโมเดลที่ดีที่สุดของคุณ หลายทีมใช้ PyTorch สำหรับการวิจัยและ TensorFlow สำหรับการ deploy โดยเชื่อมทั้งสองผ่านรูปแบบ ONNX (Open Neural Network Exchange)

ความจริงที่ตรงไปตรงมา: ทั้งสองเฟรมเวิร์กกำลังบรรจบกัน TensorFlow ยอมรับ eager execution; PyTorch เพิ่ม torch.compile สำหรับการปรับให้เหมาะสมในระดับกราฟ Keras เองก็รองรับ PyTorch, JAX และ TensorFlow เป็น backend ตอนนี้ เฟรมเวิร์กที่ดีที่สุดคือเฟรมเวิร์กที่ทีมของคุณรู้จักดีและสามารถส่งมอบโค้ดงานผลิตได้ เลือกอันหนึ่ง เข้าใจมันอย่างลึกซึ้ง และแก้ปัญหาที่แท้จริง — การพยากรณ์ตลาด — แทนที่จะถกเถียงเรื่องเครื่องมือ