2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
बहुकालपूर्वं मिलितवान् BatchNorm
तथाLayerNorm
, तस्मिन् समये तेषां दत्तांशः कृतः इति केवलं मोटेन एव ज्ञातम् आसीत्मानकीकरणम्: x = x − μ σ bm{x} = frac{bm{x} - bm{mu}}{bm{सिग्मा}}x=σx−μ इदं अवश्यं सरलं, परन्तु वास्तविकदत्तांशः अधिकं जटिलः अस्ति ForCV कार्याणिदत्तांशप्रतिबिम्बस्य दृष्ट्या प्रायः समूहस्य दत्तांशः एतादृशः दृश्यते । [B, C, H, W]
; कृते एनएलपी कार्यम्दत्तांशवाक्यस्य दृष्ट्या प्रायः समूहस्य दत्तांशः एतादृशः दृश्यते । [B, T, D]
। तत् XXNorm
कथं गण्यते ?निश्चयेन सम्पूर्णे समूहे सर्वाणि सङ्ख्यानि एकदा एव न गण्यन्ते। μ बम्{मु} २.μ तथा σ bm{सिग्मा} ९.σ, ते च भिन्नाः ।
अतः अहं बहु सूचनां परीक्षितवान्, अहं च प्रशिक्षकस्य वचनेन सह यथार्थतया सहमतः अभवम्: तानि अव्यवस्थितानि ब्लोग्स् मा पठन्तु, ते भवद्भिः इव उत्तमाः न सन्ति विदेशिनः अद्यापि भयानकाः सन्ति, ते केवलं प्रश्नानाम् उत्तरं दत्त्वा विषयान् स्पष्टतया व्याख्यातुं शक्नुवन्ति! टिप्पणीक्षेत्रम् : १. 《परिवर्तकाः बैच नॉर्म इत्यस्य स्थाने लेयर नॉर्म इत्यस्य उपयोगं किमर्थं कुर्वन्ति?》
अस्मिन् खण्डे सैद्धान्तिकदृष्ट्या तथा संहितादृष्ट्या विस्तरेण व्याख्यायते 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=bmx−bmμख√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=bmx−bmμल√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
मध्यमं विचरणं च तर्हिप्रत्येकं उदाहरणं स्वतन्त्रतया मानकीकृतं भवति.सटीकतया वक्तुं शक्यते यत् अधोलिखितं चित्रम् इव दृश्यते :
BatchNorm
तथाLayerNorm
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)")
उदाहरणानि : १.
>>> 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)
γ , β बम्{गाम्मा}, बम्{बीता}γ,β एकः शिक्षणीयः पैरामीटर् अस्ति, तथा च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)
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)")
उदाहरणानि : १.
>>> m = nn.BatchNorm2d(100)
>>> input = torch.randn(20, 100, 35, 45)
>>> output = m(input)
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)")
उदाहरणानि : १.
>>> m = nn.BatchNorm3d(100)
>>> input = torch.randn(20, 100, 35, 45, 10)
>>> output = m(input)
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
बिम्ब उदाहरणम्
>>> 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)
अन्येषु शब्देषु न केवलं “विविधाः तत्व स्वतन्त्रतया मानकीकरणं कुर्वन्तु” तथा “प्रत्येकःक्षण स्वतन्त्रतया सामान्यीकृतम्" तथा च कस्यापि गणनां कर्तुं शक्नोतिअन्तिम 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))
भवन्तः तत् हस्तचलितरूपेण गणनां कृत्वा च... 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.
"""
अहं केवलं अत्र गणनाप्रक्रियायाः सत्यापनम् इच्छामि, न तु विषये ध्यानं दातुम् इच्छामि unbiased
.