Complex Layers (Attention, Residual Blocks) তৈরি

Custom Layers এবং Activation Functions - টেন্সরফ্লো (TensorFlow) - Machine Learning

244

Complex Layers যেমন Attention এবং Residual Blocks মডেলটির ক্ষমতা বাড়ানোর জন্য আধুনিক ডিপ লার্নিং মডেলগুলিতে ব্যবহৃত অত্যন্ত শক্তিশালী কৌশল। এগুলি টেনসরফ্লো বা পাইটর্চের মতো লাইব্রেরিতে ব্যবহার করা হয় এবং বিভিন্ন ধরনের ডিপ লার্নিং আর্কিটেকচারে (যেমন Transformer, ResNet) ব্যাপকভাবে ব্যবহৃত।

এখানে, আমরা Attention Layer এবং Residual Block তৈরি করার পদ্ধতি ব্যাখ্যা করবো:


1. Attention Layer

Attention মেকানিজম হল একটি শক্তিশালী কৌশল যা ইনপুট ডেটার বিভিন্ন অংশের ওপর গুরুত্ব দেয় (importance)। এটি মূলত sequence-to-sequence মডেলে ব্যবহৃত হয়, যেমন ট্রান্সফর্মার (Transformer) মডেল, যেখানে একটি অংশ ইনপুটের গুরুত্বপূর্ণ তথ্যের ওপর ফোকাস করে। সাধারণত Scaled Dot-Product Attention ব্যবহৃত হয়।

Attention Mechanism Formula:

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V

এখানে,

  • QQ হল Query,
  • KK হল Key,
  • VV হল Value,
  • dkd_k হল key vector এর দৈর্ঘ্য।

TensorFlow এ Attention Layer তৈরি:

import tensorflow as tf
from tensorflow.keras.layers import Layer

class AttentionLayer(Layer):
    def __init__(self, d_model):
        super(AttentionLayer, self).__init__()
        self.d_model = d_model
    
    def build(self, input_shape):
        # Create weight matrices for Q, K, and V
        self.WQ = self.add_weight("WQ", shape=(self.d_model, self.d_model))
        self.WK = self.add_weight("WK", shape=(self.d_model, self.d_model))
        self.WV = self.add_weight("WV", shape=(self.d_model, self.d_model))
        
    def call(self, inputs):
        Q, K, V = inputs

        # Calculate QK^T
        Q = tf.matmul(Q, self.WQ)
        K = tf.matmul(K, self.WK)
        V = tf.matmul(V, self.WV)

        attention_scores = tf.matmul(Q, K, transpose_b=True)
        scaled_attention_scores = attention_scores / tf.math.sqrt(tf.cast(self.d_model, tf.float32))

        attention_weights = tf.nn.softmax(scaled_attention_scores, axis=-1)
        output = tf.matmul(attention_weights, V)
        
        return output, attention_weights

ব্যাখ্যা:

  • এই Attention Layer তিনটি ইনপুট নেয়: Query, Key, এবং Value
  • এটি স্কেলড ডট-প্রোডাক্ট অ্যাটেনশন ব্যবহার করে, যেখানে Q, K, এবং V ইনপুট ডেটা মেট্রিক্স গুন করা হয় এবং আউটপুট প্রদান করা হয়।

2. Residual Block

Residual Block এর মূল ধারণা হল ইনপুট এবং আউটপুটের মধ্যে skip connection বা shortcut connection যোগ করা, যাতে মডেলটি প্রশিক্ষণের সময় আরো সহজে শিখতে পারে। এটি ResNet (Residual Networks) এর মডেল আর্কিটেকচারে ব্যবহৃত হয় এবং ডিপ লার্নিং মডেলের গেটওয়ে হিসেবে কার্যকর।

Residual Block Formula:

Output=Activation(F(x)+x)\text{Output} = \text{Activation}(F(x) + x)

এখানে,

  • F(x)F(x) হল লেয়ার বা ট্রান্সফরমেশন, যা ইনপুট xx-এর ওপর প্রয়োগ করা হয়,
  • xx হল ইনপুট,
  • Activation\text{Activation} হল সাধারণত ReLU বা অন্য Activation Function।

TensorFlow এ Residual Block তৈরি:

from tensorflow.keras.layers import Layer, Conv2D, BatchNormalization, ReLU

class ResidualBlock(Layer):
    def __init__(self, filters, kernel_size=3, stride=1):
        super(ResidualBlock, self).__init__()
        self.filters = filters
        self.kernel_size = kernel_size
        self.stride = stride
        
        self.conv1 = Conv2D(self.filters, self.kernel_size, strides=self.stride, padding='same')
        self.bn1 = BatchNormalization()
        self.relu1 = ReLU()

        self.conv2 = Conv2D(self.filters, self.kernel_size, strides=self.stride, padding='same')
        self.bn2 = BatchNormalization()

        # Skip connection for matching dimensions
        self.skip_connection = Conv2D(self.filters, 1, strides=self.stride, padding='same') if self.filters != self.filters else lambda x: x

    def call(self, inputs):
        x = inputs
        shortcut = self.skip_connection(x)

        # First convolution
        x = self.conv1(x)
        x = self.bn1(x)
        x = self.relu1(x)

        # Second convolution
        x = self.conv2(x)
        x = self.bn2(x)

        # Adding the skip connection
        x += shortcut
        x = self.relu1(x)  # Apply activation after adding residual

        return x

ব্যাখ্যা:

  • Residual Block দুটি কনভোলিউশনাল লেয়ার নিয়ে গঠিত, যেখানে প্রতিটি কনভোলিউশনের পরে Batch Normalization এবং ReLU অ্যাক্টিভেশন ফাংশন ব্যবহৃত হয়।
  • Skip Connection ইনপুট এবং আউটপুট যোগ করার মাধ্যমে মূল ইনপুটে রেসিডুয়াল যোগ করে, যা মডেলটিকে প্রশিক্ষণের সময় দ্রুত শিখতে সাহায্য করে।

সংক্ষেপ

  • Attention Layer: এটি বিভিন্ন ইনপুট অংশের উপর গুরুত্ব প্রদান করতে ব্যবহৃত হয়। Transformer আর্কিটেকচারে এই কৌশল ব্যাপকভাবে ব্যবহৃত হয়, যা sequence-to-sequence টাস্কে কার্যকরী।
  • Residual Block: এটি ইনপুটের সাথে আউটপুটের যোগফল করে (skip connection) মডেলকে দ্রুত শিখতে সাহায্য করে এবং গভীর নিউরাল নেটওয়ার্কে ব্যবহার করা হয়, যেমন ResNet আর্কিটেকচারে।

এই দুটি কৌশলই আধুনিক ডিপ লার্নিং মডেলকে আরও কার্যকরী এবং স্কেলেবল করে তোলে, বিশেষত জটিল ও গভীর নেটওয়ার্কগুলিতে।

Content added By
Promotion

Are you sure to start over?

Loading...