
Нейрондық желілер: перцептрондардан терең оқытуға дейін
Қарапайым функциялардың қабаттары күрделі үлгілерді қалай үйренеді
Ешкім түсінбеген жүріс
2016 жылдың 10 наурызында, Сеулде өткен бес ойыннан тұратын сериядың екінші кездесуінде, AlphaGo деп аталатын машина тақтаның бесінші жолына қара тас қойды. Бұл жүріс сонша бөтен көрінді, ойын түсіндірушілер оны қате деп ойлады. Бір кәсіпқой маман тіпті жаңадан бастаған адам осылай ойнағаны үшін сөгіс алар еді деп айтты. Lee Sedol — Go ойынының 18 дүлей әлем чемпионы — өзін тежеу үшін бөлмеден шығып кетті.
Бұл қате болмады. Елу жүрістен кейін, «37-жүріс» деп аталып қалған сол тас — бүкіл ойынның білігі болды. AlphaGo жеңіп алды. Тірі жүрген ойыншылардың ең үлкендерінің бірі саналатын Lee Sedol серияны 4–1 есебімен ұтылды. Ал мұнда маңызды бөлігі мынада: сол жүрісті AlphaGo-ға ешбір адам үйретпеген. Ол ешбір оқулықта жоқ еді. Машина оны миллиондаған ойынды өзімен-өзі ойнап, ешбір адам көрмеген үлгі пайда болғанша ішкі сандардың миллиардтарын түзету арқылы өзі тапты.
Go ойынында мүмкін тақта позициялары байқалатын әлемдегі атомдардан да көп. Оны күшпен есептеп шығу мүмкін емес. Оған ережелер жазу мүмкін емес. Оны асқан деңгейде ойнаудың жалғыз жолы — үйрену — ал сол үйренуді жасаған нәрсе нейрондық желі болды: жеткілікті дерек пен түзету берілгенде, ешбір адам толықтай айта алмайтын құрылымды таба алатын қарапайым математикалық бірліктер жиынтығы.
Дәл сол механика — дәл сол салмақталған қосындылар, дәл сол оқыту циклі, дәл сол градиент түзетулері — сіз сөйлескен тілдік модельді, алаяқтық карта транзакцияларын анықтайтын жүйені, және сандық қорлардың қазір қаржы нарықтарына бағыттап отырған модельдерін қуаттайды. Бұл сабақ сол жәшіктің ішінде нақты не болып жатқаны туралы.
Перцептрон: барлығы осыдан басталады
Қарапайым спам-сүзгіштен GPT-ге дейін, AlphaGo-ға дейінгі әр нейрондық желі бір идеядан — 1958 жылы Frank Rosenblatt ойлап тапқан перцептроннан — тарайды. Бұл биологиялық нейрондан бос шабытты алған математикалық модель. Нақты нейрон дендриттері арқылы электр сигналдарын қабылдайды, оларды жасуша денесінде жинайды, тек біріктірілген кіріс шекті кескен жағдайда ғана аксон арқылы сигнал жібереді. Перцептрон вольтаж орнына сандарды қолданып, дәл соны істейді.
Перцептрон x кірістердің векторын алады, әр кірісті үйренген салмаққа (w) көбейтеді, көбейтінділерді қосады, шекті ауыстыратын ауытқу (bias) мүшесін (b) қосады, содан кейін нәтижені активация функциясы арқылы өткізеді. Нәтиже белгіленген шектен асса, нейрон «атылады»; болмаса, ол тыныш қалады. Бүкіл нәрсе бір ықшам өрнек: output = f(w·x + b).
Салмақтарды дауыс деңгейі тұтқасы деп ойлаңыз. Әр кіріс белгілі бір дауыс деңгейінде келеді, ал салмақ осы нақты нейрон үшін бұл кірістің қаншалықты маңызды екенін шешеді. Алаяқтық сауданы анықтауды үйреніп жатқан нейрон «шоттың тарихымен салыстырғандағы транзакция көлемі» салмағын жоғарылатып, «күннің уақыты» салмағын төменге түсіре алады. Оқу, өз мәнінде, тек сол тұтқаларды дұрыс күйге бұрудан басқа ешнәрсе емес.
Жалғыз перцептронда қатаң шек бар: ол деректерді тек түзу сызықпен (немесе жоғарырақ өлшемдерде жалпақ гипержазықтықпен) бөле алады. Ол «осы нүкте сызықтың үстінде ме әлде астында ма?» деп жауап бере алады, бірақ «осы нүкте иілген аймақтың ішінде ме?» деп жауап бере алмайды. Тарихи мысал — XOR есебі — жалғыз перцептрон дәлелденіп үйрене алмайтын үлгі, бұл шек 1970-жылдары AI қаржыландыруын жылдар бойы тоқтатуға көмектесті. Шешу жолы кейінге қарап отырғанда дерлік ерсі қарапайым: көптеген перцептронды қабаттарға жинап, олардың арасына сызықты емес активация қою. Осылай жасасаңыз, нәтиже желі кеңістікті майыстырып, бүктеп, ерікті күрделі пішіндерге қиюға қабілетті болады.
Қабаттар, тереңдік және неге «терең» оқыту
Бір нейрон — бір тұтқа. Пайдалы желі — ақпаратты шелек тізбегіндей алға жіберетін қабаттарға ұйымдастырылған мыңдаған нейрон.
- Кіріс қабаты — сіздің шикі белгілеріңіз кірген жер: суреттің пиксельдері, сөйлемнің сөздері, немесе трейдинг моделі үшін баға, көлем, тұрақсыздық және тапсырыс кітабының теңгерімсіздігі сияқты нәрселер.
- Жасырын қабаттар — арасындағы қабаттар, нақты жұмыс осында жасалады. Әр қабат алдыңғысының шығысын алып, оларды жаңа, абстрактырақ белгілерге қайта біріктіреді.
- Шығыс қабаты — соңғы жауап: ықтималдық, баға болжамы, класс белгісі.
Терең оқытудағы «терең» сөзі жай ғана көп жасырын қабат дегенді білдіреді. Ал тереңдік нақты бір нәрсе сатып алады: белгілердің иерархиясы. Сурет желісінде бірінші қабат шеттерді анықтайды, келесісі шеттерді пішіндерге жинайды, келесісі пішіндерді объектілерге жинайды. Ешкім «шет анықтауыш» немес «көз анықтауыш» бағдарламаламаған — бұл ұғымдар оқыту нәтижесінде өздігінен туындайды. Желі өзінің аралық сөздігін өзі ойлап табады.
Мұнда әдемі теориялық нәтиже бар — универсалды жуықтау теоремасы: тіпті бір жасырын қабаты бар желі, жеткілікті нейрон болса, кез келген үзіліссіз функцияны ерікті дәлдікпен жуықтай алады. Басқаша айтқанда, дұрыс желі қағидатта деректеріңізде бар кез келген үлгіні бейнелей алады. Тұзақ — және ол үлкен тұзақ — «қағидатта» деген сөз ауыр жұмыс атқарады. Теорема мұндай желінің бар екенін уәде етеді; ол сіз оны таба аласыз ба, оны бекітуге жеткілікті деректеріңіз бар ма, немесе сіз аңдап отырған үлгі нақты өмір сүреді ме дегенді ешнәрсе айтпайды. Қаржы сияқты сигнал әлсіз доменде, «бейнелей алады» мен «үйренуге болады» арасындағы бос орын дәл көптеген модельдер өлетін жер.
Активация функциялары: сызықты еместік — құпия дәм
Адамдарды таң қалдыратын факт: активация функциясыз тереңдіктің құны жоқ. Егер әр қабат жай ғана салмақталған қосынды болса, он қабатты біріктіру бір қабатпен математикалық түрде бірдей болар еді — сызықты операциялардың тізбегі бір сызықты операцияға жиналады. Сіз тек тамаша түзу сызық құруға есептеу қуатының тұтас бір байлығын жұмсаған болар едіңіз. Активация функциялары — қабаттар арасына енгізілген сызықты емес майысу нүктесі, ол желіге майысуға мүмкіндік береді, ал майысу оны күшті етеді.
Әр практик білуі тиіс активациялар:
- Sigmoid — σ(x) = 1/(1+e⁻ˣ). Кез келген кірісті (0, 1) аралығына сығады, бұл табиғи түрде ықтималдық ретінде оқылады. Бинарлы шығыс үшін тамаша, бірақ жасырын қабаттар ішінде жаман таңдау: үлкен позитив немес негатив кірістер үшін қисық жайпақталады, оның градиенті дерлік нөлге дейін түседі, әрі оқу тоқтайды — жоғалатын градиент мәселесі.
- Tanh — (−1, 1) аралығында шығыс береді және нөл орталықталған, бұл оптимизацияға көмектеседі. Әлі де шектерде қанады, бірақ sigmoid-тан жеңілірек.
- ReLU — f(x) = max(0, x). Жасырын қабаттар үшін заманауи әдепкі таңдау. Ол күлкілі дәрежеде қарапайым, есептеуге арзан, және барлық позитив кіріс үшін дені сау градиентті ұстайды. Оның кемшілігі — «өлетін ReLU»: әрдайым нөл шығаратын күйге түскен нейрон тұрақты түрде белсенсіз бола алады.
- Leaky ReLU — f(x) = max(0.01x, x). Негативтер үшін кіші ағынды градиентке жол береді, бұл нейрондардың өлуін болдырмайды.
- GELU — BERT пен GPT сияқты трансформерлердің ішіндегі стандарт болатын ReLU-ның тегіс, ықтималдық сипатты туысы.
Backpropagation мен градиенттік түсу: желілер қалай үйренеді
Бізде салмақтарға толы желі бар. Бірақ дұрыс салмақ мәндері қайдан келеді? Ешкім оларды теруге жазбайды — олар миллиондаған. Олар негізінде ұйымдастырылған сынау мен қателесу болатын кері байланыс циклі арқылы табылады, есептеу (calculus) бухгалтерлік есепті жүргізеді.
Бірінші қадам — алға өту: мысал енгіземіз, ол қабаттар арқылы ағып өтуіне мүмкіндік береміз, болжам оқимыз. Екінші қадам — сол болжамның қаншалықты дұрыс еместігін жоғалу функциясы арқылы өлшеу. Санды болжау үшін (баға), Орташа квадраттық қате болжам мен шындық арасындағы квадраттанған алшақтықты орташалайды. Классификация үшін, кросс-энтропия болжанған ықтималдықтардың дұрыс жауаптан қаншалықты алшақ отырғанын өлшейді. Жоғары жоғалу «өте қате» дегенді білдіреді; оқытудың бүкіл мақсаты — осы санды төмендету.
Үшінші қадам — ептірек бөлігі: backpropagation. Есептеудің тізбекті ережесін (chain rule) қолданып, алгоритм жоғалудан кері қарай әр қабат арқылы жұмыс істеп, әр жеке салмақ үшін градиент есептейді — «мен осы бір салмақты бір қылшыққа жоғарылатсам, қате көбейеді ме әлде азаяды ма, әрі қаншалықты?» деген сұраққа жауап. Бұл — AI қысымын жібіткен айла. 1980-жылдары кеңінен танылған backprop миллиондаған салмақ бойынша кінәні болжаудың орнына тиімді бөлуге мүмкіндік берді.
Төртінші қадам — градиенттік түсу: жоғалуды азайтатын бағытта әр салмаққа кіші қадам жасау, w = w − α × ∂L/∂w ережесі бойынша. Тұманды тау беткейінде тұрғаныңызды және аңғар түбіне жетуге тырысатыныңызды елестетіңіз; түбін көрмейсіз, бірақ аяғыңыздың астында қай жол төмен екенін сезесіз, сол бағытта қадам жасап, қайталайсыз. Оқу мөлшерлемесі (learning rate) α — сіздің қадам ұзындығыңыз, ол бүкіл жүйедегі ең маңызды тұтқа. Тым үлкен болса, аңғарды өтіп кетіп, мәңгі секіресіз; тым кіші болса, мәңгіге дейін жылжитыныздай баяулайсыз немес жарым жолда шұңқырда қалып қаласыз.
Тез арада кездестіретін екі жетілдіру. Мини-пакеттер: әр жеке мысалдан кейін жаңарту (шулы) немес тек толық деректер жиынынан кейін жаңарту (баяу) орнына, шағын пакеттен кейін — әдетте 32-ден 256-ға дейінгі мысал — жаңартасыз, бұл тұрақты, GPU-ға ыңғайлы, және практикада тәтті нүкте. Ал Adam: әр салмаққа өз бейімделу қадамын беретін, шулы градиенттерді тегістеу үшін импульс қосатын ептірек оптимизатор. Adam дерлік кез келген жобаны бастауға сенімді әдепкі — бірақ қаржыда, оның сигнал-шу қатынасы төмен болғандықтан, сізге әлі де оқу мөлшерлемесін, салмақ ыдырауын, және тоқтату нүктесін қолмен реттеу қажет болады.
Overfitting: желі үйренудің орнына жаттап алғанда
Мұнда кез келген нәрседен көп қаржы моделін қиратқан сәтсіздік режимі бар. Нейрондық желі сонша икемді функция сәйкестендіргіш, мүмкіндік берілсе, ол сіздің оқыту деректеріңізді толықтай жаттап алады — оның ішінде барлық кездейсоқ шуды, бір реттік кездейсоқтықтарды, ешқашан қайталанбайтын сәйкестіктерді. Ол көрген деректеде тамаша баллдар алады, ал жаңа нәрсеге кездескен сәтте құлап түседі. Бұл — overfitting (қайта үйрену), ал нарықтарда — нақты сигнал әлсіз, шу керең қылатын жерде — бұл ерекшелік емес, әдепкі нәтиже. Онымен күресетін құралдар регуляризация деп аталады.
Dropout ең танымалы. Әр оқыту қадамында, әр нейрон уақытша сөндірілу ықтималдығына p ие (жиі 0.2–0.5). Кездейсоқ жандастар жоғалып тұрғанда да жұмыс істеуге мәжбүр болған желі білімін бірнеше нәзік нейронға бәс тіккеннің орнына көптеген нейрон бойында тарата үйренеді — бір модельге енгізілген ансамбль эффекті. Болжам жасау кезінде барлық нейрон қайта қосылады, тиісінше масштабталады.
L1 мен L2 айыппұлы үлкен салмақтарға жоғалуға салық қосады. L2 (салмақ ыдырауы) жалғыз бір салмақтың тым үлкен болуын болдырмайды, әсерді тегіс таратады. L1 өткірлеу: ол пайдасыз салмақтарды дәл нөлге дейін белсенді итереді, автоматты белгі таңдауын жасайды. Жүздеген белгінің көбі шу болатын қаржылық деректер жиынында, L1 нақты сигнал алып жүрген бір топ белгіні тыныш табады.
Batch normalization әр қабаттың шығысын тұрақты орта мән мен дисперсияға қайта масштабтайды, бұл оқытуды тұрақтандырады және жоғарырақ оқу мөлшерлемелерін қолдануға мүмкіндік береді. Ертерек тоқтату (early stopping) — ең қарапайым әрі ең сенімді қорғаныс: бөлектелген валидация жиынындағы қатені бақылаңыз, ол жоғарылай бастаған сәтте, оқыту қатесі әлі де құлдап жатқанда, тоқтатыңыз — осы кесілу нүктесі желі үлгілерді үйренуден шуды жаттап алуға өткен нақты сәт.
CNN үлгілер үшін, RNN мен LSTM тізбектер үшін
Қарапайым тура қуат желілер (feedforward) әр кірісті құрылымсыз сандар қапшығы ретінде қарастырады. Бірақ көп нақты деректің құрылымы бар — суреттің кеңістіктік орналасуы, баға сериясының уақыттық реттілігі — ал екі мамандандырылған архитектура сол құрылымды тікелей пайдаланады.
Конволюциялық нейрондық желілер (CNN) суреттер үшін құрылған. Әр пиксельді әр нейронмен байланыстырудың орнына, CNN кірістің бойымен кіші сүзгілерді жылжытады, жергілікті үлгілерді — мұнда шет, онда текстура — аулап, сол сүзгіні барлық жерде қайта пайдаланады. Ертерек қабаттар шеттерді ұстайды; тереңірек қабаттар оларды пішіндер мен объектілерге жинайды. Қаржыда, зерттеушілер CNN-ді мыналарға бағыттады:
- Свеча (candlestick) диаграммасының суреттері — диаграмма оқуды визуалды үлгі тану тапсырмасы ретінде қайта пайымдау.
- Тапсырыс кітабы жылу карталары — тереңдік-нарық снапшоттарында сұраныс/ұсыныс теңгерімсіздігін анықтау.
- Шикі баға тізбектеріне 1D конволюциялар — сурет CNN-і кеңістіктік үлгіні үйренетіндей, қысқа уақыттық мотивтерді үйрену.
Қайталама нейрондық желілер (RNN) тізбектер үшін құрылған. Олар жасырын күйді — ағымдағы жадты — әр қадамнан келесіге алып жүріп, бір уақыт қадамын бір-бірлеп өңдейді. Теорияда мұны уақыт сериялары үшін тамаша етеді. Практикада, кәдімгі RNN ұзын тізбектерде жоғалатын градиент мәселесінен зардап шегеді: көп қадам бұрынғы сигнал кері жолда нөлге дейін кішірейеді, сондықтан желі жай ғана алыс өткенді ұмытады.
Ұзын қысқа мерзімді жад (LSTM) желілер мұны әр қадамда жадтан не жоюды, не жазуды, не оқуды шешетін кіші жиынтық қапшыктармен (gates) — ұмыту, кіріс, шығыс — түзетеді. Осы қапшықтар LSTM-ге жүздеген қадам бойы қатысты ақпаратты ұстап тұруға мүмкіндік береді, дәл осы себептен ол кешегі оқиға бүгінгі бағаны қозғайтын қаржы уақыт сериясын модельдеу үшін жұмысшы аттарына айналды.
import torch.nn as nn
class PricePredictor(nn.Module):
def __init__(self, input_dim, hidden_dim, num_layers):
super().__init__()
self.lstm = nn.LSTM(input_dim, hidden_dim,
num_layers, batch_first=True,
dropout=0.2)
self.fc = nn.Linear(hidden_dim, 1)
def forward(self, x):
out, _ = self.lstm(x)
return self.fc(out[:, -1, :])
GaiaEx сияқты платформада, WebSocket ағындары үздіксіз баға мен тапсырыс кітабы деректерін ағызатын жерде, LSTM сол тізбекті табиғи түрде қабылдай алады. Дегенмен, сала негізінен алдыға кетті: трансформерлер — заманауи тілдік модельдердің артындағы архитектура — уақыт қадамдарын бір-бірлеп жүрудің орнына, барлығына бір мезгілде «назар аудару (attention)» арқылы қарап, көптеген тізбек тапсырмасында LSTM-ден асып түседі немес соғады.
Нейрондық желілер түзетпейтін нәрсе (әсіресе нарықтарда)
Нейрондық желілер тамаша үлгі таушылар. Бірақ адал білім беру олар қайда бұзылатынын атауды білдіреді — ал трейдингте, олар қымбат жолмен бұзылады.
- Олар ешбір нақты үлгі жоқ жерде де үлгі табады. Терең желіге шу берсеңіз, ол сенімді түрде оны сәйкестендіре береді. Нарықтар негізінен шу, сондықтан дәлел жүгі сізде — үлгінің нақты әрі тұрақты екенін көрсету, тек өткен жылдың деректерінде бар екенін емес.
- Олар қара жәшік. Модель дәл әрі неге екенін айта алмайтындай болуы мүмкін. Ол кенеттен ақша жоғалтқанда, жиі таза түсіндірме де, анық шешім де болмайды. Тәуекел алатын капитал үшін «мен оның неге солай істегенін білмеймін» деген нәрсе — ауыр жауапкершілік.
- Олар аш әрі нәзік. Терең оқыту миллиондаған таза мысалмен жарқырайды. Қаржы тарихы қысқа, тұрақсыз, әрі шулы — модельіңізді оқытқан режим жай ғана өмір сүруін тоқтата алады, бұл үлестірімнің ауысуы (distribution shift) деп аталатын мәселе.
- Олар қарапайым модельдерден тегін жеңбейді. Қаржыда жиі кездесетін кестелік, белгі негізіндегі деректерде, XGBoost сияқты градиентпен күшейтілген ағаштар нейрондық желілерден жиі асып түседі, әрі оқытуға жылдамырақ, түсіндіруге жеңілірек. Күрделілік — құн, ізгілік емес.
- Оларға шабуыл жасалуы мүмкін. Кірістегі кіші, әдейі бұрмалаулар желінің шығысын аудара алады — қарсылас мысал (adversarial example) — бұл модельіңіз көретін нәрсені қарсылас қалыптастыра алатын кез келген жерде маңызды.
Аппаратура, құралдар, және сіздің алдағы жолыңыз
Нейрондық желілерді оқыту арифметикаға ауыр — басым бөлігі матрицалық көбейту — ал оны жұмыс істететін аппаратура сіздің қайталау жылдамдығыңызды «түн бойы» деңгейден «кофе үстінде» деңгейіне дейін өзгертеді.
GPU стандарт. Олардың мыңдаған ядросы бірдей операцияны әр түрлі деректе бір мезгілде орындайды, бұл дәл нейрондық желі математикасының пішіні. CPU-де 8 сағат жорғалайтын модель заманауи GPU-де 15 минутта аяқтала алады. NVIDIA үстемдік етеді: тұтынушыға арналған карталар (RTX класты GPU) үйрену үшін жеткілікті, ал деректер орталығы карталары (A100, H100) мен бұлт даналары өндірістік көлемдегі оқытуды жасайды. Google-дың тензор математикасына арналған меншікті чиптері TPU Google Cloud арқылы өте үлкен модельдерде жарқырайды, бірақ GPU кеңірек бағдарламалық жасақтама қолдауының арқасында көптеген практиктер үшін тәжірибелі әдепкі болып қалады.
Бастау үшін сізге ештеме сатып алу қажет емес. Google Colab оқу мен прототиптеу үшін жеткілікті тегін GPU уақытын береді; модельдеріңіз өскенде талап бойынша бұлттық GPU жалдаңыз; жеке аппаратуралы тек күн сайын оқытып жатқанда және бұлт шоты соны ақтап отырғанда сатып алыңыз.
Осыдан ақылға сай оқу жолы:
- Бірнеше инженерияланған белгіде қарапайым тура қуат желісінен бастаңыз — жылдам оқытылады, жеңіл дебугтеу, адал базалық көрсеткіш.
- Шикі баға тізбегінде 1D CNN-ды сынап, оны сол базалық көрсеткішпен бетпе-бет салыстырыңыз.
- GaiaEx API-нен свеча деректерінің тізбегін жұтатын LSTM құрастырыңыз.
- Назар аудару (attention) мен трансформерлерді зерттеңіз — тізбектер үшін таралатын таңдаулы архитектура.
- Ең бастысы, әрдайым терең модельіңізді XGBoost сияқты градиентпен күшейту базалық көрсеткішіне қарсы қойыңыз. Егер нейрондық желі кестелік қаржы деректеріңізде үлгіден тыс қарапайым модельден асып түсе алмаса, қарапайым модельді жіберіп, алға жылжыңыз.
37-жүрісті тапқан цикл — болжау, қатені өлшеу, салмақтарды түзету, қайталау — осы тізімдегі әр жүйенің ішінде жұмыс істеп жатқан цикл. Осы циклді түсінсеңіз, терең оқытуды түсінесіз; қалғаны — соның үстіндегі архитектура мен инженерия ғана.

