AI
เอาจริงๆ นะน้อง สมัยพี่ทำร้านเน็ต SiamCafe เนี่ย เรื่องข้อมูลส่วนตัวลูกค้าสำคัญสุดๆ เราต้องเก็บข้อมูลการใช้งาน แต่ก็ต้องระวังไม่ให้รั่วไหล ไปถึงยุค AI นี่แหละ Federated Learning (FL) เลยเป็นพระเอก เพราะมันช่วยให้เราเทรน AI ได้โดยไม่ต้องเอาข้อมูลดิบๆ ของลูกค้ามารวมกันไว้ที่เดียว
คิดง่ายๆ เหมือนสมัยก่อนเราต้องเอาโปรแกรมทุกเครื่องมาลงที่ Server เดียว แต่ตอนนี้เราสามารถให้แต่ละเครื่องช่วยกันประมวลผล แล้วค่อยเอาผลลัพธ์มารวมกันทีหลัง FL ก็คล้ายๆ กัน คือให้แต่ละอุปกรณ์ (มือถือ, คอมพิวเตอร์) ช่วยกันเทรน AI แล้วส่งแค่ "โมเดล" ที่เทรนแล้วกลับมาให้ Server รวมกัน ไม่ต้องส่งข้อมูลส่วนตัวของแต่ละคน
ที่สำคัญคือเรื่อง Privacy นี่แหละ เพราะข้อมูลส่วนตัวไม่ได้ถูกส่งออกไปไหน ทำให้ลดความเสี่ยงเรื่องข้อมูลรั่วไหลได้เยอะมากๆ ยิ่งกฎหมาย PDPA เข้มงวดขึ้นเรื่อยๆ FL นี่แหละทางออก
อันนี้สำคัญเลยน้อง คือต้องเข้าใจก่อนว่า AI แบบเดิมๆ ที่เราใช้กัน (Centralized Learning) คือต้องเอาข้อมูลทั้งหมดมารวมไว้ที่ Server กลาง แล้วค่อยเทรน AI ทีเดียว แต่ FL (Decentralized Learning) คือกระจายการเทรนไปที่อุปกรณ์ต่างๆ แล้วค่อยรวมผลลัพธ์
ข้อดีของ Centralized คือเทรนง่ายกว่า ได้ผลลัพธ์แม่นยำกว่า (เพราะมีข้อมูลเยอะ) แต่ข้อเสียคือเรื่อง Privacy นี่แหละ แถมยังต้องใช้ทรัพยากร Server เยอะด้วย
หลักการสำคัญของ FL คือ Model Averaging คือหลังจากที่แต่ละอุปกรณ์เทรน AI เสร็จแล้ว เราจะได้ "โมเดล" ของแต่ละอุปกรณ์มา Server กลางก็จะทำการ "เฉลี่ย" โมเดลเหล่านั้น เพื่อให้ได้โมเดล AI ที่ดีที่สุด
ลองนึกภาพว่าเรามีนักเรียนหลายคน แต่ละคนทำโจทย์เลขมา เราก็เอาวิธีทำของแต่ละคนมาดู แล้วสรุปวิธีที่ดีที่สุดออกมา นั่นแหละคือ Model Averaging
อันนี้เป็นเทคนิคเพิ่มเติมที่ช่วยเพิ่มความปลอดภัยให้ FL อีกขั้น คือการ "ใส่เสียงรบกวน" เข้าไปในข้อมูล หรือในโมเดลที่ส่งกลับมา เพื่อให้ยากต่อการแกะรอยว่าข้อมูลจริงๆ ของแต่ละคนคืออะไร
เหมือนเราเอารูปถ่ายไปแต่ง Photoshop ใส่ Noise เข้าไป ทำให้รูปดูไม่ชัด แต่ยังพอเห็นภาพรวมได้อยู่
สำหรับน้องๆ ที่อยากลองเล่น FL พี่แนะนำให้เริ่มจาก Framework สำเร็จรูปก่อน มีหลายตัวให้เลือก เช่น TensorFlow Federated (TFF), PyTorch Federated (PySyft) พวกนี้มี Tutorial ให้ลองทำตามเยอะแยะ
แต่ก่อนจะเริ่มเขียน Code พี่แนะนำให้เข้าใจ Concept ก่อนนะ ไม่งั้นจะงงเปล่าๆ ลองศึกษา Paper หรือ Blog ที่เกี่ยวกับ FL เยอะๆ SiamCafe Blog เราก็มีบทความเกี่ยวกับ AI นะ ลองไปอ่านดู
FL ต้องการ Dataset ที่ "กระจาย" อยู่ตามอุปกรณ์ต่างๆ แต่ละอุปกรณ์อาจจะมีข้อมูลไม่เหมือนกัน หรือมีข้อมูลคนละประเภทกันก็ได้
สมัยก่อนตอนพี่ทำร้านเน็ต เราก็เก็บข้อมูลการใช้งานของแต่ละเครื่องไว้ ซึ่งข้อมูลเหล่านี้สามารถเอามาใช้เทรน AI ได้ โดยไม่ต้องเอาข้อมูลของแต่ละเครื่องมารวมกัน
ใช้ Framework ที่เลือก สร้าง Model AI ที่จะถูกเทรนบนอุปกรณ์ต่างๆ โดยปกติแล้ว Model จะเป็น Neural Network
import tensorflow as tf
import tensorflow_federated as tff
# สร้าง Model
def create_keras_model():
return tf.keras.models.Sequential([
tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)),
tf.keras.layers.Dense(10)
])
def model_fn():
keras_model = create_keras_model()
return tff.learning.from_keras_model(
keras_model,
input_spec=example_dataset.element_spec,
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=[tf.keras.metrics.SparseCategoricalAccuracy()]
)
สั่งให้แต่ละอุปกรณ์ (Client) เทรน Model ด้วยข้อมูลของตัวเอง แล้วส่ง Model ที่เทรนแล้วกลับมาที่ Server Server ก็จะทำการ Averaging Model แล้วส่ง Model ใหม่กลับไปให้ Client ทำซ้ำ
# สร้าง Federated Averaging Algorithm
iterative_process = tff.learning.build_federated_averaging_process(
model_fn,
client_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=0.02)
)
# เริ่มการเทรน
state = iterative_process.initialize()
for round_num in range(1, 11):
state, metrics = iterative_process.next(state, federated_train_data)
print('round {:2d}, metrics={}'.format(round_num, metrics))
หลังจากเทรนเสร็จแล้ว เราก็ต้องประเมินผล Model ว่าแม่นยำแค่ไหน โดยใช้ Dataset ที่ไม่ได้ใช้ในการเทรน
อย่าลืมว่า FL ไม่ได้แม่นยำเท่า Centralized Learning นะ เพราะข้อมูลแต่ละอุปกรณ์อาจจะไม่สมบูรณ์ แต่ข้อดีคือเรื่อง Privacy นี่แหละ
แต่ละ Framework ก็มีข้อดีข้อเสียต่างกัน เช่น TFF เน้นเรื่องความยืดหยุ่น เหมาะกับงานวิจัย ส่วน PySyft เน้นเรื่อง Privacy เหมาะกับงานที่ต้องการความปลอดภัยสูง SiamCafe Blog มีบทความเปรียบเทียบ Framework พวกนี้ด้วยนะ ลองไปอ่านดู
นอกจาก FL แล้ว ยังมีเทคนิคอื่นๆ ที่ช่วยเพิ่ม Privacy ให้กับ AI ได้ เช่น Differential Privacy, Homomorphic Encryption, Secure Multi-Party Computation (SMPC) แต่ละเทคนิคก็มีข้อดีข้อเสียต่างกัน
FL เหมาะกับกรณีที่เราต้องการเทรน AI บนข้อมูลที่กระจายอยู่ตามอุปกรณ์ต่างๆ และต้องการรักษา Privacy ของข้อมูลให้มากที่สุด ส่วนเทคนิคอื่นๆ อาจจะเหมาะกับกรณีที่ข้อมูลไม่ได้กระจายอยู่ หรือต้องการความปลอดภัยในระดับที่สูงกว่า
| เทคนิค | ข้อดี | ข้อเสีย | เหมาะกับ |
|---|---|---|---|
| Federated Learning | รักษา Privacy, เทรนบนข้อมูลที่กระจาย | ความแม่นยำอาจจะไม่สูงเท่า Centralized Learning | เทรน AI บนมือถือ, IoT |
| Differential Privacy | เพิ่ม Privacy โดยการใส่ Noise | อาจจะทำให้ความแม่นยำลดลง | เก็บสถิติโดยไม่เปิดเผยข้อมูลส่วนตัว |
| Homomorphic Encryption | ประมวลผลข้อมูลที่เข้ารหัสได้ | ซับซ้อน, ใช้ทรัพยากรเยอะ | ประมวลผลข้อมูลทางการแพทย์, การเงิน |
| Secure Multi-Party Computation (SMPC) | ประมวลผลข้อมูลร่วมกันโดยไม่เปิดเผยข้อมูลให้กัน | ซับซ้อน, ใช้ทรัพยากรเยอะ | ประมวลผลข้อมูลระหว่างหลายองค์กร |
เอาล่ะน้องๆ มาถึงตรงนี้แล้ว น่าจะพอเห็นภาพ Federated Learning กันบ้างแล้วใช่มั้ย สมัยผมทำร้านเน็ตน่ะ เรื่องความปลอดภัยและความเป็นส่วนตัวสำคัญมาก ลูกค้าแต่ละคนก็อยากให้ข้อมูลของตัวเองปลอดภัย เราก็ต้องหาทางป้องกันให้ดีที่สุด Federated Learning ก็เหมือนกัน ยิ่งข้อมูลละเอียดอ่อน ยิ่งต้องระวังเป็นพิเศษ
จำไว้เลยว่า ไม่มีอะไรปลอดภัย 100% แต่เราต้องพยายามทำให้ดีที่สุดเท่าที่จะทำได้ คิดซะว่าเรากำลังสร้างป้อมปราการป้องกันข้อมูลลูกค้าของเรา
จากประสบการณ์ที่คลุกคลีกับเรื่องพวกนี้มานาน ผมสรุปเทคนิคที่ใช้ได้จริงมาให้ 3 ข้อ เน้นว่าเอาไปปรับใช้ได้เลยนะ
ลองดู Code ตัวอย่างง่ายๆ เกี่ยวกับการเพิ่ม Noise แบบ Differential Privacy ด้วย Python:
import numpy as np
def add_noise(data, epsilon):
"""Adds Laplacian noise to the data for differential privacy."""
sensitivity = 1 # Assuming sensitivity is 1
noise = np.random.laplace(loc=0, scale=sensitivity/epsilon, size=data.shape)
return data + noise
# Example usage:
data = np.array([1, 2, 3, 4, 5])
epsilon = 0.1 # Privacy parameter (smaller = more privacy)
noisy_data = add_noise(data, epsilon)
print("Original data:", data)
print("Noisy data:", noisy_data)
Code นี้เป็นแค่ตัวอย่างพื้นฐานนะ ของจริงซับซ้อนกว่านี้เยอะ แต่หวังว่าจะช่วยให้เห็นภาพมากขึ้น
เชื่อว่าน้องๆ น่าจะมีคำถามในใจกันบ้างแหละ ผมรวบรวมคำถามที่เจอบ่อยๆ มาตอบให้เคลียร์ๆ เลย
Model Poisoning คือการที่ Hacker พยายามแทรกแซง Model ที่ถูก Train เพื่อให้ Model ทำงานผิดพลาด Federated Learning ก็มีความเสี่ยงตรงนี้ แต่เราสามารถใช้เทคนิคต่างๆ เช่น Anomaly Detection หรือ Robust Aggregation เพื่อตรวจจับและป้องกันการโจมตีได้
Federated Learning เหมาะกับข้อมูลที่มีลักษณะ Decentralized และ Sensitive เช่น ข้อมูลทางการแพทย์ ข้อมูลทางการเงิน หรือข้อมูลส่วนตัวอื่นๆ ที่ไม่อยากให้รวมศูนย์ไว้ที่เดียว
ข้อจำกัดหลักๆ คือเรื่องของ Communication Cost เพราะต้องมีการส่งข้อมูลระหว่าง Client หลายราย อาจจะต้องใช้ Bandwidth เยอะ และอาจจะช้าถ้า Network ไม่ดี นอกจากนี้ การจัดการกับ Heterogeneous Data (ข้อมูลที่แตกต่างกัน) ก็เป็นความท้าทายอย่างหนึ่ง
Federated Learning เป็นเทคโนโลยีที่น่าสนใจมาก เพราะช่วยให้เรา Train Model ได้โดยที่ยังรักษาความเป็นส่วนตัวของข้อมูลไว้ได้ อย่างที่ SiamCafe Blog เราก็พยายามอัพเดทข้อมูลข่าวสารเกี่ยวกับเทคโนโลยีใหม่ๆ อยู่เสมอ
แต่ก็ต้องระวังเรื่องความปลอดภัยให้ดี ต้องมีการ Implement เทคนิคต่างๆ เช่น Differential Privacy, SMPC และ Homomorphic Encryption เพื่อป้องกันการโจมตี และอย่าลืมว่าไม่มีอะไรปลอดภัย 100% ต้องคอย Monitor และปรับปรุงอยู่เสมอ
สุดท้ายนี้ ถ้าใครสนใจเรื่อง Forex ก็ลองไปดูที่ iCafeForex ได้นะ