Предложения относительно уязвимостей и защиты моделей машинного обучения

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.



В последнее время эксперты все чаще затрагивают вопрос безопасности моделей машинного обучения и предлагают различные способы защиты. Самое время детально изучить потенциальные уязвимости и средства защиты в контексте популярных традиционных систем моделирования, таких как линейные и древовидные модели, обучаемые на статических датасетах. Хотя автор статьи не эксперт по безопасности, он очень внимательно следит за такими темами, как отладка (debugging), объяснение (explanations), объективность (fairness), интерпретируемость (interpretability) и конфиденциальность (privacy) в машинном обучении.

В этой статье приведем несколько вероятных векторов атак на типичную систему машинного обучения в типичной организации, предложим ориентировочные решения для защиты и рассмотрим некоторые общие проблемы и наиболее перспективные практики.

1. Атаки с целью искажения данных


Искажение данных означает, что кто-то систематически меняет обучающие данные для манипулирования прогнозами вашей модели (такие атаки еще называют «причинно-обусловленными» атаками). Чтобы исказить данные, злоумышленник должен иметь доступ к некоторым или ко всем вашим данным для обучения. И при отсутствии должного контроля во многих компаниях такой доступ могут иметь разные сотрудники, консультанты и подрядчики. Получить несанкционированный доступ к некоторым или ко всем обучающим данным может и злоумышленник снаружи периметра безопасности.

Прямая атака с целью искажения данных может включать в себя изменение меток датасета. Таким образом, каким бы ни было коммерческое применение вашей модели, злоумышленник может управлять её прогнозами, например, изменив метки, чтобы ваша модель научилась выдавать крупные кредиты, большие скидки или установила небольшие страховые взносы для злоумышленников. Вынуждение модели делать ложные прогнозы в интересах злоумышленника иногда называют нарушением «целостности» модели.

Злоумышленник также может использовать искажение данных для обучения вашей модели ради преднамеренной дискриминации группы лиц, лишив их крупного кредита, больших скидок или низких страховых взносов, которые полагаются им по праву. По своей сути эта атака похожа на DDoS. Вынуждение модели делать ложные прогнозы, чтобы навредить другим, иногда называют нарушением «доступности» модели.

Хотя может показаться, что исказить данные проще, чем изменить значения в существующих строках датасета, однако внести искажения можно также путем добавления в датасет на первый взгляд безобидных или лишних столбцов. Измененные значения в этих столбцах могут затем вызвать изменение прогнозов модели.

Теперь давайте рассмотрим некоторые возможные защитные и экспертные (forensic) решения в случае искажения данных:

  • Анализ дифференцированного воздействия. Многие банки уже проводят анализ дифференцированного воздействия для справедливого кредитования, чтобы определить, не дискриминирует ли их модель разные категории лиц. Однако многие другие организации пока не продвинулись настолько далеко. Существует несколько отличных инструментов с открытым исходным кодом для выявления дискриминации и проведения анализа дифференцированного воздействия. Например, Aequitas, Themis и AIF360.
  • Fair или private-модели. Такие модели, как обучение с честными представлениями (learning fair representations — LFR) и приватное агрегирование обучающих ансамблей (private aggregation of teacher ensembles — PATE), стараются уделять меньше внимания отдельным демографическим свойствам при генерировании прогнозов. Также эти модели могут быть менее подвержены дискриминационным атакам с целью искажения данных.
  • Отклонение при отрицательном воздействии (Reject on Negative Impact — RONI). RONI — это метод удаления из датасета таких строк данных, которые снижают точность прогнозирования. Дополнительную информацию о RONI см. в разделе 8 «Безопасность машинного обучения».
  • Анализ невязки (residual analysis). Поиск странных, заметных закономерностей в невязках прогнозов вашей модели, особенно относящихся к сотрудникам, консультантам или подрядчикам.
  • Саморефлексия. Оцените модели на ваших сотрудниках, консультантах и подрядчиках с целью выявления аномально выгодных прогнозов.

Анализ дифференцированного воздействия, анализ невязок и саморефлексия могут проводиться во время обучения и в рамках мониторинга моделей в режиме реального времени.

2. Атаки с помощью водяных знаков


Водяной знак — это термин, заимствованный из литературы по безопасности глубокого обучения, в которой часто говорится о добавлении специальных пикселей в изображение для получения от вашей модели желаемого результата. Вполне можно сделать то же самое и с данными о клиентах или транзакциях.

Рассмотрим сценарий, при котором сотрудник, консультант, подрядчик или злоумышленник извне имеет доступ к коду для production-использования вашей модели, делающей прогнозы в режиме реального времени. Такой человек может изменить код, чтобы распознать странное или маловероятное сочетание значений входных переменных для получения желаемого результата прогнозирования. Подобно искажению данных, атаки с помощью водяных знаков могут применяться для нарушения целостности или доступности вашей модели. Например, чтобы нарушить целостность, злоумышленник может вставить «полезную нагрузку» в код оценки для production-использования модели, в результате чего она распознает комбинацию возраста 0 лет по адресу 99, что приведёт к некоему положительному для злоумышленника прогнозу. А для блокировки доступности модели он может вставить искусственное дискриминационное правило в код оценки, что не позволит модели выдать положительные результаты для определённой группы лиц.

Защитные и экспертные подходы к атакам с помощью водяных знаков могут включать в себя:

  • Обнаружение аномалий. Автокодеры — это модель обнаружения мошенничества, которая может идентифицировать входные данные, являющиеся сложными и странными, или не похожими на другие данные. Потенциально автокодеры могут выявить любые водяные знаки, используемые для запуска вредоносных механизмов.
  • Ограничения целостности данных. Многие базы данных не допускают странных или нереалистичных комбинаций входных переменных, что потенциально может предотвратить атаки с помощью водяных знаков. Тот же эффект может работать для ограничений целостности к потокам данных, которые принимаются в режиме реального времени.
  • Анализ дифференцированного воздействия: см. раздел 1.
  • Контроль версий. Код оценки для production-применения модели должен управляться и контролироваться на основе версий, как и любой другой критически важный программный продукт.

Выявление аномалий, ограничения целостности данных и анализ дифференцированного воздействия могут использоваться во время обучения и в рамках мониторинга моделей в режиме реального времени.

3. Инверсия суррогатными моделями


Обычно «инверсией» называют получение несанкционированной информации из модели, а не размещение информации в ней. Также инверсия может быть примером «разведывательной обратной инженерной атаки». Если злоумышленник способен получить множество прогнозов из API вашей модели или другой конечной точки (веб-сайта, приложения и т.д.), он может обучить свою собственную суррогатную модель. Попросту говоря, это симуляция вашей прогностической модели! Теоретически, злоумышленник может обучить суррогатную модель между входными данными, использованными им для генерирования полученных прогнозов, и самими прогнозами. В зависимости от количества прогнозов, которые могут быть получены, суррогатная модель может стать достаточно точной симуляцией вашей модели. После обучения суррогатной модели у злоумышленника будет «песочница», из которой он сможет спланировать имперсонализацию (т.е. «имитацию») или атаку с состязательным примером на целостность вашей модели, или получит потенциальную возможность запустить восстановление некоторых аспектов ваших конфиденциальных обучающих данных. Суррогатные модели также могут быть обучены с использованием внешних источников данных, которые каким-то образом согласованы с вашими прогнозами, как, например, сделала ProPublica с авторской моделью рецидивизма COMPAS.

Для защиты вашей модели от инверсии с помощью суррогатной модели можно опираться на такие подходы:

  • Авторизованный доступ. Запрашивайте для получения прогноза дополнительную аутентификацию (например, двухфакторную).
  • Регулирование частоты прогнозов (Throttle predictions). Ограничьте большое количество быстрых прогнозов от отдельных пользователей; учитывайте возможность искусственного увеличения задержки прогнозирования.
  • «Белые» (white-hat) суррогатные модели. В качестве упражнения «белый хакер» попробуйте следующее: обучите свои собственные суррогатные модели между вашими входными данными и прогнозами модели для production-применения, и внимательно наблюдайте за следующими аспектами:
    • границы точности различных типов «белых» суррогатных моделей; попытайтесь понять, в какой степени суррогатная модель действительно может быть использована для получения нежелательных данных о вашей модели.
    • типы трендов данных, которые можно узнать из вашей «белой» суррогатной модели, например, линейные тренды, представленные коэффициентами линейной модели.
    • типы сегментов или демографических распределений, которые могут быть изучены путем анализа количества лиц, отнесенных к определенным узлам «белого» суррогатного дерева решений.
    • правила, которые можно узнать из «белого» суррогатного дерева решений, например, как в точности изобразить человека, который получит положительный прогноз.


4. Атаки с состязательным примером


В теории, целеустремленный хакер может научиться — скажем, методом проб и ошибок (т.е. «разведки» или «анализа чувствительности») — инверсии суррогатной модели или социальной инженерии, как играть с вашей моделью, чтобы получить желаемый результат прогнозирования или избежать нежелательного прогноза. Попытка достичь таких целей с использованием специально разработанной строки данных называется атакой с состязательным примером. (иногда — атакой для исследования целостности). Злоумышленник может использовать атаку с состязательным примером, чтобы получить крупный кредит или низкий страховой взнос, или избежать отказа в условно-досрочном освобождении при высокой оценке криминального риска. Некоторые называют использование состязательных примеров для исключения из прогноза нежелательного результата «уклонением».

Попробуйте описанные ниже методы, чтобы защититься или выявить атаку с состязательным примером:

  • Анализ активации. Анализ активации требует наличия в ваших прогностических моделях сравнительных внутренних механизмов, например, средней активации нейронов в вашей нейронной сети или доли наблюдений, относящихся к каждому конечному узлу в вашем случайном лесу. Затем вы сравниваете эту информацию с поведением модели при реальных поступающих потоках данных. Как сказал один из моих коллег: «Это всё равно, что видеть один конечный узел в случайном лесу, который соответствует 0,1 % обучающих данных, но подходит для 75 % scoring-строк в час».
  • Обнаружение аномалий. см. раздел 2.
  • Авторизованный доступ. см. раздел 3.
  • Сравнительные модели. При оценке новых данных в дополнение к более сложной модели используйте сравнительную модель высокой прозрачности. Интерпретируемые модели труднее взломать, потому что их механизмы являются прозрачными. При оценке новых данных сравните новую модель с надежной прозрачной моделью, или моделью, обученной на проверенных данных и по доверенному процессу. Если разница между более сложной и непрозрачной моделью и интерпретируемой (или проверенной) слишком велика, вернитесь к прогнозам консервативной модели или обработайте строку данных вручную. Запишите этот инцидент, это может быть атака с состязательным примером.
  • Throttle-прогнозы: см. раздел 3.
  • «Белый» анализ чувствительности. Используйте анализ чувствительности для проведения собственных исследовательских атак, чтобы понять, какие значения переменных (или их комбинации) могут вызвать большие колебания в прогнозах. Ищите эти значения или комбинации значений при оценке новых данных. Для проведения «белого» исследовательского анализа можете воспользоваться open source-пакетом cleverhans.
  • «Белые» суррогатные модели: см. раздел 3.

Анализ активации или сравнительные модели могут использоваться во время обучения и в рамках мониторинга моделей в режиме реального времени.

5. Имперсонализация


Целеустремленный хакер может узнать — опять же, методом проб и ошибок, с помощью инверсии с суррогатной моделью или социальной инженерии, — какие входные данные или конкретные люди получают желаемый результат прогнозирования. Затем злоумышленник может выдать себя за этого человека, чтобы получить выгоду от прогнозирования. Атаки с имперсонализацией иногда называют «имитационными» атаками, и с точки зрения модели это напоминает хищение персональных данных. Как и в случае с атакой с состязательным примером, при имперсонализации входные данные искусственно изменяются в соответствии с вашей моделью. Но, в отличие от той же атаки с состязательным примером, при которой для обмана может быть использована потенциально случайная комбинация значений, при имперсонализации для получения прогноза, связанного с этим типом объекта, используется информация, связанная с другим смоделированным объектом (например, осужденным, клиентом, сотрудником, финансовой операцией, пациентом, продуктом и т. д.). Допустим, злоумышленник может узнать, от каких характеристик вашей модели зависит предоставление больших скидок или льгот. Тогда он может фальсифицировать используемую вами информацию, чтобы получить такую скидку. Злоумышленник может поделиться своей стратегией с другими, что может привести к большим потерям для вашей компании.

Если вы используете двухступенчатую модель, то остерегайтесь «аллергической» атаки: злоумышленник может имитировать строку обычных входных данных для первого этапа вашей модели, чтобы атаковать второй её этап.

Защитные и экспертные подходы для атак с имперсонализацией могут включать в себя:

  • Анализ активации. см. раздел 4.
  • Авторизованный доступ. см. раздел 3.
  • Проверка на наличие дублей. На этапе оценки (scoring) отслеживайте количество похожих записей, для которых доступна ваша модель. Это можно делать в пространстве уменьшенной размерности с использованием автокодеров, многомерного масштабирования (MDS) или аналогичных методов уменьшения размерности. Если за определенный промежуток времени встречается слишком много похожих строк, примите меры по исправлению положения.
  • Функции уведомления о возможных угрозах. Сохраните в своем конвейере функцию num_similar_queries, которая может оказаться бесполезной сразу после обучения или внедрения вашей модели, однако может использоваться во время оценки (или во время будущего повторного обучения) для уведомления модели или конвейера об угрозах. Например, если на момент выставления оценки значение num_similar_queries больше нуля, то запрос на оценку может быть направлен для ручного анализа. В будущем, когда вы будете повторно обучать модель, сможете научить её выдавать строкам входных данных с высокими значениями num_similar_queries отрицательные результаты прогнозирования.

Анализ активации, проверка на наличие дублей и функции уведомления о возможных угрозах могут использоваться во время обучения и в рамках мониторинга моделей в режиме реального времени.

6. Общие проблемы


Некоторые распространенные схемы использования машинного обучения также влекут более общие проблемы безопасности.

Черные ящики и ненужная сложность. Хотя последние достижения в области интерпретируемых моделей и объяснения моделей позволяют использовать точные и прозрачные нелинейные классификаторы и регрессоры, многие процессы машинного обучения по-прежнему сосредоточены на моделях типа «чёрный ящик». Они являются лишь одним из видов зачастую излишней сложности в стандартном рабочем процессе коммерческого машинного обучения. Другими примерами потенциально вредной сложности могут быть чрезмерно экзотичные технические характеристики или большое количество пакетных зависимостей. Это может представлять проблему, по крайней мере, по двум причинам:

  1. Настойчивый и целеустремленный хакер может со временем узнать о вашей чрезмерно сложной системе моделирования типа «чёрный ящик» больше, чем вы сами или ваша команда (особенно на современном перегретом и быстро меняющемся рынке «анализа» данных). Для этого злоумышленник может использовать множество новых не зависящих от моделей методов объяснения и классический анализ чувствительности, не считая многих других, более распространенных инструментов взлома. Этот дисбаланс знаний потенциально может быть использован для проведения атак, описанных в разделах 1-5, или для других, пока ещё неизвестных типов атак.
  2. Машинное обучение в среде научных исследований и разработок в значительной степени зависит от разнообразной экосистемы пакетов ПО с открытым исходным кодом. Некоторые из этих пакетов имеют множество участников и пользователей, другие высокоспециализированы и нужны небольшому кругу исследователей и практиков. Известно, что многие пакеты поддерживаются блестящими статистиками и исследователями машинного обучения, которые уделяют основное внимание математике или алгоритмам, а не программной инженерии и уж точно не безопасности. Нередки случаи, когда конвейер машинного обучения зависит от десятков или даже сотен внешних пакетов, каждый из которых может быть взломан для сокрытия зловредной «полезной нагрузки».

Распределенные системы и модели. К счастью или к сожалению, мы живем в век больших данных. Многие организации сегодня используют распределенные системы обработки данных и машинного обучения. Распределенные вычисления могут представлять собой большую цель для атаки изнутри или извне. Данные могут быть искажены только на одном или на нескольких рабочих узлах большой распределенной системы хранения или обработки данных. «Черный ход» для водяных знаков может быть закодирован в одну модель большого ансамбля. Вместо отладки одного простого датасета или модели специалисты-практики теперь должны изучать данные или модели, разбросанные по крупным вычислительным кластерам.

Распределенные атаки типа «отказ в обслуживании» (DDoS). Если сервис прогнозного моделирования играет ключевую роль в деятельности вашей организации, убедитесь, что вы учли хотя бы самые популярные распределенные DDoS-атаки, когда злоумышленники атакуют прогностическую службу невероятно большим количеством запросов, чтобы задержать или остановить выдачу прогнозов для законных пользователей.

7. Общие решения


Можно использовать несколько общих, старых и новых, наиболее эффективных методов для снижения уязвимости системы безопасности и повышения справедливости, контролируемости, прозрачности и доверия к системам машинного обучения.

Авторизованный доступ и регулирование частоты (throttling) прогнозирования. Стандартные средства защиты, такие как дополнительная аутентификация и регулирование частоты прогнозирования, могут быть весьма эффективными при препятствовании ряду векторов атак, описанных в разделах 1-5.

Сравнительные модели. В качестве сравнительной модели для определения того, производились ли с прогнозом какие-либо манипуляции, можно использовать старый и проверенный конвейер моделирования или другой интерпретируемый инструмент прогнозирования с высокой прозрачностью. К манипуляциям относится искажение данных, атаки с помощью водяных знаков или атаки с состязательным примером. Если разница между прогнозом вашей проверенной модели и прогнозом более сложной и непрозрачной модели слишком велика, запишите такие случаи. Направьте их аналитикам или примите другие меры для анализа или исправления положения. Необходимо принимать серьёзные меры предосторожности, чтобы гарантировать, что ваша сравнительная модель и конвейер остаются безопасными и неизменными по сравнению с их первоначальным, надёжным состоянием.

Интерпретируемые, fair- или private-модели. В настоящее время существуют методы (например, монотонные GBM (M-GBM), масштабируемые Байесовские списки правил (SBRL), объясняемые нейронные сети (XNN)), которые обеспечивают как точность, так и интерпретируемость. Эти точные и интерпретируемые модели легче документировать и отлаживать, чем классические «чёрные ящики» машинного обучения. Более новые типы fair- и private-моделей (например, LFR, PATE) также могут быть обучены тому, как меньше обращать внимание на видимые снаружи, демографические характеристики, которые доступны для наблюдения, применения с помощью социальной инженерии в ходе атаке с состязательным примером или имперсонализирования. Вы рассматриваете возможность создания нового процесса машинного обучения в будущем? Подумайте о том, чтобы построить его на основе менее рискованных интерпретируемых private- или fair-моделей. Они легче отлаживаются и потенциально устойчивы к изменениям в характеристиках отдельных объектов.

Отладка модели для обеспечения безопасности. Новая область отладки моделей посвящена обнаружению ошибок в механизмах и прогнозах моделей машинного обучения и их исправлению. Инструменты отладки, такие как суррогатные модели, анализ невязок и анализ чувствительности, могут быть использованы в «белых» испытаниях для выявления ваших уязвимостей, или в аналитических упражнениях для выявления любых потенциальных атак, которые могут произойти или происходят.

Документирование модели и методы объяснения. Документирование модели — это стратегия снижения рисков, десятилетиями используемая в банковской деятельности. Она позволяет сохранять и передавать знания о сложных системах моделирования по мере изменения состава владельцев моделей. Традиционно документирование применялось для линейных моделей высокой прозрачности. Но с появлением мощных, точных инструментов объяснения (таких как дерево SHAP и основанные на производных атрибуты локальных функций для нейронных сетей) ранее существовавшие рабочие процессы моделей типа «чёрный ящик» могут быть хотя бы немного объяснены, отлажены и документированы. Очевидно, что теперь документация должна включать в себя все цели обеспечения безопасности, включая известные, исправленные или ожидаемые уязвимости.

Мониторинг и управление моделями непосредственно в целях безопасности. Серьёзные специалисты-практики понимают, что большинство моделей обучены на статических «моментальных снимках» реальности в виде датасетов, и что в режиме реального времени точность прогнозов снижается, поскольку текущее положение вещей всё больше отдаляется от собранной ранее информации. Сегодня мониторинг большинства моделей направлен на выявление такого смещения в распределении входных переменных, который, в конечном итоге, приведёт к снижению точности. Мониторинг моделей должен быть разработан для отслеживания атак, описанных в разделах 1 — 5, и любых других потенциальных угроз, которые выявляются при отладке вашей модели. Хотя это не всегда напрямую связано с безопасностью, также следует в режиме реального времени оценивать модели на предмет дифференцированного воздействия. Наряду с документацией моделей, все артефакты моделирования, исходный код и связанные с ними метаданные должны управляться, контролироваться по версиям и проверяться на безопасность, как и ценные коммерческие активы, которыми они и являются.

Функции уведомления о возможных угрозах. Функции, правила и этапы предварительной или последующей обработки могут быть включены в ваши модели или процессы, оснащённые средствами уведомления о возможных угрозах: например, о количестве аналогичных строк в модели; о том, представляет ли текущая строка сотрудника, подрядчика или консультанта; аналогичны ли значения в текущей строке тем значениям, что получены при «белых» атаках с состязательным примером. Эти функции могут понадобиться — а могут и не понадобиться — при первом обучении модели. Но сохранение места для них может однажды очень пригодиться при оценке новых данных или при последующем переобучении модели.

Обнаружение системных аномалий. Метамодель обнаружения аномалий на основе автокодера обучайте на операционной статистике всей вашей системы прогностического моделирования (количество прогнозов за определённый период времени, задержки, загрузка процессора, памяти и диска, количество одновременных пользователей и т. д.), а затем внимательно отслеживайте эту метамодель на предмет аномалий. Аномалия может подсказать, если что-то идёт не так. Для точного отслеживания причин проблемы потребуются последующие расследования или специальные механизмы.

8. Справочные материалы и информация для дальнейшего чтения


Большое количество современной академической литературы по безопасности машинного обучения сосредоточено на адаптивном обучении, глубоком обучении и шифровании. Тем не менее, пока что автор не знает практиков, которые бы на самом деле всё это делали. Поэтому в дополнение к недавно опубликованным статьям и постам приводим статьи 1990-х и начала 2000-х годов о нарушениях в сети, обнаружении вирусов, фильтрации спама и смежных темах, которые также были полезными источниками. Если вы хотите узнать больше об увлекательной теме защиты моделей машинного обучения, вот основные ссылки — из прошлого и настоящего, — которые были использованы для написания поста.

  • Барено, Марко и др. «Безопасность машинного обучения». Machine Learning 81.2 (2010): 121-148. URL. https://people.eecs.berkeley.edu/~adj/publications/paper-files/SecML-MLJ2010.pdf
  • Кумар, Аджитеш. «Атаки на безопасность: Анализ моделей машинного обучения». DZone (2018). URL. https://dzone.com/articles/security-attacks-analysis-of-machine-learning-mode
  • Лорика, Бен и Лукидис, Майк. «Вы создали приложение для машинного обучения. Теперь убедитесь, что оно безопасно». O’Reilly Ideas (2019). URL. https://www.oreilly.com/ideas/you-created-a-machine-learning-application-now-make-sure-its-secure
  • Паперно, Николас. «Карта мародеров безопасности и конфиденциальности в машинном обучении: Обзор текущих и будущих направлений исследований, направленных на достижение безопасности и конфиденциальности машинного обучения». Материалы 11-го семинара ACM по искусственному интеллекту и безопасности. ACM (2018). URL. https://arxiv.org/pdf/1811.01134.pdf

Заключение


Тех, кого волнуют наука и практика машинного обучения, беспокоит тот факт, что угроза взлома при машинном обучении в сочетании с ростом угроз нарушения конфиденциальности и алгоритмической дискриминации может усилить растущий общественный и политический скептицизм по поводу машинного обучения и искусственного интеллекта. Мы все должны помнить о непростых для ИИ временах в недалёком прошлом. Уязвимости безопасности, нарушения конфиденциальности и алгоритмическая дискриминация потенциально могут комбинироваться, что приведёт к снижению финансирования исследований в области компьютерного обучения, или к драконовским мерам по регулированию этой области. Давайте продолжим обсуждение и решение этих важных проблем, чтобы предотвратить кризис, а не расхлёбывать его последствия.
Источник: https://habr.com/ru/company/nixsolutions/blog/458892/#habracut

Интересные статьи

Интересные статьи

В данной статье мы разберемся с эксплуатацией некоторых WEB-узвимостей на примере прохождения варгейма Natas. Каждый уровень имеет доступ к паролю следующего уровня. Все пароли также хранятся...
В данной статье мы разберемся с эксплуатацией некоторых WEB-узвимостей на примере прохождения варгейма Natas. Каждый уровень имеет доступ к паролю следующего уровня. Все пароли также хранятся...
Недавно вышла статья которая неплохо показывает тенденцию в машинном обучении последних лет. Если коротко: число стартапов в области машинного обучения в последние два года резко упало. Ну что...
27 мая исполнится 10 лет с того момента, как Ryan Dahl выпустил самую первую версию Node.js. За прошедшее десятилетие проект стал более чем успешен, но сам Райан уже переключился на другие ве...
Сегодня мы поговорим о перспективах становления Битрикс-разработчика и об этапах этого пути. Статья не претендует на абсолютную истину, но даёт жизненные ориентиры.