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

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

Можно, конечно, попытаться обойтись и без машинного обучения. Самый простой подход — проанализировать данные и составить понятный набор правил формата if-else (если-то). Между прочим, это применяется в реальной жизни, например, при анализе потребительской корзины. Составляется набор ассоциативных правил вида {хлеб, чай} → {молоко}. Это означает, что если покупатель приобретает хлеб и чай, то, скорее всего, он также купит молоко. Вуаля — мы сделали прогноз на будущее. 

У такого подхода есть очевидные проблемы: 

  • Не существует простого способа объективно измерить эффективность правил;

  • Прописывать правила вручную — неблагодарное дело.

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

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

Вот как будет выглядеть уравнение:

y̅ = ax + b

y̅ — это предсказанная цена дома, которую мы будем сравнивать с реальной ценой y.

x — это площадь дома. 

a и b — это коэффициенты, которые надо подобрать. 

Давайте пока сделаем вид, что мы уже подобрали a и b и получили готовое уравнение. Будем с его помощью предсказывать цену для каждого дома и считать разности между y и y̅. Эти разности, возведённые в квадрат, будут выступать в качестве ошибок. Чтобы узнать ошибку по всем домам, суммируем и усредним:

\text{ошибка} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2

Так мы получим число, которое будет кое-что говорить об эффективности нашего подхода — ошибку модели машинного обучения (ура, это наша первая модель машинного обучения). Функция, оценивающая то, как часто модель ошибается, традиционно называется функцией потерь.

Что мы хотим от ошибок? Чтобы их не было. Поэтому наша цель теперь — уменьшить разность между предсказанным y̅ и реальным y. Или минимизировать функцию потерь. Добиться этого позволит подбор оптимальных коэффициентов a и b.

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

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

Давайте опишем алгоритм:

  • Задаём какие-то значения для параметров a и b (можно случайные);

  • Считаем градиент функции потерь по текущим значениям параметров;

  • Обновляем параметры, сдвигая их немного в направлении антиградиента. Величина шага, с которой корректируются параметры, регулируется скоростью обучения (learning rate);

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

В итоге мы получаем конкретную функцию, например y = 3.67x + 6.54. Подставляя значения площадей вместо иксов, будем вычислять цены. 

Вот как это может выглядеть в коде на Python:

```
import numpy as np

areas = np.array([50, 80, 65, 45, 95])  # площади домов
prices = np.array([300000, 480000, 390000, 270000, 570000])  # цены домов

# Начальные значения коэффициентов
a = 0.1  
b = 100000  

learning_rate = 0.0001  # скорость обучения
iterations = 1000  # количество итераций

# Функция для предсказания
def predict(area, a, b):
    return a * area + b

# Функция потерь
def loss_function(actual_prices, predicted_prices):
    return ((actual_prices - predicted_prices) ** 2).mean()

# Градиентный спуск
for i in range(iterations):
    predictions = predict(areas, a, b)
    loss = loss_function(prices, predictions)
    
    dL_da = -2 * np.mean((prices - predictions) * areas)
    dL_db = -2 * np.mean(prices - predictions)
    
    a -= learning_rate * dL_da
    b -= learning_rate * dL_db    
```

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

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

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

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

Комментарии (8)


  1. nikolz
    08.05.2024 14:13

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

    Вопрос: метод автоматизации ... чего?


    1. Deirel
      08.05.2024 14:13
      +1

      Судя по содержанию статьи - метод автоматизации процесса минимизации функции потерь.


      1. nikolz
        08.05.2024 14:13

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

        Методы (алгоритмы) процесса оптимизации потерь разработаны давно и успешно применяются вне машинного обучения.

        До момента создания алгоритма обратного распространения машинное обучение было в тупике, хотя метод автоматизации минимизации ошибки успешно применялся.

        После этого момента машинное обучение мелким шагом пошло дальше, но это не по причине применения автоматизации.

        --------------------

        Полагаю, что авторы статьи сами не разобрались в том, что такое машинное обучение. Вернее сказать - обучение машин.

        https://azure.microsoft.com/ru-ru/resources/cloud-computing-dictionary/what-is-machine-learning-platform

        Машинное обучение (ML) — это использование математических моделей данных, которые помогают компьютеру обучаться без непосредственных инструкций. Оно считается одной из форм искусственного интеллекта (ИИ).


  1. nikolz
    08.05.2024 14:13
    +2

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

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

    https://ru.wikipedia.org/wiki/Линейная_регрессия

    Самой ранней формой регрессии был метод наименьших квадратов, который был опубликован Лежандром в 1805 году,[4] и Гауссом в 1809 году.[5] Лежандр и Гаусс оба применили этот метод к задаче определения на основе астрономических наблюдений орбит тел вокруг Солнца (в основном комет, но также позже недавно открытых малых планет). Гаусс опубликовал дальнейшее развитие теории наименьших квадратов в 1821 году,[6] включая версию теоремы Гаусса–Маркова.

    Термин "регрессия" был введен Фрэнсисом Гальтоном в 19 веке для описания биологического явления. Феномен заключался в том, что рост потомков высоких предков имеет тенденцию к снижению до нормального среднего значения (явление, также известное как регрессия к среднему).[7][8] Для Гальтона регрессия имела только это биологическое значение,[9][10] но позже его работа была расширена Удни Юлом и Карлом Пирсоном до более общего статистического контекста.[11][12] В работе Юла и Пирсона предполагается, что совместное распределение отклика и объясняющих переменных является гауссовым. Это предположение было ослаблено Р.А. Фишером в его работах 1922 и 1925 годов.[13][14][15] Фишер предположил, что условное распределение переменной отклика является гауссовым, но совместное распределение не обязательно должно быть таким. В этом отношении предположение Фишера ближе к формулировке Гаусса от 1821 года.

    1.  Рональд А. Фишер (1954). Статистические методы для научных работников (Двенадцатое изд.). Эдинбург: Оливер и Бойд. ISBN 978-0-05-002170-5.


    1. summerwind
      08.05.2024 14:13
      +1

      Не понял каким образом линейная регрессия превратилась в алгоритм машинного обучения

      А что не так? Машинное обучение это ведь не только нейросети и deep learning. Действительно, линейная регрессия это один из простейших supervised learning алгоритмов:

      https://en.m.wikipedia.org/wiki/Supervised_learning#Algorithms


      1. nikolz
        08.05.2024 14:13

        В обучении машин используются различные алгоритмы, но эти различные алгоритмы не являются сами машинным обучением.

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

        Машинное обучение - это не конкретный математический метод(алгоритм), а  "использование математических моделей данных, которые помогают компьютеру обучаться без непосредственных инструкций."  Т е суть именно в том, что мы не пишем конкретный алгоритм решения задачи, но это решение формируется на основе обучения. И именно нейронные сети и лежат в основе(являются базисом) обучения машин.


        1. summerwind
          08.05.2024 14:13

          По-моему, и так большинству понятно, что "алгоритм машинного обучения" это то же самое, что и "алгоритм, используемый в машинном обучении". Зачем до придирок к таким мелочам то доходить? :)

          И нейросети, кстати, это только одно из подмножеств машинного обучения, а не вся его основа. Навскидку: https://www.coursera.org/articles/machine-learning-vs-neural-networks


          1. nikolz
            08.05.2024 14:13

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

            Ссылку загрузить не удается.

            Но нейросеть - это и есть основа машинного обучения. А основа нейросети - это персептрон Розенблатта.

            https://elib.utmn.ru/jspui/bitstream/ru-tsu/14487/1/8_Д.В. Постарнак.pdf#:~:text=Персептрон Розенблатта является одной из,Розенблаттом для персептронной модели мозга