docs/si/transformers/feed_forward.html
මෙයට්රාන්ස්ෆෝමරයේ භාවිතා කරන ස්ථාන-නැණවත් පෝෂක ජාලයේ PyTorch ක්රියාත්මක කිරීමයි.
FFNසම්පූර්ණයෙන්ම සම්බන්ධිත ස්ථර දෙකකින් සමන්විත වේ. සැඟවුණු ස්ථරයේ මානයන් ගණන dff, සාමාන්යයෙන් ටෝකනය කාවැද්දීම මෙන් හතර ගුණයක් පමණ dmodelවේ. එබැවින් එය යම් වේලාවක පුළුල් හා කොන්ත්රාත් ජාලය ලෙසද හැඳින්වේ.
සැඟවුණුස්ථරයේ සක්රිය කිරීමක් ඇති අතර එය සාමාන්යයෙන් RelU (නිවැරදි කරන ලද රේඛීය ඒකකය) සක්රිය කිරීමට සකසා ඇත, max(0,x)
එනම්, FFN ශ්රිතය යනු, FFN(x,W1,W2,b1,b2)=max(0,xW1+b1)W2+b2 b1 කොහේද W1W2, සහ b2 ඉගෙන ගත හැකි පරාමිතීන් වේ.
සමහරවිට GELU (Gaussian Error Linear Unit) සක්රිය කිරීම RelU වෙනුවට භාවිතා වේ. xΦ(x) කොහේද Φ(x)=P(X≤x),X∼N(0,1)
මෙය ගේට්ටු රේඛීය ඒකක (GLU) ඇතුළු විවිධ ප්රභේදයන්ට සහාය වන සාමාන්ය ක්රියාත්මක කිරීමකි. අපි මේවා පිළිබඳ අත්හදා බැලීම් ද ක්රියාත්මක කර ඇත්තෙමු:
38importtorch39fromtorchimportnnasnn4041fromlabml\_helpers.moduleimportModule
44classFeedForward(Module):
d_model යනු ටෝකන කාවැද්දීම තුළ ඇති විශේෂාංග ගණන
d_ff යනු FFN හි සැඟවුණු ස්ථරයේ ඇති ලක්ෂණ ගණන
dropout සැඟවුණු ස්තරය සඳහා අතහැර දැමීමේ සම්භාවිතාව
is_gated සැඟවුණු ස්තරය ගේට්ටු කර තිබේද යන්න නියම කරයි
bias1 පළමු පූර්ණ සම්බන්ධිත ස්ථරයට ඉගෙන ගත හැකි නැඹුරුවක් තිබිය යුතුද යන්න නිශ්චිතව දක්වා ඇත
bias2 දෙවන පූර්ණ සම්බන්ධිත ස්ථරයට ඉගෙන ගත හැකි නැඹුරුවක් තිබිය යුතුද යන්න නිශ්චිතව දක්වා ඇත
bias_gate ගේට්ටුව සඳහා පූර්ණ සම්බන්ධිත ස්තරය ඉගෙන ගත හැකි නැඹුරුවක් තිබිය යුතුද යන්න නිශ්චිතව දක්වා ඇත
49def\_\_init\_\_(self,d\_model:int,d\_ff:int,50dropout:float=0.1,51activation=nn.ReLU(),52is\_gated:bool=False,53bias1:bool=True,54bias2:bool=True,55bias\_gate:bool=True):
65super().\_\_init\_\_()
බර W1 හා නැඹුරුව අනුව පරාමිතිකරණය කරන ලද එක් ස්ථරය b1
67self.layer1=nn.Linear(d\_model,d\_ff,bias=bias1)
බර W1 හා නැඹුරුව අනුව පරාමිතිකරණය කරන ලද එක් ස්ථරය b1
69self.layer2=nn.Linear(d\_ff,d\_model,bias=bias2)
සැඟවුණුස්ථර හැලීම
71self.dropout=nn.Dropout(dropout)
සක්රියකිරීමේ කාර්යය f
73self.activation=activation
ගේට්ටුවක්තිබේද යන්න
75self.is\_gated=is\_gated76ifis\_gated:
ගේට්ටුවක්තිබේ නම්, ගේට්ටුවෙන් ගුණ කිරීම සඳහා යෙදවුම් පරිවර්තනය කිරීම සඳහා රේඛීය ස්තරය, බර V හා නැඹුරුව අනුව පරාමිතිකරණය කර ඇත c
79self.linear\_v=nn.Linear(d\_model,d\_ff,bias=bias\_gate)
81defforward(self,x:torch.Tensor):
f(xW1+b1)
83g=self.activation(self.layer1(x))
ගේට්ටුනම්, f(xW1+b1)⊗(xV+b)
85ifself.is\_gated:86x=g\*self.linear\_v(x)
එසේනොමැති
88else:89x=g
අතහැරදැමීම යොදන්න
91x=self.dropout(x)
(f(xW1+b1)⊗(xV+b))W2+b2 හෝ එය ගේට්ටු කර තිබේද යන්න මත f(xW1+b1)W2+b2 පදනම්ව
94returnself.layer2(x)