Asosiy kontentga o‘tish
AI qo‘llanmalari

Handwired: JavaScript dasturlarini differensiallanuvchi neyron tarmoqlarga aylantirish

Ushbu qo‘llanmada Handwired shart operatorlari, sikllar va dastur holatini matritsalarni ko‘paytirish hamda ReLU uslubidagi amallarga aylantirish yondashuvi tushuntiriladi. Siz loyihani Bun yordamida sozlaysiz, uning demolarini ko‘rib chiqasiz, arifmetik o‘zgartirishni tushunasiz va differensiallanuvchi dasturlardan qayerda foydalanish mumkinligini bilib olasiz.

Handwired: JavaScript dasturlarini differensiallanuvchi neyron tarmoqlarga aylantirish

Handwired nima?

Handwired odatiy JavaScript kodini o‘qitishni talab qilmasdan, neyron tarmoqqa o‘xshash hisoblashga aylantiradi. Dasturni oddiy boshqaruv oqimi sifatida ifodalash o‘rniga, u shartlar, sikllar va holat kabi mantiqni suzuvchi nuqtali qiymatlar ustida matritsalarni ko‘paytirish hamda reglu amallariga aylantiradi.

Natijada hosil bo‘lgan dastur to‘liq differensiallanuvchan bo‘lib qoladi, uning og‘irliklari esa o‘rganish orqali emas, qo‘lda yoziladi. Handwired bu hisoblashlarni JavaScript yoki WebGPU yordamida bajarishi mumkin.

HandwiredOS demosi

Nima uchun dasturlarni neyron hisoblashga aylantirish kerak?

Handwired dastur xatti-harakatini asosan qo‘shish, ko‘paytirish va ReLU uslubidagi amallardan iborat kichik matematik primitivlar to‘plamiga keltiradi. Bu yondashuv bir nechta qiziqarli xususiyatlarni beradi:

  • Butun dastur differensiallanuvchan bo‘lib qoladi.
  • Og‘irliklarni o‘qitish shart emas, chunki ular qo‘lda yoziladi.
  • Birlash, siyraklik va amallarni qayta tartiblash kabi GPU optimallashtirishlari soddalashtirilgan hisoblash bilan ishlashi mumkin.
  • An’anaviy JavaScript kodi shu shaklda ifodalanganda GPU darajasidagi parallellikka erishishi mumkin.

Loyiha tajriba uchun ham imkoniyatlar yaratadi. Qo‘lda belgilangan og‘irliklarni faollashtirib, o‘qitish jarayoni nimaga olib kelishini tekshirishingiz yoki muzlatilgan dasturni umumiy neyron tarmoqqa ulab, birlashtirilgan tizimni boshidan oxirigacha o‘qitishingiz mumkin.

Loyihani sozlash

Handwired tarkibida jonli demolar va uning ishlashini mahalliy muhitda o‘rganish uchun kerakli manba kodi mavjud. Tizimingizda Bun o‘rnatilgan bo‘lishi kerak.

  1. Handwired repozitoriyasini klonlang.
  2. Loyiha katalogiga o‘ting.
  3. bun install yordamida bog‘liqliklarni o‘rnating.
  4. bun start yordamida mahalliy demolarni ishga tushiring.
git clone <handwired-repository-url>
cd handwired
bun install
bun start

Loyihani ishga tushirgandan so‘ng, demolarni ko‘rish uchun Bun chiqargan mahalliy manzildan foydalaning. Shuningdek, joylashtirilgan demolarni chenglou.me/handwired manzilida sinab ko‘rishingiz mumkin.

Asosiy o‘zgartirishni tushunish

Oddiy JavaScript shartini ko‘rib chiqamiz:

const a = 5
const result = (a > 4) ? 10 : 12

Handwired shartni arifmetika yordamida ifodalaydi. Butun son qiymati uchun quyidagi ReLU amallari ayirmasi a > 4 bo‘lganda 1, a <= 4 bo‘lganda esa 0 ga teng selektor hosil qiladi:

const a = 5
const above4 = Math.max(0, a - 4) - Math.max(0, a - 5)
const result = above4 * 10 + (1 - above4) * 12

Har ikkala tarmoq hisoblanadi, ammo above4 mos natijani tanlaydi. a = 5 bo‘lganda selektor 1 ga teng, shuning uchun yakuniy qiymat 10 bo‘ladi va bu asl shartli ifodaga mos keladi.

Matematik ifoda qanday ishlaydi?

Asosiy g‘oya tarmoqlanishni uzluksiz arifmetik primitivlar bilan almashtirishdan iborat. Shart quyidagilarning kombinatsiyasiga aylanadi:

HandwiredOS

  • Kirish qiymatidan selektor hosil qilish uchun ReLU amallari.
  • Selektorni har bir tarmoqqa qo‘llash uchun ko‘paytirish.
  • Tarmoqlar natijalarini birlashtirish uchun qo‘shish.

Bu amallar jamlangach, Handwired hisoblashni tegishli aktivatsiya amallari bilan katta matritsa ko‘paytmasi sifatida ifodalashi mumkin. Keyin ayni dastur JavaScript yoki WebGPU yordamida baholanishi mumkin.

Har ikkala tarmoq hisoblaydi, selektor esa natijalardan qaysi biri chiqishga hissa qo‘shishini tanlaydi.

Repozitoriyani o‘rganish

Loyiha bilan ishlashda avval README faylida ko‘rsatilgan kataloglardan boshlang:

  • docs/ katalogida loyihani tushunish uchun hujjatlar va materiallar mavjud.
  • src/ katalogida amalga oshirilgan kod joylashgan.
  • template/ katalogi loyiha bilan tanishishni boshlash uchun asos beradi.
  • lab/ katalogida eski tajribalar mavjud; ularni o‘rganishingiz yoki e’tiborsiz qoldirishingiz mumkin.

Amaliy ish jarayoni avval demolarni ishga tushirib, keyin ularning xatti-harakatini tegishli manba fayllari bilan taqqoslashdan iborat. Bu ko‘rinadigan misollarni matritsa amallariga aylantirish jarayoni bilan bog‘lashga yordam beradi.

Demolarni sinab ko‘ring

Joylashtirilgan demo Handwired’ni amalda ko‘rishning eng tezkor usulidir. Loyiha tavsifida 100,000 ta hujjatni millisekundlarda qayta ishlaydigan JSON qidiruv demosi alohida ta’kidlangan. U dastlab an’anaviy, bir oqimli uslubda yozilgan kodga sezilarli parallellik olib kirish maqsadini namoyish etadi.

Asl dastur tuzilmasi va hosil qilingan matematik ifoda o‘rtasidagi farqni kuzatish uchun demolardan foydalaning. Ular mahalliy manbani o‘zgartirishdan oldin ham foydali boshlang‘ich nuqta bo‘lib xizmat qiladi.

Ilg‘or g‘oyalar

O‘qitiladigan og‘irliklar bilan tajriba qiling

Handwired odatda qo‘lda yozilgan og‘irliklardan foydalanadi, shuning uchun dasturni ishlatish uchun o‘qitish talab qilinmaydi. Loyiha taklif qiladigan tajribalardan biri bu og‘irliklarni faollashtirib, optimallashtirish jarayoni qanday natija berishini kuzatishdir.

Muzlatilgan dasturlarni neyron tarmoqlar bilan birlashtiring

Yana bir imkoniyat muayyan muzlatilgan Handwired dasturini umumiy neyron tarmoqqa ulash va birlashtirilgan tizimni boshidan oxirigacha o‘qitishdir. Bu modelga aniq belgilangan dasturni saqlab qolish bilan birga, boshqa xatti-harakatlarni o‘rganish imkonini berishi mumkin.

Primitiv amallar nuqtayi nazaridan fikrlang

Tajribalarni loyihalashda boshqaruv oqimini qo‘shish, ko‘paytirish va ReLU uslubidagi amallar yordamida qanday ifodalash mumkinligiga e’tibor qarating. Hosil bo‘lgan hisoblash qanchalik sodda bo‘lsa, u birlashtirish, siyraklik va amallarni qayta tartiblash kabi usullardan shunchalik bevosita foyda oladi.

Xulosa

Handwired oddiy JavaScript mantiqini differensiallanuvchi matematik hisoblashga qanday qayta yozish mumkinligini ko‘rsatadi. Boshqaruv oqimini arifmetik selektorlar bilan almashtirib, natijani matritsalarni ko‘paytirish va faollashtirish amallariga keltirish orqali u an’anaviy dasturlarni neyron tarmoq texnikalari hamda JavaScript yoki WebGPU ijrosi bilan moslashtiradi. Uni Bun yordamida o‘rnating, namoyishlarni o‘rganing, so‘ng tajriba boshlash uchun docs/, src/ va template/ kataloglarini ko‘rib chiqing.