Бааны, көлөмдү жана туруксуздукту болжолдоо үчүн көп тапшырманы үйрөнүү
Көп тапшырманы үйрөнүү (MTL) адатта ырастоо менен сатылат: коддогучту корреляцияланган максаттар боюнча бөлүшүңүз жана негизги тапшырма жакшырат. Соодада корреляциялык максаттар ачык көрүнүп турат - кирешелер, көлөм жана ишке ашырылган өзгөрүлмөлүүлүк бардыгы бир эле заказдын агымынан түшөт - жана ырастоо дээрлик эч качан текшерилбейт. Кызыктуу суроо милдеттердин бири-бирине байланышы бар-жогун эмес. Бул жалпы градиенттер макул болобу жана алар жок жерде бүктөлөрдө эмне болот.
Бул макалада MTL жазууларынын көбү шилтеме катары караган эки нерсенин борборуна коюлган:
- Жоготууларды тең салмактоо – бул детал эмес, эксперимент. Туруктуу салмактар, Кендаллдын белгисиздик салмагы жана GradNorm үч башка модель. Үчөөнү бирдей бүктөмдө чуркаңыз жана ар бири үчүн негизги тапшырманын метрикасынын жанында үйрөнгөн салмактарды билдириңиз.
- Терс которууну метриканы көргөнгө чейин өлчөөгө болот. Бөлүшүлгөн коддогуч тапшырма градиенттеринин ортосундагы косинус окшоштугу, машыгуу учурунда жардамчы тапшырмалар өкүлчүлүктү негизги тапшырма каалаган жерге тартып жатабы же жокпу, айтып берет. Косинустарга кол коюңуз, андан кийин белги ошол бүктөмдөгү натыйжаны алдын ала айткан-болбогондугун текшериңиз.
Түтүктө калган нерселердин баары - туруксуздук процесси, окутуу цикли, агып чыгууну башкаруу элементтери, валидация протоколу - бул блогдун башка жерлеринде камтылган жана кайра алынган эмес, байланышкан.
Жайгашуу

Берилген киргизүү өзгөчөлүктөрү (OHLCV, техникалык көрсөткүчтөр, буйрук агымы), үч максаттуу:
- 1-милдет (негизги): кийинки мезгилдин кайтарылышы
- 2-милдет (жардамчы): кийинки мезгилдеги журналдын көлөмү
- Тапшырма 3 (жардамчы): кийинки мезгилдеги өзгөрүлмөлүүлүк
Көп тапшырмалуу модель үчөөнү тең бир убакта чыгарат, , жана көп тапшырма тобокелдиги ар бир тапшырма боюнча тобокелдиктердин салмактанып алынган суммасы болуп саналат:
Макала толугу менен жөнүндө жана ар бир тапшырманын градиенттери бири-бирине эмне кылышы жөнүндө.
Эмне үчүн биргелешкен окутуу бир абзацта жардам бериши мүмкүн. Көмөкчү тапшырмалар бир эле учурда потенциалды көзөмөлдөө жана индуктивдүү тенденция болуп саналган бир нече рыноктук феноменди түшүндүрүү үчүн жалпы өкүлчүлүктү чектейт; жана көлөм жана туруксуздук түздөн-түз байкалгандыктан, "күтүлгөн кайтарым" жок болсо, көмөкчү баштар негизги башка караганда тазараак градиент сигналын беришет. Көптөгөн натыйжаларды чыгарган бир моделдин иши узакка чейин талкууланат - түшүндүрмө механизми тиркелген - көп горизонттук болжолдоо үчүн убактылуу синтез трансформаторлору, бул көп горизонттуу квантильдер үчүн бирдей бөлүшүлгөн-кодер-көп баштар аргументин түзөт.
Архитектура, кыскача
Катуу параметр бөлүшүү: жалпы коддогуч тоюттар милдеттери боюнча атайын жетекчилер , ошондуктан . Бул версия бул жерде өлчөнөт, анткени ал градиент карама-каршы турган версия жакшы аныкталган.
Жумшак параметр бөлүшүү ар бир тапшырмага бириктирүү жазасы менен өзүнүн коддорун берет — көбүрөөк параметрлер, көбүрөөк ийкемдүүлүк жана конфликтти өлчөө үчүн бирдиктүү параметр вектору жок. Кайчылаш тиккен тармактар ортодо отуруп, үйрөнүлгөн матрица аркылуу ар бир тапшырманын функцияларын аралаштырат ар бир деңгээлде. Катуу бөлүшүү карама-каршылыктарды көрсөтсө жана экөө тең төмөндөгү өлчөөнүн алкагына кирбейт.
Маанилүү эксперимент: үч жоготууларды тең салмактоо схемасы

Адал жоготуу масштабга сезгич. Эгерде кайтарым жоготуу айланасында жашайт жана айланасында көлөмүн жоготуу , көлөмү градиент жана кайтып башы ачкачылыкка ээ. Үч жооп:
Белгиленген салмактар. Орнотуу ар бир максатты стандартташтыргандан кийин. Чынчыл база - эгерде ал жеңсе, адаптацияланган схемалар азем болуп саналат.
Белгисиздикти өлчөө (Kendall et al., 2018). Гомоскедатикалык ызы-чуу шкаласын үйрөнүңүз тапшырма боюнча:
Белгисиздиги жогору тапшырмалар автоматтык түрдө төмөндөйт; термини маанисиз чечимине бөгөт коет. Муну белгилеңиз: бул алдын ала интервал эмес, машыгуу убактысын жоготууну өлчөөчү аспап — белгисиздик үчүн позицияны өлчөй аласыз, караңыз конформдык болжолдоо.
GradNorm (Чен ж.б., 2018). Жоготуу шкалаларынын ордуна градиент магнитудаларын тең салмактаңыз. Ар бир кадам: эсептөө жана орточо , салыштырмалуу окутуу курсун эсептөө , жана жаңыртыңыз . Андан кийин бардык тапшырмалар жоготуулардын масштабына карабастан салыштырылуучу темпте машыгат.
MTL өзгөчө коду башчылары, тизмеси-кайтарып алдыга, жана жоготууларды бириктирүү болуп саналат. Linear/BatchNorm/ReLU/Dropout стек, Адам/косинус/клип казан тактасы жана доордун цикли төмөнкүдө көрсөтүлгөн стандарттык үлгү болуп саналат. DeepLOB жана бул жерде алынып салынды.
import torch
import torch.nn as nn
class MultiTaskTradingModel(nn.Module):
"""Hard parameter sharing: one encoder, K heads."""
def __init__(self, encoder: nn.Module, repr_dim: int, n_tasks: int = 3):
super().__init__()
self.shared_encoder = encoder # any MLP/CNN/GRU trunk
self.task_heads = nn.ModuleList(
nn.Linear(repr_dim, 1) for _ in range(n_tasks)
)
def forward(self, x):
h = self.shared_encoder(x)
return [head(h).squeeze(-1) for head in self.task_heads]
def shared_repr(self, x):
return self.shared_encoder(x)
class UncertaintyWeightedLoss(nn.Module):
"""Kendall et al. (2018) homoscedastic weighting."""
def __init__(self, n_tasks: int = 3):
super().__init__()
self.log_vars = nn.Parameter(torch.zeros(n_tasks)) # log(sigma^2)
def forward(self, losses: list) -> torch.Tensor:
return sum(
torch.exp(-self.log_vars[i]) * loss + self.log_vars[i]
for i, loss in enumerate(losses)
)
def get_weights(self) -> list:
with torch.no_grad():
return [torch.exp(-lv).item() for lv in self.log_vars]
UncertaintyWeightedLoss параметрлери бар, ошондуктан ал модель менен катар оптимизаторго кириши керек: optim.Adam(list(model.parameters()) + list(uw.parameters()), ...). Муну унутуу - "белгисиздикти өлчөөнүн" эң кеңири таралган жолу жана анын ордуна туруктуу салмактарды унчукпай иштетүү.
Эмнени кабарлаш керек
Ар бир схема үчүн, ар бир бүктөмдө: үйрөнүлгөн акыркы тапшырманын салмактары, негизги тапшырманын метрикасы жана - салмактуулук схемасы үлгү тандоо болгондуктан - бирин тандоодон мурун канча схема салыштырылган.
| Схема | Негизги тапшырма метрикасы жана бир тапшырма | |||
|---|---|---|---|---|
| Оңдолгон () | 1.00 | 1.00 | 1.00 | — |
| Белгисиздиктин салмагы | — | — | — | — |
| GradNorm | — | — | — | — |
Үч схемалар жолу бир нече бүктөлгөн мурунтан эле кичинекей модель издөө. Бул жерде билдирилген ар кандай жакшыртуулар бөлүмдө сүрөттөлгөн бир нече тестирлөөдөн өткөн оңдоодон өтүшү керек deflated Sharpe жана бир нече сыноо эч нерсе дегенди билдирерден мурун.
Терс которуу: Градиенттерге кол коюу

Бул сактоого татыктуу бөлүгү болуп саналат. Терс которуу - бул көмөкчү тапшырмалар негизги тапшырманы начарлатып, анын түз диагностикасы бар: бөлүшүлгөн параметр мейкиндигинде тапшырма градиенттеринин ортосундагы бурч.
Жалпы коддогучта гана өлчөнөт — баштар конструкциясы боюнча тапшырмага мүнөздүү жана ар дайым майда-чүйдөсүнө чейин "макул".
import torch.nn.functional as F
def shared_grad(model, x, y, task_idx, criterion=nn.MSELoss()):
"""Gradient of task `task_idx` w.r.t. the shared encoder, flattened."""
model.zero_grad(set_to_none=True)
loss = criterion(model(x)[task_idx], y)
loss.backward()
return torch.cat([
p.grad.detach().flatten()
for p in model.shared_encoder.parameters()
if p.grad is not None
])
def task_conflict(model, x, y_by_task, task_names):
"""Pairwise cosine similarity between per-task shared-encoder gradients."""
grads = {
name: shared_grad(model, x, y_by_task[name], i)
for i, name in enumerate(task_names)
}
return {
(a, b): F.cosine_similarity(
grads[a].unsqueeze(0), grads[b].unsqueeze(0)
).item()
for i, a in enumerate(task_names)
for b in task_names[i + 1:]
}
Муну акырында бир жолу эмес, машыгуу учурунда белгиленген каденцияда кармалып турган партияга чакырыңыз. Кодер адистештирилген сайын жуп тегиздеп башталып, айырмаланышы мүмкүн; бир гана окуунун аяктоочу саны муну жашырат.
Издөө жана жарыялоо үчүн табылга:
| Жуп | cos sim, эрте окутуу | cos sim, кеч машыгуу | MTL негизги ишке жардам берди? |
|---|---|---|---|
| кайтуу ↔ көлөмү | — | — | — |
| кайтаруу ↔ туруксуздук | — | — | — |
| көлөмү ↔ туруксуздук | — | — | — |
Эгерде көлөм жана туруксуздук градиенттери бири-бири менен макул болуп, экөө тең кайтаруу градиентине карама-каршы келсе, туура жыйынтык эки жардамчы тапшырма кайтаруу тапшырмасы таандык эмес ырааттуу блокту түзөт - жана оңдоо - бул тапшырмаларды топтоо, көбүрөөк кубаттуулук. Конфликт реалдуу болгондо, стандарттуу каражаттар PCGrad (Yu et al., 2020) болуп саналат, алар ар бир карама-каршылыктуу градиентти башкасынын кадимки тегиздигине проекциялайт; CAGrad (Liu et al., 2021), ал эч кандай тапшырмага зыян келтирбеген түшүү багытын издейт; же жардамчы тапшырманы толугу менен таштоо.
Атайылап жок болгон нерсеге көңүл буруңуз: максаттуу мааниге боёлгон бөлүшүлгөн өкүлчүлүктүн t-SNE сюжети. Бул кооздук - жогорудагы косинус сандары кыстаруу жаңсоо кыла турган нерселердин бардыгын айтат жана алар аны сандар катары айтышат.
Валидация протоколу

Жогорудагы өлчөө шалаакы протокол боюнча эч нерсеге арзыбайт жана MTL кадимки тузактарды ого бетер начарлатат, анткени бир эмес, үч максат бар.
Симулятор эмес, реалдуу маалымат. Максаттар чыныгы OHLCV/соода маалыматтарынан алынышы керек. Катуу коддолгон GARCH оюнчугу өзгөрүлмөлукту жаратат, ал * курулуш боюнча* кайтарым менен байланышат, бул так сыналып жаткан нерсе - эксперимент өзүнүн генераторун өлчөйт. Эгер сиз орнотулган өзгөрмө процессти кааласаңыз, Крипто үчүн GARCH туруксуздугун болжолдоо реалдуу BTC/ETH боюнча максималдуу ыктымалдыгы боюнча GARCH(1,1) туура келет жана стандартташтырылган калдыктарды ырастайт жана асимметриялык GARCH жана рычаг эффектиси Гаусс симметриялуу жооп симулятору эмне үчүн биринчи кезекте крипто туруксуздугун туура эмес көрсөтөт. Синтетикалык маалыматтар башкарылуучу негиздүү чындыкты камсыз кылганда гана корголот - сиз калыбына келтирүүгө аракет кылып жаткан белгилүү, автор тарабынан коюлган тапшырма корреляциясы - бул жердегиден башка эксперимент.
Масштаб салгычтар поездге гана туура келет. Функциянын масштабын жана үч максаттуу масштабдагычты ар бир машыгуу бүктөмүнө орнотуп, валидацияга колдонуңуз; глобалдык fit_transform окууга бөлүү алдында тест-топтолгон учурлар агып. Бул так ийгиликсиздик каталогдо бар алдыга умтулуу таксономиясы.
Тазаланган, эмбарго коюлган алдыга бүктөмөлөр. Бир 80/20 хронологиялык бөлүнүү MTL жакшыруусун бүктөлгөн эффекттен айырмалай албайт — бул бүт аргумент алдыга оптималдаштыруу, бул үч тыянак чыгаруучу үч бөлүнүүнү көрсөтөт. Кеңейтүүчү терезени кайра колдонуңуз purged_walk_forward генератордон машина үйрөнүү менен моделдөө жайылтылат: ал боштук төмөндөтөт horizon ар бир чектин эки тарабында катарлар, бул жерде маанилүү, анткени кайталануучу максат жок болсо да, кайталанган өзгөрмөлүү терезелер чек арадан агып кетет.
Классикалык база. Бир максаттуу градиентти көтөрүүчү же кырка модели төртөөнү тең жеңсе, үч бир тапшырмалуу торду жеңген MTL тору эч нерсе далилдеген жок. Бир бутага бир моделди LightGBM же кырка менен бирдей бүктөлмөлөргө жана ошол эле функцияларга тууралап, аны ошол эле таблицада билдириңиз.
| Модел | Негизги тапшырма көрсөткүчү | Эскертүүлөр |
|---|---|---|
| Ridge, ар бир максатка | — | Классикалык базалык |
| LightGBM, бутага | — | Классикалык базалык |
| Бир максаттуу MLP, бир максат үчүн | — | Үч өзүнчө тор |
| MTL, мыкты жоготуу схемасы | — | Бир тор, үч баш |
Бул жерде MTL эмнеге татыктуу болот

MTL утушу керек болгон шарттар, текшерүү тизмеси катары эмес, жогорудагы бүктөмөлөрдү текшерүү үчүн гипотеза катары айтылган:
- Көмөкчү энбелгилер негизги энбелгиге караганда тазараак. Көлөмү түздөн-түз байкалат; "күтүлгөн кайтарым" эмес. Эгерде кайтуучу баш негизинен ылайыктуу ызы-чуу болсо, көмөкчү баштардан градиент сигналы максаттын бирден-бир жакшы коюлган бөлүгү болуп саналат.
- Окутуу маалыматтары коддогуч кубаттуулукка салыштырмалуу чектелген, ошондуктан көмөкчү чектөө жөн гана параметрлер үчүн атаандашкандан көрө реалдуу регуляризациялоо ишин аткарат.
- Корутундунун күтүү убактысы маанилүү жана бир алдыга өтүү үчтөн ашат.
Ал эми каршы иш, бирдей сыналышы мүмкүн: өлчөнгөн болсо cos_sim(return, ·) баалуулуктар тынымсыз терс, бөлүшүлгөн коддогуч негизги тапшырмадан четтетилип жатат жана көмөкчү баштар регуляризатор эмес, салык болуп саналат.
Корутунду

Кайтаруулар, көлөм жана туруксуздук бир эле микроструктурадан келип чыгат, ошондуктан жалпы өкүлчүлүк акылга сыярлык, бирок алдын ала жыйынтык эмес. Бул орнотуу чындыгында түзө ала турган эки нерсе - маалыматтар кайсы жоготууларды тең салмактоо схемасын артык көрөт (жеңүүчүнүн аты эле эмес, үйрөнүлгөн салмактар билдирилген) жана жалпы коддогуч тапшырма градиенттери макулбу же жокпу, бул максаттардын бири-бирине байланышы бар экендигине таянуу менен эмес, машыгуу аркылуу өлчөнөт.
Эгерде тазаланган алдыга бүктөлмөлөр MTL торунун ар бир максаттуу градиентти көтөрүүчү моделди жеңе албастыгын көрсөтсө, анда бул табылга жана ал ушундайча жарыяланат - шаблон чынчыл терс. Терс которуу боюнча терс натыйжа дагы эле терс которуунун натыйжасы болуп саналат.
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.