docs/si/normalization/layer_norm/index.html
[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/normalization/layer_norm/ init.py)
මෙය ස්ථර සාමාන්යකරණය කිරීමේ PyTorch ක්රියාත්මක කිරීමයි.
ස්ථරසාමාන්යකරණය යනු පුළුල් පරාසයක සැකසුම් මත ක්රියා කරන සරල සාමාන්යකරණ ක්රමයකි. ස්ථර සාමාන්යකරණය මඟින් යෙදවුම් අංග හරහා ශුන්ය මධ්යන්යය සහ ඒකක විචලතාව ඇති බවට පරිවර්තනය කරයි. කණ්ඩායම්සාමාන්යකරණය එක් එක් මූලද්රව්යය සඳහා ශුන්ය මධ්යන්යය සහ ඒකක විචලතාව නිවැරදි කරන බව සලකන්න. ස්ථරයසාමාන්යකරණය සියලු අංග හරහා එක් එක් කණ්ඩායම සඳහා එය කරන්නේ.
ස්ථරසාමාන්යකරණය සාමාන්යයෙන් එන්එල්පී කාර්යයන් සඳහා භාවිතා වේ.
ට්රාන්ස්ෆෝමර් ක්රියාත්මක කිරීම්බොහොමයක ස්ථර සාමාන්යකරණය අපි භාවිතා කර ඇත්තෙමු.
35fromtypingimportUnion,List3637importtorch38fromtorchimportnn,Size3940fromlabml\_helpers.moduleimportModule
ස්ථර LN සාමාන්යකරණය පහත X පරිදි ආදානය සාමාන්යකරණය කරයි:
X∈RB×C ආදානය කාවැද්දීම් සමූහයක් B වන විට, කණ්ඩායම් ප්රමාණය කොතැනද සහ විශේෂාංග ගණන C වේ. γ∈RC සහ β∈RC. LN(X)=γCVar[X]+ϵX−CE[X]+β
ආදානය X∈RL×B×C යනු කාවැද්දීම් අනුක්රමයක කාණ්ඩයක් B වන විට, කණ්ඩායම් ප්රමාණය කොතැනද, නාලිකා ගණන, දිග L වේ C අනුක්රමය. γ∈RC සහ β∈RC. LN(X)=γCVar[X]+ϵX−CE[X]+β
X∈RB×C×H×W ආදානය රූප නිරූපණ සමූහයක් B වන විට, කණ්ඩායම් ප්රමාණය කොතැනද, C නාලිකා ගණන, H උස සහ W පළල වේ. මෙය බහුලව භාවිතා වන අවස්ථාවක් නොවේ. γ∈RC×H×W සහ β∈RC×H×W. LN(X)=γC,H,WVar[X]+ϵX−C,H,WE[X]+β
43classLayerNorm(Module):
normalized_shapeS යනු මූලද්රව්යවල හැඩය (කණ්ඩායම හැර). ආදානය පසුව විය යුතුය X∈R∗×S[0]×S[1]×...×S[n]eps සංඛ්යාත්මක ස්ථායිතාව Var[X]+ϵ සඳහා භාවිතා වේ ϵelementwise_affine සාමාන්යකරණය කළ අගය පරිමාණය කර මාරු කළ යුතුද යන්නයිPyTorch LayerNorm ක්රියාත්මක කිරීම වැනි තර්ක සඳහා එකම නම් භාවිතා කිරීමට අපි උත්සාහ කර ඇත්තෙමු.
72def\_\_init\_\_(self,normalized\_shape:Union[int,List[int],Size],\*,73eps:float=1e-5,74elementwise\_affine:bool=True):
84super().\_\_init\_\_()
බවටපරිවර්තනය normalized_shape කරන්න torch.Size
87ifisinstance(normalized\_shape,int):88normalized\_shape=torch.Size([normalized\_shape])89elifisinstance(normalized\_shape,list):90normalized\_shape=torch.Size(normalized\_shape)91assertisinstance(normalized\_shape,torch.Size)
94self.normalized\_shape=normalized\_shape95self.eps=eps96self.elementwise\_affine=elementwise\_affine
වාසි γ සහ නැඹුරුව β සඳහා සහ පරාමිතීන් සාදන්න
98ifself.elementwise\_affine:99self.gain=nn.Parameter(torch.ones(normalized\_shape))100self.bias=nn.Parameter(torch.zeros(normalized\_shape))
x හැඩයේ ආතන්ය [*, S[0], S[1], ..., S[n]] වේ. * ඕනෑම මානයන් සංඛ්යාවක් විය හැකිය. උදාහරණයක් ලෙස, එන්එල්පී කාර්යයකදී මෙය වනු ඇත [seq_len, batch_size, features]
102defforward(self,x:torch.Tensor):
හැඩයන්ගැලපෙන බවට වග බලා ගැනීම සඳහා සනීපාරක්ෂාව පරීක්ෂා කරන්න
110assertself.normalized\_shape==x.shape[-len(self.normalized\_shape):]
මධ්යන්යයහා විචලතාව ගණනය කිරීමේ මානයන්
113dims=[-(i+1)foriinrange(len(self.normalized\_shape))]
සියලුමමූලද්රව්යවල මධ්යන්යය ගණනය කරන්න; i.e. එක් එක් මූලද්රව්යය සඳහා මාධ්යයන් E[X]
117mean=x.mean(dim=dims,keepdim=True)
සියලුමූලද්රව්යවල චතුරස්රාකාර මධ්යන්යය ගණනය කිරීම; i.e. එක් එක් මූලද්රව්යය සඳහා මාධ්යයන් E[X2]
120mean\_x2=(x\*\*2).mean(dim=dims,keepdim=True)
සියලුමූලද්රව්යයේ විචලනය Var[X]=E[X2]−E[X]2
122var=mean\_x2-mean\*\*2
සාමාන්යකරන්න X^=Var[X]+ϵX−E[X]
125x\_norm=(x-mean)/torch.sqrt(var+self.eps)
පරිමාණයසහ මාරුව LN(x)=γX^+β
127ifself.elementwise\_affine:128x\_norm=self.gain\*x\_norm+self.bias
131returnx\_norm
සරලපරීක්ෂණය
134def\_test():
138fromlabml.loggerimportinspect139140x=torch.zeros([2,3,2,4])141inspect(x.shape)142ln=LayerNorm(x.shape[2:])143144x=ln(x)145inspect(x.shape)146inspect(ln.gain.shape)
150if\_\_name\_\_=='\_\_main\_\_':151\_test()