• ആരംഭിക്കുക
  • അനുബന്ധം
    • മൾട്ടി-ഹെഡ് ആറ്റൻഷൻ
  • ഹോം
  • പോസ്റ്റുകൾ
  • കുറിപ്പുകൾ
  • പുസ്തകശാല
  • രചയിതാവ്
🇺🇸 en 🇫🇷 fr 🇨🇳 zh

Nathaniel Thomas

കാരണാത്മക സ്വയം ശ്രദ്ധയുടെ യാന്ത്രികത

2024, നവംബർ 13

ആരംഭിക്കുക

കാസൽ സെൽഫ്-അറ്റൻഷൻ 2017 മുതൽ AI ലെ മിക്ക പുരോഗതികളുടെയും അടിസ്ഥാനമാണ്. ഈ ലേഖനത്തിൽ, ഞാൻ കമ്പ്യൂട്ടേഷൻ ഘട്ടം ഘട്ടമായി പരിശോധിക്കുകയും അത് എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്നതിനെക്കുറിച്ച് മികച്ച ഒരു അവബോധം നേടുകയും ചെയ്യും.

SelfAttention(Q,K,V)=softmax(mask(d​QKT​))V

ഉയർന്ന തലത്തിൽ, ഈ ഫംഗ്ഷൻ ഒരു സീക്വൻസ് എടുത്ത് അതിനെ മറ്റൊന്നാക്കി മാറ്റുന്നു. ഒരു സീക്വൻസ് എന്നത് ടോക്കൻ എംബെഡിംഗുകളുടെ ഒരു ലിസ്റ്റാണ്, L×d ആകൃതിയിലുള്ള ഒരു ടെൻസർ, ഇവിടെ L എന്നത് ഇൻപുട്ട് സീക്വൻസ് ദൈർഘ്യവും d എന്നത് എംബെഡിംഗ് ഡൈമെൻഷനുമാണ്. ഈ മാട്രിക്സിന്റെ ഓരോ വരിയും ഒരു ഇൻപുട്ട് ടോക്കനുമായി ബന്ധപ്പെട്ടിരിക്കുന്നു, അത് d-ഡൈമെൻഷണൽ വെക്ടറായി പ്രതിനിധീകരിക്കപ്പെടുന്നു.

എന്നാൽ എന്തുകൊണ്ടാണ് SelfAttention ന് 3 ഇൻപുട്ടുകൾ ഉള്ളത്? ഇതിന് കാരണം, ട്രാൻസ്ഫോർമർ ആർക്കിടെക്ചറിൽ, ഇൻപുട്ട് സീക്വൻസ് 3 വ്യത്യസ്ത d×d ലീനിയർ ലെയറുകൾ ഉപയോഗിച്ച് പ്രൊജക്റ്റ് ചെയ്യപ്പെടുന്നു. X ഇൻപുട്ട് സീക്വൻസ് ആണെങ്കിൽ,

Q=XWQ​,K=XWK​,V=XWV​

ഇവിടെ WQ​,WK​,WV​ എന്നിവ d×d ആണ്. അതിനാൽ, Q,K,V എന്നിവ ഒരേ ഇൻപുട്ട് സീക്വൻസിന്റെ വ്യത്യസ്ത പ്രതിനിധാനങ്ങളാണ്.

SelfAttention ഘട്ടം ഘട്ടമായി കമ്പ്യൂട്ട് ചെയ്യാം. ആദ്യം, QKT ചെയ്യുന്നു, ഇത് L×d by d×L ഡോട്ട് പ്രൊഡക്ട് ആണ്, ഫലമായി L×L ഔട്ട്പുട്ട് ലഭിക്കുന്നു. ഇത് എന്താണ് ചെയ്യുന്നത്?

QKT=​q1​q2​⋮qL​​​[k1T​​k2T​​⋯​kLT​​]=​q1​k1T​q2​k1T​⋮qL​k1T​​q1​k2T​q2​k2T​⋮qL​k2T​​⋯⋯⋱⋯​q1​kLT​q2​kLT​⋮qL​kLT​​​​

qi​kjT​ ന്റെ ഫലം ഒരു സ്കെയിലർ ( 1×d dot d×1) ആണ്, അത് qi​ യും kj​ യും തമ്മിലുള്ള വെക്ടർ ഡോട്ട്-പ്രൊഡക്ട് ആണ്. നമ്മൾ ഫോർമുല ഓർമ്മിക്കുകയാണെങ്കിൽ,

a⋅b=∥a∥∥b∥cosθ

a യും b യും തമ്മിലുള്ള കോൺ θ 0º നോട് അടുത്തിരിക്കുമ്പോൾ ഡോട്ട്-പ്രൊഡക്ട് പോസിറ്റീവ് ആണെന്നും കോൺ 180º ആയിരിക്കുമ്പോൾ അല്ലെങ്കിൽ അവ എതിർദിശകളിലേക്ക് ചൂണ്ടുമ്പോൾ നെഗറ്റീവ് ആണെന്നും നമുക്ക് കാണാം. ഡോട്ട് പ്രൊഡക്ട് ഒരു സമാനത മെട്രിക് ആയി വ്യാഖ്യാനിക്കാം, ഇവിടെ പോസിറ്റീവ് മൂല്യങ്ങൾ സമാന വെക്ടറുകളെ സൂചിപ്പിക്കുന്നു, നെഗറ്റീവ് മൂല്യങ്ങൾ വിപരീതമായി സൂചിപ്പിക്കുന്നു.

അതിനാൽ, നമ്മുടെ അവസാന L×L മാട്രിക്സ് q യും k യും ടോക്കനുകൾ തമ്മിലുള്ള സമാനത സ്കോറുകളാൽ നിറഞ്ഞിരിക്കുന്നു. ഫലം d​ കൊണ്ട് ഹരിക്കുന്നു, കാരണം വലിയ എംബെഡിംഗ് ഡൈമെൻഷനുകൾക്ക് വേരിയൻസ് വർദ്ധിക്കുന്നത് തടയാൻ. അനുബന്ധം കാണുക.

അടുത്ത ഘട്ടം mask ഫംഗ്ഷൻ പ്രയോഗിക്കുക എന്നതാണ്, ഇത് ഇൻപുട്ട് മാട്രിക്സിന്റെ താഴെയുള്ള ത്രികോണ ഭാഗത്ത് ഇല്ലാത്ത എല്ലാ മൂല്യങ്ങളും −∞ ആക്കി മാറ്റുന്നു.

mask(d​1​QKT)=d​1​​q1​k1T​q2​k1T​q3​k1T​⋮qL​k1T​​−∞q2​k2T​q3​k2T​⋮qL​k2T​​−∞−∞q3​k3T​⋮qL​k3T​​⋯⋯⋯⋱⋯​−∞−∞−∞⋮qL​kLT​​​

ഇതിന് softmax പ്രയോഗിക്കുന്നു, ഇത് മാട്രിക്സിലെ ഓരോ വരിയിലെ മൂല്യങ്ങളെയും പ്രോബബിലിറ്റി ഡിസ്ട്രിബ്യൂഷനാക്കി മാറ്റുന്നു. ഈ ഫംഗ്ഷൻ RL→RL ആയി നിർവചിക്കപ്പെട്ടിരിക്കുന്നു, ഇവിടെ ith ഔട്ട്പുട്ട് എലമെന്റ് നൽകുന്നത്

softmax(x)i​=∑j=1L​exj​exi​​for i=1,2,…,L

ഇവിടെ രണ്ട് കാര്യങ്ങൾ ശ്രദ്ധിക്കുക:

  1. എല്ലാ ഔട്ട്പുട്ട് എലമെന്റുകളുടെയും ആകെത്തുക 1 ആണ്, പ്രോബബിലിറ്റി ഡിസ്ട്രിബ്യൂഷനായി പ്രതീക്ഷിക്കുന്നത് പോലെ
  2. ഒരു ഇൻപുട്ട് എലമെന്റ് xi​ −∞ ആണെങ്കിൽ, softmax(x)i​=0 ആണ്

മാസ്ക് ചെയ്ത സമാനത സ്കോറുകൾക്ക് softmax ഫംഗ്ഷൻ പ്രയോഗിച്ച ശേഷം, നമുക്ക് ലഭിക്കുന്നത്:

S=softmax(mask(d​1​QKT))=​S1,1​S2,1​S3,1​⋮SL,1​​0S2,2​S3,2​⋮SL,2​​00S3,3​⋮SL,3​​⋯⋯⋯⋱⋯​000⋮SL,L​​​

ഇവിടെ Si,j​ എന്നിവ നിർവചിച്ചിരിക്കുന്നത്:

Si,j​=∑k=1L​emask(d​QKT​)i,k​emask(d​QKT​)i,j​​

ഫലമായുണ്ടാകുന്ന മാട്രിക്സ് S ന് L ദൈർഘ്യമുള്ള പ്രോബബിലിറ്റി ഡിസ്ട്രിബ്യൂഷൻ വരികളുണ്ട്. അവസാന ഘട്ടം ഈ പ്രോബബിലിറ്റി ഡിസ്ട്രിബ്യൂഷനുകൾ ഉപയോഗിച്ച് നമ്മുടെ മൂല്യ മാട്രിക്സ് V മാപ്പ് ചെയ്യുക എന്നതാണ്, അത് നമ്മുടെ പുതിയ സീക്വൻസ് നൽകുന്നു.

SelfAttention(Q,K,V)​=SV=​S1,1​S2,1​S3,1​⋮SL,1​​0S2,2​S3,2​⋮SL,2​​00S3,3​⋮SL,3​​⋯⋯⋯⋱⋯​000⋮SL,L​​​​V1​V2​V3​⋮VL​​​=​S1,1​V1​S2,1​V1​+S2,2​V2​S3,1​V1​+S3,2​V2​+S3,3​V3​⋮SL,1​V1​+SL,2​V2​+⋯+SL,L​VL​​​​​

ഇവിടെ Si,j​ ഒരു സ്കെയിലർ ആണ്, Vk​ ഒരു 1×d എംബെഡിംഗ് വെക്ടർ ആണ്. ദൃശ്യപരമായി, SelfAttention ക്വറികളും കീകളും പരസ്പരം എത്രത്തോളം ശ്രദ്ധിക്കുന്നുവെന്നതിന്റെ അടിസ്ഥാനത്തിൽ ഉണ്ടാക്കിയ പ്രോബബിലിറ്റി ഡിസ്ട്രിബ്യൂഷൻ ഉപയോഗിച്ച് വാല്യൂ ടോക്കനുകൾ തിരഞ്ഞെടുത്ത് സംയോജിപ്പിക്കുന്നു എന്ന് നമുക്ക് കാണാം. മുമ്പ് പ്രയോഗിച്ച കാസൽ മാസ്ക് കാരണം, ഔട്ട്പുട്ട് ടോക്കന്റെ ഇൻഡെക്സ് i ലെ ഭാരം ഇൻപുട്ട് ടോക്കനുകളുടെ ഇൻഡെക്സ് ≤i ഉള്ളവയെ മാത്രം ആശ്രയിച്ചിരിക്കുന്നു. ഇത് കാസൽ അസംപ്ഷൻ അടിസ്ഥാനമാക്കിയുള്ളതാണ്, അതായത് ഒരു ഔട്ട്പുട്ട് ടോക്കൻ Oi​ ഭാവിയിലെ ടോക്കനുകളെ ആശ്രയിക്കുന്നില്ല, ഇത് ഓട്ടോറിഗ്രസിവ് (അതായത് അടുത്ത ടോക്കൻ പ്രെഡിക്ഷൻ) മോഡലുകൾ പരിശീലിപ്പിക്കുമ്പോൾ ആവശ്യമാണ്.

ഇത് നിങ്ങൾക്ക് ഉപയോഗപ്രദമാകുമെന്ന് പ്രതീക്ഷിക്കുന്നു!

അനുബന്ധം

### എന്തുകൊണ്ട് $\sqrt{d}$ കൊണ്ട് സ്കെയിൽ ചെയ്യണം?

d വർദ്ധിക്കുമ്പോൾ വേരിയൻസ് വികസിക്കുന്നത് തടയാൻ ഇത് ചെയ്യുന്നു.

qi​,ki​∼N(μ=0,σ2=1) എന്നും അവ i.i.d ആണെന്നും കരുതുക. സ്കെയിൽ ചെയ്യാത്ത s=q⋅k ന്റെ മീൻ, വേരിയൻസ് കണക്കാക്കാം.

മീൻ പൂജ്യമാണ്:

E[s]=E[i=1∑d​qi​ki​]=i=1∑d​E[qi​ki​]=i=1∑d​E[qi​]E[ki​]=0

വേരിയൻസ്:

Var(s)=E[s2]−(E[s])2=E[s2]=d

കാരണം

E[s2]=E[i=1∑d​j=1∑d​qi​ki​qj​kj​]=i=1∑d​j=1∑d​E[qi​ki​qj​kj​]

i=j ആണെങ്കിൽ ഇത് 0 ആണ് ( qi​,qj​, ki​,kj​ i.i.d ആയതിനാൽ). i=j ആണെങ്കിൽ,

i=1∑d​E[qi2​ki2​]=i=1∑d​E[qi2​]E[ki2​]=i=1∑d​1⋅1=d

കാരണം E[qi2​]=E[ki2​]=σ2=1.

അതിനാൽ, 1/d​ കൊണ്ട് സ്കെയിൽ ചെയ്താൽ, പുതിയ വേരിയൻസ്

Var(d​s​)=d1​Var(s)=1

ആകുന്നു, ഇത് ആവശ്യമുള്ളതാണ്.

മൾട്ടി-ഹെഡ് ആറ്റൻഷൻ

മിക്ക ആധുനിക സിസ്റ്റങ്ങളും മൾട്ടി-ഹെഡ് ആറ്റൻഷൻ ഉപയോഗിക്കുന്നു, ഇത് SelfAttention നെ ഒന്നിലധികം “ഹെഡുകളിൽ” സമാന്തരമായി കണക്കാക്കുന്നു. സാധാരണയായി dk​=dv​=dmodel​/H എന്ന് സജ്ജമാക്കുന്നു, ഇവിടെ H എന്നത് ഹെഡുകളുടെ എണ്ണമാണ്.

Qh​Kh​Vh​​=XWhQ​=XWhK​=XWhV​​WhQ​∈Rdmodel​×dk​WhK​∈Rdmodel​×dk​WhV​∈Rdmodel​×dv​​​ headh​=SelfAttention(Qh​,Kh​,Vh​)=softmax(mask(dk​​Qh​KhT​​))Vh​ MultiHead(Q,K,V)​=Concat(head1​,head2​,…,headH​)​

←
ഒരു വിദഗ്ധ-ലെവൽ 2048 ബോട്ട്
ലോക്കൽ അപ്രോക്സിമേഷൻ
→

back to top