DL2022: Pytorch (часть 2)
1:25:47
DL2022: Pytorch (часть 1)
55:56
DL2022: Анализ текстов
1:28:19
Пікірлер
@andreib8871
@andreib8871 3 күн бұрын
Александр Геннадьевич, подскажите, пожалуйста, почему на слайде 19 вероятность считается по указанной формуле? По идее, нам нужна оценка вероятности слова_контекста при условии слова_цели, которую мы должны оценить из тренировочных данных. И тут не совсем понятно, как это коррелирует софтмаксом скалярного произведения эмбедингов.
@drumcord
@drumcord 2 ай бұрын
Нашёл простое визуализированное объяснение, в виде графических абстракций, на канале "Google for Developers" Название: A.I. Experiments: Visualizing High-Dimensional Space Если не удалят - ссылка будет в комментарии ниже. Я смотрел через яндекс браузер с переводчиком.
@drumcord
@drumcord 2 ай бұрын
A.I. Experiments: Visualizing High-Dimensional Space kzbin.info/www/bejne/rafWdmugopZ6sKc&ab_channel=GoogleforDevelopers
@drumcord
@drumcord 2 ай бұрын
Спасибо большое за объяснения ) почувствовал себя умственно отсталым По сравнению с вашим уровнем развития в этой области, так и есть. Думаю тут стыдиться нечего. Наверное без знаний математики бессмысленно пытаться понять устройство LLM на примерах и упрощённых аналогиях? Всгего то пытался понять, как это "слова" шифруются в числа, и кодируются в векторные "ембединги" в пространствах и измерениях с сотнями координатных осей. Это за пределами моего понимания евклидовой геометрии. И всё через формулы, формулы и ещё раз формулы... Никакого понимания, как это шестисотмерное пространство вообразить, и какие там координатные оси...
@egger_2283
@egger_2283 2 ай бұрын
Здравствуйте, на 49:07 Вы говорите, что мы подаем в нейронку слова, но откуда мы получаем векторное представление для того, чтобы передать его в модель. Из того же самого ворд ту века, с которым мы потом конкатим эмбеддинг? И используем ли мы какую-то аугментацию для ворд-ту-века? Условно в русском языке можно попробовать поварьировать падеж или множественное/единственное число?
@alexanderdyakonov8305
@alexanderdyakonov8305 2 ай бұрын
Там на картинке - используется Glove-представление слов.
@user-qb2od7es2y
@user-qb2od7es2y 2 ай бұрын
По задаче Прогнозирования визитов покупателей хотел добавить комментарий - неделя же циклична, потому считать вероятность для ПН как дня первого прихода как p1 может дать не лучший результат. Ведь за начало недели можно условно принять и ВС, и ПТ и другой день, тогда и все распределения вероятностей станут другими.
@alexanderdyakonov8305
@alexanderdyakonov8305 2 ай бұрын
На 54:30 я говорю, что 1й день - это первый день после того, как заканчивается наша обучающая выборка. Это может быть любой день недели. Но для простоты я буду дальше говорить понедельник, вторник и т.д. Чтобы не говорить "первый день теста", "второй день теста" и т.д.
@user-qb2od7es2y
@user-qb2od7es2y 2 ай бұрын
@@alexanderdyakonov8305 прошу прощения, упустил этот момент
@71sephiroth
@71sephiroth 3 ай бұрын
wish I know Russian...
@andreib8871
@andreib8871 3 ай бұрын
Александр Геннадьевич! Большое вам спасибо за ваши лекции! Мне было очень интересно и очень познавательно! Спасибо за возможность учиться у вас)
@alexanderdyakonov8305
@alexanderdyakonov8305 3 ай бұрын
Пожалуйста. Рад, что пригодилось и понравилось! И спасибо за вопросы (сейчас ответил на те, что раньше не успел).
@andreib8871
@andreib8871 4 ай бұрын
Александр Геннадьевич, подскажите, пожалуйста, по слайду 13: для чего нам нужно второе слагаемое в первой оптимизации? Почему бы не убрать его и просто оставить: (1) max[E logD(x)] (2) max[E log(D(G(z))]?
@alexanderdyakonov8305
@alexanderdyakonov8305 3 ай бұрын
Так это для того, чтобы дескриминатор фейки правильно классифицировал
@andreib8871
@andreib8871 4 ай бұрын
Александр Геннадьевич, добрый день! Можете, пожалуйста, пояснить слайд 72. У нас есть случайная величина x, мы нашли функцию f, которая отображает “x” в “z” ( уже имеет удобное для нас распределение, например, нормальное). Но как мы получили формулу: p_x = p_z|det df/dx|?
@alexanderdyakonov8305
@alexanderdyakonov8305 4 ай бұрын
Это просто формула замены переменной. Например, в одномерном случае: lms2.sseu.ru/courses/eresmat/course1/razd5z1/par5_5z1.htm
@andreib8871
@andreib8871 4 ай бұрын
Александр Геннадьевич, попробую уточнить свой вопрос. У нас есть z=f(x), p(z) - плотность распределения z, интеграл обозначу []. Тогда получим: [p(z)dz] = [p(f(x))df/dx]. Поскольку f - многомерная функция, а х - вектор, то рождается якобиан. Какие у меня появляются вопросы: в моих вычислениях все находится под знаком интеграла, а на слайде (1) без интеграла (2) слева p(x), а не p(z) как у меня (3) справа не якобиан, а модуль детерминанта якобиана. Как это получилось?
@alexanderdyakonov8305
@alexanderdyakonov8305 3 ай бұрын
@@andreib8871 Там на самом деле должен быть модуль. Вот например вывод формулы: matan.math.msu.su/files/zorich/2%20Uchebnye%20materialy/8%20Lecture%20Zamena%20peremennykh.pdf
@andreib8871
@andreib8871 5 ай бұрын
Александр Геннадьевич, здравствуйте! Возник вопрос по слайду 48. Авторы обучили контекстный кодировщик, а как они его сравнивают по категории «Detection»? Ведь для работы детектора нужна другая архитектура, лоссы. Для классификации более понятно - можно заморозить веса кодировщика, добавить линейный слой и обучить его. А вот для детекции и сегментации не совсем понятно.
@alexanderdyakonov8305
@alexanderdyakonov8305 4 ай бұрын
Здравствуйте! Они использовали в Fast R-CNN свой предобученный кодировщик, а дальше уже на стандартной архитектуре дообучались детектированию. arxiv.org/pdf/1604.07379.pdf
@Vadim_Ozheredov
@Vadim_Ozheredov 5 ай бұрын
Прикладные Интересные Задачи Дата-Анализа
@antone2775
@antone2775 5 ай бұрын
Но тогда и 4к должно быть меньше, т к если будет 2 или 3 то это сдвинет в центр распределение
@andreib8871
@andreib8871 5 ай бұрын
Александр Геннадьевич, здравствуйте! Прослушивая слайд 77, решил сделать эксперимент - 4 реализации одной и той же сети : (1) сеть с nn.Parameter (2) cеть без nn.Parameter (тензоры с градиентом) (3) cеть без nn.Parameter (тензоры без градиента) (4) сеть с nn.Linear. Далее сделал одинаковую инициализацию всех сетей. ForwardPass: для всех 4х сетей совпал. Backward pass: для сети (3) упал с ошибкой. Градиенты сети 1 и 4 совпали, а вот у сети 2 получились иные значения градиента ...
@alexanderdyakonov8305
@alexanderdyakonov8305 5 ай бұрын
ForwardPass: конечно, у Вас формула одинаковая Backward pass: (3) - Pytorch не считает градиенты для этих параметров, т.к. Вы не сказали ему это делать Там надо ещё, чтобы инициализация совпадала этих параметров, а то и прямой проход будет разным
@aneleg233
@aneleg233 6 ай бұрын
Очень интересно! Огромное спасибо! ❤
@andreib8871
@andreib8871 6 ай бұрын
Александр Геннадьевич, добрый день! Вопрос возник по слайду 45. Я правильно понимаю, что при обучении сети GPT2 как раз использовался язык MQAN? Этот набор «команд» при обучении был ограничен? Сложно представляется, как модель смогла научиться отвечать на любой вопрос …
@alexanderdyakonov8305
@alexanderdyakonov8305 6 ай бұрын
Нет, как раз не был... поверить действительно сложно, но она и не научилась идеально отвечать. Скажем, сколько будет 2*2 - отвечала, а 3*12 - ошибалась. Вот уже потом GPT3 тьюнили "под надзором людей": arxiv.org/pdf/2203.02155.pdf И она уже очень неплохо отвечала!
@boriswithrazor6992
@boriswithrazor6992 7 ай бұрын
На 49:15 говорится, что усреднение весов моделей почти всегда не работает Сейчас появилась парадигма Model Soup, которая показывает, что очень даже работает (хотя конечно это не усреднение в лоб, а есть нюансы, как модели получать) и местами даже лучше, чем ансамбли) За лекцию огромное спасибо, очень информативно!
@user-dp3hj4df6j
@user-dp3hj4df6j 8 ай бұрын
Спасибо, очень круто!!!
@user-jo5pg8ss5z
@user-jo5pg8ss5z 8 ай бұрын
Здравствуйте, спасибо большое Вам за ваш курс и за то, что Вы им поделились ) Узнаю для себя очень много нового из ваших лекций (я CV ML инженер). Спасибо большое за ваш труд, блог и потрясающие лекции. Очень нравится ваша авторская подача материала, работа с аудиторией, демонстрация основных идей и погружение в детали и нюансы.
@doniyordjon_pro
@doniyordjon_pro 8 ай бұрын
А про какой сорев идет речь в конце, можно ссылку
@user-op2vt8zj8t
@user-op2vt8zj8t 9 ай бұрын
Добрый день! А где можно найти вторую часть? Спасибо!
@alexanderdyakonov8305
@alexanderdyakonov8305 9 ай бұрын
Наверное нигде.
@user-ze9eu4lt3y
@user-ze9eu4lt3y 9 ай бұрын
Спасибо за лекцию! Странно получается: сигмоида в качестве функции активации плоха тем, что для больших значений abs(Xij) ее производная = 0 и веса, зависящие от этой производной, не обновляются (в том числе с предыдущих слоев). А ReLU, обнуляющая градиенты, где соответствующие элементы Xij < 0 (+ часть градиентов с предыдущих слоев) - это хорошо. Хотя обе не обновляют кучу весов и еще вопрос кто больше.
@alexanderdyakonov8305
@alexanderdyakonov8305 9 ай бұрын
Да, тут тонкий момент. И он до конца не интуитивен. ReLU хотя бы на половине своей области определения хороша с точки зрения градиента: мы в SGD будет правильно идти и не маленькими шагами. У сигмоиды хорошая зона только около нуля. В целом, инициализацией и грамотной оптимизацией там можно удерживаться, но, как показывает практика, сложно. А самое плохое, что если ошибка большая, то мы шагаем очень медленно (т.к. при больших по модулю значениях аргумента сигмоида имеет пости нулевую производную). Почему нулевая производная и само значение ReLU на половине оси ничему не мешает - открытый вопрос. Но думаю, что это срабатывает как аналог DropOut-a, т.е. как регуляризация.
@user-ze9eu4lt3y
@user-ze9eu4lt3y 9 ай бұрын
@@alexanderdyakonov8305, спасибо за ответ! То есть, если даже мы удерживаем входные значения Xij для слоя сети в "хорошей зоне сигмоиды", то при backpropagation уже на пяти слоях производная сигмоиды уменьшит градиенты минимум в 1000 раз (максимум производной = 1/4, 1/4**5 ~ 1к) и веса не будут почти обновляться? Получается, есть корреляция между большой ошибкой на конкретном объекте и большими по модулю входными для слоев Xij формирующими эту ошибку? Интересно, если ReLU отключает обновление половины весов, регуляризируя тем самым нейронку и мешая переобучаться, почему тогда всякие ее модификации часто лучше себя показывают, хотя они, вроде, и не обнуляют градиенты у весов... Столько всего тут происходит))
@andreib8871
@andreib8871 9 ай бұрын
Александр Геннадьевич, здравствуйте! Позвольте еще вопрос по слайду 51. Если ячейка (например, верхняя левая) не является центром какой-либо рамки, то что модель должна выдавать для нее в координаты x, y, w, h?
@alexanderdyakonov8305
@alexanderdyakonov8305 9 ай бұрын
Ничего, точнее в данном случае нулевые уверенности.
@KobylkinKS
@KobylkinKS 10 ай бұрын
1:03:53 прошу прощения, не совсем понял. Если взять в качестве phi эмпирическую функцию распределения выборки различных x_i для нечетного n, разве у нас не получится медиана ?
@KobylkinKS
@KobylkinKS 9 ай бұрын
Не совсем корректная догадка, так как эмпирическая функция не имеет обратной.
@KobylkinKS
@KobylkinKS 10 ай бұрын
6:14 не совсем понял, разве закон больших чисел не утверждает, что выборочное среднее является состоятельной оценкой матожидания?
@alexanderdyakonov8305
@alexanderdyakonov8305 10 ай бұрын
Да, всё верно. Это я там тупанул.
@andreib8871
@andreib8871 10 ай бұрын
Александр Геннадьевич, здравствуйте! А если на слайде 13 добавить еще одно фото, на котором котенок есть (ground true = 1), но детектор вообще ничего не обнаружил (т.е. даже ошибочных детекций там нет). Как такой пример добавить в таблицу расчета AP?
@alexanderdyakonov8305
@alexanderdyakonov8305 10 ай бұрын
В таблице измениться столбец Recall: будет [1/5, 2/5 ,3/5, 3/5]
@andreib8871
@andreib8871 10 ай бұрын
Понял, спасибо)
@nadirbekovnadir
@nadirbekovnadir 11 ай бұрын
10/10
@anatolyalekseev101
@anatolyalekseev101 11 ай бұрын
Получается, случайное кодирование категорий призвано найти возможный ординальный порядок в номинальных данных? По поводу кодирования мелких категорий в одну, а нельзя ли это как-то улучшить с помощью теории информации? Что, если в категориальном признаке только некоторые уровни несут информацию о таргете, нельзя ли все остальные сплавить в "общую категорию бесполезных"?)
@alexanderdyakonov8305
@alexanderdyakonov8305 11 ай бұрын
- что-то типа того - ну вот проблема мелких категорий в том, что у них опасно смотреть на таргет: мало статистики. Если только как-то по-другому их упорядочить...
@spke
@spke 11 ай бұрын
@alexanderdyakonov8305, вы конечно сейчас будете смеяться, но полученный вами оптимальный порог для F-меры - совсем не случайное число; на самом деле оно равно 1 - 1/phi, где phi - это золотое сечение :)
@alexanderdyakonov8305
@alexanderdyakonov8305 11 ай бұрын
Хорошее замечание. Но золотое сечение можно притянуть к любому выражению с корнем из 5;) Надо подумать, есть ли здесь какая-то здравая интерпретация этого факта...
@spke
@spke 11 ай бұрын
@@alexanderdyakonov8305 как прикладной математик, я не верю в случайные совпадения: introspec.retroscene.org/other/dyakonov_golden_ratio_youtube.jpg :)
@spke
@spke 11 ай бұрын
@@alexanderdyakonov8305 извините за назойливость, но я подумал что м.б. приложенные мной выкладки до вас не дошли. Там действительно возникает золотое сечение, хотя видимо не из-за каких-то особенный свойств F_1, а просто по стечению обстоятельств для выбранного вами примера.
@alexanderdyakonov8305
@alexanderdyakonov8305 11 ай бұрын
@@spke Да, спасибо за замечание!
@anatolyalekseev101
@anatolyalekseev101 11 ай бұрын
Кстати, не ясно, почему это leave one out стратегия для target encoding может вызывать утечки таргета. Но раз катбуст-подход с expanding window даёт хорошие результаты, наверное, случайное сэмплирование N раз может дать ещё лучшее? По кодированию категориальных факторов лекция в общий доступ, видимо, не попала (
@alexanderdyakonov8305
@alexanderdyakonov8305 11 ай бұрын
kzbin.info/www/bejne/mIXYpH6gesZngac 18:51
@VladyslavHadzhykhanov
@VladyslavHadzhykhanov Жыл бұрын
Подскажите, пожалуйста, как соотносится то, что размерности матриц W^Q, W^K, W^V не зависят от числа объектов -- s и то, что трансформер работает с батчами, "добитыми" паддингом до фиксированной длины, а не до максимальной длины по батчу? То есть по сути модель таки требует фиксированное число токенов на вход, но не понятно, почему?
@marky200024
@marky200024 Жыл бұрын
Лучшая лекция по бустингам из тех, что я слушал. Большое спасибо!
@andreib8871
@andreib8871 Жыл бұрын
Александр Геннадьевич, добрый день! Вопрос возник по слайду 20 (42:30). На самом нижнем уровне нарисован исходный тензор для предложения "The cat sat on the red mat". Судя по изображению, слова представляются векторами размерности 5. Тогда ведь свертка (красная линия) должна действовать не по строке, а захватывать всю размерность 5? (по аналогии с канальностью изображений).
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
Да, вроде так и делается, если верить оригинальной статье (п.3.1) и реализациям, которые есть на гитхабе. Возможно, рисунок не совсем корректный, тут возникает ещё вопрос, почему не меняется размерность представлений (число строк в нарисованных матрицах).
@user-mhlrfvv
@user-mhlrfvv Жыл бұрын
На 5:57 нужно домножать не на exp(z), а на exp(z/2), тогда получается softmax(z/2, -z/2). Получается сигмоида выдаёт значения вероятностей ближе к 0.5, чем softmax.
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
Да, верно.
@doniyordjon_pro
@doniyordjon_pro Жыл бұрын
А как увеличивать масштаб визуализации, в конце про точек?
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
Это 1:14:03? Например, поменять xlim, ylim - т.е. видимую область.
@doniyordjon_pro
@doniyordjon_pro Жыл бұрын
​@@alexanderdyakonov8305 axa, спасибо
@andreib8871
@andreib8871 Жыл бұрын
Александр Геннадьевич, еще вопрос возник: производные dL/dw нужны нам для обновления параметров сети, поэтому мы их считаем, а для чего нам нужны производные dL/dx?
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
А... хороший вопрос! Они пока нам не нужны, но потом понадобятся. Например, для стилизации изображений по методу Гатиса. Или для "атак на нейросети".
@user-fz1hn1sl8i
@user-fz1hn1sl8i Жыл бұрын
Спасибо за лекцию! А будут ли выкладываться обновленные слайды? А то в репе ссылка на слайды 20го года.
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
Видимо пока нет. Но по новым лекциям будут новые слайды залиты.
@rinkornalb
@rinkornalb Жыл бұрын
А "Self-Supervision часть 2" планируется в этом плейлисте? Так-то весьма интересная тема!
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
Вроде она не очень хорошо записалась, поэтому пока не будет.
@albertatlasov1411
@albertatlasov1411 Жыл бұрын
Спасибо за ваш курс лекций! ❤
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
Пожалуйста!
@dronnet
@dronnet Жыл бұрын
Да уж...вот это класс. Есть чему поучиться )) Спасибо, для меня довольно необычная задача.
@anatolyalekseev101
@anatolyalekseev101 Жыл бұрын
На 16:48 про генерацию некоррелирующих признаков MAD из двух видов средних подумалось провести мини-исследование: нагенерить много случайных 1d массивов с разным распределением, возможно, взять какие-то реальные датасеты, для них всех рассчитать все возможные комбинации таких средних и MAD, посмотреть, какие наиболее некоррелированы (в линейном смысле и смысле взаимной информации) с остальными того же датасета. Возможно, даже потестировать предсказательную силу таких фичей (если составить искусственные зависимости) по сравнению со случайной подвыборкой. Не знаю, можно ли тут ожидать вообще какого-то стабильного обобщения, но если такое вдруг обнаружится, это позволит в реальной работе быстро проверять экзотические "киллер фичи", до которых в конкретном проекте и руки бы не дошли.. Хм, тогда уже и комбинации математических операций полезные исследовать на 18:40.
@dronnet
@dronnet Жыл бұрын
Решил не просто лекцию просмотреть, а и понабирать за автором код в юпитере. И вот как только начал набирать так сразу улыбнулся. В самом начале, где задатся функция y, в скобочках есть sin x **2 + сos x **2, а это же единица :) итого вся функция y = sin x но это я не с целью докопаться, просто заметил :)
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
Естественно, это "на вид сложная функция", производная которой вычисляется в уме. Но Pytorch же не знает тригонометрических формул.
@anatolyalekseev101
@anatolyalekseev101 Жыл бұрын
Приведённый алгоритм вычисления среднего Шурыгина кажется неполным. Хотел реализовать, но слишком много неясностей. (
@andreib8871
@andreib8871 Жыл бұрын
Александр Геннадьевич, добрый день! Возник вопрос по лекции, подскажите, пожалуйста. Не совсем понятна размерность результата для dz / dW (1:02:30). Ведь если мы говорили на слайде 42 о "форме" производных: производная (число), градиент (вектор), якобиан (матрица), то для dz/dW должен быть какой-то трехмерный результат (ведь z - это вектор, а W - это матрица)? А получилось, что dz/dW = x^T.
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
Совершенно верно. Формально должен быть 3х-мерный результат. Но тут мы немножко схалтурили, т.к. мы берём "прозводную по матрице", в ответ выписали матрицу такого же размера, её ij-й элемент это как раз производная по w_ij. И если так сделать, то формально представленное равенство верно. Тут ещё важный момент наше произведение стало внешним: мы умножаем не на вектор-столбец, а на вектор-строку. Смотрите сразу на последнюю строчку на слайде. Там объясняется, почему записанную выше запись можно считать верной.
@Beowulf245
@Beowulf245 Жыл бұрын
Спасибо огромное за продолжение DL) А то я уже весь курс по 3-му разу пересматриваю - очень интересно.
@andreib8871
@andreib8871 Жыл бұрын
Александр Геннадьевич, здравствуйте! В лекции (26:50) вы делаете допущение о нулевом смещении при линейных операциях внутри сети. Можете подсказать почему делается это допущение или где можно почитать, чтобы разобраться в этом вопросе?
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
Если у нас есть константный ненулевой признак, то на первом слое смещение не нужно. А на последующих можно тоже обойтись без него, ведь если, например, мы используем сигмоиду, то при нулевых весах нейрон всегда выдаёт константу 1/2, т.е. он реализует смещение для следующего слоя. Поэтому, если смещение необходимо, сеть сама научится его реализовывать (ценой выучивания некоторых параметров). Впрочем, в общем случае смещением нельзя пренебречь .
@pss506
@pss506 Жыл бұрын
Картинка справа вверху не нужна.
@belovegor2064
@belovegor2064 Жыл бұрын
🥰
@andreib8871
@andreib8871 Жыл бұрын
Александр Геннадьевич, спасибо вам за курс лекций! Очень интересные и полезные материалы! Есть ли видео лекция "Рекомендательные системы"? (нашел только слайды)
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
Пока в виде доступного видео нет.
@SergeySkripko
@SergeySkripko Жыл бұрын
была затравка, что завтра вы проверите догадку, которой объясняете резкий отрыв по качеству предсказания у первого места лидерборда. Так как, догадка подтвердилась?
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
Ой, я уже и не помню...
@user-lm3hu9ng9g
@user-lm3hu9ng9g Жыл бұрын
@Alexander D'yakonov Александр, спасибо за лекцию! я правильно понял по kzbin.info/www/bejne/f2HWhoiumJ6LnrM чтобы понять, будет ли наша модель работать с новыми данными, нам нужно обучить новую модель с пометками за 1 как новые данные 0 - старые, результаты которой мы будем принимать как критерий актуальности модели? или мы используем старую модель? заранее спасибо за ответ!
@alexanderdyakonov8305
@alexanderdyakonov8305 Жыл бұрын
Мы учим новую модель. Строго говоря, её качество не скажет нам "будет ли работать модель, обученная на обучении, на тесте". Оно скажет, насколько тест не похож на обучение.
@user-lm3hu9ng9g
@user-lm3hu9ng9g Жыл бұрын
@@alexanderdyakonov8305 спасибо!