ස්ථාන-නැණවත්පෝෂක-ඉදිරි ජාලය (FFN)

මෙයට්රාන්ස්ෆෝමරයේ භාවිතා කරන ස්ථාන-නැණවත් පෝෂක ජාලයේ PyTorch ක්රියාත්මක කිරීමයි.

FFNසම්පූර්ණයෙන්ම සම්බන්ධිත ස්ථර දෙකකින් සමන්විත වේ. සැඟවුණු ස්ථරයේ මානයන් ගණන , සාමාන්යයෙන් ටෝකනය කාවැද්දීම මෙන් හතර ගුණයක් පමණ වේ. එබැවින් එය යම් වේලාවක පුළුල් හා කොන්ත්රාත් ජාලය ලෙසද හැඳින්වේ.

සැඟවුණුස්ථරයේ සක්රිය කිරීමක් ඇති අතර එය සාමාන්යයෙන් RelU (නිවැරදි කරන ලද රේඛීය ඒකකය) සක්රිය කිරීමට සකසා ඇත,

එනම්, FFN ශ්රිතය යනු, කොහේද , සහ ඉගෙන ගත හැකි පරාමිතීන් වේ.

සමහරවිට GELU (Gaussian Error Linear Unit) සක්රිය කිරීම RelU වෙනුවට භාවිතා වේ. කොහේද

ගේට්ටුරේඛීය ඒකක

මෙය ගේට්ටු රේඛීය ඒකක (GLU) ඇතුළු විවිධ ප්රභේදයන්ට සහාය වන සාමාන්ය ක්රියාත්මක කිරීමකි. අපි මේවා පිළිබඳ අත්හදා බැලීම් ද ක්රියාත්මක කර ඇත්තෙමු:

38import torch
39from torch import nn as nn
40
41from labml_helpers.module import Module

FFNමොඩියුලය

44class FeedForward(Module):
  • d_model යනු ටෝකන කාවැද්දීම තුළ ඇති විශේෂාංග ගණන
  • d_ff යනු FFN හි සැඟවුණු ස්ථරයේ ඇති ලක්ෂණ ගණන
  • dropout සැඟවුණු ස්තරය සඳහා අතහැර දැමීමේ සම්භාවිතාව
  • is_gated සැඟවුණු ස්තරය ගේට්ටු කර තිබේද යන්න නියම කරයි
  • bias1 පළමු පූර්ණ සම්බන්ධිත ස්ථරයට ඉගෙන ගත හැකි නැඹුරුවක් තිබිය යුතුද යන්න නිශ්චිතව දක්වා ඇත
  • bias2 දෙවන පූර්ණ සම්බන්ධිත ස්ථරයට ඉගෙන ගත හැකි නැඹුරුවක් තිබිය යුතුද යන්න නිශ්චිතව දක්වා ඇත
  • bias_gate ගේට්ටුව සඳහා පූර්ණ සම්බන්ධිත ස්තරය ඉගෙන ගත හැකි නැඹුරුවක් තිබිය යුතුද යන්න නිශ්චිතව දක්වා ඇත
  • 49    def __init__(self, d_model: int, d_ff: int,
    50                 dropout: float = 0.1,
    51                 activation=nn.ReLU(),
    52                 is_gated: bool = False,
    53                 bias1: bool = True,
    54                 bias2: bool = True,
    55                 bias_gate: bool = True):
    65        super().__init__()

    බර හා නැඹුරුව අනුව පරාමිතිකරණය කරන ලද එක් ස්ථරය

    67        self.layer1 = nn.Linear(d_model, d_ff, bias=bias1)

    බර හා නැඹුරුව අනුව පරාමිතිකරණය කරන ලද එක් ස්ථරය

    69        self.layer2 = nn.Linear(d_ff, d_model, bias=bias2)

    සැඟවුණුස්ථර හැලීම

    71        self.dropout = nn.Dropout(dropout)

    සක්රියකිරීමේ කාර්යය

    73        self.activation = activation

    ගේට්ටුවක්තිබේද යන්න

    75        self.is_gated = is_gated
    76        if is_gated:

    ගේට්ටුවක්තිබේ නම්, ගේට්ටුවෙන් ගුණ කිරීම සඳහා යෙදවුම් පරිවර්තනය කිරීම සඳහා රේඛීය ස්තරය, බර හා නැඹුරුව අනුව පරාමිතිකරණය කර ඇත

    79            self.linear_v = nn.Linear(d_model, d_ff, bias=bias_gate)
    81    def forward(self, x: torch.Tensor):

    83        g = self.activation(self.layer1(x))

    ගේට්ටුනම්,

    85        if self.is_gated:
    86            x = g * self.linear_v(x)

    එසේනොමැති

    88        else:
    89            x = g

    අතහැරදැමීම යොදන්න

    91        x = self.dropout(x)

    හෝ එය ගේට්ටු කර තිබේද යන්න මත පදනම්ව

    94        return self.layer2(x)