මෙයට්රාන්ස්ෆෝමරයේ භාවිතා කරන ස්ථාන-නැණවත් පෝෂක ජාලයේ 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 Module44class 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)