Добрый день, уважаемые читатели и дорогие подписчики, в том числе один из вас, который очень сильно ждёт следующий пост. 6 спринтов позади. Последние темы курса - тестирование кода и добавление комментариев к постам. Почему отсутствовал. Прошёл два собеседования, с чем можете поздравить. Выполнил несколько тестовых заданий. Одно успешно, благодаря чему и позвали на собес на C#-разработчика. Но туда не взяли. По результатам второго собеседования результата так и нет, но, видимо, там тоже ничего хорошего для меня. Не думайте, что я расстроен. Я полон решимости продолжать, но сейчас обстоятельства складываются так, что по всем признакам мне придется прерваться. Буду или читать теорию, или писать проект, к которому только что приступил, или совсем времени не останется. Да и ноутбук собирается на свалку вместе с телефоном, что грустно. Но пока они со мной. Благодарю всех за внимание и крепко обнимаю. Когда будет что-то интересное, создам пост, но ежедневные посты пока прекращаются, возможно, насовсем.
На фотографии вы видите кипу — древнюю счетную систему инков, которая представляет собой сложные веревочные сплетения и узелки из шерсти альпаки или ламы или из хлопка (на языке кечуа khipu означает «узел», «завязывать узлы», «счет»).
В одном кипу может быть от нескольких до 2500 нитей разных цветов и размеров. Самое древнее кипу датируется примерно 3000 годом до н. э., а первое письменное упоминание о кипу относится к 1533 году (эту систему счета описал в своем письме испанский конкистадор Эрнандо Писарро).
Кипу было широко распространено в Империи инков. По словам испанского хрониста Хосе де Акоста, «вся империя управлялась посредством кипу». При помощи кипу учитывали, например, число лам, количество воинов или собранного урожая, вели перепись населения, записывали налоги; кипу использовались даже в качестве календаря.
Способ записи на кипу. Узлы в верхней трети означают сотни, в средней — десятки, в нижней — единицы. А — шнур-основа, B1–В3 — отдельные подвески, используемые для записи.
Инки разработали целую систему считывания информации. Главный шнур кипу был началом повествования. К нему наискось прикреплялись более тонкие нити, которые и использовались для записи данных. Положение узелка на шнуре показывало цифровой порядок (десятки, сотни, тысячи), а количество узлов определяло простые числа. Но, чтобы прочитать узелковое послание, надо было разбираться не только в узлах и их положении на веревке, но и знать обозначения каждого цвета. Так, например, красный цвет обозначал армию, войско, белый — серебро, желтый — золото. Все сведения фиксировали специально подготовленные чиновники — кипукамайоки — и передавали их в центр, то есть в Куско.
«Узелковые письма» доставлялись профессиональными курьерами — бегунами часки — по системе имперских инкских дорог. Удобство при транспортировке — это важное преимущество кипу, ведь послания доставляли иной раз за сотни километров, и пергамент или листья деревьев, которые служили для инков бумагой, для этого плохо подходили. Кипу же можно было смять и поместить в мешочек.
До нас дошли многие экземпляры кипу инков, различных размеров и назначения. Существует даже специальная база данных кипу (см. Khipu database project). Однако эти «письма» важно не только расшифровать, но и сохранить. Кипу сделаны из натуральных волокон, поэтому они нуждаются в особой температуре, влажности и защите от выцветания. Хранят кипу на горизонтальных панелях, покрытых нейтральной по кислотности бумагой. Шнуры обрабатывают специальными щетками и оберегают от насекомых.
Хлопковое окрашенное кипу из города Чупака, регион Ика, Перу, 1425–1532 год, размер 72×39 см.
Какие народы пользовалась узелковым письмом
Принято считать, что узелковое письмо — исключительно прерогатива народов Южной Америки. Однако на Востоке в древности тоже использовали подобный вид письменности. Следы узелкового письма нашли и в Китае, в Тибете, Африке, не стал исключением и Европейский материк.
На Руси тоже использовали узелковое письмо, хотя оно так и не успело стать таким же популярным и распространенным, как у инков. Историки предполагают, что именно ему мы обязаны присказке «завязать узелок на память».
Однако у славян узелковое письмо использовалось не только для счета, но и для гадания. У каждого узелка было свое сакральное значение. К тому же узлы использовали для создания оберегов от сглазов. В кельтской культуре узлы были более разнообразными и тоже имели несколько значений.
Открою большой секрет - в России грамотный "работяга" получает не меньше айтишника.
У меня есть "свой" сантехник, электрик, автослесарь и автоэлектрик - и к каждому из них расписана очередь на пару недель вперёд, это как минимум. З/п в час у них выше чем у меня - обычного толкового айтишника. То-же самое по сварщикам, жестянщикам, плиточникам ( и грамотным отделочникам вцелом ), даже блядь нормальный садовник может зарабатывать не менее.
Единственный но очень крупный минус - работа эта тяжелая и неиллюзорно вредная для организма. И в 50-55 ты работать в нужном темпе уже просто не можешь, чисто физически. И прийдется уходить на предприятия/в муниципальные организации на маленькую ставку.
А я также смогу спокойно клепать свои программки и в 70 лет, если будет нужно. Темп работы просядет, но за счёт опыта производительность останется на достаточном уровне.
Понравился комментарий, честный и от не молодого человека и из его опыта. Я считаю, что для гарантированного дохода лучше заниматься программированием на 1С, хотя читая комментарии вижу, что многие не согласны.
Привожу опыт человека:
"Все так и есть! С 3 курса универа начал с 1с (2004 г). Войти во что то другое в возрасте с нуля намного сложнее. Тот же python и c# занимает все время на развитие и как дополнение к 1с великолепно, но начинать лучше с 1с и потом дополнительно на выбор rust, C+, python, C#. Курсами дело не заканчивается, учиться придется каждый день. Мне 41 и почти каждый день приходится разбираться с чем то новым. Решил ограничится 1с, python, c#, angular и изучаю rust. Больше уже не влазит, а для решения практически любой задачи хватает.
На других языках достаточно уметь писать веб сервисы, иногда COM (python) и редко внешние компоненты (rust, c#). На удаленке уже лет 8, единственная проблема это выспаться, иногда это 3-4 часа в день, работы очень много. С возрастом приходит опыт и уже интуитивно находить решения лучше подходящее под задачу не ограничиваясь каким то одним фреймворком или языком.
Кстати зря многие хаят 1с, 8ка как платформа позволяет сейчас решать многое. В данный момент основную разработку веду на c# и angular и интегрирую все это с 1С и это дает преимущество, т.к. мало кто из коллег понимает как все это увязать вместе, не говоря уже про то как это должно работать с точки зрения учета. И да, будет сложно и непонятно почти всегда, к этому надо быть готовым. Легче станет только с накоплением опыта."
Мне так-то добавить нечего и с написанным согласен. В любом случае - будет долго. А ставка 1С специалиста уже равна ставке разработчика mobile native, если не выше (скажу так, 5000 р. в час в Питере не пугают уже за 1С).
p.s. мы не лезем в 1с - разработку, тк. у нас вообще нет компетенций. Это глупо для нас, мы сильны в парсинге и туда двигаемся, делая на его основе продукты. Но я же делюсь не только нашим опытом, а и чужим.
Трансформеры становятся сотами или попросту попадают в самые последние решения сферы NLP. Кстати, заслужили свою популярность они вообще недавно — только в 2017 году, когда курс доллара был 60 рублей, а для тг-каналов с новыми ИИ не исчислялись тысячами.
Мы уже писали почему трансформаторы стали популярными и как обеспечили компаниям по типу OpenAI успех. Не зря их главный продукт называется GPT, иначе Generative Pre-trained Transformer.
Нет взрывающихся или исчезающих градиентов.
Параллельное и быстрое обучение.
Механизм внимания и больше никакой зависимости от положения слов.
Задачи машинного перевода, языкового конструирования или распознавания голоса. Когда-то все они решались при помощи RNN, так называемых, рекуррентных нейронных сетей, которые упрощали, сводили огромное число параметров к конечному результату и условному прогнозу.
Отличие RNN от обычной нейронки со скрытыми слоями и output/input — наличие временной компоненты и памяти.
Визуализация работы полносвязной или простейшей нейронной сети.
Принцип работы рекуррентных нейронных сетей основан на идее обратной связи, где выход одного шага сети используется как часть входа на следующем шаге. Информация из предыдущих шагов последовательности сохраняется и передается на следующие шаги для анализа и прогнозирования. Именно поэтому RNN доминировали в решении задач, связанных с языком.
В этом смысл названия. Рекурсия. Мы постепенно переходим от временного шага t и входных данных к новому скрытому состоянию и так постепенно накапливаем данные. Так и учитывается контекст. Читая книгу, мы запоминаем детали с предыдущих страниц, а в конце неожиданно начинаем сами дописывать прочитанный нами "детектив"...
Создатели RNN-щики попросту учли наш способ чтения — он последовательный. Слово за словом, состояния за состояниями, данные за данными. Обрабатывая токен или слово, ИИ запоминает "информацию" с токена и передает ее дальше для использования при обработке следующего слова/токена. У каждого слоя нейронки появляется своеобразная "память".
Помимо связей между слоями, элемент получает связь с самим с собой, возвращается к себе, передавая информацию с текущего момента времени t1 в следующий момент времени t2.
Возьмем за пример предложение: “I love dogs”. Сначала рекуррентная нейронка пронесет через себя I, которую можно представить в виде вектора, запомнит некоторые данные и использует их при последующей последовательной обработке love.
Формулы рекуррентной сети немного сложнее:
Обучаемая матрица в конкретный момент времени t умножается на входные данные. Все это суммируется с умноженной обучаемой матрицей и скрытым вектором на предыдущем шаге (t-1). Все это безусловно прогоняется через функцию активации.
Новое скрытое состояние умножается на обучаемую матрицу и готово. Наш выход yt!
Вектор скрытого состояния — это и есть "память" слоя.
Мы получили новое скрытое состояние, приправив обработанное старое дополнительными входными данными. Всем понятно, что такие рекуррентные нейросети из-за своего принципа постепенного накопления данных работают дольше. Представьте себе нейросеть, которая прогоняется через тысячи слов и предложений…
Память у такой рекуррентной сети неизбирательная, так что в какой-то момент мы просто можем забыть "информацию" с самых первых “скормленных” слов… При обработке длинных последовательностей RNN кодеры могут столкнуться с проблемой исчезающего градиента.
Так как нам учитывать все эти злосчастные скрытые состояния, а не только одно последнее? Вот для этого в 2017 году энтузиасты и разработали механизм "Attention".
Механизм внимания: RNN + attention
В нужные моменты мы обращаем внимания на нужные слова. А не распределяем токены один к одному. Очевидно, что, например, последовательность слов в разных языках разная. А одни слова чаще употребляются с другими. Принцип Attention, который был разработан ученым-энтузиастами, призван как раз распределять веса или значимость токенов/слов и создавать эффект “контекста”.
Принцип максимально приближен к имитации семантических цепочек.
Например, плитку мы упоминаем в архитектурном, строительном или интерьерном контексте. Для любого слова в языке есть набор постоянно употребляемых в контексте слов. Говорим "выстрели", скорее, из ружья или пистолета... Говорим “включи” чаще ПК, телефон или "в розетку".
Млекопитающее-кит-планктон-вода...
Стул-стол-гарнитур-мебель-вилка...
Мы можем распределить "значимость" одних слов для других. Стулья бывают разные: на улице, на кухне, в банкетном зале, в офисе... Необязательно стул как-то должен быть связан с гарнитуром или вилкой. А вот со столом...
Именно поэтому предпочтительнее в тексте раскидывать значимость слов контекстуально.
Легче понятие "attention" описать концепцией сущности вещей. Вот есть у нас автомобиль, что прежде всего делает автомобиль автомобилем? Безусловно — колеса. Колеса важнее всех остальных элементов.
Зеленым подсвечены точки интереса – внимания.
Attention (внимание) в машинном обучении — это механизм, который позволяет модели динамически выбирать, на какие части входных данных сосредоточить своё внимание при выполнении задачи.
Механизм Attention используется для вычисления весового коэффициента для каждого слова во входной последовательности на основе его важности в контексте текущего запроса или задачи. Эти весовые коэффициенты затем используются для взвешенного суммирования представлений всех слов, чтобы получить контекстуализированное представление.
Матрица должна обучаться при тренировке. Для каждого токена она будет считать вектор и распределять места по месту в предложении. Выглядит это примерно так.
Механизм Attention задает матрицу весов или тех самых семантические цепей, где определяется важность одних слов для других. Если открыть обычный google-переводчик, мы увидим целый список переводов одного слова по степени их популярности или важности.
При работе типичных кодеров/декодеров, например, вариационного автокодировщика результаты с применением дополнительного слоя Attention повышаются, значительно. “Внимание” раскрывает вероятностный подход нейросети.
Какая вероятность, что перевод слова sex – любовь, а не пол человека? Но полноценно вся мощь этого механизма разработана в трансформерах.
Attention заменяет каждый эмбеддинг токена/слова на эмбеддинг, содержащий информацию о соседних токенах, вместо использования одинакового эмбеддинга для каждого токена вне зависимости от контекста. Если бы мы кодировали слова по принципу словаря, получили бы просто “мешок слов”, который никак с друг другом не связан.
Трансформеры или сдвиг парадигмы в NLP
Теперь вместо рекуррентных нейронок пришло время трансформеров. Они учитывали контекст избирательно и формировали своеобразные матрицы весов для слов. Теперь процесс обработки естественного языка предполагал не последовательной накопления нагромождения данных, а получения избирательного контекста отдельных слов и их употреблений…
Архитектура трансформера состоит из енкодера и декодера.
Энкодер состоит из слоев, как и декодер.
Каждый из слоев состоит из блоков: self-attention и полносвязной нейронной сети (обычная нейронка, где одни слои связаны со всеми последующими слоями).
Входные данные проходят через механизм self-attention и в новом векторном представлении “скармливаются” обычной полноразмерной нейронной сети.
Self-attention — главный костяк работы трансформера. Давайте представим, что у нас есть предложение "Кот ловит мышь". Каждое слово в этом предложении (кот, ловит, мышь) представлено вектором. Self-Attention — это механизм, который позволяет модели фокусироваться на важных словах в предложении и определять, какие слова имеют большее значение для понимания смысла всего предложения.
Для каждого слова в предложении мы создаем три вектора: запрос (Query), ключ (Key) и значение (Value). Затем мы используем эти векторы, чтобы определить, насколько каждое слово важно для каждого другого слова в предложении. Естественно, что подобное перемножение не работает простым образом.
Главная цель self-attention затащить в нейронную сеть максимальное число векторных представлений, которые бы обрисовывали значимость отдельных слов в разных контекстах.
Когда мы говорим "Кот ловит мышь", модель может сосредоточиться на слове "Кот", чтобы понять, о ком идет речь. Для этого модель вычисляет, насколько слово "Кот" важно для каждого другого слова в предложении. Если важно, она больше обращает на него внимание.
Слово It зависимо в большей степени от animal. Животных в английском языке называют местоимением “Оно”.
Таким образом, благодаря механизму Self-Attention, модель может динамически определять, какие слова в предложении наиболее значимы, учитывая их контекст и взаимосвязь друг с другом. В результате работы механизма мы получаем attention-score.
Если провести такую операцию своеобразного эмбендинга кода, а именно восемь раз и получить на выходе новые матрицы с весами мы получим целый набор весов для разных контекстов, а это еще больше информации! Чем больше информации – тем лучше.
ChatGPT обучается на больших наборах текстовых данных, где модель пытается минимизировать потери (например, перекрестную энтропию) между сгенерированным текстом и правильными ответами. В процессе обучения модель настраивает веса внутри блоков трансформера, чтобы улучшить качество генерации текста. И вот мы получаем мощнейшую нейронку с миллиардами параметров и вполне приемлемым текстом для пользователей.
Какие трансформеры сегодня есть помимо GPT?
1. BERT (Bidirectional Encoder Representations from Transformers): Разработанный в Google, BERT - это модель трансформера, обученная на огромном корпусе текстовых данных для выполнения различных задач NLP, таких, как классификация текста, извлечение информации и вопросно-ответные системы.
2. T5 (Text-to-Text Transfer Transformer): Разработанный Google, T5 – универсальная модель трансформера, которая может решать широкий спектр задач NLP, представленных в формате текст-к-тексту. Такой формат позволяет использовать единый обученный трансформер для различных задач, таких как перевод, классификация, генерация текста и многое другое.
3. XLNet. Этот подход, также разработанный Google, представляет собой расширение и улучшение модели трансформера BERT. XLNet использует перестановочный механизм предложений и предлагает улучшенное моделирование контекста и лучшее качество на различных задачах NLP.
4. RoBERTa (Robustly optimized BERT approach). Разработанный Facebook, RoBERTa – это улучшенная версия модели BERT, которая была обучена с использованием различных стратегий обучения, таких как динамическое маскирование и обучение на длинных последовательностях, что привело к улучшению качества на различных задачах NLP.
Когда и как переходить от «ручного» продвижения к рекламе за деньги, какой минимальны бюджет заложить на тест каналов привлечения и куда «приземлять» будущих клиентов.
🎧 Подкаст «Стартап-секреты»: Сезон 3, выпуск 9
В гостях у меня Артур Кольцов, основатель digital-агентства Advertalyze, а также ассистента на базе искусственного интеллекта ChadAI.
Поговорили с Артуром про бесплатные и платные каналы продвижения, какие главные цели в маркетинге себе ставить на разных стадиях развития стартапа, сколько денег надо для тестирования каналов и стоит ли отключать каналы, которые пока не отрабатывают так, как хочется.
Тайм-коды на YouTube со ссылками:
0:00 Интро и знакомство с Артуром, который запустил свой первый стартап еще будучи студентом, а потом закрыл его
5:19 Про бесплатное продвижение и маркетинг за 0 рублей. Примеры в B2B и B2C
— 📒 Поддержать подкаст и получить доступ к базе знаний о развитии стартапа с нуля можно здесь —
На сайте подкаста «Стартап-секреты» вы найдете все выпуски с возможностью фильтровать по интересующей вас теме, например, «Запуск стартапа», «B2B-проекты», «Инвестиции» или «Глобальные рынки».
Вторая серия ситкома про борьбу админа, ИТ-руководителя, генерального директора на полях сражений с мировыми катаклизмами, проверяющими органами, раздолбайством и собственным самолюбием.