Back to Annotated Deep Learning Paper Implementations

ස්ථරයසාමාන්යකරණය

docs/si/normalization/layer_norm/index.html

latest8.0 KB
Original Source

homenormalizationlayer_norm

[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/normalization/layer_norm/ init.py)

#

ස්ථරයසාමාන්යකරණය

මෙය ස්ථර සාමාන්යකරණය කිරීමේ PyTorch ක්රියාත්මක කිරීමයි.

කණ්ඩායම් සාමාන්යකරණයකිරීමේ සීමාවන්

  • ඔබධාවන මාර්ග පවත්වා ගත යුතුය.
  • RNsසඳහා උපක්රමශීලී. එක් එක් පියවර සඳහා ඔබට විවිධ සාමාන්යකරණයන් අවශ්යද?
  • කුඩාකණ්ඩායම් ප්රමාණ සමඟ ක්රියා නොකරයි; විශාල එන්එල්පී ආකෘති සාමාන්යයෙන් කුඩා කණ්ඩායම් ප්රමාණවලින් පුහුණු කරනු ලැබේ.
  • බෙදාහරින ලද පුහුණුවේදී උපාංග හරහා මාධ්යයන් සහ වෙනස්කම් ගණනය කිරීම අවශ්ය වේ.

ස්ථරයසාමාන්යකරණය

ස්ථරසාමාන්යකරණය යනු පුළුල් පරාසයක සැකසුම් මත ක්රියා කරන සරල සාමාන්යකරණ ක්රමයකි. ස්ථර සාමාන්යකරණය මඟින් යෙදවුම් අංග හරහා ශුන්ය මධ්යන්යය සහ ඒකක විචලතාව ඇති බවට පරිවර්තනය කරයි. කණ්ඩායම්සාමාන්යකරණය එක් එක් මූලද්රව්යය සඳහා ශුන්ය මධ්යන්යය සහ ඒකක විචලතාව නිවැරදි කරන බව සලකන්න. ස්ථරයසාමාන්යකරණය සියලු අංග හරහා එක් එක් කණ්ඩායම සඳහා එය කරන්නේ.

ස්ථරසාමාන්යකරණය සාමාන්යයෙන් එන්එල්පී කාර්යයන් සඳහා භාවිතා වේ.

ට්රාන්ස්ෆෝමර් ක්රියාත්මක කිරීම්බොහොමයක ස්ථර සාමාන්යකරණය අපි භාවිතා කර ඇත්තෙමු.

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()

Trending Research Paperslabml.ai