प्रौद्योगिकी साझेदारी

बैचनॉर्म

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

0. अमूर्तम्

बहुकालपूर्वं मिलितवान् BatchNorm तथाLayerNorm, तस्मिन् समये तेषां दत्तांशः कृतः इति केवलं मोटेन एव ज्ञातम् आसीत्मानकीकरणम्: x = x − μ σ bm{x} = frac{bm{x} - bm{mu}}{bm{सिग्मा}}x=σxμ इदं अवश्यं सरलं, परन्तु वास्तविकदत्तांशः अधिकं जटिलः अस्ति ForCV कार्याणिदत्तांशप्रतिबिम्बस्य दृष्ट्या प्रायः समूहस्य दत्तांशः एतादृशः दृश्यते । [B, C, H, W]; कृते एनएलपी कार्यम्दत्तांशवाक्यस्य दृष्ट्या प्रायः समूहस्य दत्तांशः एतादृशः दृश्यते । [B, T, D]। तत्‌ XXNorm कथं गण्यते ?निश्चयेन सम्पूर्णे समूहे सर्वाणि सङ्ख्यानि एकदा एव न गण्यन्ते। μ बम्{मु} २.μ तथा σ bm{सिग्मा} ९.σ, ते च भिन्नाः ।

अतः अहं बहु सूचनां परीक्षितवान्, अहं च प्रशिक्षकस्य वचनेन सह यथार्थतया सहमतः अभवम्: तानि अव्यवस्थितानि ब्लोग्स् मा पठन्तु, ते भवद्भिः इव उत्तमाः न सन्ति विदेशिनः अद्यापि भयानकाः सन्ति, ते केवलं प्रश्नानाम् उत्तरं दत्त्वा विषयान् स्पष्टतया व्याख्यातुं शक्नुवन्ति! टिप्पणीक्षेत्रम् : १. 《परिवर्तकाः बैच नॉर्म इत्यस्य स्थाने लेयर नॉर्म इत्यस्य उपयोगं किमर्थं कुर्वन्ति?》

1. कथं गणना कर्तव्या ?

अस्मिन् खण्डे सैद्धान्तिकदृष्ट्या तथा संहितादृष्ट्या विस्तरेण व्याख्यायते BatchNorm तथाLayerNorm गणना विधि।

१.१ प्रथमं सैद्धान्तिकरूपेण तस्य विषये वदामः, किआन्वेन् इत्यस्य सामान्यार्थस्य विषये पृच्छामः

>>>>> टोंगयी कियानवेन् >>>>>
पृच्छतु: लेयर नॉर्म तथा बैच नॉर्म इत्येतयोः मध्ये किं भेदः अस्ति ?सूत्रस्य व्याख्यानं ददातु ।

उत्तरम्‌: स्तर सामान्यीकरण (LayerNorm) 1.1. तथाबैच सामान्यीकरण (BatchNorm) 1.1. सामान्यीकरणस्तरस्य माध्यमेन, तंत्रिकाजालप्रशिक्षणस्य त्वरिततायै प्रयुक्ताः तकनीकाः सन्तिमूल्यं प्रविशतु वा सक्रियं कुर्वन्तु, जालशिक्षणं अधिकं स्थिरं कुशलं च कृत्वा तथापि तेकार्यान्वयनम्तथाप्रयोज्य दृश्यपर भिन्नाः सन्ति।

बैच सामान्यीकरण (BatchNorm) 1.1.
BatchNorm मुख्यतया प्रशिक्षणकालेदत्तांशस्य लघु-समूहस्य कृतेसामान्यीकरणं कर्तुंमुख्य लक्ष्यआम्‌आन्तरिकसहचयनात्मकशिफ्टं न्यूनीकरोतु(आन्तरिक सहचयनात्मकशिफ्ट), अर्थात् जालस्य अग्रे प्रसारणप्रक्रियायाः समये प्रशिक्षणपुनरावृत्तिभिः सह मध्यवर्तीस्तरस्य निवेशवितरणं परिवर्तते BatchNorm via caculationवर्तमानस्य लघु-समूहस्य मध्यमं विचरणं चनिवेशं सामान्यीकर्तुं सूत्रं निम्नलिखितम् अस्ति ।
स्थापयति x bm{x} इति ।x लघु-समूहस्य अन्तः निवेशसदिशः अस्ति, μ B bm{मु}_Bμ तथा σ B 2 bm{सिग्मा}^2_Bσ2 क्रमशः लघुसमूहस्य मध्यमं विचरणं च भवन्ति तर्हिBatchNorm उत्पादनम् य बम्{य} २.य् इति व्यञ्जयितुं शक्यते- १. x ^ = x − μ B μ B 2 + ε y ^ = γ x ^ + β^bmx=bmxbmμbmμ2+ϵ^bmय्=γ^bmx+β x^य्^=μ2+ϵ xμ=γx^+β इत्यस्मिन्‌, γ गाम्माγ तथा β बीटाβ एकः शिक्षणीयः मापदण्डः अस्ति, . ε epsilon इतिϵ संख्यात्मकस्थिरतायै प्रयुक्तः लघुनित्यः अस्ति ।

स्तर सामान्यीकरण (LayerNorm) 1.1.
LayerNorm प्रयोजनम् इतिप्रत्येकं नमूनास्तरं प्रतिलघु-बैच-आँकडानां उपरि अवलम्बं विना सामान्यीकरणं कुर्वन्तु। LayerNorm अनुक्रमप्रतिमानानाम् (यथा...LSTM वाTransformer), इत्यादिषु येषुनमूनानां मध्ये आश्रयाः भवितुम् अर्हन्तिवा लघु-बैच-आकारः निश्चितः न भवेत्. LayerNorm गणयतुप्रत्येकस्य नमूनाविशेषतायाः मध्यमं विचरणं च, सूत्रं यथा- १.
स्थापयति x bm{x} इति ।x एकस्य नमूनायाः विशेषतासदिशः अस्ति, μ L bm{मु}_Lμ तथा σ L 2 bm{सिग्मा}^2_Lσ2 क्रमशः नमूनालक्षणस्य मध्यमं विचरणं च भवन्ति तर्हिLayerNorm उत्पादनम् य बम्{य} २.य् इति व्यञ्जयितुं शक्यते- १. x ^ = x − μ L μ L 2 + ε y ^ = γ x ^ + β^bmx=bmxbmμbmμ2+ϵ^bmय्=γ^bmx+β x^य्^=μ2+ϵ xμ=γx^+β यत्रेव सम, γ गाम्माγ तथा β बीटाβ एकः शिक्षणीयः मापदण्डः अस्ति, . ε epsilon इतिϵ इति लघुनित्यम् ।

भेदः

  • दत्तांशस्य उपरि निर्भरं भवति: BatchNorm आश्रित्य भवतिलघु-बैच सांख्यिकी, तथा LayerNorm आश्रित्य भवतिएकस्य नमूनायाः लक्षणात्मकानि आँकडानि;
  • अनुप्रयोग परिदृश्य: BatchNorm अधिकं उपयुक्तम्सङ्गणकदृष्टिकार्यम्, तथा LayerNorm अधिकं उपयुक्तम्प्राकृतिक भाषा संसाधन कार्य, विशेषतः क्रमदत्तांशैः सह व्यवहारे;
  • कम्प्यूटेशनल दक्षता: BatchNorm समानान्तरगणने अधिकं कुशलं भवेत् यतोहि लघु-बैच-अन्तर्गतं समानान्तरतायाः लाभं ग्रहीतुं शक्नोति, यदा...LayerNorm प्रत्येकं नमूने गणनाः स्वतन्त्राः सन्ति, भिन्नदीर्घतायाः अनुक्रमदत्तांशस्य संसाधनार्थं अधिकं उपयुक्ताः च सन्ति ।

उभयोः पद्धतयोः स्वकीयाः लाभाः हानिः च सन्ति, तथा च कोऽपि विधिः चयनीयः इति सामान्यतया विशिष्टानुप्रयोगपरिदृश्यस्य दत्तांशलक्षणस्य च उपरि निर्भरं भवति
<<<<< तोंगयी किआन्वेन्<<<<

किं त्वं स्पष्टः असि? "वर्तमानस्य लघु-समूहस्य माध्यं विचरणं च" किम् ।? "प्रत्येकस्य नमूनाविशेषतायाः मध्यमं विचरणं च" किम् ।?

प्रथमं मूलभूतसंकल्पनाः अवगच्छामः : १.

  • क्षण: एकः नमूना, २. छवि सीवी कृते, .वाक्य एनएलपी कृते;
  • तत्व: नमूनायाः घटकाः, २. पिक्सेल प्रतिबिम्बस्य कृते, .शब्दः वाक्यार्थम्;
  • गुणः: तत्त्वस्य लक्षणम्, २. आरजीबी मूल्यम् पेक्सेलस्य कृते, .एम्बेडिंग् शब्दार्थम् ।

एतत् दत्तांशेषु प्रतिबिम्बितम् अस्ति : १.

  • [B, C, H, W] एकः बैचः अस्ति, .[C, H, W] इति दृष्टान्तः, २.[C] इदं पिक्सेलम् अस्ति, यत्र...C गुणः।
  • [B, T, L] एकः बैचः अस्ति, .[T, L] इति दृष्टान्तः, २.[L] समाहितः इति शब्दःL गुणः।

यथा अधः दर्शितम् : १.

Batch Dimension पक्षतः पश्यन् पृष्ठतः विस्तारितः प्रत्येकं लघुवर्गः एकं तत्त्वं प्रतिनिधियति, यथा वामचित्रे दीर्घः बैंगनीवर्णीयः पट्टिका, पिक्सेलस्य RGB विशेषता, अथवा शब्दसदिशःLayerNorm देहिप्रत्येकं तत्त्वम् मध्यमं विचरणं च गणयन्तु, भवन्तः प्राप्तुं शक्नुवन्तिBxL मध्यमं विचरणं च (वाBxHxW)। तदाप्रत्येकं तत्त्वं स्वतन्त्रतया मानकीकृतं भवति.दक्षिणे चित्रे बैंगनीवर्णीयः पट्टिका एकः विशेषता अस्ति, समूहे सर्वेषां शब्दानां प्रथमं विशेषता अस्ति, एतादृशः प्रत्येकः पट्टिका एकः विशेषता अस्ति । BatchNorm देहिप्रत्येकं विशेषता मध्यमं विचरणं च गणयन्तु, भवन्तः प्राप्तुं शक्नुवन्तिL मध्यमं विचरणं च (वाC)। तदाप्रत्येकं विशेषता स्वतन्त्रतया मानकीकृतं भवति.


ज्ञातव्यं यत् Transformer इत्यनेन पूर्वोक्तं न अनुवर्ततेLayerNorm गणितं तु दत्तम्प्रत्येकं दृष्टान्तः मध्यमं विचरणं च गणयन्तु, भवन्तः प्राप्तुं शक्नुवन्तिB मध्यमं विचरणं च तर्हिप्रत्येकं उदाहरणं स्वतन्त्रतया मानकीकृतं भवति.सटीकतया वक्तुं शक्यते यत् अधोलिखितं चित्रम् इव दृश्यते :

१.२ PyTorch इत्यस्मिन् BatchNorm तथाLayerNorm
1.2.1 BatchNorm

PyTorch इत्यस्मिन्, . BatchNorm बिन्दुnn.BatchNorm1d, nn.BatchNorm2d तथाnn.BatchNorm3d, क्रमशः भिन्न-भिन्न-आयाम-दत्तांशस्य कृते : १.

  • nn.BatchNorm1d: (N, C) वा(N, C, L)
  • nn.BatchNorm2d: (N, C, H, W)
  • nn.BatchNorm3d: (N, C, D, H, W)

स्रोतसङ्केतः पश्यन्तु : १.

class BatchNorm1d(_BatchNorm):
	r"""
	Args:
		num_features: number of features or channels `C` of the input

	Shape:
		- Input: `(N, C)` or `(N, C, L)`, where `N` is the batch size,
		  `C` is the number of features or channels, and `L` is the sequence length
		- Output: `(N, C)` or `(N, C, L)` (same shape as input)
	"""
	def _check_input_dim(self, input):
		if input.dim() != 2 and input.dim() != 3:
			raise ValueError(f"expected 2D or 3D input (got {input.dim()}D input)")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

उदाहरणानि : १.

>>> m = nn.BatchNorm1d(100)  # C=100	   # With Learnable Parameters
>>> m = nn.BatchNorm1d(100, affine=False)  # Without Learnable Parameters
>>> input = torch.randn(20, 100)  # (N, C)
>>> output = m(input)
>>> # 或者
>>> input = torch.randn(20, 100, 30)  # (N, C, L)
>>> output = m(input)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

γ , β बम्{गाम्मा}, बम्{बीता}γ,β एकः शिक्षणीयः पैरामीटर् अस्ति, तथा चshape=(C,), पैरामीटर् नाम अस्ति .weight तथा.bias:

>>> m = nn.BatchNorm1d(100)
>>> m.weight
Parameter containing:
tensor([1., 1., ..., 1.], requires_grad=True) 
>>> m.weight.shape
torch.Size([100])
>>> m.bias
Parameter containing:
tensor([0., 0., ..., 0.], requires_grad=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

BatchNorm2d तथाBatchNorm3d समानाः सन्ति, भेदः तत्_check_input_dim(input):

class BatchNorm2d(_BatchNorm):
	r"""
	Args:
		num_features: `C` from an expected input of size `(N, C, H, W)`
	Shape:
		- Input: :math:`(N, C, H, W)`
		- Output: :math:`(N, C, H, W)` (same shape as input)
	"""
	def _check_input_dim(self, input):
		if input.dim() != 4:
			raise ValueError(f"expected 4D input (got {input.dim()}D input)")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

उदाहरणानि : १.

>>> m = nn.BatchNorm2d(100)
>>> input = torch.randn(20, 100, 35, 45)
>>> output = m(input)
  • 1
  • 2
  • 3
class BatchNorm3d(_BatchNorm):
	r"""
	Args:
		num_features: `C` from an expected input of size `(N, C, D, H, W)`
	Shape:
		- Input: :math:`(N, C, D, H, W)`
		- Output: :math:`(N, C, D, H, W)` (same shape as input)
	"""
	def _check_input_dim(self, input):
		if input.dim() != 5:
			raise ValueError(f"expected 5D input (got {input.dim()}D input)")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

उदाहरणानि : १.

>>> m = nn.BatchNorm3d(100)
>>> input = torch.randn(20, 100, 35, 45, 10)
>>> output = m(input)
  • 1
  • 2
  • 3
1.2.2 LayerNorm

भिन्नतः BatchNorm(num_features), LayerNorm(normalized_shape) मापदण्डाः सन्तिinput.shape अनन्तरम्‌x indivualdim, इव [B, T, L] अन्तिमौ आयामौ[T, L], तर्हि प्रत्येकं वाक्यं स्वतन्त्रतया मानकीकृतं भविष्यति if L वा[L], तर्हि प्रत्येकं शब्दसदिशं स्वतन्त्रतया मानकीकृतं भवति ।

एनएलपी उदाहरणम्

>>> batch, sentence_length, embedding_dim = 20, 5, 10
>>> embedding = torch.randn(batch, sentence_length, embedding_dim)
>>> layer_norm = nn.LayerNorm(embedding_dim)
>>> layer_norm(embedding)  # Activate module
  • 1
  • 2
  • 3
  • 4

बिम्ब उदाहरणम्

>>> N, C, H, W = 20, 5, 10, 10
>>> input = torch.randn(N, C, H, W)
>>> # Normalize over the last three dimensions (i.e. the channel and spatial dimensions)
>>> layer_norm = nn.LayerNorm([C, H, W])
>>> output = layer_norm(input)
  • 1
  • 2
  • 3
  • 4
  • 5

अन्येषु शब्देषु न केवलं “विविधाः तत्व स्वतन्त्रतया मानकीकरणं कुर्वन्तु” तथा “प्रत्येकःक्षण स्वतन्त्रतया सामान्यीकृतम्" तथा च कस्यापि गणनां कर्तुं शक्नोतिअन्तिम x आयामेषु सामान्यीकरणं कुर्वन्तु.

१.३ गणनाप्रक्रियायाः अन्वेषणम्
import torch
from torch import nn

# >>> 手动计算 BatchNorm2d >>>
weight = torch.ones([1, 3, 1, 1])
bias = torch.zeros([1, 3, 1, 1])

x = 10 * torch.randn(2, 3, 4, 4) + 100
mean = x.mean(dim=[0, 2, 3], keepdim=True)
std = x.std(dim=[0, 2, 3], keepdim=True, unbiased=False)
print(x)
print(mean)
print(std)

y = (x - mean) / std
y = y * weight + bias
print(y)
# <<< 手动计算 BatchNorm2d <<<

# >>> nn.BatchNorm2d >>>
bnm2 = nn.BatchNorm2d(3)
z = bnm2(x)
print(z)
# <<< nn.BatchNorm2d <<<
print(torch.norm(z - y, p=1))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

भवन्तः तत् हस्तचलितरूपेण गणनां कृत्वा च... nn.BatchNorm गणनाः प्रायः समानाः एव सन्ति, कदाचित् केचन सन्ति ε epsilon इतिϵ तस्य प्रभावः अत्र इति अवलोकयतुunbiased=False इदं ज्ञातव्यं महत्त्वपूर्णं, आधिकारिकदस्तावेजं व्याख्यायते यत्:

"""
At train time in the forward pass, the standard-deviation is calculated via the biased estimator,
equivalent to `torch.var(input, unbiased=False)`.
However, the value stored in the moving average of the standard-deviation is calculated via
the unbiased  estimator, equivalent to `torch.var(input, unbiased=True)`.

Also by default, during training this layer keeps running estimates of its computed mean and
variance, which are then used for normalization during evaluation.
"""
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

अहं केवलं अत्र गणनाप्रक्रियायाः सत्यापनम् इच्छामि, न तु विषये ध्यानं दातुम् इच्छामि unbiased.

  • प्रशिक्षणपदं विचरणस्य पक्षपातपूर्णं अनुमानं गणयति, यदा तु विचरणसहितं चलसरासरीयां विचरणं निष्पक्षं अनुमानं भवति;
  • प्रशिक्षणकाले mean तथा var इत्येतयोः चलसरासरी रक्षिता भविष्यति ततः परीक्षणपदे उपयोगः भविष्यति ।