ব্যাচের নরমালাইজেশন সহ ব্যাকরোপ্যাগেশনের ম্যাট্রিক্স ফর্ম


12

ব্যাচ নরমালাইজেশন গভীর নিউরাল নেটগুলিতে যথেষ্ট পারফরম্যান্স উন্নতির জন্য জমা দেওয়া হয়েছে। ইন্টারনেটে প্রচুর পরিমাণে উপাদান দেখায় যে কীভাবে এটি অ্যাক্টিভেশন-বাই-অ্যাক্টিভেশন ভিত্তিতে প্রয়োগ করা যায়। আমি ইতিমধ্যে ম্যাট্রিক্স বীজগণিত ব্যবহার করে ব্যাকপ্রপ বাস্তবায়ন করেছি এবং দিয়েছি যে আমি উচ্চ স্তরের ভাষায় Rcpp(এবং শেষ পর্যন্ত forজিপিইউ'র উপর নির্ভর করে ঘন ম্যাট্রিক্স গুণনের জন্য) কাজ করছি, সবকিছু ছিঁড়ে ফেলেছি এবং লুপগুলিতে অবলম্বন করার ফলে আমার কোডটি ধীর হয়ে যাবে যথেষ্ট পরিমাণে ব্যথা ছাড়াও।

ব্যাচের সাধারণকরণের ফাংশনটি হল যেখানে

b(xp)=γ(xp−μxp)σxp−1+β
  • xpএটি সক্রিয় হওয়ার আগে হ'ল ম নোডp
  • γ এবং স্কেলার পরামিতিβ
  • μxp এবং গড় এবং এর এসডি হয় । (নোট করুন যে বৈকল্পিকের বর্গমূল মূল এবং একটি ফজ ফ্যাক্টর সাধারণত ব্যবহৃত হয় - আসুন কমপ্যাক্টনেসের জন্য ননজারো উপাদানগুলি ধরে নিই)σxpxp

ম্যাট্রিক্স ফর্মে, পুরো স্তরের ব্যাচের সাধারণকরণ হবে যেখানে

b(X)=(γ⊗1p)⊙(X−μX)⊙σX−1+(β⊗1p)
  • X হ'লN×p
  • 1N একটি কলাম ভেক্টর
  • γ এবং এখন প্রতি-স্তর স্বাভাবিককরণের পরামিতিগুলির সারি ভেক্টরপিβp
  • μX এবং হল ম্যাট্রিক্স, যেখানে প্রতিটি কলামটি কলাম অনুসারে মানে এবং মানক বিচ্যুতির একটি -ভেক্টর where এন × পি এনσXN×pN
  • ⊗ ক্রোনেকার পণ্য এবং এলিমেন্টওয়াইজ (হাদামারড) পণ্য⊙

একটি খুব সাধারণ এক-স্তরীয় নিউরাল নেট যা কোনও ব্যাচের সাধারণকরণ এবং একটি অবিচ্ছিন্ন ফলাফল হ'ল

y=a(XΓ1)Γ2+ϵ

কোথায়

  • Γ1 হয়p1×p2
  • পি 2 × 1Γ2 হয়p2×1
  • a(.) হল অ্যাক্টিভেশন ফাংশন

লোকসানটি যদি , তবে গ্রেডিয়েন্টগুলি ∂ আরR=N−1∑(y−y^)2

∂R∂Γ1=−2VTϵ^∂R∂Γ2=XT(a′(XΓ1)⊙−2ϵ^Γ2T)

কোথায়

  • V=a(XΓ1)
  • ϵ^=y−y^

ব্যাচের সাধারণকরণের অধীনে বা ডেরাইভেটিভগুলি কীভাবে গণনা করা যায় তা সম্পর্কে আমার কোনও ধারণা নেই। ক্রোনেকার পণ্যগুলির বিষয়ে, সাহিত্যটি মোটামুটি আরকেন হয়। y = a ( ( γ ⊗ 1 এন ) ⊙ ( এক্স Γ 1 - μ এক্স Γ 1 ) ⊙ σ - 1 এক্স Γ 1 + ( β ⊗ 1 এন ) ) Γ 2

y=a(b(XΓ1))Γ2
y=a((γ⊗1N)⊙(XΓ1−μXΓ1)⊙σXΓ1−1+(β⊗1N))Γ2

ম্যাট্রিক্স কাঠামোর মধ্যে , এবং গণনা করার ব্যবহারিক উপায় কি ? নোড-বাই-নোডের গণনা অবলম্বন না করে একটি সাধারণ অভিব্যক্তি?∂ আর / ∂ β ∂ আর / ∂ Γ 1∂R/∂γ∂R/∂β∂R/∂Γ1

আপডেট 1:

আমি বের করেছি - সাজানো। এটি হ'ল: কিছু আর কোড দেখায় যে এটি করা লুপিংয়ের সমতুল্য। প্রথমে জাল তথ্য সেট আপ করুন:1 টি এন ( একটি ' ( এক্স Γ 1 ) ⊙ - 2 ε Γ টি 2 )∂R/∂β

1NT(a′(XΓ1)⊙−2ϵ^Γ2T)
set.seed(1)
library(dplyr)
library(foreach)

#numbers of obs, variables, and hidden layers
N <- 10
p1 <- 7
p2 <- 4
a <- function (v) {
  v[v < 0] <- 0
  v
}
ap <- function (v) {
  v[v < 0] <- 0
  v[v >= 0] <- 1
  v
}

# parameters
G1 <- matrix(rnorm(p1*p2), nrow = p1)
G2 <- rnorm(p2)
gamma <- 1:p2+1
beta <- (1:p2+1)*-1
# error
u <- rnorm(10)

# matrix batch norm function
b <- function(x, bet = beta, gam = gamma){
  xs <- scale(x)
  gk <- t(matrix(gam)) %x% matrix(rep(1, N))
  bk <- t(matrix(bet)) %x% matrix(rep(1, N))
  gk*xs+bk
}
# activation-wise batch norm function
bi <- function(x, i){
  xs <- scale(x)
  gk <- t(matrix(gamma[i]))
  bk <- t(matrix(beta[i]))
  suppressWarnings(gk*xs[,i]+bk)
}

X <- round(runif(N*p1, -5, 5)) %>% matrix(nrow = N)
# the neural net
y <- a(b(X %*% G1)) %*% G2 + u

তারপরে গণনা ডেরাইভেটিভস:

# drdbeta -- the matrix way
drdb <- matrix(rep(1, N*1), nrow = 1) %*% (-2*u %*% t(G2) * ap(b(X%*%G1)))
drdb
           [,1]      [,2]    [,3]        [,4]
[1,] -0.4460901 0.3899186 1.26758 -0.09589582
# the looping way
foreach(i = 1:4, .combine = c) %do%{
  sum(-2*u*matrix(ap(bi(X[,i, drop = FALSE]%*%G1[i,], i)))*G2[i])
}
[1] -0.44609015  0.38991862  1.26758024 -0.09589582

তারা মিলছে। তবে আমি এখনও বিভ্রান্ত, কারণ আমি জানি না কেন এটি কাজ করে। @ মার্ক এল স্টোন দ্বারা রেফারেন্সযুক্ত ম্যাটকাল্যাক নোটগুলি বলে যে হওয়া উচিতβ⊗1N

এমএনপিকিএবিটি

∂A⊗B∂A=(Inq⊗Tmp)(In⊗vec(B)⊗Im)
যেখানে সাবস্ক্রিপ্টগুলোর , , এবং , এর মাত্রা হয় এবং । হল পরিবহণ ম্যাট্রিক্স, যা এখানে মাত্র 1 কারণ উভয় ইনপুট ভেক্টর। আমি এটি চেষ্টা করেছিলাম এবং এমন একটি ফলাফল পেয়েছি যা সহায়ক বলে মনে হচ্ছে না:mnpqABT
# playing with the kroneker derivative rule
A <- t(matrix(beta)) 
B <- matrix(rep(1, N))
diag(rep(1, ncol(A) *ncol(B))) %*% diag(rep(1, ncol(A))) %x% (B) %x% diag(nrow(A))
     [,1] [,2] [,3] [,4]
 [1,]    1    0    0    0
 [2,]    1    0    0    0
 snip
[13,]    0    1    0    0
[14,]    0    1    0    0
snip
[28,]    0    0    1    0
[29,]    0    0    1    0
[snip
[39,]    0    0    0    1
[40,]    0    0    0    1

এটি উপযুক্ত নয়। স্পষ্টতই আমি ক্রোনেকার ডেরিভেটিভ বিধিগুলি বুঝতে পারছি না। যারা সাহায্য করবে দুর্দান্ত হবে। এবং - এর জন্য আমি এখনও অন্যান্য ডেরাইভেটিভগুলিতে পুরোপুরি আটকে আছি - এগুলি আরও শক্ত কারণ তারা করে না।γΓ1β⊗1

আপডেট 2

পাঠ্যপুস্তক পড়া, আমি মোটামুটি নিশ্চিত যে এবং অপারেটরের ব্যবহারের প্রয়োজন হবে । তবে কোডগুলিতে তাদের অনুবাদ করতে সক্ষম হওয়ায় আমি স্পষ্টতই ডেরাইভেশনগুলি অনুসরণ করতে অক্ষম। উদাহরণস্বরূপ, of এর ডেরিভেটিভকে সাথে গ্রহণ করার ক্ষেত্রে জড়িত হতে , যেখানে (যা আমরা এই মুহুর্তের জন্য ধ্রুবক ম্যাট্রিক্স হিসাবে বিবেচনা করতে পারি)। ∂R/∂Γ1∂R/∂γvec()∂R/∂Γ1w⊙XΓ1Γ1w≡(γ⊗1)⊙σXΓ1−1

আমার প্রবৃত্তি কেবল বলতে "উত্তর হল ", কিন্তু কাজ স্পষ্টত এই নয় যে কারণ সঙ্গে অনুরূপ নয় ।w⊙XwX

আমি জানি যে

∂(A⊙B)=∂A⊙B+A⊙∂B

এবং এই থেকে , যে

∂vec(w⊙XΓ1)∂vec(Γ1)T=vec(XΓ1)I∂vec(w)∂vec(Γ1)T+vec(w)I∂vec(XΓ1)∂vec(Γ1)T
তবে এটি কীভাবে মূল্যায়ন করা যায় তা সম্পর্কে আমি অনিশ্চিত, এটি কেবল কোড করা যাক।

আপডেট 3

এখানে অগ্রগতি হচ্ছে। এই ধারণাটি নিয়ে আমি গতকাল রাত 2 টা বেজে উঠি। ঘুমের জন্য ম্যাথ ভাল হয় না।

কিছু চিনির পরে এখানে :∂R/∂Γ1

  • w≡(γ⊗1)⊙σXΓ1−1
  • "stub"≡a′(b(XΓ1))⊙−2ϵ^Γ2T

শৃঙ্খলা নিয়মের শেষে পাওয়ার পরে আপনার কাছে যা আছে তা এখানে: এই লুপিং শুরু করে শুরু করুন - এবং কলাম সাবস্ক্রিপ্ট করবে এবং a একটি উপযোগী পরিচয় ম্যাট্রিক্স:

∂R∂Γ1=∂w⊙XΓ1∂Γ1("stub")
ijI
∂R∂Γij=(wi⊙Xi)T("stub"j)
∂R∂Γij=(IwiXi)T("stub"j)
∂R∂Γij=XiTIwi("stub"j)
tl; ডাঃ আপনি মূলত ব্যাচনরম স্কেল ফ্যাক্টরগুলি দ্বারা স্টাবকে প্রাক গুণিত করছেন। এটি এর সমতুল্য হওয়া উচিত:
∂R∂Γ=XT("stub"⊙w)

এবং, বাস্তবে এটি:

stub <- (-2*u %*% t(G2) * ap(b(X%*%G1)))
w <- t(matrix(gamma)) %x% matrix(rep(1, N)) * (apply(X%*%G1, 2, sd) %>% t %x% matrix(rep(1, N)))
drdG1 <- t(X) %*% (stub*w)

loop_drdG1 <- drdG1*NA
for (i in 1:7){
  for (j in 1:4){
    loop_drdG1[i,j] <- t(X[,i]) %*% diag(w[,j]) %*% (stub[,j])
  }
}

> loop_drdG1
           [,1]       [,2]       [,3]       [,4]
[1,] -61.531877  122.66157  360.08132 -51.666215
[2,]   7.047767  -14.04947  -41.24316   5.917769
[3,] 124.157678 -247.50384 -726.56422 104.250961
[4,]  44.151682  -88.01478 -258.37333  37.072659
[5,]  22.478082  -44.80924 -131.54056  18.874078
[6,]  22.098857  -44.05327 -129.32135  18.555655
[7,]  79.617345 -158.71430 -465.91653  66.851965
> drdG1
           [,1]       [,2]       [,3]       [,4]
[1,] -61.531877  122.66157  360.08132 -51.666215
[2,]   7.047767  -14.04947  -41.24316   5.917769
[3,] 124.157678 -247.50384 -726.56422 104.250961
[4,]  44.151682  -88.01478 -258.37333  37.072659
[5,]  22.478082  -44.80924 -131.54056  18.874078
[6,]  22.098857  -44.05327 -129.32135  18.555655
[7,]  79.617345 -158.71430 -465.91653  66.851965

আপডেট 4

এখানে, আমি মনে করি, এটি । প্রথম∂R/∂γ

  • XΓ~≡(XΓ−μXΓ)⊙σXΓ−1
  • γ~≡γ⊗1N

আগের মত, শৃঙ্খলা নিয়ম আপনাকে লুপিং আপনাকে যা পূর্বের মত মূলত প্রাক-গুণিত করে। সুতরাং এটি সমান হতে হবে:

∂R∂γ~=∂γ~⊙XΓ~∂γ~("stub")
∂R∂γ~i=(XΓ~)iTIγ~i("stub"i)
∂R∂γ~=(XΓ~)T("stub"⊙γ~)

এটি মিলের ধরণের:

drdg <- t(scale(X %*% G1)) %*% (stub * t(matrix(gamma)) %x% matrix(rep(1, N)))

loop_drdg <- foreach(i = 1:4, .combine = c) %do% {
  t(scale(X %*% G1)[,i]) %*% (stub[,i, drop = F] * gamma[i])  
}

> drdg
           [,1]      [,2]       [,3]       [,4]
[1,]  0.8580574 -1.125017  -4.876398  0.4611406
[2,] -4.5463304  5.960787  25.837103 -2.4433071
[3,]  2.0706860 -2.714919 -11.767849  1.1128364
[4,] -8.5641868 11.228681  48.670853 -4.6025996
> loop_drdg
[1]   0.8580574   5.9607870 -11.7678486  -4.6025996

প্রথমটির তির্যকটি দ্বিতীয়টিতে ভেক্টরের সমান। তবে সত্য যেহেতু ডেরাইভেটিভ একটি ম্যাট্রিক্সের সাথে সম্মানজনক - যদিও একটি নির্দিষ্ট কাঠামোযুক্ত একটি, আউটপুট একই কাঠামোর সাথে একই ম্যাট্রিক্স হওয়া উচিত। আমি কি ম্যাট্রিক্স পদ্ধতির ডায়াগোনালটি নিয়ে এটিকে সহজভাবে হতে পারি? আমি নিশ্চিত নই.γ

দেখে মনে হচ্ছে আমি নিজের প্রশ্নের উত্তর দিয়েছি তবে আমি সঠিক কিনা তা নিয়ে আমি নিশ্চিত নই। এই মুহুর্তে আমি এমন একটি উত্তর গ্রহণ করব যা আমি কাকে একসাথে হ্যাক করেছি তা দৃ rig়তার সাথে প্রমাণ করে (বা অস্বীকার করে)।

while(not_answered){
  print("Bueller?")
  Sys.sleep(1)
}

2
ম্যাগনাস এবং নিউডেকার দ্বারা "পরিসংখ্যান এবং একনোমেট্রিক্সে অ্যাপ্লিকেশনগুলির সাথে ম্যাট্রিক্স ডিফারেনটিভাল ক্যালকুলাস" এর অধ্যায় 9 বিভাগের 14 তম সংস্করণ জানম্যাগনস.এনএল / মিসক / এমডিসি ২০০7-৩৩ অনুচ্ছেদে ক্রোনেকার পণ্যগুলির পার্থক্য রয়েছে এবং হাদামারড পণ্যের পার্থক্যের উপর অনুশীলনের সাথে সমাপ্ত হয়েছে। "নোটগুলি ম্যাট্রিক্স ক্যালকুলাস এ" পল দ্বারা এল Fackler www4.ncsu.edu/~pfackler/MatCalc.pdf Kronceker পণ্য পার্থক্যকারী উপাদান অনেক আছে
— মার্ক এল স্টোন

রেফারেন্সের জন্য ধন্যবাদ। আমি এই ম্যাটকল্ক নোটগুলি আগে খুঁজে পেয়েছি, তবে এটি হাদামারডকে কভার করে না এবং ম্যাট্রিক্স ক্যালকুলাসের কোনও নিয়ম ম্যাট্রিক্স ক্ষেত্রে প্রযোজ্য বা প্রয়োগ হয় না তা আমি কখনই নিশ্চিত নই। পণ্যের বিধি, চেইন বিধি ইত্যাদি আমি বইটি সন্ধান করব। আমি এমন একটি উত্তর গ্রহণ করব যা আমাকে
— নিজেরাই

তুমি কেন এটা করছ? কেন ক্যারাস / টেনসরফ্লো এর মতো ফ্রেমব্রোকস ব্যবহার করবেন না? এই নিম্ন স্তরের অ্যালগরিদমগুলি বাস্তবায়নের জন্য উত্পাদনশীল সময় নষ্ট করা, যা আপনি প্রকৃত সমস্যা সমাধানে ব্যবহার করতে পারেন
— আকসাকাল

1
আরও স্পষ্টভাবে, আমি এমন নেটওয়ার্কগুলি ফিটিং করছি যা পরিচিত প্যারাম্যাট্রিক কাঠামোকে কাজে লাগায় - ইনপুট ডেটার লিনিয়ার ইন-প্যারামিটারের উপস্থাপনা, পাশাপাশি দ্রাঘিমা / প্যানেল কাঠামোর ক্ষেত্রেও। প্রতিষ্ঠিত ফ্রেমওয়ার্কগুলি হ্যাক / সংশোধন করার ক্ষমতা ছাড়িয়ে যাওয়ার জন্য এতটা ভারী অনুকূলিত হয়েছে। প্লাস গণিত সাধারণত সহায়তা করে। প্রচুর কোডমোনকিরা কী করছে তা তাদের কোনও ধারণা নেই। তেমনি Rcppদক্ষতার সাথে এটি বাস্তবায়নের জন্য যথেষ্ট শেখা দরকারী।
— জেনেরিক_উসার

1
@ মার্কএল.স্টোন কেবল তাত্ত্বিকভাবে সাবলীল নয়, এটি ব্যবহারিকভাবেও সহজ! কমবেশি যান্ত্রিক প্রক্রিয়া! এবং% # $!
— জেনেরিক_উজার

উত্তর:


1

সম্পূর্ণ উত্তর নয়, তবে আমি আমার মন্তব্যে যা পরামর্শ দিয়েছিলাম তা প্রদর্শনের জন্য যদি যেখানে , এবং একটি ভেক্টর, তারপরে শৃঙ্খলা নিয়ম অনুসারে যে এবং , আমরা দেখতে পেলাম

b(X)=(X−eNμXT)ΓΣX−1/2+eNβT
Γ=diag⁡(γ)ΣX−1/2=diag⁡(σX1−1,σX2−1,…)eN
∇βR=[−2ϵ^(Γ2T⊗I)JX(a)(I⊗eN)]T
−2ϵ^(Γ2T⊗I)=vec⁡(−2ϵ^Γ2T)TJX(a)=diag⁡(vec⁡(a′(b(XΓ1))))
∇βR=(I⊗eNT)vec⁡(a′(b(XΓ1))⊙−2ϵ^Γ2T)=eNT(a′(b(XΓ1))⊙−2ϵ^Γ2T)
পরিচয়ের মাধ্যমে । একইভাবে, যেখানে ("স্টাব") এবং একটিvec⁡(AXB)=(BT⊗A)vec⁡(X)
∇γR=[−2ϵ^(Γ2T⊗I)JX(a)(ΣXΓ1−1/2⊗(XΓ1−eNμXΓ1T))K]T=KTvec⁡((XΓ1−eNμXΓ1T)TWΣXΓ1−1/2)=diag⁡((XΓ1−eNμXΓ1T)TWΣXΓ1−1/2)
W=a′(b(XΓ1))⊙−2ϵ^Γ2TKNp×pবাইনারি ম্যাট্রিক্স যা বর্গক্ষেত্রের ম্যাট্রিক্সের তির্যক উপাদানগুলির সাথে সম্পর্কিত ক্রোনেকার পণ্যটির কলামগুলি নির্বাচন করে। এটি থেকে সত্যটি অনুসরণ করে । প্রথম গ্রেডিয়েন্টের বিপরীতে, এই অভিব্যক্তিটি আপনি যে মত প্রকাশ করেছেন তার সমতুল্য নয়। যে বিবেচনা একটি রৈখিক ফাংশন wrt হয় , সেখানে একটি গুণক করা উচিত হবে না গ্রেডিয়েন্ট হবে। আমি গ্রেডিয়েন্ট ছেড়ে ওপি, কিন্তু আমি স্থির সঙ্গে শিক্ষাদীক্ষা জন্য বলবে "বিস্ফোরণ" প্রবন্ধের লেখক এড়াতে চাইতে সৃষ্টি করে। বাস্তবে, আপনার কাছে এর Jacobians খুঁজে বের করতে হবে এবং wrtখdΓi≠j=0bγ i Γ 1 ডাব্লু Σ এক্স μ এক্স এক্সγiγiΓ1wΣXμXX এবং পণ্য বিধি ব্যবহার করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.