ЁЯСА рдзрдбрд╛ 06 тАФ Attention рдЖрдгрд┐ transformers: рд╡рд░реНрдЧрд╛рдд рдЗрдХрдбреЗ-рддрд┐рдХрдбреЗ рдкрд╛рд╣рдгрд╛рд░реА рдореБрд▓реЗ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 06 ┬╖ рдорд╛рдЧреЗ: lesson-05-next-token ┬╖ рдкреБрдвреЗ: lesson-07-rlhf-lora
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ05, рдЖрдгрд┐ 2017 рдЪрд╛ рддреЛ рд╢реЛрдз рдЬреНрдпрд╛рд╡рд░ рд╕рдВрдкреВрд░реНрдг AI рдЪреА рд▓рд╛рдЯ рдЙрднреА рдЖрд╣реЗ: attention рдЖрдгрд┐ transformer. рдЦрд░реА file: demo/attention_toy.py тАФ рдЦрд░реЗ attention рдЧрдгрд┐рдд, 40 рдУрд│реА, рдХреЛрдгрддреАрд╣реА libraries рдирд╛рд╣реАрдд.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рд╣реЗ рд╡рд╛рдЪрд╛: "The robot dropped the ball because it was heavy." "it" рдореНрд╣рдгрдЬреЗ рдХрд╛рдп? рддреБрдореНрд╣реА рд╡реНрдпрд╛рдХрд░рдгрд╛рдЪреЗ рдкреБрд╕реНрддрдХ рдЙрдШрдбрд╛рдпрд▓рд╛ рдЧреЗрд▓рд╛ рдирд╛рд╣реАрдд тАФ рддреБрдордЪреЗ рдбреЛрд│реЗ рдорд╛рдЧреЗ рд╡рд│реВрди рдкрд╛рд╣рд┐рд▓реЗ ЁЯСА, рдЙрдореЗрджрд╡рд╛рд░рд╛рдВрдЪреЗ рд╡рдЬрди рдХреЗрд▓реЗ (robot? ball?), рдЖрдгрд┐ "heavy" рдиреЗ рдкрд╛рд░рдбреЗ рдЭреБрдХрд╡рд▓реЗ. рдХреНрд╖рдгрд╛рдд, рд╢рд╛рдВрддрдкрдгреЗ, рд╡рдЬрди рджреЗрдд рдкрд╛рд╣рдгреЗ.
Attention рдореНрд╣рдгрдЬреЗ рдиреЗрдордХреЗ рддреЗрдЪ, рдЧрдгрд┐рддрд╛рдЪреНрдпрд╛ рд░реВрдкрд╛рдд. model рдкреНрд░рддреНрдпреЗрдХ token рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛рдирд╛, рддреНрдпрд╛ token рд▓рд╛ context рдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рджреБрд╕рд▒реНрдпрд╛ token рдХрдбреЗ рдкрд╛рд╣реВрди рдард░рд╡рддрд╛ рдпреЗрддреЗ тАФ рд╢рд┐рдХрд▓реЗрд▓реНрдпрд╛ weights рд╕рд╣ тАФ рдЖрддреНрддрд╛ рдХреЛрдг рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ:
itрд╕рд░реНрд╡рд╛рдд рдЬрд╛рд╕реНрддballрдХрдбреЗ рдкрд╛рд╣рддреЛ тАФ рдЬрдб рд╡рд╕реНрддреВ тАФ рдордЧ рд╕реНрд╡рддрдГheavyрдХрдбреЗ (рдЖрдкрд▓рд╛ demo рдЫрд╛рдкрддреЛ: ball 69%!)- рдкреНрд░рддреНрдпреЗрдХ рдирдЬрд░ рдореНрд╣рдгрдЬреЗ рд╡рдЬрди рджрд┐рд▓реЗрд▓реЗ рдорд┐рд╢реНрд░рдг: token рдЪреА рдЕрд░реНрде-рдЬрд╛рдЧрд╛
(рдзрдбрд╛ 04!) рдЬреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ рд▓рдХреНрд╖ рджрд┐рд▓реЗ рддреНрдпрд╛рдХрдбреЗ рдУрдврд▓реА рдЬрд╛рддреЗ тАФ
itрд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдг рдЕрд╕рддреЛ рдЖрдгрд┐ ball-рдЪрд╡ рдШреЗрдКрди рдмрд╛рд╣реЗрд░ рдпреЗрддреЛ тЪ╜ - рдЖрдгрд┐ рд╣реЗ рдЕрдиреЗрдХ рд╡реЗрд│рд╛ parallel рдордзреНрдпреЗ рд╣реЛрддреЗ (multi-head: рдПрдХ head рд╡реНрдпрд╛рдХрд░рдг рдкрд╛рд╣рддреЛ, рджреБрд╕рд░рд╛ рдирд╛рд╡реЗ, рддрд┐рд╕рд░рд╛ рдЕрдВрддрд░тАж) рдЖрдгрд┐ layer рдорд╛рдЧреВрди layer, рдкреНрд░рддреНрдпреЗрдХ рдлреЗрд░реАрдд рдЕрд░реНрде рдЕрдзрд┐рдХ рдзрд╛рд░рджрд╛рд░ рд╣реЛрддрд╛рдд.
transformer = рдпрд╛ рдпреБрдХреНрддреАрднреЛрд╡рддреА рдмрд╛рдВрдзрд▓реЗрд▓реА рд░рдЪрдирд╛, рдЦреЛрд▓рд╡рд░ рд░рдЪрд▓реЗрд▓реА: рдкрд╛рд╣рд╛-рдЖрдгрд┐-рдорд┐рд╕рд│рд╛, рдордЧ рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛ (рдкреНрд░рддреНрдпреЗрдХ token рд╕рд╛рдареА рдЫреЛрдЯреЗ dial-network), ├ЧрдбрдЭрдирднрд░ рд╡реЗрд│рд╛ рдкреБрдиреНрд╣рд╛. рдЬреБрдиреНрдпрд╛ models рдкреЗрдХреНрд╖рд╛ рддреНрдпрд╛рдЪреА рдорд╣рд╛рд╢рдХреНрддреА: рд╕рдЧрд│реЗ tokens рдПрдХрд╛рдЪ рд╡реЗрд│реА attend рдХрд░рддрд╛рдд (RNNs рд╕рд╛рд░рдЦреЗ рдПрдХрд╛рдорд╛рдЧреВрди рдПрдХ рдирд╡реНрд╣реЗ) тАФ GPU parallelism рд╕рд╛рдареА рдкрд░рд┐рдкреВрд░реНрдг тЖТ рдЖрдкрдг рд╢реЗрд╡рдЯреА рд╕рдВрдкреВрд░реНрдг internet рд╡рд░ train рдХрд░реВ рд╢рдХрд▓реЛ. 2017 рдЪреНрдпрд╛ paper рдЪреЗ рд╢реАрд░реНрд╖рдХ рд╕рдЧрд│реЗ рд╕рд╛рдВрдЧреВрди рдЬрд╛рддреЗ: "Attention Is All You Need."
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart TB
s["'The robot dropped the ball because IT was heavy'"]
subgraph att["ЁЯСА attention - for the token 'it'"]
q["'it' asks: who am I about?"]
w["learned weights:<br/>ball 69% ┬╖ heavy 16% ┬╖ robot 6%"]
blend["blend: 'it' comes out<br/>BALL-flavored тЪ╜"]
q --> w --> blend
end
subgraph tf["ЁЯПЧя╕П transformer = stack it deep"]
l1["glance + think - layer 1"]
l2["тАж ├Ч32 layers, ├Чmany heads,<br/>ALL tokens in parallel"]
l1 --> l2
end
s --> att --> tf
tf --> out["ЁЯУК next-piece scoreboard - lesson 05"]
тЭУ рдХрд╛рдп
- рдПрдХрд╛ рдУрд│реАрдд рдпрдВрддреНрд░рдгрд╛: рдкреНрд░рддреНрдпреЗрдХ token рдПрдХ query ("рдореА рдХрд╛рдп рд╢реЛрдзрддреЛрдп"), рдПрдХ key ("рдореА рдХрд╛рдп рджреЗрддреЛ") рдЖрдгрд┐ рдПрдХ value ("рдорд▓рд╛ рдирд┐рд╡рдбрд▓реЗ рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рдорд┐рд│рддреЗ") рдмрдирд╡рддреЛ; scores = query┬╖key рд╕рд╛рдореНрдп (embeddings рд╡рд░рдЪреЗ dot products тАФ рдзрдбрд╛ 04 рдЪреА рднреВрдорд┐рддреА рдХрд╛рдорд╛рд▓рд╛ рд▓рд╛рдЧрддреЗ); softmax тЖТ weights тЖТ values рдЪреЗ рдорд┐рд╢реНрд░рдг. рдЖрдкрд▓рд╛ demo рдЕрдХреНрд╖рд░рд╢рдГ рд╣реЗрдЪ рдХрд░рддреЛ.
- Multi-head: рдкреНрд░рддреНрдпреЗрдХ layer рдордзреНрдпреЗ рдЕрдиреЗрдХ attention рдирдореБрдиреЗ, рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рд╢рд┐рдХрд▓реЗрд▓реЗ. Layers: рдкрд╛рд╣рд╛-рдордЧ-рд╡рд┐рдЪрд╛рд░-рдХрд░рд╛ рдЪреА рдбрдЭрдирднрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддреА.
- Context window (рдзрдбрд╛ 08 рдЪреА рдорд░реНрдпрд╛рджрд╛!) рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЖрд╣реЗ рдХрд╛рд░рдг рдкреНрд░рддреНрдпреЗрдХ token рдкреНрд░рддреНрдпреЗрдХ рджреБрд╕рд▒реНрдпрд╛рдХрдбреЗ attend рдХрд░рддреЛ: рдЦрд░реНрдЪ рд▓рд╛рдВрдмреАрдиреБрд╕рд╛рд░ ~quadratically рд╡рд╛рдврддреЛ. рд▓рд╛рдВрдм context = рдЧрдВрднреАрд░ engineering.
- transformer рдиреЗ recurrent networks рдЪреА рдЬрд╛рдЧрд╛ рдШреЗрддрд▓реА рдХрд╛рд░рдг parallelism рдореБрд│реЗ training рд╡рд╛рдврд╡рддрд╛ рдЖрд▓реЗ тАФ рд░рдЪрдиреЗрдиреЗ data рдЦреБрд▓рд╛ рдХреЗрд▓рд╛, data рдиреЗ рдХреНрд╖рдорддрд╛ рдЦреБрд▓реНрдпрд╛ рдХреЗрд▓реНрдпрд╛.
ЁЯдФ рдХрд╛
"рдПрдХрд╛ рдкрд░рд┐рдЪреНрдЫреЗрджрднрд░ 'it' рдХрд╢рд╛рд▓рд╛ рдЙрджреНрджреЗрд╢реВрди рдЖрд╣реЗ рд╣реЗ рддреЗ рдХрд╕реЗ рдХрд╛рдп рдкрдХрдбреВ рд╢рдХрддреЗ?" рдпрд╛рдЪреЗ рд╣реЗ рдЙрддреНрддрд░ рдЖрд╣реЗ тАФ рдЖрдгрд┐ "2017 рдЪ рдХрд╛?" рдпрд╛рдЪреЗрд╣реА. рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА model рдЪреЗ specs рдРрдХрддрд╛ тАФ "32 layers, 96 heads, 128k context" тАФ рддреЗрд╡реНрд╣рд╛ рдЖрддрд╛ рддреБрдореНрд╣реА рдбреЛрд│реНрдпрд╛рд╕рдореЛрд░ рдЖрдгрддрд╛: рдкрд╛рд╣рдгреНрдпрд╛рдЪреНрдпрд╛ рдХрд┐рддреА рдлреЗрд▒реНрдпрд╛, рдХрд┐рддреА parallel рдирдЬрд░рд╛, рдбреЛрд│реЗ рдХрд┐рддреА рдорд╛рдЧреЗ рдкреЛрд╣реЛрдЪреВ рд╢рдХрддрд╛рдд.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 demo/attention_toy.py
рдЦрд░реЗ dot-products, рдЦрд░реЗ softmax, рд╣рд╛рддрд╛рдиреЗ рдмрдирд╡рд▓реЗрд▓реНрдпрд╛ рдЬрд╛рдЧрд╛: it рдиреЗ 69% рдиреЗ
ball рдирд┐рд╡рдбрддрд╛рдирд╛ рдкрд╛рд╣рд╛ тАФ рдЬрдб рд╡рд╕реНрддреВ. рдордЧ it рд▓рд╛ robot-рдЖрдХрд╛рд░рд╛рдЪрд╛ рдХрд░рд╛
([0.5, 0.6, 0.1, 0.1], рдЬрдгреВ рд╡рд╛рдХреНрдп "тАжbecause it was
tired" рдиреЗ рд╕рдВрдкрд▓реЗ) рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рдЪрд╛рд▓рд╡рд╛ тАФ рдирдЬрд░ robot рдХрдбреЗ рд╡рд│рддрд╛рдирд╛ рдкрд╛рд╣рд╛. training рд▓рд╛рд▓
рдкреЗрдирдиреЗ рдЬреЗ рдХрд░рддреЗ рддреЗ рддреБрдореНрд╣реА рдЖрддреНрддрд╛ рдХреЗрд▓реЗ: рдПрдХ рдЬрд╛рдЧрд╛ рд╣рд▓рд╡рд▓реА, рдПрдХ рдордд рдмрджрд▓рд▓реЗ.
тПня╕П рдкреБрдвреЗ
рдЖрддрд╛ рдЖрдкрдг рд╕рдВрдкреВрд░реНрдг рдЧреНрд░рдВрдерд╛рд▓рдп рд╡рд╛рдЪрд▓реЗрд▓реЗ рдПрдХ рднрд╡реНрдп autocomplete рдмрдирд╡реВ рд╢рдХрддреЛ. рдПрдХ рдЕрдбрдЪрдг: рддреЗ рдкреВрд░реНрдг рдХрд░рддреЗ тАФ рддреЗ рдиреАрдЯ рд╡рд╛рдЧрдд рдирд╛рд╣реА. рдХрдЪреНрдЪрд╛ model тЖТ рдорджрдд рдХрд░рдгрд╛рд░рд╛ assistant: fine-tuning, RLHF рдЖрдгрд┐ LoRA.
git checkout lesson-07-rlhf-lora