👋 Всем привет, это канал IT-школы Push IT!
Мы — образовательный стартап, созданный выпускниками мехмата МГУ и ВШЭ, преподавателями ШАД и бывшими сотрудниками Яндекса, старшими разработчиками.
📚 Подробнее о нас, школе и направлениях обучения
🎯 Наша цель — в короткие сроки дать вам актуальные знания и навыки в технических сферах.
В этом канале будем публиковать новости школы, курсов и полезные образовательные материалы.
Мы — образовательный стартап, созданный выпускниками мехмата МГУ и ВШЭ, преподавателями ШАД и бывшими сотрудниками Яндекса, старшими разработчиками.
📚 Подробнее о нас, школе и направлениях обучения
🎯 Наша цель — в короткие сроки дать вам актуальные знания и навыки в технических сферах.
В этом канале будем публиковать новости школы, курсов и полезные образовательные материалы.
Telegraph
Push IT!
Всем привет! Мы открываем IT-школу. Кто мы? Тарас Стасюк - Мехмат МГУ, ШАД. Работал в Яндексе, SAS, Озон. Старший разработчик, опыт преподавания с 2015 года, в том числе МГУ, СПБГУ. Сусленкова Светлана - Мехмат МГУ, автор учебника по олимпиадной математике…
👍2
🔥 15 ноября стартует курс по Django!
Что такое Django?
Django — это фреймворк на Python, который позволяет создавать надёжный и безопасный бэкенд с впечатляющей скоростью разработки. Бэкенд — это сложная система, включающая API, базу данных, задачи очереди, хранилище медиафайлов и многое другое. С Django поднятие всей этой архитектуры занимает всего несколько строчек кода.
Почему Django?
1️⃣ Скорость и простота — за полчаса можно создать API для онлайн-кинотеатра или сервиса доставки еды.
2️⃣ Широкие интеграции — Django поддерживает множество решений для интеграции с внешними сервисами.
3️⃣ Безопасность — встроенные механизмы защиты от уязвимостей.
4️⃣ Работает “из коробки” — админка, авторизация, сессии, ORM и другие стандартные функции уже включены.
5️⃣ Асинхронные возможности — Django теперь поддерживает асинхронный код!
6️⃣ Фронтенд — можно легко добавить несложный фронтенд.
💡Если вам нужно быстро создать MVP для стартапа и вы знаете Python — Django станет отличным выбором!
О курсе
Занятия будут проходить в формате семинаров: сначала мы разберём теорию и примеры на демонстрационном проекте, затем каждый из участников применит полученные знания в своём проекте. Благодаря мини-группе мы сможем обсуждать проекты вместе, что позволяет учиться не только на своём опыте, но и на примерах других.
✉️ По вопросам пишите: @taras4834
Что такое Django?
Django — это фреймворк на Python, который позволяет создавать надёжный и безопасный бэкенд с впечатляющей скоростью разработки. Бэкенд — это сложная система, включающая API, базу данных, задачи очереди, хранилище медиафайлов и многое другое. С Django поднятие всей этой архитектуры занимает всего несколько строчек кода.
Почему Django?
1️⃣ Скорость и простота — за полчаса можно создать API для онлайн-кинотеатра или сервиса доставки еды.
2️⃣ Широкие интеграции — Django поддерживает множество решений для интеграции с внешними сервисами.
3️⃣ Безопасность — встроенные механизмы защиты от уязвимостей.
4️⃣ Работает “из коробки” — админка, авторизация, сессии, ORM и другие стандартные функции уже включены.
5️⃣ Асинхронные возможности — Django теперь поддерживает асинхронный код!
6️⃣ Фронтенд — можно легко добавить несложный фронтенд.
💡Если вам нужно быстро создать MVP для стартапа и вы знаете Python — Django станет отличным выбором!
О курсе
Занятия будут проходить в формате семинаров: сначала мы разберём теорию и примеры на демонстрационном проекте, затем каждый из участников применит полученные знания в своём проекте. Благодаря мини-группе мы сможем обсуждать проекты вместе, что позволяет учиться не только на своём опыте, но и на примерах других.
✉️ По вопросам пишите: @taras4834
👍2
💡 Использовать ли ChatGPT для написания кода во время обучения?
Это вопрос, по которому есть разные мнения, поэтому поделюсь своим личным взглядом, а не позицией школы.
Зависит от ваших целей и уровня подготовки.
1️⃣ Для новичков: если вы только начинаете, лучше не использовать ChatGPT. Пока вы не освоили базовый уровень — переменные, циклы, условия, функции, массивы и т.д. — лучше писать код самостоятельно.
Почему? На начальном этапе важно научиться:
- формулировать алгоритм для решения задач,
- описывать его на выбранном языке программирования.
Здесь ChatGPT вам не поможет — нужные нейронные связи он за вас не выстроит.
2️⃣ Для изучения новой технологии: если ваша цель — понять, как работает технология, попросите GPT объяснить её, вместо того чтобы просто копировать код. Это поможет вам глубже понять, как всё устроено.
3️⃣ Для создания продукта: если вам нужно быстро сделать работающий продукт, смело используйте GPT как помощника. У меня есть примеры учеников, которые, не имея опыта программирования, создавали и запускали вполне сложных Telegram-ботов.
В большинстве случаев использовать ChatGPT — это хорошая идея.
Код — это инструмент, способ перевести словесное описание вашей задачи в решение. GPT можно воспринимать как переводчика, который делает этот мост между человеческой речью и машинным кодом ещё короче. Но чтобы эффективно использовать GPT, вы должны сами понимать, что хотите выразить.
А что вы по этому думаете?
Это вопрос, по которому есть разные мнения, поэтому поделюсь своим личным взглядом, а не позицией школы.
Зависит от ваших целей и уровня подготовки.
1️⃣ Для новичков: если вы только начинаете, лучше не использовать ChatGPT. Пока вы не освоили базовый уровень — переменные, циклы, условия, функции, массивы и т.д. — лучше писать код самостоятельно.
Почему? На начальном этапе важно научиться:
- формулировать алгоритм для решения задач,
- описывать его на выбранном языке программирования.
Здесь ChatGPT вам не поможет — нужные нейронные связи он за вас не выстроит.
2️⃣ Для изучения новой технологии: если ваша цель — понять, как работает технология, попросите GPT объяснить её, вместо того чтобы просто копировать код. Это поможет вам глубже понять, как всё устроено.
3️⃣ Для создания продукта: если вам нужно быстро сделать работающий продукт, смело используйте GPT как помощника. У меня есть примеры учеников, которые, не имея опыта программирования, создавали и запускали вполне сложных Telegram-ботов.
В большинстве случаев использовать ChatGPT — это хорошая идея.
Код — это инструмент, способ перевести словесное описание вашей задачи в решение. GPT можно воспринимать как переводчика, который делает этот мост между человеческой речью и машинным кодом ещё короче. Но чтобы эффективно использовать GPT, вы должны сами понимать, что хотите выразить.
А что вы по этому думаете?
👍3
Как изучать математику?
Я предпочитаю смотреть на математику не только как на инструмент (хотя её практические применения сейчас лежат в основе всего, что связано с техникой), но и как на игру.
Игра заключается в придумывании вопросов и поиске ответов на них: математики сидят по своим кафедрам и задаются вопросами — бесконечно ли много простых чисел-близнецов? Верна ли теорема Ферма или гипотеза 3n+1? Каково хроматическое число плоскости? Сложно представить практическое применение этих задач, но найти ответ всё равно интересно.
Если у вас нет жёстких дедлайнов, например, экзамена уже завтра утром, то лучший способ "заботать математику" — это отвлечься от цели и сосредоточиться на пути. Попробуйте "поиграть" в математику.
1️⃣ Почитайте научно-популярную литературу. Я в детстве читал Перельмана. Посмотрите видео на YouTube, решайте олимпиадные задачи, придумывайте вопросы по аналогии и пытайтесь на них ответить.
2️⃣ Начните с дискретной математики — это сборный раздел, включающий всё, что не попало в другие области. Она близка к олимпиадной математике, здесь мало формализма и расчётов, зато много интересных идей и красивых результатов. Рекомендую начать с этой книги, она читается как художественная литература.
3️⃣ Перед изучением высшей математики (пределы, линейные отображения, группы...) убедитесь, что уверенно справляетесь с программой школьной математики. ЕГЭ (даже базовый) — хороший способ проверить свои знания. Если что-то вызывает трудности, не стесняйтесь вернуться к школьным учебникам, хоть с 7 класса. Не пропускайте исторические заметки и дополнительные разделы — они делают математику более живой и увлекательной.
Я предпочитаю смотреть на математику не только как на инструмент (хотя её практические применения сейчас лежат в основе всего, что связано с техникой), но и как на игру.
Игра заключается в придумывании вопросов и поиске ответов на них: математики сидят по своим кафедрам и задаются вопросами — бесконечно ли много простых чисел-близнецов? Верна ли теорема Ферма или гипотеза 3n+1? Каково хроматическое число плоскости? Сложно представить практическое применение этих задач, но найти ответ всё равно интересно.
Если у вас нет жёстких дедлайнов, например, экзамена уже завтра утром, то лучший способ "заботать математику" — это отвлечься от цели и сосредоточиться на пути. Попробуйте "поиграть" в математику.
1️⃣ Почитайте научно-популярную литературу. Я в детстве читал Перельмана. Посмотрите видео на YouTube, решайте олимпиадные задачи, придумывайте вопросы по аналогии и пытайтесь на них ответить.
2️⃣ Начните с дискретной математики — это сборный раздел, включающий всё, что не попало в другие области. Она близка к олимпиадной математике, здесь мало формализма и расчётов, зато много интересных идей и красивых результатов. Рекомендую начать с этой книги, она читается как художественная литература.
3️⃣ Перед изучением высшей математики (пределы, линейные отображения, группы...) убедитесь, что уверенно справляетесь с программой школьной математики. ЕГЭ (даже базовый) — хороший способ проверить свои знания. Если что-то вызывает трудности, не стесняйтесь вернуться к школьным учебникам, хоть с 7 класса. Не пропускайте исторические заметки и дополнительные разделы — они делают математику более живой и увлекательной.
❤2🤯1
Для тех, кто скучает по математике в алгоритмических задачах, есть отличный ресурс с заданиями.
Project Euler — это серия сложных задач по математике и программированию, для решения которых потребуется нечто большее, чем просто математические знания. Хотя математика поможет вам найти элегантные и эффективные методы, для решения большинства задач понадобятся навыки программирования и использование компьютера.
Большинство задач здесь посвящены теории чисел. Решая их, вы сможете прокачать как навыки алгоритмов, так и математику.
Вот примеры любопытных задач:
https://projecteuler.net/problem=495
https://projecteuler.net/problem=461
https://projecteuler.net/problem=192
Пишите, какие вам понравились
Project Euler — это серия сложных задач по математике и программированию, для решения которых потребуется нечто большее, чем просто математические знания. Хотя математика поможет вам найти элегантные и эффективные методы, для решения большинства задач понадобятся навыки программирования и использование компьютера.
Большинство задач здесь посвящены теории чисел. Решая их, вы сможете прокачать как навыки алгоритмов, так и математику.
Вот примеры любопытных задач:
https://projecteuler.net/problem=495
https://projecteuler.net/problem=461
https://projecteuler.net/problem=192
Пишите, какие вам понравились
🔥3
Как проходят собеседования на бэкендера в Яндексе
Недавно прошёл собеседование в Яндексе и решил поделиться, как это устроено. Сначала идут три независимые алгоритмические секции, каждая с двумя задачами (одна попроще, другая посложнее) и блоком теории.
💡 Теория может включать вопросы по языку, фреймворку, базам данных — зависит от собеседующего. Обычно ничего сверхсложного, но могут спросить про ваш проект и обсудить технологии, которые вы использовали.
Для задач нужен "джентльменский набор" алгоритмов:
1️⃣ Оценка сложности
2️⃣ Разделяй и властвуй
3️⃣ Жадные алгоритмы
4️⃣ Динамическое программирование
5️⃣ Графы (BFS, DFS, MST, алгоритм Дейкстры)
6️⃣ Структуры данных (стек, очередь, дек, список, хэш-таблицы)
7️⃣ Деревья поиска
Более сложные темы, как потоки или дерево отрезков, желательно знать хотя бы на уровне идеи, но писать код никто не попросит.
🔹 Примеры задач:
1. Развернуть односвязный список
2. Даны два отсортированных массива — вывести элементы первого, которых нет во втором
3. Создать структуру данных с операциями add, delete, get_random_unique
На теории обсуждали особенности Python, например:
- Изменяемые и неизменяемые типы данных
- Многопоточность и GIL
- Статические методы
- Контекстные менеджеры
После алгоритмических секций — собеседование с командой. Здесь всё зависит от команды: кто-то продолжает спрашивать теорию, а кто-то просто общается за жизнь. Но всегда сначала просят рассказать о себе: вопросы по опыту работы, затем — о команде/работе, и если остаётся время, можно задать свои вопросы.
Самые частые вопросы:
1. Расскажи о своём самом масштабном проекте (и дальше углубляемся в обсуждение технологий).
2. Расскажи о своём самом крупном факапе.
3. Как ты решал спорные ситуации на работе (например, не сошлись во мнении по коду с коллегой)?
Как подготовиться к собеседованиям?
1. Лучший способ — ходить на собеседования. Конечно, стоит сначала подготовиться, но не нужно ждать, пока решите все задачи с LeetCode. Даже если не пройдёте, всё равно получите новый опыт.
2. Расслабьтесь и получайте удовольствие — никто вас не посадит, если завалите собеседование 😄. Общайтесь, шутите, если застряли с задачей — можно попросить помощи или даже обсудить её решение. Если закончили раньше срока — вспомните забавную задачку и предложите её интервьюеру (ведь ему тоже должно быть интересно!) или просто пообщайтесь.
3. Для вдохновения можно посмотреть фильм "Поймай меня, если сможешь" 🎬
Недавно прошёл собеседование в Яндексе и решил поделиться, как это устроено. Сначала идут три независимые алгоритмические секции, каждая с двумя задачами (одна попроще, другая посложнее) и блоком теории.
💡 Теория может включать вопросы по языку, фреймворку, базам данных — зависит от собеседующего. Обычно ничего сверхсложного, но могут спросить про ваш проект и обсудить технологии, которые вы использовали.
Для задач нужен "джентльменский набор" алгоритмов:
1️⃣ Оценка сложности
2️⃣ Разделяй и властвуй
3️⃣ Жадные алгоритмы
4️⃣ Динамическое программирование
5️⃣ Графы (BFS, DFS, MST, алгоритм Дейкстры)
6️⃣ Структуры данных (стек, очередь, дек, список, хэш-таблицы)
7️⃣ Деревья поиска
Более сложные темы, как потоки или дерево отрезков, желательно знать хотя бы на уровне идеи, но писать код никто не попросит.
🔹 Примеры задач:
1. Развернуть односвязный список
2. Даны два отсортированных массива — вывести элементы первого, которых нет во втором
3. Создать структуру данных с операциями add, delete, get_random_unique
На теории обсуждали особенности Python, например:
- Изменяемые и неизменяемые типы данных
- Многопоточность и GIL
- Статические методы
- Контекстные менеджеры
После алгоритмических секций — собеседование с командой. Здесь всё зависит от команды: кто-то продолжает спрашивать теорию, а кто-то просто общается за жизнь. Но всегда сначала просят рассказать о себе: вопросы по опыту работы, затем — о команде/работе, и если остаётся время, можно задать свои вопросы.
Самые частые вопросы:
1. Расскажи о своём самом масштабном проекте (и дальше углубляемся в обсуждение технологий).
2. Расскажи о своём самом крупном факапе.
3. Как ты решал спорные ситуации на работе (например, не сошлись во мнении по коду с коллегой)?
Как подготовиться к собеседованиям?
1. Лучший способ — ходить на собеседования. Конечно, стоит сначала подготовиться, но не нужно ждать, пока решите все задачи с LeetCode. Даже если не пройдёте, всё равно получите новый опыт.
2. Расслабьтесь и получайте удовольствие — никто вас не посадит, если завалите собеседование 😄. Общайтесь, шутите, если застряли с задачей — можно попросить помощи или даже обсудить её решение. Если закончили раньше срока — вспомните забавную задачку и предложите её интервьюеру (ведь ему тоже должно быть интересно!) или просто пообщайтесь.
3. Для вдохновения можно посмотреть фильм "Поймай меня, если сможешь" 🎬
👍2
Гипотеза 3n + 1
Давайте поиграем в такую игру: берём число
Эту задачу часто сравнивают с Великой теоремой Ферма: она формулируется очень просто, но доказать её — практически невозможно. На лекциях перед тем, как рассказать о гипотезе, даже предупреждают: «Не пытайтесь её решить!»
Но мы не будем пытаться её доказать, а поисследуем её обобщения с помощью компьютера.
Ремарка: для тех, кто хочет потренироваться в алгоритмах, есть отличная задача — написать эффективный алгоритм, проверяющий гипотезу для первых
Попробуем немного изменить правила: вместо 3n + 1 будем брать
На картинке выше показано, сколько чисел из первых 200 сходятся к 1 при ограничении в 2000 шагов. Мы видим синий квадрат, соответствующий 3n + 1, где все 200 чисел сходятся.
Если НОД(a, b) > 1, то результат приравнивался к 0 — такие случаи считаем неинтересными (подумайте, почему).
Было бы классно увидеть такие же синие квадраты, как (3, 2), но, кажется, это уникальные параметры. Тем не менее интересна последовательность (2, 11) и некоторые виды (x, 2).
Что интересно исследовать:
1. Что особенного в комбинации
2. Возможно ли, чтобы ненулевая плотность сходящихся чисел наблюдалась и при других значениях
Давайте поиграем в такую игру: берём число
n, если оно чётное, то делим на 2, иначе — умножаем на 3 и прибавляем 1. С результатом делаем то же самое и так далее. Например, если мы изначально возьмём n = 5, то получим последовательность 5 → 16 → 8 → 4 → 2 → 1. Будем считать, что мы выиграем, если придём к 1 (как в примере выше). Гипотеза 3n + 1 (или гипотеза Коллатца) утверждает, что какое бы положительное n мы ни взяли — мы всегда выиграем, то есть всегда придём к 1.Эту задачу часто сравнивают с Великой теоремой Ферма: она формулируется очень просто, но доказать её — практически невозможно. На лекциях перед тем, как рассказать о гипотезе, даже предупреждают: «Не пытайтесь её решить!»
Но мы не будем пытаться её доказать, а поисследуем её обобщения с помощью компьютера.
Ремарка: для тех, кто хочет потренироваться в алгоритмах, есть отличная задача — написать эффективный алгоритм, проверяющий гипотезу для первых
n чисел.Попробуем немного изменить правила: вместо 3n + 1 будем брать
an + 1 и делить не на 2, а на b. И посмотрим, что получится. На картинке выше показано, сколько чисел из первых 200 сходятся к 1 при ограничении в 2000 шагов. Мы видим синий квадрат, соответствующий 3n + 1, где все 200 чисел сходятся.
Если НОД(a, b) > 1, то результат приравнивался к 0 — такие случаи считаем неинтересными (подумайте, почему).
Было бы классно увидеть такие же синие квадраты, как (3, 2), но, кажется, это уникальные параметры. Тем не менее интересна последовательность (2, 11) и некоторые виды (x, 2).
Что интересно исследовать:
1. Что особенного в комбинации
(2n + 1, 11), почему в ней чисел сходится больше чем в других?2. Возможно ли, чтобы ненулевая плотность сходящихся чисел наблюдалась и при других значениях
a и b, кроме (3, 2)?👍3
💻 Как я деплою проекты
Для деплоя использую Digital Ocean. Я не фанат девопса — писать GitHub Actions, Docker-файлы и так далее... Поэтому стараюсь этого избегать.
На Digital Ocean есть удобный сервис деплоя по кнопке — App Platform. Указываете в нём ваш репозиторий на GitHub, и система автоматически определяет тип проекта. Нужно только указать переменные окружения, команды для билда и деплоя, выбрать мощность и количество ресурсов: число машин, их параметры.
🚀 Запуск по кнопке — и сервис разворачивается. Базу данных можно создать и подключить в два клика. Так же просто подключаются S3-хранилища для файлов, дополнительные воркеры и балансировка нагрузки между ними.
Когда вы делаете пуш в репозиторий — сервис сам обновляется.
🔧 Иногда не хватает гибкости App Platform, например, если нужен кастомный линуксовый пакет для работы сервиса. Но мне для большинства проектов её возможностей достаточно.
💰 По стоимости: для первого небольшого проекта это около $20-25 в месяц (большая часть уходит на базу данных — $15). Её можно использовать и для других проектов, и тогда цена будет от $5. На рынке есть варианты подешевле, но для меня лучше переплатить $10, чем тратить время на девопс.
#тулзы
Для деплоя использую Digital Ocean. Я не фанат девопса — писать GitHub Actions, Docker-файлы и так далее... Поэтому стараюсь этого избегать.
На Digital Ocean есть удобный сервис деплоя по кнопке — App Platform. Указываете в нём ваш репозиторий на GitHub, и система автоматически определяет тип проекта. Нужно только указать переменные окружения, команды для билда и деплоя, выбрать мощность и количество ресурсов: число машин, их параметры.
🚀 Запуск по кнопке — и сервис разворачивается. Базу данных можно создать и подключить в два клика. Так же просто подключаются S3-хранилища для файлов, дополнительные воркеры и балансировка нагрузки между ними.
Когда вы делаете пуш в репозиторий — сервис сам обновляется.
🔧 Иногда не хватает гибкости App Platform, например, если нужен кастомный линуксовый пакет для работы сервиса. Но мне для большинства проектов её возможностей достаточно.
💰 По стоимости: для первого небольшого проекта это около $20-25 в месяц (большая часть уходит на базу данных — $15). Её можно использовать и для других проектов, и тогда цена будет от $5. На рынке есть варианты подешевле, но для меня лучше переплатить $10, чем тратить время на девопс.
#тулзы
DigitalOcean
DigitalOcean — The developer cloud
Helping millions of developers easily build, test, manage, and scale applications of any size — faster than ever before.
👍1
Как создавать анимацию формул при помощи кода?
3Blue1Brown — один из самых популярных и доступных каналов на YouTube про математику и физику. Одна из его фишек — очень качественная анимация формул, графиков и других математических объектов.
Вчера я наткнулся в интернете на библиотеку на Python, Manim, при помощи которой они это делают. Это очень круто, что весь ролик описывается кодом. А потом нашел видео создателя этой библиотеки и канала о том, как ей пользоваться. Хочется самому теперь поснимать видео и поработать с этим инструментом.
С этой библиотекой, генерацией голоса и GPT можно вообще автоматизировать создание простых математических видео. Например, можно подать на вход запрос "объясни, как решать квадратные уравнения" — а программа выдает готовое видео с объяснением.
#тулзы
3Blue1Brown — один из самых популярных и доступных каналов на YouTube про математику и физику. Одна из его фишек — очень качественная анимация формул, графиков и других математических объектов.
Вчера я наткнулся в интернете на библиотеку на Python, Manim, при помощи которой они это делают. Это очень круто, что весь ролик описывается кодом. А потом нашел видео создателя этой библиотеки и канала о том, как ей пользоваться. Хочется самому теперь поснимать видео и поработать с этим инструментом.
С этой библиотекой, генерацией голоса и GPT можно вообще автоматизировать создание простых математических видео. Например, можно подать на вход запрос "объясни, как решать квадратные уравнения" — а программа выдает готовое видео с объяснением.
#тулзы
👍3
💻 Вчера стартовал курс по Django! У нас уютная минигруппа из 3 человек. Каждый разрабатывает свой проект, и в процессе все делятся друг с другом опытом. Я не исключение — рассказываю о возможностях Django на примере проекта фриланс-биржи (вроде Профи.ру).
В дальнейшем планирую использовать эту биржу как внутреннюю платформу для наших выпускников и учеников курсов, чтобы они могли получать первые заказы уже в процессе обучения. 🚀
В дальнейшем планирую использовать эту биржу как внутреннюю платформу для наших выпускников и учеников курсов, чтобы они могли получать первые заказы уже в процессе обучения. 🚀
🔥5
С момента начала активного развития нейронных сетей появилась особенность называть их так, чтобы аббревиатуры делали на что-то отсылки.
Например, в конце августа вышла CSGO — не игра, а Content-Style Generation Optimization. Это модель для генерации изображений, а именно для задачи Style Transfer, то есть нужно изменить стиль одной картинки, в соответствии с другой картинкой. Таким образом, у нас есть картинка с "контентом", картинка со "стилем" и некоторое текстовое описание картинки, которую мы хотим получить, а в результате необходимо всё это совместить.
В CSGO используются два подхода:
1. "Контроль контента"
Эта часть архитектуры обрабатывает контентные изображения и текстовые описания, после чего возвращает информацию, которую получилось узнать. Затем эта информация сохраняется в новые признаки для изображения. Звучит просто, но там используются достаточно сложные механизмы.
2. "Контроль стиля"
Эта часть извлекает уже стилевые признаки, для этого используются (на самом деле, как и в первом пункте) некоторые другие предобученные архитектуры. После чего нам необходимо не допустить, чтобы новая информация, которую мы добыли сейчас смешалась бы с информацией, полученной на шаге 1, это мы делаем с помощью Cross-attention слоёв (слои перекрёстного внимания), то есть говорим нейросети "сосредоточиться" на текущих входных данных.
Для того, чтобы обучить CSGO был разработан механизм создания троек изображений вида (контентное изображение, стилевое изображение и стилизованное изображение). На основе этого был создан целый датасет с 210 тысячами картинок.
По точности сохранения контента и управления стилем CSGO превзошла многие существующие методы. Получившиеся результаты генерации вы можете увидеть на картинке
#ML
Например, в конце августа вышла CSGO — не игра, а Content-Style Generation Optimization. Это модель для генерации изображений, а именно для задачи Style Transfer, то есть нужно изменить стиль одной картинки, в соответствии с другой картинкой. Таким образом, у нас есть картинка с "контентом", картинка со "стилем" и некоторое текстовое описание картинки, которую мы хотим получить, а в результате необходимо всё это совместить.
В CSGO используются два подхода:
1. "Контроль контента"
Эта часть архитектуры обрабатывает контентные изображения и текстовые описания, после чего возвращает информацию, которую получилось узнать. Затем эта информация сохраняется в новые признаки для изображения. Звучит просто, но там используются достаточно сложные механизмы.
2. "Контроль стиля"
Эта часть извлекает уже стилевые признаки, для этого используются (на самом деле, как и в первом пункте) некоторые другие предобученные архитектуры. После чего нам необходимо не допустить, чтобы новая информация, которую мы добыли сейчас смешалась бы с информацией, полученной на шаге 1, это мы делаем с помощью Cross-attention слоёв (слои перекрёстного внимания), то есть говорим нейросети "сосредоточиться" на текущих входных данных.
Для того, чтобы обучить CSGO был разработан механизм создания троек изображений вида (контентное изображение, стилевое изображение и стилизованное изображение). На основе этого был создан целый датасет с 210 тысячами картинок.
По точности сохранения контента и управления стилем CSGO превзошла многие существующие методы. Получившиеся результаты генерации вы можете увидеть на картинке
#ML
🔥6
Неделю назад открыл для себя Cursor — это IDE на основе искусственного интеллекта. С тех пор не могу остановиться с ней играться 🙂 Без лишних слов, вот видео, где 8-летняя девочка создает сайт с его помощью.
На курсах по Django я думал показывать, как делать бэкенд на примере проекта с фриланс-биржей. Интерфейс я хотел реализовать через Telegram-бота, но, открыв для себя Cursor, передумал. Теперь я взял за основу интерфейс Profi.ru и делаю похожий фронт.
Отличие от других ИИ-помощников в том, что в качестве контекста берется вся кодовая база проекта. Он не только подсказывает код в конкретном файле — он создает архитектуру, создает и удаляет папки, файлы, пишет в них код. То есть можно создать сайт, вообще не написав ни одной строчки кода.
Тут есть одно "но" — Cursor нужно корректировать по ходу, задавая нужную архитектуру проекта, в нужные моменты предлагать зарефакторить код. Программируя в нем, я чувствую себя сеньором, который дает задания джуну (но этого джуна можно попросить побыть сеньором и спросить совета ).
Как освоюсь с этим инструментом, думаю добавить к существующим курсам ещё курсы для не-программистов, где я не буду рассказывать про разметку страниц или особенности JS или TypeScript, но вместо этого буду рассказывать про архитектуру приложений и технологии — а части кода будет дописывать искусственный интеллект.
#тулзы
На курсах по Django я думал показывать, как делать бэкенд на примере проекта с фриланс-биржей. Интерфейс я хотел реализовать через Telegram-бота, но, открыв для себя Cursor, передумал. Теперь я взял за основу интерфейс Profi.ru и делаю похожий фронт.
Отличие от других ИИ-помощников в том, что в качестве контекста берется вся кодовая база проекта. Он не только подсказывает код в конкретном файле — он создает архитектуру, создает и удаляет папки, файлы, пишет в них код. То есть можно создать сайт, вообще не написав ни одной строчки кода.
Тут есть одно "но" — Cursor нужно корректировать по ходу, задавая нужную архитектуру проекта, в нужные моменты предлагать зарефакторить код. Программируя в нем, я чувствую себя сеньором, который дает задания джуну (но этого джуна можно попросить побыть сеньором и спросить совета ).
Как освоюсь с этим инструментом, думаю добавить к существующим курсам ещё курсы для не-программистов, где я не буду рассказывать про разметку страниц или особенности JS или TypeScript, но вместо этого буду рассказывать про архитектуру приложений и технологии — а части кода будет дописывать искусственный интеллект.
#тулзы
Cursor
Cursor: The best way to code with AI
Built to make you extraordinarily productive, Cursor is the best way to build software with AI.
👍3
Вот проект, созданный за один день нашим студентом (@Kit_Kitych). Он демонстрирует, как работают разные виды сортировок. Всё выполнено просто, стильно, и с добавлением звукового сопровождения! Считаю, что это отличный завершённый проект, которым можно гордиться. Проект создан на Next.js, вот исходный код.
Мы занимаемся в формате менторства. Если у вас есть опыт и желание учиться самостоятельно, этот формат может быть отличным вариантом, обеспечивающим максимальное КПД
#проектыстудентов
Мы занимаемся в формате менторства. Если у вас есть опыт и желание учиться самостоятельно, этот формат может быть отличным вариантом, обеспечивающим максимальное КПД
#проектыстудентов
nextjs-sorting-visualizer.vercel.app
Sorting Algorithms Visualizer
Visualizing sorting algorithms such as Bubble Sort, Merge Sort, Quick Sort, etc.
🔥5
Media is too big
VIEW IN TELEGRAM
Подобную анимацию можно делать гуляя по латентному пространству текстовых эмбэддингов. Как работает генерация изображений — текст преобразуется в эмбэддинг (вектор) который подается на вход модели (вместе с некоторым шумом). Прелесть векторов в том, что можно подать на вход модели любую их линейную комбинацию, а значит можно непрерывно перевести один вектов в другой. Соединяя так эмбэддинги различных текстов, мы получаем плавную анимацию между изображениями.
Такую анимацию сделала студентка нашей школы, Галина (@batucada_is_free) в рамках домашнего задания по курсу ML и анализ данных. Вот ссылка на код проекта.
В середине января стартует новый набор. Приходите к нам, и вы научитесь делать как простые аналитические задачки, так и писать и использовать нейросетки для сложных и классных задач!
#проектыстудентов #ML
Такую анимацию сделала студентка нашей школы, Галина (@batucada_is_free) в рамках домашнего задания по курсу ML и анализ данных. Вот ссылка на код проекта.
В середине января стартует новый набор. Приходите к нам, и вы научитесь делать как простые аналитические задачки, так и писать и использовать нейросетки для сложных и классных задач!
#проектыстудентов #ML
👍3🔥1
Шары в разных пространствах
Шар в математике — это множество точек, расположенных на расстоянии не более заданного радиуса от фиксированной точки, называемой центром. В евклидовом пространстве конечной размерности шар ассоциируется с привычными нам фигурами: с отрезком в R^1, кругом в R^2, шаром в R^3, дальше представить уже сложно, но определение остаётся в силе.
Кроме конечномерных пространств существуют и бесконечномерные, например, можно сказать, что в векторах станет теперь бесконечное число координат (с некоторыми другими дополнениями, которые сейчас не важны). На таких пространствах и будет сосредоточено наше внимание сейчас, ведь там многое меняется кардинально!
Сначала введём некоторые интуитивно понятные определения.
1) Множество ограничено -- если его можно полностью заключить в шар.
2) Множество вполне ограничено -- для любого сколь угодно маленько радиуса мы можем покрыть всё множество конечным количеством шаров этого радиуса.
Заметим факт, что любое вполне ограниченное множество является ограниченным. Это легко понять: пусть мы смогли покрыть наше множество конечным числом шаров какого-то радиуса, тогда любой такой шар можно заключить в шар с центром в нуле, а среди таких шаров можно выбрать шар с наибольшим радиусом, он будет содержать все остальные шары, а вместе с ними и всё исходное множество!
Вернёмся к шарам.
Давайте представим круг любого радиуса R. Мы хотим покрыть его конечным количеством шаров сколь угодно маленького радиуса r. Давайте опишем вокруг этого круга квадрат со стороной 2R. А теперь разобьём этот квадрат на k^2 маленьких квадратиков, то есть сторона каждого маленького квадратика будет равна R/k, вокруг каждого из них мы можем описать окружность радиус которой мы можем сколь угодно уменьшать, если увеличим число квадратиков, то есть увеличим число k. А значит мы смогли покрыть исходный шар маленькими шарами => то есть шар вполне ограничен! (Заметим, что можно немного изменить доказательство так, чтобы оно было верно для любого R^n). Итак, мы доказали, что в конечномерном пространстве шар можно покрыть конечным числом других шаров сколь угодно маленького радиуса (что и кажется вполне очевидным)!
А теперь рассмотрим шар c центром в нуле и радиуса 1 в бесконечномерном пространстве. Рассмотрим бесконечные векторы (1, 0, 0, 0, ...); (0, 1, 0, 0, ...) и т. д. Все они принадлежат нашему шару, ведь расстояние до нуля равно единице. Давайте попробуем покрыть его шарами радиуса 1/2.
Предположим, что у нас получилось покрыть исходный шар конечным числом маленьких шаров. Так как векторов с единичкой на одной позиции и нулями на всех остальных бесконечно много, а шаров конечное число, то в каком-то шаре гарантированно содержатся хотя бы два вектора. НО использовав обычную формулу расстояния между двумя векторами получим, что расстояние между двумя векторами всегда равно корню из 2, а диаметр маленького шара равен 1. Получили, что два вектора внутри одного шара должны находиться на расстоянии, большем, чем диаметр этого шара, а такое невозможно, значит мы не можем покрыть шар конечным числом шаров маленького размера!
Итак, мы получили, что то, что казалось очевидным и понятным в привычном нам пространстве полностью нарушается в другом даже для такой простой вещи как обычный шар.
Более простой пример в конечномерном пространстве: Возьмём на плоскости точки (0, 0); (1, 0), (2, 0) и рассмотрим пространство, которое просто состоит из этих трёх точек. Выберем два шара:
1) с центром в (1, 0) и радиуса 1
2) с центром в (2, 0) радиуса 1.5
Рассмотрите точки, которые попадают в каждый шар из нашего трёхточечного пространства и поймите, что шар большего радиуса содержится в шаре меньшего!
Теперь, надеюсь, стало понятно, что очень важно понимать откуда мы смотрим на вещи (в том числе из какого пространства) даже с такими простыми вещами как обычные шары, это полезно как в квантовой механике, так и в нашей обычной жизни)
Шар в математике — это множество точек, расположенных на расстоянии не более заданного радиуса от фиксированной точки, называемой центром. В евклидовом пространстве конечной размерности шар ассоциируется с привычными нам фигурами: с отрезком в R^1, кругом в R^2, шаром в R^3, дальше представить уже сложно, но определение остаётся в силе.
Кроме конечномерных пространств существуют и бесконечномерные, например, можно сказать, что в векторах станет теперь бесконечное число координат (с некоторыми другими дополнениями, которые сейчас не важны). На таких пространствах и будет сосредоточено наше внимание сейчас, ведь там многое меняется кардинально!
Сначала введём некоторые интуитивно понятные определения.
1) Множество ограничено -- если его можно полностью заключить в шар.
2) Множество вполне ограничено -- для любого сколь угодно маленько радиуса мы можем покрыть всё множество конечным количеством шаров этого радиуса.
Заметим факт, что любое вполне ограниченное множество является ограниченным. Это легко понять: пусть мы смогли покрыть наше множество конечным числом шаров какого-то радиуса, тогда любой такой шар можно заключить в шар с центром в нуле, а среди таких шаров можно выбрать шар с наибольшим радиусом, он будет содержать все остальные шары, а вместе с ними и всё исходное множество!
Вернёмся к шарам.
Давайте представим круг любого радиуса R. Мы хотим покрыть его конечным количеством шаров сколь угодно маленького радиуса r. Давайте опишем вокруг этого круга квадрат со стороной 2R. А теперь разобьём этот квадрат на k^2 маленьких квадратиков, то есть сторона каждого маленького квадратика будет равна R/k, вокруг каждого из них мы можем описать окружность радиус которой мы можем сколь угодно уменьшать, если увеличим число квадратиков, то есть увеличим число k. А значит мы смогли покрыть исходный шар маленькими шарами => то есть шар вполне ограничен! (Заметим, что можно немного изменить доказательство так, чтобы оно было верно для любого R^n). Итак, мы доказали, что в конечномерном пространстве шар можно покрыть конечным числом других шаров сколь угодно маленького радиуса (что и кажется вполне очевидным)!
А теперь рассмотрим шар c центром в нуле и радиуса 1 в бесконечномерном пространстве. Рассмотрим бесконечные векторы (1, 0, 0, 0, ...); (0, 1, 0, 0, ...) и т. д. Все они принадлежат нашему шару, ведь расстояние до нуля равно единице. Давайте попробуем покрыть его шарами радиуса 1/2.
Предположим, что у нас получилось покрыть исходный шар конечным числом маленьких шаров. Так как векторов с единичкой на одной позиции и нулями на всех остальных бесконечно много, а шаров конечное число, то в каком-то шаре гарантированно содержатся хотя бы два вектора. НО использовав обычную формулу расстояния между двумя векторами получим, что расстояние между двумя векторами всегда равно корню из 2, а диаметр маленького шара равен 1. Получили, что два вектора внутри одного шара должны находиться на расстоянии, большем, чем диаметр этого шара, а такое невозможно, значит мы не можем покрыть шар конечным числом шаров маленького размера!
Итак, мы получили, что то, что казалось очевидным и понятным в привычном нам пространстве полностью нарушается в другом даже для такой простой вещи как обычный шар.
Более простой пример в конечномерном пространстве: Возьмём на плоскости точки (0, 0); (1, 0), (2, 0) и рассмотрим пространство, которое просто состоит из этих трёх точек. Выберем два шара:
1) с центром в (1, 0) и радиуса 1
2) с центром в (2, 0) радиуса 1.5
Рассмотрите точки, которые попадают в каждый шар из нашего трёхточечного пространства и поймите, что шар большего радиуса содержится в шаре меньшего!
Теперь, надеюсь, стало понятно, что очень важно понимать откуда мы смотрим на вещи (в том числе из какого пространства) даже с такими простыми вещами как обычные шары, это полезно как в квантовой механике, так и в нашей обычной жизни)
❤7
This media is not supported in your browser
VIEW IN TELEGRAM
Индустрия видеоигр сейчас является одной из самых бурно развивающихся, при этом одной из целей этой отрасли является получение наибольшей выгоды и отклика, приложив как можно меньше усилий в изготовлении продукта.
Большую, и при этом затратную, часть разработки занимает создание видеографики игры и, как следствие, этот процесс пытаются оптимизировать, сейчас для этого стали использовать нейронные сети.
За изначальную архитектуру можно выбрать модель для генерации видео на базе трансформера, также добавляются блоки перекрёстного внимания для того, чтобы нейросеть могла не просто генерировать новый кадр, а брать в рассмотрение действие игрока.
Важным вопросом является наличие датасетов для обучения – для создания какой-то новой игры их нет, но мы можем взять размеченные данные для какой-то существующей игры. Однако, в случае если просто обучим модель, то мы получим и игру очень похожую на то, что мы видели при тренировке, так как смешивается обучение созданию видео и реакции на действия игрока.
В новых подходах предлагается проводить обучение в два этапа. На первом этапе мы обучаем часть для генерации новых кадров, а затем её замораживаем – тем самым мы учим стилистику. На втором этапе модель уже тренируется предсказывать новый кадр, опираясь по предыдущим кадрам и действию игрока.
Полученная модель уже может генерировать игры, которые хоть и далеки от существующих игровых гигантов, но при этом пользователь получает возможность вполне удовлетворительно перемещаться по созданному миру.
Схожие подходы планируют развивать и в киноиндустрии. Например, для мультфильмов будут рисовать только “опорные кадры”, а пространство между ними уже будет заполнять нейросеть
Большую, и при этом затратную, часть разработки занимает создание видеографики игры и, как следствие, этот процесс пытаются оптимизировать, сейчас для этого стали использовать нейронные сети.
За изначальную архитектуру можно выбрать модель для генерации видео на базе трансформера, также добавляются блоки перекрёстного внимания для того, чтобы нейросеть могла не просто генерировать новый кадр, а брать в рассмотрение действие игрока.
Важным вопросом является наличие датасетов для обучения – для создания какой-то новой игры их нет, но мы можем взять размеченные данные для какой-то существующей игры. Однако, в случае если просто обучим модель, то мы получим и игру очень похожую на то, что мы видели при тренировке, так как смешивается обучение созданию видео и реакции на действия игрока.
В новых подходах предлагается проводить обучение в два этапа. На первом этапе мы обучаем часть для генерации новых кадров, а затем её замораживаем – тем самым мы учим стилистику. На втором этапе модель уже тренируется предсказывать новый кадр, опираясь по предыдущим кадрам и действию игрока.
Полученная модель уже может генерировать игры, которые хоть и далеки от существующих игровых гигантов, но при этом пользователь получает возможность вполне удовлетворительно перемещаться по созданному миру.
Схожие подходы планируют развивать и в киноиндустрии. Например, для мультфильмов будут рисовать только “опорные кадры”, а пространство между ними уже будет заполнять нейросеть
🔥6
