Tensor — Data Structure of Deep Learning

jeew
botnoi-classroom
Published in
3 min readNov 25, 2019

สวัสดีครับ นี่ก็เป็น ​Medium post อันแรกของผมครับ วางแผนไว้ว่าจะเขียนให้ได้สองเดือนต่อบทความ อาจจะเกี่ยวกับ Machine Learning บ้าง Deep Learning บ้าง หรือเรื่องอื่น ๆ ที่คิดแล้วว่ามีประโยชน์กับผู้อ่านครับ

บทความแรกนี้เหมาะอย่างยิ่งสำหรับผู้ที่สนใจศาสตร์แห่ง Deep Learning ครับ

สำหรับคนที่ยังไม่รู้ว่า Deep Learning นี่มันคืออะไรนะครับ ก็แนะนำให้อ่านบทความนี้ดูครับ

ส่วนในบทความนี้ผมก็อยากจะอธิบายถึงคอนเซปต์พื้นฐานที่เป็นหัวใจสำคัญของ Deep Learning เลยนั่นก็คือ Tensor

Introduction

ในการแสดงข้อมูลทุกประเภทไม่ว่าจะเป็น รูปภาพ, ข้อความ, เสียง, อายุ, เพศ, น้ำหนัก, รายได้, และอื่น ๆ ให้คอมพิวเตอร์สามารถรับรู้ได้นั้นล้วนแต่ต้องแปลงข้อมูลเหล่านี้ให้เป็นตัวเลขทั้งสิ้น ตัวอย่างเช่น

  • อายุของคน ๆ นึงเราสามารถแทนได้ด้วยตัวเลขเพียงแค่หนึ่งตัว เช่น อายุของคุณป้าคือ 61 ปี

ทีนี้ถ้าเกิดเราจะแสดงอายุและน้ำหนักของคุณป้าหล่ะ เราไม่สามารถแสดงให้เป็นตัวเลขเพียงหนึ่งตัวได้แล้ว ต้องใช้ตัวเลข 2 ตัว เช่น

  • คุณป้าอายุ 61 ปี น้ำหนัก 50 กิโลกรัม

ถัดมาถ้าเกิดเราอยากจะแสดงอายุและน้ำหนักของคุณป้าและคุณยายหล่ะ ต้องใช้ตัวเลขกี่ตัว? คำตอบก็คือ 4 แต่ว่า คุณป้ากับคุณยายไม่ใช่คนเดียวกัน ดังนั้นเราจึงแสดงตัวเลข 4 ตัวนี้ในแบบที่ให้คอมพิวเตอร์สามารถแยกแยะได้อีกว่ามันเป็นอายุและนำ้หนักและอายุของคน คนละคนกันนะ เราจึงต้องมีโครงสร้างบางอย่างเพื่อให้ข้อมูลเหล่านี้ถูกเข้าใจได้โดยคอมพิวเตอร์ได้อย่างเหมาะสมและสามารถใช้ได้กับข้อมูลทุกประเภท

Terminology

ถ้าเกิดยังจำกันได้สมัยเรียนในวิชาที่เกี่ยวข้องกับคณิตศาสตร์เราจะคุ้นกับคำเหล่านี้

  • Scalar
  • Vector
  • Matrix

หรือว่าใครที่มาจากสายคอมพิวเตอร์ก็คงจะเป็นคำเหล่านี้

  • Integer/Float
  • Array
  • 2D-Array

ซึ่งจริง ๆ แล้วสิ่งเหล่านี้เนี่ยมันมีบางสิ่งที่สัมพันธ์กันอยู่ถึงแม้ว่าแต่ละสายจะเรียกต่างกันก็จริงซึ่งก็คือ จำนวนตัวเลขที่ต้องใช้ในการเข้าถึงตัวเลขภายในสิ่งเหล่านี้หรือพูดง่าย ๆ ก็คือจำนวน Index ที่ต้องใช้นั้นเองเช่น

  • Scalar กับ Integer/Float เวลาเราจะเข้าถึงตัวเลขภายในเราไม่จำเป็นต้องใช้ Index เลย หรือพูดอีกนัยนึงก็คือใช้ Index 0 ตัว
  • Vector กับ Array เวลาเราจะเข้าถึงตัวเลขภายในเราจำเป็นต้องใช้ Index 1 ตัว
  • Matrix กับ 2D-Array เวลาเราต้องการเข้าถึงตัวเลขภายในเราจำเป็นต้องใช้ Index 2 ตัว

คำเหล่านี้แหละเป็นตัวอย่างหนึ่ง ๆ ในคอนเซปต์ที่อยู่ในรูปทั่วไปเรียกว่า Tensor ซึ่งจะอธิบายใน Section ถัดไป

What is Tensor?

Tensor คือ โครงสร้างของข้อมูล (Data Structure) ที่อธิบาย Scalar, Vector, Matrix, Array ได้ในรูปทั่วไปและในมิติที่สูงขึ้นได้ ยกตัวอย่างเช่น

  • Vector หรือ 1d-Array จริง ๆ ก็คือ 1d-Tensor
  • Matrix หรือ 2d-Array จริง ๆ มันก็คือ 2d-Tensor
  • แต่เมื่อมิติตั้งแต่ 3 ขึ้นไป เราจะเลิกตั้งชื่อใหม่ แต่จะเรียกมันว่า nd-Tensor แทนนั่นเองโดย n แทนด้วยตัวเลขจำนวนมิติ (Dimension)

ด้วยความที่มนุษย์นั้นมีความสามารถรับรู้ได้เพียงแค่ 3 มิติดังนั้นเพื่อให้เราสามารถจินตนาการได้ว่า Tensor มันมีรูปร่างเป็นอย่างไรได้นั้น ให้ลองนึกภาพตามว่าเรากำลังจะจัดเก็บข้อมูลที่เป็นรูปภาพสี RGB หลาย ๆ รูปเป็นสิ่งของสิ่งเดียวไว้ในคอมพิวเตอร์ได้อย่างไร

ก่อนอื่นเราต้องเข้าใจก่อนว่ารูปขาวดำหนึ่งรูปนั่นสามารถเก็บเป็น Matrix หรือว่า 2d-Tensor ของค่า Pixel (0–255) ได้

Source: https://medium.com/@ageitgey/machine-learning-is-fun-part-3-deep-learning-and-convolutional-neural-networks-f40359318721

โดยที่มิติแรกก็คือความสูง (แนวตั้ง) มิติที่สองคือความกว้าง (แนวนอน)

ที่นี้ถ้าเป็นรูปสี RGB เราจำเป็นต้องมีมิติที่ 3 เพิ่มขึ้นมาเพื่อเก็บค่า Pixel ของค่าสีแดง R, สีเขียว Green, สีน้ำเงิน B นั่นคือรูปสีของเราจริง ๆ แล้วก็คือ 3d-Tensor ที่มีมิติคือ (Color Channel, ความกว้าง, ความยาว) นั่นเอง

Source: https://lisaong.github.io/mldds-courseware/01_GettingStarted/numpy-tensor-slicing.slides.html

ทีนี้พอเรารู้ว่ารูปสี RGB สามารถเก็บเป็น 3d-Tensor ได้ แล้วถ้าเรามีรูปสี RGB หลาย ๆ รูปหล่ะเราจะเก็บยังไง คำตอบก็คือ เราจะเก็บเป็น 4d-Tensor นั่นเองโดยมิติที่ 4 ก็คือมิติของจำนวนรูป

จากตัวอย่างที่อธิบายการเก็บรูปภาพสี RGB หลาย ๆ รูปด้านบนเราจะสังเกตได้ว่ารูปภาพสีหลาย ๆ รูปถูกจัดเก็บได้เป็น 4d-Tensor ที่รวบรวมรูปภาพสีที่เป็น 3d-Tensor โดยในหนึ่งรูปก็จะมี Color Channel ที่เป็น 2d-Tensor และในหนึ่ง Color Channel ก็จะรวบรวมค่า Pixel แนวนอนและแนวตั้ง ที่เป็น 1d-Tensor นั่นเอง

Rank, Axes, Shape

Rank, Axes, Shape เป็นคุณลักษณะ (Attribute) ของ Tensor ที่สามารถทำให้เราจินตนาการได้คร่าว ๆ ว่า Tensor นั้น ๆ มันมีรูปร่างเป็นอย่างไร

Rank

Rank ของ Tensor คือจำนวนมิติ (Dimension) ของ Tensor นั่นเอง สมมติเรามี 2d-Tensor เราก็สามารถรู้ทันทีว่ากำลังพูดถึง Matrix, 2D-Array ซึ่งมี Rank เท่ากับ 2 นั่นเอง อีกทั้ง Rank เป็นตัวเลขที่บอกได้ว่าเราต้องใช้ Index กี่ตัวในการเข้าถึงตัวเลขภายใน Tensor นั้น ๆ

Axes

Axes คือ แกนของ Tensor ซึ่งมีจำนวนเท่ากับจำนวน Rank หรือ Dimension ซึ่ง Axes จะเป็นตัวบอกว่าใน Dimension นั้น ๆ มีความยาวเท่าไหร่ เช่นจากตัวอย่างรูปภาพด้านบน Axes ของมิติ Color Channel มีขนาดเท่ากับ 3, Axes ของมิติจำนวนรูปภาพ มีขนาดเท่ากับจำนวนรูปภาพ เป็นต้น

Shape

Shape เป็นสิ่งที่บ่งบอกว่า Tensor มีรูปร่างอย่างไร เป็นสิ่งที่รวบรวมความยาวของ Axes ของแต่ละมิตินั่นเอง จากตัวอย่างด้านบนสมมติว่า เรามีรูปภาพสีอยู่ 64 รูป โดยแต่ละรูปมีขนาด 28x28 pixel Shape ของ Tensor ที่แทนรูปภาพเหล่านี้ก็จะเป็น

(64, 3, 28, 28)

หรือก็คือ (64 รูปภาพ, 3 Color Channel, สูง 28 pixel, กว้าง 28 pixel)

ก็จบไปแล้วนะครับสำหรับบทความนี้ หลาย ๆ คงคนจะงงว่า Tensor มันจะเอาไปทำอะไรต่อ รู้แล้วได้อะไร ผมก็จะขอเกริ่นคร่าว ๆ ดังนี้คือ เวลาที่ยุ่งกับ Deep Learning โมเดลต่าง ๆ เนี่ยไม่ว่าจะเป็นการเทรน หรือเวลาการเอาไปใช้จริงเนี่ย Input และ Output ของมันล้วนแต่เป็น Tensor ทั้งหมดนั่นเอง

ในบทความนี้จะเห็นว่าจะยังไม่มี Code ใด ๆ ทั้งสิ้นนะครับ เพราะว่า บทความนี้ผมต้องการที่จะอธิบายคอนเซปต์เท่านั้น ส่วนไหนที่เป็น Code หรือว่าใช้ Code อธิบายเช่นเรื่อง Framework ที่ใช้สร้าง Tensor, Tensor Operation จะขอยกไว้เป็นของบทความต่อ ๆ ไปก็แล้วกันครับ

ผมก็หวังว่าผู้อ่านคงจะเข้าใจเกี่ยวกับ Tensor มากขึ้นนะครับ Tensor เป็นโครงสร้างของข้อมูลที่เป็นเสาหลักของ Deep Learning เลยไม่ว่าจะเป็นข้อมูลแบบไหน รูปภาพ, เสียง, ข้อความ, ตาราง, Weight ใน Layer ของ Network ล้วนแต่จะถูกจัดเก็บเป็น Tensor ได้ทั้งหมด

สนใจเรียน Data science -> Botnoi Classroom

สนใจใช้บริการในสร้างแชทบอท หรือให้คำปรึกษาเกี่ยวกับ AI & data science ติดต่อได้ผ่านเวป -> Botnoi และ FB Page Botnoi Consulting

--

--