คอร์ส Deep Learning
(fleuret.org)- เป็น สื่อการสอน Deep Learning แบบเปิด ที่จัดทำไว้สำหรับวิชา 14x050 ของมหาวิทยาลัยเจนีวา โดยสามารถดูสไลด์ แฮนด์เอาต์ และวิดีโอบันทึกของ François Fleuret ได้ในที่เดียว
- อ้างอิงตัวอย่าง PyTorch ครอบคลุมตั้งแต่การคำนวณเทนเซอร์, automatic differentiation, gradient descent ไปจนถึงโมเดลเชิงกำเนิด โมเดลแบบวนซ้ำ และโมเดล attention ในขอบเขตที่กว้างพอสำหรับผู้เริ่มต้นติดตามได้
- ไฟล์ PDF archive ทั้งหมดมีขนาด 1,107 สไลด์ และคำบรรยาย screencast มีให้เป็นไฟล์ ZIP ที่สร้างอัตโนมัติด้วย OpenAI Whisper
- มี Practical 1~6, โค้ดเฉลย และ Python prologue กลาง ให้ใช้งานตัวเลือกการโหลดและ preprocessing ของ MNIST/CIFAR10 ในการฝึกปฏิบัติได้ทันที
- ต้องมีพื้นฐาน linear algebra, differential calculus, Python, probability/statistics, optimization, algorithms และ signal processing โดยสื่อเผยแพร่ภายใต้เงื่อนไข CC BY-NC-SA 4.0
ภาพรวมคอร์ส
- Deep Learning Course เป็นหน้าที่รวบรวมสไลด์และสื่อบันทึกของ คอร์ส Deep Learning 14x050 ของมหาวิทยาลัยเจนีวา โดย François Fleuret
- จัดเป็นคอร์ส แนะนำ Deep Learning ที่มีตัวอย่างโดยใช้เฟรมเวิร์ก PyTorch
- ขอบเขตของคอร์สเรียงต่อกันตามแกนต่อไปนี้
- เป้าหมายและโจทย์สำคัญของ machine learning
- การคำนวณเทนเซอร์
- automatic differentiation และ gradient descent
- เทคนิคเฉพาะสำหรับ deep learning
- โมเดลเชิงกำเนิด, โมเดลแบบวนซ้ำ, โมเดล attention
- ยังมีสื่อแยกคือ "The Little Book of Deep Learning"
- เป็นหนังสือแนะนำ Deep Learning ฉบับสั้นในรูปแบบสำหรับอ่านบนมือถือ สำหรับผู้อ่านที่มีพื้นฐาน STEM
- คอร์สนี้พัฒนาขึ้นครั้งแรกที่ Idiap Research Institute ในปี 2018 และสอนที่ École Polytechnique Fédérale de Lausanne ในชื่อ EE-559 จนถึงปี 2022
รูปแบบสื่อและการดาวน์โหลด
- สไลด์ PDF สำหรับบรรยายใช้แนวนอนและ overlay ให้เหมาะกับการนำเสนอ
- แฮนด์เอาต์ PDF คอมไพล์เป็นแนวตั้ง และมีโน้ตเพิ่มเติมโดยไม่มีเอฟเฟกต์ overlay
- Screencast สามารถรับชมได้ผ่านการสตรีมในเบราว์เซอร์และไฟล์ mp4 ที่ดาวน์โหลดได้
- PDF archive ทั้งหมดดาวน์โหลดได้จากไฟล์ต่อไปนี้
- dlc-handout-all.zip: 101.7Mb
- dlc-slides-all.zip: 101.7Mb
- คำบรรยาย screencast สร้างอัตโนมัติด้วย Whisper ของ OpenAI และไฟล์ dlc-video-subtitles.zip มีขนาด 502.1Kb
ลำดับเนื้อหา 13 หน่วย
- สื่อการสอนทั้งหมดประกอบด้วย 13 หน่วยใหญ่ โดยแต่ละหน่วยมีจำนวนสไลด์และเวลาในวิดีโอประกอบ
- ช่วงต้นเน้นการปูแนวคิดพื้นฐานของ deep learning และ machine learning
- Introduction: จาก neural network สู่ deep learning, แอปพลิเคชันปัจจุบันและกรณีความสำเร็จ, พื้นฐานเทนเซอร์และ linear regression, เทนเซอร์มิติสูง, โครงสร้างภายในของเทนเซอร์
- Machine learning fundamentals: loss และ risk, overfitting และ underfitting, ปัญหา bias-variance, evaluation protocol, clustering และ embedding
- Multi-layer perceptron and back-propagation: perceptron, มุมมองเชิงความน่าจะเป็นของ linear classifier, linear separability, MLP, gradient descent, backpropagation
- ช่วงกลางขยับไปสู่การใช้งาน PyTorch รวมถึง layer และเทคนิคการเรียนรู้ของ deep learning
- Graphs of operators, autograd, and convolutional layers: เครือข่าย DAG, Autograd, โมดูล PyTorch และ batch processing, convolution, pooling, การเขียนโมดูล PyTorch
- Initialization and optimization: cross-entropy loss, stochastic gradient descent, PyTorch optimizer, penalty แบบ L2/L1, parameter initialization, การเลือกสถาปัตยกรรมและ training protocol, การเขียนฟังก์ชัน Autograd
- Going deeper: ข้อดีของความลึก, Rectifier, Dropout, Batch Normalization, Residual Network, การใช้ GPU
- ช่วงท้ายขยายไปสู่โมเดลเชิงกำเนิด, computer vision, การวิเคราะห์ภายในโมเดล และ sequence model
- Autoencoders: Transposed convolution, Deep Autoencoder, Denoising Autoencoder, Variational Autoencoder
- screencast ของ VAE ไม่ใช่เวอร์ชันล่าสุด จึงควรตรวจสอบสไลด์
- Computer vision: งานด้าน computer vision, เครือข่ายจำแนกรูปภาพ, เครือข่ายตรวจจับวัตถุ, เครือข่าย semantic segmentation, DataLoader และ neuro-surgery
- Under the hood: การดูพารามิเตอร์, การดู activation, การแสดงภาพการประมวลผลจากอินพุต, input optimization
- Autoregression and Normalizing Flows: autoregression, Causal convolution, Non-volume preserving network
- Generative Adversarial Networks: GAN, Wasserstein GAN, Conditional GAN และการแปลงภาพ, model persistence และ checkpoint
- Recurrent models and NLP: RNN, LSTM และ GRU, word embedding และการแปลภาษา
- Attention models: attention สำหรับหน่วยความจำและการแปล sequence, กลไก attention, Transformer Network
- screencast ของหน่วย attention ไม่ใช่เวอร์ชันล่าสุด จึงควรตรวจสอบสไลด์
- Autoencoders: Transposed convolution, Deep Autoencoder, Denoising Autoencoder, Variational Autoencoder
สื่อฝึกปฏิบัติและ Python prologue
- แบบฝึกปฏิบัติมีให้เป็น Practical 1~6 โดยแต่ละชุดลิงก์ไปยัง PDF และโค้ดเฉลย
- Python prologue สำหรับฝึกปฏิบัติมีให้ที่ dlc_practical_prologue.py
- prologue จัดการอาร์กิวเมนต์ command line
--full: ใช้ dataset ทั้งหมด--tiny: ใช้ dataset ขนาดเล็กมากเพื่อการตรวจสอบอย่างรวดเร็ว--seed SEED: กำหนด random seed หากต่ำกว่า 0 จะไม่ทำ seeding--cifar: ใช้ dataset CIFAR แทน MNIST--data_dir DATA_DIR: กำหนดตำแหน่งข้อมูล PyTorch ค่าเริ่มต้นคือ$PYTORCH_DATA_DIRหรือ./data
- ฟังก์ชัน
load_data(cifar=None, one_hot_labels=False, normalize=False, flatten=True)จะดาวน์โหลดข้อมูลเมื่อจำเป็น และหากflattenเป็นจริง จะแปลงภาพเป็นเวกเตอร์ 1 มิติ - ค่าที่คืนกลับคือเทนเซอร์สี่ตัว ได้แก่
train_data,train_target,test_data,test_target - หาก
cifar=Trueจะใช้ CIFAR10, หากเป็นFalseจะใช้ MNIST และหากเป็นNoneจะอิงตามอาร์กิวเมนต์--cifar - หาก
one_hot_labels=Trueจะเปลี่ยน target เป็นtorch.Tensorแบบ 2D ที่มีจำนวนคอลัมน์เท่ากับจำนวนคลาส โดยตั้งเฉพาะตำแหน่งคำตอบเป็น 1 และตำแหน่งอื่นเป็น -1 - หาก
normalize=Trueจะ normalize เทนเซอร์ข้อมูลโดยอิงค่าเฉลี่ยและความแปรปรวนของ training data - หาก
flatten=Trueข้อมูลจะเป็นเทนเซอร์ 2D รูปแบบN × Dและหากเป็นเท็จจะเป็นเทนเซอร์ 4D รูปแบบN × C × H × W - ตัวอย่างพื้นฐานใช้ MNIST และหากไม่มี
--fullจะลดขนาดเหลือ training 1,000 ตัวอย่างและ test 1,000 ตัวอย่าง โดย input size คือtorch.Size([1000, 784])
ความรู้พื้นฐานที่ต้องมีและเอกสารอ้างอิง
- ความรู้พื้นฐานที่ต้องมีครอบคลุมหัวข้อต่อไปนี้
- linear algebra: vector, matrix, Euclidean space
- differential calculus: Jacobian, Hessian, Chain rule
- การเขียนโปรแกรม Python
- พื้นฐาน probability และ statistics: การแจกแจงแบบไม่ต่อเนื่องและต่อเนื่อง, law of large numbers, conditional probability, Bayes, PCA
- พื้นฐาน optimization: แนวคิดเรื่อง minimum, gradient descent
- พื้นฐาน algorithms: computational cost
- พื้นฐาน signal processing: Fourier transform, wavelet
- สามารถดูเอกสาร Python, Jupyter notebook และ PyTorch เป็นเอกสารอ้างอิงได้
ไลเซนส์การใช้งาน
- สื่อของหน้าเว็บนี้เผยแพร่ภายใต้ Creative Commons BY-NC-SA 4.0 International License
- ระบุเงื่อนไขว่าอนุญาตให้ใช้เพื่อวัตถุประสงค์ทางการศึกษาทางวิชาการตามปกติ แต่จะไม่ใช้กับหนังสือ, YouTube ที่มีโฆษณาจำนวนมาก หรือโมเดลหารายได้อื่น ๆ
2 ความคิดเห็น
น่าเสียดายที่ไม่มีซับไตเติลในบทเรียน..
ความคิดเห็นจาก Hacker News
ช่อง YouTube ของ Stanford ก็น่าดูเช่นกัน มีอัปโหลดซีรีส์บรรยายแมชชีนเลิร์นนิงทั้งชุดไว้ 19 วิดีโอ
https://m.youtube.com/playlist?list=PLoROMvodv4rNyWOpJg_Yh4NSqI4Z4vOYy
ถ้าเข้าไปดูในช่องจะพบว่ามีวิชาวิทยาการคอมพิวเตอร์อัปโหลดไว้อีกค่อนข้างมาก และคุณภาพก็ดีด้วย
มีแหล่งข้อมูลดี ๆ ถูกแชร์ไว้เยอะ แต่เหมือนรายการนี้จะขาด Understanding Deep Learning ไป
ผมคิดว่า Simon J.D. Prince ทำงานได้ยอดเยี่ยมมากกับหนังสือเล่มนี้ ไม่ใช่แค่เนื้อหาหลักเท่านั้น แต่โน้ตท้ายแต่ละบทยังพาไปสู่เอกสารอ้างอิงขั้นสูงได้ทันที อีกทั้งยังมีแบบฝึกหัดที่ทดสอบความเข้าใจได้จริง และโน้ตบุ๊กชั้นเยี่ยมที่นำแนวคิดไปลงมือเขียนโค้ดจริงให้ดู
ถ้าจะสอนวิชาดีปเลิร์นนิง นี่ก็เหมาะมากในฐานะแบบฝึกหัดฟรีสำหรับให้นักศึกษา แต่ชุมชนนี้อาจไม่ใช่กลุ่มเป้าหมายหลักของมัน
[0] https://udlbook.github.io/udlbook/
ถ้าสนใจคอร์สนี้ ก็ควรลองดู Little Book of Deep Learning ของผู้เขียนคนเดียวกันด้วย
https://fleuret.org/francois/lbdl.html
อีกแหล่งหนึ่งที่ดีคือ คอร์สดีปเลิร์นนิงของ NYU โดย Yann LeCun และ Alfredo Canziani และสามารถดูครบทั้งชุดได้บน YouTube
https://atcold.github.io/NYU-DLSP20/
https://www.youtube.com/playlist?list=PLLHTzKZzVU9eaEyErdV26ikyolxOsz6mq
Practical Deep Learning for Coders ก็น่าสนใจเช่นกัน
https://course.fast.ai/
มีคอร์สเชิงลึกดี ๆ ที่ไม่จำเป็นต้องดูวิดีโอบ้างไหม?
ผมกำลังทำคอร์สที่ลดทฤษฎีลงเล็กน้อยและเพิ่มภาคปฏิบัติมากขึ้น: https://github.com/VikParuchuri/zero_to_gpt
วิดีโอทั้งหมดเป็นทางเลือก และครอบคลุมเนื้อหาเดียวกับข้อความ
ขอแนะนำชุดคอร์สนี้ของ Andrej Karpathy ด้วย คอร์สแรกค่อนข้างเข้าถึงง่ายแม้มองจากมุมของมือใหม่
https://karpathy.ai/zero-to-hero.html
คอร์สนี้ของ Sebastian Raschka ก็เข้าถึงง่ายโดยรวม ถ้าพอรู้ Python หรือภาษาใกล้เคียงอยู่บ้างก็เรียนตามได้
https://youtube.com/playlist?list=PLTKMiZHVd_2KJtIXOW0zFhFfBaJJilH51&si=ocsN2zSPN7YsrGiY
ในฐานะฟูลสแตกดีเวลอปเปอร์ที่ผ่านมาหลายปีแล้วและฝีมือเริ่มทื่อ ๆ ไปบ้าง ผมอยากลองเข้าสายนี้ดู แต่กะไม่ออกเลยว่าถ้าเรียน 6 เดือนจะพอให้เริ่มเข้าไปได้ในระดับหนึ่งไหม
ความชันตอนเริ่มต้นอาจไม่สูงเท่า แต่เวลารวมอาจนานกว่า จึงใกล้เคียงกับมาราธอนมากกว่าวิ่งระยะสั้น