Transformer vs. ConvNet

--

วันนี้เจอเรื่องน่าสนใจจากเปเปอร์ A ConvNet for the 2020s เป็นการสู้กันระหว่างสองฝั่งในงาน Vision ใครจะชนะ ระหว่างฝ่ายนึงคือ ConvNet ผู้คร่ำหวอดในวงการ Vision และอีกฝ่ายคือน้องใหม่ Transformer ผู้ซึ่งย้ายมาจากค่าย NLP

เรื่องราวจะเป็นยังไงนั้น เชิญติดตามได้เลยค่ะ

แต่ก่อนที่จะเข้าสู่เนื้อหานั้น จะพูดถึงความแตกต่างระหว่างทั้งสองวิธีก่อนค่ะ

ConvNet

หรือ Convolutional Neural Network นั้น นำเอาการทำ Image Convolution มาประมวลผลข้อมูลสองมิติ แล้วสร้าง feature map ออกมา ซึ่งในแต่ละ layer ก็ประมวลผล feature map ที่ได้จากชั้นก่อนหน้าไปเป็นทอดๆ การทำ Image Convolution นั้นจะพิจารณาความสัมพันธ์ของพิกเซลบริเวณใกล้ๆ ในขนาดเท่ากับขนาดของ filter ฉะนั้นแต่ละพิกเซลของ feature map ในแต่ละ layer จึงพิจารณาหาความสัมพันธ์จากบริเวณใกล้เคียงเท่านั้น และเพื่อความเร็วในการคำนวณ ส่วนมากแล้ว filter จะมีขนาดเท่ากับ 3x3

Transformer

เป็นโครงสร้างที่นิยมมากใน NLP มีจุดขายคือการทำ Self-attention ซึ่งจะต้องแบ่งข้อมูลออกเป็นชิ้นย่อยๆก่อน สำหรับการใช้ใน NLP คือข้อมูลประโยคที่เข้ามาจะต้องถูกแบ่งออกเป็นคำๆ และสำหรับงาน vision นั้นข้อมูลจะถูกแบ่งออกเป็นพื้นที่เล็กๆที่เราเรียกว่า patch และนำเอาข้อมูลชิ้นเล็กเหล่านั้นมาเปรียบเทียบกันเองผ่าน dot product เพื่อโมเดลจะรู้ว่าควรจะโฟกัสที่ตรงไหน วิธีนี้มีข้อดีตรงที่ว่า แต่ละ patch ใน feature map ของแต่ละ layer จะมีการเปรียบเทียบหาความสัมพันธ์กับ patch อื่นๆทั้งภาพ รวมถึง input ที่ห่างจากกันมากๆด้วย

เปรียบเทียบระหว่าง 2 โครงสร้าง

Feature Map

ConvNet ได้ feature map จากการเปรียบเทียบกับ filter (ซึ่งมีได้เป็นร้อยเป็นพัน filter)

Transformer ได้ feature map จากการเปรียบเทียบกับ patch อื่นๆ

ความสัมพันธ์ในเชิงพื้นที่

ConvNet มีขอบเขตในการหาความสัมพันธ์ในบริเวณพิกเซลใกล้ๆเท่านั้น

Transformer มีขอบเขตในการหาความสัมพันธ์กับบริเวณทั้งภาพ

Resource ในการคำนวณ

Transformer มีการใช้ resource ในการคำนวณที่เพิ่มมาก (แบบ quadratic) หากภาพ input ทีขนาดใหญ่ขึ้น เมื่อเทียบกับ ConvNet

เปรียบเทียบ Vanila Transformer และ Vanila ConvNet(โมเดลที่ไม่ผ่านการปรับแต่งใดๆ)

ConvNet จะให้ผลดีกว่าหากมี dataset น้อย

Transformer จะให้ความแม่นยำที่สูงกว่าหากมี dataset จำนวนมากพอ

ตรงนี้พอบอกได้อย่างนึงว่า ด้วยโครงสร้างของ ConvNet จะสามารถตรวจจับ feature ที่เป็นประโยชน์ได้มากกว่า แต่ในขณะเดียวกันหากมี dataset ที่มากพอ การให้โมเดลเปรียบเทียบกันเองโดยใช้ Self-attention ก็จะทำให้ได้ผลลัพธ์ที่ดีกว่า

เอาละค่ะ พอทราบ background ของทั้งคู่แล้ว ทีนี้มาเริ่มกันได้เลยค่ะ

สำหรับในงานวิจัยชิ้นนี้ ผู้ท้าชิงคือ Resnet, เป็นตัวแทนของฝ่าย ConvNet และ Swin Transformer ซึ่งเป็นตัวแทนของฝ่าย Transformer และเป็นโครงสร้างที่ได้ปรับบปรุงจนมีความคล้ายกับกับ ConvNet

เนื่องจากตอนเริ่ม Swin Transformer ได้ชนะ Resnet ไปแล้ว เพราะเป็นวิธีที่เพิ่งตีพิมพ์ไปไม่นาน ผู้เขียนพยายามปูเรื่องราวว่า หากมีการนำเอา Resnet มาปัดฝุ่นให้ทันสมัยมากขึ้น ซึ่งจะแบ่งออกเป็น 6 หัวข้อการแปลงโฉม และขอเรียก Resnet ที่ปรับปรุงแล้วว่า ConvNeXt ผลที่ได้จะทำให้ ConvNeXt ชนะ Swin Transformer ได้หรือไม่

  1. Training Techniques

นอกจากการพยายามปรับเปลี่ยนโครงสร้างแล้ว กระบวนการเทรนก็มีส่วนสำคัญในการได้ model ที่มีความแม่นยำไม่น้อย ในงานชิ้นนี้จึงเริ่มจากปรับเปลี่ยนกระบวนการเทรนโมเดล Resnet ให้เหมือนกับการเทรน Transformer ในยุคใหม่ๆ โดยที่มีการ เพิ่ม epoch การเทรน, ใช้ AdamW เป็นตัว optimization, ทำ data augmentation แบบใหม่ๆ และใช้ regularization แบบทันสมัย ผลพบว่า สามารถเพิ่ม accuracy ได้ 2.7% กลายเป็น 78.8% ซึ่งถือว่าไม่น้อยเลยทีเดียว และผลลัพธ์นี้ก็เป็น baseline ใหม่ของโมเดลฝั่งตระกูล ConvNet

2. Macro Design

2.1 Changing stage compute ratio คือการปรับจำนวน block ในแต่ละ stage ของ Resnet จากเดิม (3, 4, 6, 3) ให้กลายเป็น (3, 3, 9, s3) ซึ่งให้มีอัตราส่วนคล้ายกับของ Swin-T ที่มีอัตราส่วนเป็น 1:1:3:1 และพบว่าผลลัพธ์ดีขึ้นจาก 78.8% เป็น 79.4%

2.2 Changing stem to “Patchify” คือการปรับการ process input image ตั้งแต่ตอนเริ่มต้น และมีในโครงสร้างแบบ Transformer ซึ่งจากเดิม Resnet ใช้ 7×7 convolution layer with stride 2 ตามด้วย max pool ได้ผลลัพธ์ 4× downsampling จาก input image เปลี่ยนมาเป็นการ process แบบ patch คือไม่มีการ process แบบ overlap สุดท้ายจึงได้ 4×4, stride 4 convolutional layer ได้ผลลัพธ์ดีขึ้นจาก 79.4% to 79.5%

3. ResNeXt-ify

ใช้ idea ของ ResNext ซึ่งเป็น Resnet เวอร์ชั่นใหม่ๆ มาแปลงโฉมของเก่าให้ดีขึ้น โดยการทำ depthwise convolution คือแทนที่จะทำ convoltion ในเชิงพื่นที่ที่เป็นมิติของ กว้างxยาว เป็นการมาทำ convolution ในมิติของ channel แทน depthwise convolution มีความคล้ายคลึงกับ weighted sum operation ของ self-attention ในแต่ละ channel ซึ่งการทำ depthwise convolution นี้นอกจากจะลด process การคำนวณแล้ว ยังสามารถเพิ่ม accuracy ได้ด้วย ณ ตอนนี้ นอกจากทำ depthwise convolution แล้ว ก็ยังเพิ่ม channel ให้เท่ากับ Swin Transformer ซึ่งตอนนี้ accuracy อยู่ที่ 80.5% แล้วค่ะ

4. Inverted Bottleneck

เปลี่ยนดีไซน์ของการเรียงลำดับจำนวน channel ของแต่ละ layer ใน 1 block โดยที่ layer กลางมีจำนวน channel มากกว่า layer แรกประมาณ 4 เท่า (รูปที่ 1a, 1b)ซึ่งค้นพบโดยทั่วไปใน design ของ Transformer และสามารถให้ผลลัพธ์ที่ดีขึ้นจาก 80.5% เป็น 80.6%

รูปที่ 1: a และ b คือสลับจำนวน channel ของสอง layer แรกส่วนรูป c นั้นสลับเอา layer ของ depthwise convolution มาก่อน

5. Large Kernel Sizes

5.1 Moving up depthwise conv layer เนื่องจากต้องการขยายขนาด kernel จึงจำเป็นต้องเลื่อน depthwise convolution มาก่อน (รูป 1c) เพื่อที่จะได้ลดจำนวน channel ที่จะต้องใช้ kernel ขนาดใหญ่มา process ตรงนี้ accuracy ลดลงชั่วคราวเป็น 79.9%

5.2 Increasing the kernel size ผู้วิจัยได้ทำทดลองกับ kernel size ที่ 3,5,7,9,11 และพบว่า accuracy ไม่ได้เพิ่มขึ้นแล้วหลังจากขนาด kernel ที่ 7x7 ฉะนั้นจึงเลือกใช้ kernel size ขนาด 7x7 และได้ accuracy กลับมา จาก 79.9% เป็น 80.6%

6. Micro Design

ในหัวข้อนี้ เป็นการเปลี่ยน design เล็กๆน้อยๆในแต่ละ layer ดังนี้ (รายละเอียดสามารถอ่านในเปเปอร์)

6.1 Replacing ReLU with GELU → accuracy เป็น 80.6%

6.2 Fewer activation functions → accuracy เป็น 81.3%

6.3 Fewer normalization layers → accuracy เป็น 81.4% **ชนะ Swin Transformer แล้ววว เย้!!

6.4 Substituting BN with LN → accuracy เป็น 81.5%.

6.5 Separate downsampling layers → accuracy เป็น 82.0%

ในความเป็นจริงแล้ว design ที่สำคัญบางอย่างของ Transformer ได้ถูกใช้ใน ConvNet เวอร์ชั่นปรับปรุง และที่น่าสนใจคือทำให้ accuracy เพิ่มสูงขึ้นจากเดิมอย่างมีนัยยะสำคัญ

และสุดท้าย ผลลัพธ์คือ…

รูปที่ 2: ผลลัพธ์ของแต่ละขั้นตอน

จากรูปที่ 2 ConvNeXt คือ Resnet เวอร์ชั่นปรับปรุงแล้ว และในรูปมีการปรียบเทียบโมเดลขนาดเล็กและขนาดใหญ่ นั่นคือ Resnet-50 vs. (สีม่วงและสีส้ม) Swin-T และ Resnet-200 vs. Swin-B (สีเทา)

รูปที่ 3 รายละเอียดโครงสร้างในแต่ละ layer

จากรูปที่ 3 จะเห็นว่าผู้วิจัยได้พยายามทำให้โมเดลมีจำนวนการคำนวณ(FLOPs) และจำนวนพารามิเตอร์ พอๆกัน

บทสรุป

เมื่อนำเอา ConvNets มาปัดฝุ่นใหม่ โดยที่ไม่ได้ใช้ design ใหม่แต่อย่างใด และหลาย design ก็นำมาจาก Transformer สามารถทำให้วิธีที่ใช้ Convolution มี accuracy ที่ดีกว่า transformer ได้

Reference

Z. Liu, H. Mao, C. -Y. Wu, C. Feichtenhofer, T. Darrell and S. Xie, “A ConvNet for the 2020s,” CVPR 2022, https://arxiv.org/abs/2201.03545

ความเห็นจากผู้เขียน blog

Transformer และ ConvNet ต่างก็มีจุดเด่นจุดด้อยต่างกัน ส่วนตัวแล้วไม่ได้มองว่าวิธีไหนจะดีกว่า เพราะการนำไปใช้งานจริงนั้น บางทีก็ขึ้นอยู่กับ dataset หรือปัญหาของเราด้วย ซึ่งไม่ได้การันตีว่าจะให้ผลเหมือนกัน หากเปรียบเทียบ Transformer และ ConvNet เหมือนตัวละครในเกมส์ ก็เหมือนตัวละครที่ถนัดกันคนละสาย ฉะนั้นเราจึงต้องมีการปรับ design หรือนั่นคือซื้ออาวุธมาติดให้ตัวละครได้อย่างเหมาะสม เสริมจุดเด่นช่วยลดจุดด้อย ก็จะทำให้ตัวละครนั้น ฉายความสามารถออกมาได้เต็มที่ค่ะ

สำหรับตอนนี้ก็จบเพียงเท่านี้ ถ้ายังไม่เคลียร์ก็คอมเม้นถามกันเข้ามาได้ค่ะ

แล้วพบกันตอนหน้าค่ะ

สามารถติดตามกันได้ที่

Facebook: AI แบบเคลียร์ ตีแผ่ทุกไอเดียเบื้องหลังสมการ

Tiktok: ai.beeying

Youtube: AI แบบเคลียร์ๆ

--

--

AI แบบเคลียร์

จากไอเดียสู่สมการ จากสมการสู่โค้ด จากโค้ดสู่โซลูชั่นการใช้งานจริง