09 / 27 · Линейная классификация
Линейные классификаторы и суррогатные функции потерь
Разделение двух классов гиперплоскостью: геометрия линейного классификатора и расстояние до его границы, отступ, почему число ошибок нельзя минимизировать напрямую, выпуклые суррогатные функции потерь, которые его ограничивают сверху (логистическая, кусочно-линейная, экспоненциальная, квадрат кусочно-линейной), и что оценивает каждая из них, перцептрон как стохастический градиентный спуск, линейная разделимость и что добавляет регуляризатор.
Метод наименьших квадратов · Стохастические и адаптивные оптимизаторы · Регуляризация
На этой странице 14
Заметка о регуляризации завершила раздел о линейной регрессии моделью, которая предсказывает число и не гонится за шумом. Но многие целевые переменные — не числа, а классы: спам или нет, дефолт или погашение кредита, злокачественная опухоль или доброкачественная. Соблазнительный короткий путь — закодировать два класса как и , обучить метод наименьших квадратов с гребневым штрафом и предсказывать знак полученного значения. В этой заметке мы покажем, почему метод наименьших квадратов с линейной моделью плохо справляется с этой задачей, что вместо неё должен минимизировать линейный классификатор и как в эту картину вписывается старейший алгоритм обучения — перцептрон. Введённые здесь функции потерь вернутся во всех остальных заметках раздела: логистическая (logistic loss) — в логистической регрессии, кусочно-линейная (hinge loss) — в методе опорных векторов.
Обозначения. Обучающая выборка — , где , а метки . У линейного классификатора есть веса и свободный член (bias) ; его оценка (score) — , а предсказание — . Отступ (margin) примера — это . равно 1, если условие в скобках выполнено, и 0 иначе; — евклидова норма. — вероятность положительного класса в точке .
Почему не метод наименьших квадратов на метках?#
Возьмём шесть точек на прямой: отрицательные в и положительные в . Метод наименьших квадратов на метках даёт , и граница проходит через , ровно посередине между классами. Теперь добавим ещё три положительные точки в — настолько явно положительные, что никакое разумное правило не должно сдвинуться. Решение метода наименьших квадратов становится , граница смещается в , и положительная точка теперь классифицируется неверно. Логистическая регрессия, предмет следующей заметки, на тех же девяти точках оставляет границу в без единой ошибки.
Причина становится видна, если записать функцию потерь через отступ. Поскольку ,
Квадратичная ошибка — функция отступа, которая минимальна при и растёт в обе стороны. Три далёкие точки при новом решении получают оценки примерно от до , то есть отступы больше 1, и квадратичная ошибка штрафует их за то, что они слишком правы: чтобы опустить их оценки к 1, прямую нужно сделать более пологой, а это тянет границу вправо. У линейного классификатора функция потерь, наказывающая за большие положительные отступы, позволяет лёгким точкам сдвигать границу; функции потерь ниже за них никогда не наказывают.
Гиперплоскость делит пространство#
Множество — гиперплоскость: прямая на плоскости, плоскость в трёхмерном пространстве. Классификатор относит одну её сторону к , а другую к . Для двух точек на гиперплоскости , поэтому перпендикулярен любому направлению внутри неё: — вектор нормали, и он смотрит в положительную сторону.
Расстояние до границы. Запишем любую точку как , где — её проекция на гиперплоскость, а — расстояние со знаком вдоль единичной нормали. Поскольку ,
Оценка — это расстояние со знаком до границы, измеренное в единицах . Умножение и на одну и ту же положительную константу меняет оценки, но не меняет ни границу, ни предсказания, поэтому у линейного классификатора есть одна лишняя степень свободы; регуляризация её устранит. Свободный член можно убрать, дописав к каждому постоянный признак , а к — ; так это сделано в коде ниже.
Разобранный пример. При и граница — прямая , и . У точки оценка , то есть она лежит на положительной стороне на расстоянии . Её проекция на прямую — , и действительно, .
Линейный классификатор: граница, нормаль и отступ
Отступ#
Отступ объединяет метку и оценку в одно число. Его знак говорит, верно ли классифицирован пример; его величина, делённая на , — расстояние до границы, то есть мера уверенности. На рисунке у ближайшей к границе из верно классифицированных точек , а у точки класса , лежащей глубоко на положительной стороне, . Доля ошибок на обучении — доля неположительных отступов:
где , точка ровно на границе, считается ошибкой. Функция — это функция потерь 0–1 (0–1 loss), записанная как функция отступа.
Почему число ошибок нельзя минимизировать напрямую#
Доля ошибок — естественная целевая функция, но использовать её нельзя по двум причинам.
- Нет градиента. Как функция от она кусочно-постоянна: малое изменение весов либо ничего не меняет, либо перебрасывает одну точку через границу. Её градиент равен нулю почти всюду и не определён в точках скачков, так что градиентному спуску не за чем следовать.
- Вычислительная сложность. Найти гиперплоскость с наименьшим числом ошибок на обучении — NP-трудная задача, когда классы перекрываются (Höffgen, Simon and Van Horn, 1995), и даже найти такую, у которой число ошибок не более чем в константу раз больше наилучшего, трудно (Ben-David, Eiron and Long, 2003). Прост только разделимый случай: гиперплоскость с для всех — допустимая точка задачи линейного программирования, и её находят за полиномиальное время.
При этом то, что оценивает доля ошибок, — правильная цель. Её теоретический аналог, математическое ожидание функции потерь 0–1, минимизирует байесовский классификатор (Bayes classifier), который предсказывает более вероятный класс, , как указано в таблице других функций потерь и других целей. Вопрос в том, как прийти к нему вычислением, которое работает.
Суррогатные функции потерь: верхние оценки, которые можно минимизировать#
Если при всех , то
Обычно выбирают одну из следующих функций:
Логистическую функцию потерь обычно записывают с натуральным логарифмом, . Эта версия равна при и вблизи нуля не является верхней оценкой; деление на , как выше, делает её верхней оценкой и никак не меняет точку минимума.
Оценка ограничивает долю ошибок сверху, но не следует за ней. С этой функцией потерь у отступов средняя суррогатная потеря и одна ошибка из двух, а у отступов — и ни одной ошибки.
Функция потерь 0–1 и её выпуклые верхние оценки
При , на одну единицу по неверную сторону, четыре функции потерь равны , , и ; при , при уверенно верном ответе, — , , и . Квадратичная ошибка из начального примера тоже ограничивает ступеньку сверху, но это единственная кривая на рисунке, которая справа снова растёт. Остальные различия важны на практике:
| Функция потерь | Выпуклая | Гладкая | Ноль для уверенно верных ответов | Рост при | Где используется |
|---|---|---|---|---|---|
| логистическая | да | да | нет, лишь стремится к 0 | линейный | логистическая регрессия |
| кусочно-линейная | да | нет, излом при | да, при | линейный | метод опорных векторов |
| экспоненциальная | да | да | нет | экспоненциальный | AdaBoost |
| квадрат кусочно-линейной | да | один раз дифференцируема | да, при | квадратичный | LinearSVC из scikit-learn (функция потерь по умолчанию) |
| квадратичная ошибка | да | да | нет, снова растёт при | квадратичный | метод наименьших квадратов на метках |
Выпуклость делает их минимизируемыми. Каждый отступ линеен по , а выпуклая функция от линейной выпукла. Среднее выпуклых функций выпукло, поэтому каждый локальный минимум эмпирического суррогатного риска глобален и градиентные методы к нему сходятся. Гладкость определяет, какие методы применимы: градиентный спуск и метод Ньютона для логистической функции потерь, субградиенты или переформулировка задачи для кусочно-линейной.
Рост слева определяет устойчивость. Точка с неверной меткой находится при большом отрицательном отступе. Линейные функции потерь штрафуют её пропорционально тому, насколько она неверна, экспоненциальная — экспоненциально, так что одна плохая метка может доминировать в сумме; в этом известная слабость AdaBoost на зашумлённых метках (Hastie, Tibshirani and Friedman, 2009, Section 10.6). Экспоненциальная функция потерь вернётся в заметке о градиентном бустинге.
Что оценивает каждая суррогатная функция#
В отдельной точке с оценка несёт ожидаемую суррогатную потерю , поскольку метка равна с вероятностью . Минимизация по даёт оценку, которую выдавала бы идеально гибкая модель, обученная на неограниченном объёме данных. Для логистической функции потерь с натуральным логарифмом , где , поэтому производная ожидаемой потери равна
Остальные строки получаются так же (Hastie, Tibshirani and Friedman, 2009, Table 12.1); строку кусочно-линейной функции выводит заметка о методе опорных векторов.
| Функция потерь | Точка минимума | При | Восстанавливает ? |
|---|---|---|---|
| логистическая | , логарифм шансов | да | |
| экспоненциальная | да | ||
| кусочно-линейная | нет | ||
| квадрат кусочно-линейной, квадратичная ошибка | да, на |
В каждой строке знак совпадает со знаком , поэтому каждая суррогатная функция, минимизированная по всем функциям, даёт байесовский классификатор. Это свойство называется калиброванностью для классификации (classification calibration), и для выпуклой суррогатной функции оно выполняется ровно тогда, когда функция потерь дифференцируема в и её производная там отрицательна (Bartlett, Jordan and McAuliffe, 2006; Zhang, 2004). Строки различаются тем, что ещё они сохраняют. Точка минимума кусочно-линейной функции равна при любом , поэтому оценка, обученная с ней, говорит, по какую сторону лежит точка, и ничего не говорит о том, насколько эта сторона вероятна; точка минимума логистической функции — сам логарифм шансов (log-odds), из которого . Экспоненциальная и квадратичные строки тоже обращаются, через другие связи: и ; при оценках из таблицы обе дают .
Строка квадратичной ошибки объясняет и пример из начала заметки. По всем функциям квадратичная ошибка на метках калибрована для классификации и даже восстанавливает . Подвела линейная подгонка: прямая не может всюду следовать за , и квадратичная ошибка тратит её наклон на далёкие точки, которые и так классифицированы верно. Логистическая функция потерь — отправная точка следующей заметки.
Перцептрон: стохастический градиентный спуск при нулевом отступе#
Перцептрон (perceptron) Розенблатта (1958) — старейшее правило обучения линейного классификатора. Он перебирает примеры по одному и исправляет веса только после ошибки:
Это стохастический градиентный спуск по функции потерь перцептрона (perceptron loss) с шагом 1. Градиент по равен для неверно классифицированного примера и для верного; при у функции потерь излом, и правило берёт субградиент . Если веса стартуют с нуля, величина шага не важна: каждая итерация тогда — сумма векторов , и другой шаг лишь масштабирует её, что не меняет ни одного предсказания. Функция потерь перцептрона выпукла, но не ограничивает функцию потерь 0–1 сверху (при она равна ). Кусочно-линейная функция отличается от неё сдвигом к : она штрафует и верно классифицированные точки с отступом меньше 1 и, как показывает заметка о методе опорных векторов, отодвигает границу от данных.
Разобранный пример. Четыре точки, свободный член — третья координата: и положительные, и отрицательные. Начнём с , и пройдём точки по порядку:
| Шаг | Точка | Отступ до шага | Обновление | после | после |
|---|---|---|---|---|---|
| 1 | , | прибавить | |||
| 2 | , | нет | |||
| 3 | , | вычесть | |||
| 4 | , | вычесть |
На втором проходе отступы при равны , все положительны, и алгоритм останавливается после трёх обновлений.
Почему он останавливается на разделимых данных. Пусть некоторый единичный вектор разделяет данные с отступом , то есть для всех , и (свободный член включён в , поэтому оба условия выполняются в расширенном пространстве). Начнём с и обозначим через веса после обновлений. Каждое обновление вызвано точкой с , поэтому
После обновлений и , и по неравенству Коши–Буняковского . Следовательно,
это оценка Новикова (1962). Она не зависит ни от числа точек, ни от размерности, а только от ширины зазора между классами относительно разброса данных. Это оценка худшего случая: на 200 случайных точках на плоскости с зазором не меньше по обе стороны от прямой через начало координат оценка равна обновлениям, а перцептрону нужно 4 (раздел «Код»).
Когда классы перекрываются, какая-то точка всегда классифицирована неверно, обновления никогда не прекращаются, и итоговые веса зависят от того, где прервали запуск. Усреднение векторов весов по всем шагам или голосование между ними даёт устойчивый классификатор с похожими гарантиями (Freund and Schapire, 1999), но стандартный ответ — минимизировать выпуклую суррогатную функцию потерь с регуляризатором.
Линейная разделимость#
Обучающая выборка линейно разделима (linearly separable), если какая-нибудь гиперплоскость классифицирует её целиком верно. Шаблон XOR — положительные точки в и , отрицательные в и — не разделим: любая прямая, которая оставляет обе положительные точки с одной стороны, оставляет там и отрицательную. Минский и Пейперт (1969) сделали это ограничение одиночного перцептрона знаменитым. Его исправляет новый признак: если добавить , четыре точки становятся разделимыми в трёх измерениях. Добавить признаки вручную, неявно через ядра или выучить их в нейронной сети — вот три способа, которыми курс выходит за пределы прямых.
В больших размерностях возникает обратная проблема: разделимо почти всё. Ковер (1965) подсчитал, сколько разметок точек общего положения в может реализовать аффинная гиперплоскость. Если метки — случайные подбрасывания монеты, вероятность того, что они линейно разделимы, равна
При она равна 1 — разделима любая разметка; при она равна ровно ; дальше она быстро падает. В размерности формула даёт , и для 6, 12 и 18 точек, а 400 случайных разметок на каждый размер дают , и (раздел «Код»). Поскольку убывает с ростом , классификатор, у которого параметров не меньше половины числа примеров ( вместе со свободным членом, то есть ), разделяет случайные метки с вероятностью не меньше , а при — всегда. Поэтому нулевая ошибка на обучении ничего не доказывает: её достигают и чисто шумовые метки; модель мешка слов с десятками тысяч признаков находится ровно в этом режиме. Это классификационное лицо переобучения из заметки о валидации.
Что добавляет регуляризатор#
На разделимых данных суррогатные функции потерь ведут себя плохо двумя разными способами. Логистическая и экспоненциальная продолжают убывать при увеличении вдоль любого разделяющего направления, поэтому у них нет точки минимума и веса уходят на бесконечность; кусочно-линейная и её квадрат обращаются в ноль, как только все отступы превышают 1, и тогда любое большее кратное — столь же хорошее решение. Гребневый штраф из заметки о регуляризации,
исправляет и то и другое. Целевая функция теперь строго выпукла по и неограниченно растёт при , поэтому у неё ровно одна точка минимума по , и она конечна. У штрафа есть и геометрический смысл: при условии на отступы расстояние от границы до ближайшей точки не меньше , так что уменьшение при отступах не меньше 1 максимизирует зазор между классами. Этот компромисс — метод опорных векторов. Для логистической функции потерь у штрафа есть и третье прочтение — гауссовское априорное распределение на веса, которое развивает следующая заметка; штраф лассо тоже работает и, как в регрессии, обнуляет веса.
Что изменилось#
| Метод наименьших квадратов на метках | Линейный классификатор с суррогатной функцией потерь | |
|---|---|---|
| Потеря на одном примере | выпуклая верхняя оценка : логистическая, кусочно-линейная, экспоненциальная | |
| Уверенно верные ответы | штрафуются при | бесплатны или почти бесплатны |
| Смысл оценки | , через функцию потерь, которая гонится и за далёкими точками | логарифм шансов (логистическая), только сторону (кусочно-линейная) |
| Разделимые данные | единственное решение, которое может ошибаться | нулевая потеря в пределе (логистическая, экспоненциальная) или точно (кусочно-линейная); регуляризатор выбирает одно решение |
| Обучение | нормальные уравнения | градиентные методы; перцептрон как SGD при нулевом отступе |
Ограничения#
- Граница — гиперплоскость. Взаимодействия вроде XOR не видны без новых признаков.
- Суррогатная функция — не метрика. Минимизация логистической или кусочно-линейной функции потерь ограничивает долю ошибок, но важной величиной может быть полнота при фиксированной доле ложных тревог или стоимость ошибок; заметка о метриках классификации разделяет эти две вещи.
- Оценки — не вероятности. Оптимальная оценка превращается в вероятность только через известную связь: для логистической функции потерь, для экспоненциальной, для квадратичных; у кусочно-линейной такой связи нет. Даже тогда вероятности приближённы при конечной выборке и линейной модели, которая может не содержать .
- Выбросы всё равно тянут. Линейный рост мягче экспоненциального, но точка с неверной меткой далеко по неверную сторону всё равно даёт наибольшее слагаемое суммы.
- Гарантии относятся к обучающей выборке. Нулевая ошибка на обучении и малая суррогатная потеря мало что говорят, когда число признаков приближается к числу примеров, как показывает подсчёт Ковера.
Что нужно запомнить#
- Линейный классификатор предсказывает ; — нормаль к границе, а — расстояние со знаком до неё.
- Отступ положителен при верном ответе и измеряет уверенность. Квадратичная ошибка на метках равна и наказывает за большие отступы.
- У функции потерь 0–1 нет полезного градиента, и её минимизация NP-трудна; выпуклые верхние оценки (логистическая, кусочно-линейная, экспоненциальная, квадрат кусочно-линейной) ограничивают долю ошибок и поддаются минимизации.
- Все эти суррогатные функции ведут к байесовскому классификатору. Логистическая к тому же восстанавливает логарифм шансов, экспоненциальная и квадратичные восстанавливают через другие связи, кусочно-линейная — только сторону.
- Перцептрон — это SGD по ; на разделимых данных он делает не больше ошибок, а на перекрывающихся никогда не останавливается.
- В больших размерностях разделимость — обычное дело ( при случайных метках); регуляризатор делает решение единственным и конечным, а с кусочно-линейной функцией потерь максимизирует отступ.
Код#
Метод наименьших квадратов против функции потерь для классификации, суррогатные функции потерь и их точки минимума, перцептрон и его оценка, подсчёт Ковера:
import numpy as np
from math import comb
from scipy.optimize import linprog, minimize_scalar
from sklearn.linear_model import LogisticRegression
rng = np.random.default_rng(0)
# 1. МНК на метках ±1: три далёкие, явно положительные точки сдвигают границу
x = np.array([-3, -2, -1, 1, 2, 3, 20, 21, 22.])
y = np.r_[-np.ones(3), np.ones(6)]
b, w = np.linalg.lstsq(np.c_[np.ones_like(x), x], y, rcond=None)[0]
print(round(-b / w, 4), int((np.sign(b + w * x) != y).sum())) # 1.3704 1: положительная точка x = 1 потеряна
lr = LogisticRegression().fit(x[:, None], y)
print(round(-lr.intercept_[0] / lr.coef_[0, 0], 4), int((lr.predict(x[:, None]) != y).sum())) # -0.0002 0
# 2. суррогатные функции потерь при отступах -1, 0 и 2
M = np.array([-1, 0, 2.])
losses = {'logistic': np.log2(1 + np.exp(-M)), 'hinge': np.maximum(0, 1 - M), 'exponential': np.exp(-M),
'squared hinge': np.maximum(0, 1 - M) ** 2, 'squared error': (1 - M) ** 2}
for name, v in losses.items():
print(name, v.round(3))
# logistic [1.895 1. 0.183] | hinge [2. 1. 0.] | exponential [2.718 1. 0.135]
# squared hinge [4. 1. 0.] | squared error [4. 1. 1.]
# меньший суррогат не обязательно означает меньше ошибок: средняя логистическая потеря и доля ошибок для двух пар отступов
for pair in ([-0.1, 3], [0.1, 0.5]):
print(np.log2(1 + np.exp(-np.array(pair))).mean().round(2), np.mean(np.array(pair) <= 0)) # 0.57 0.5 | 0.81 0.0
# 3. что оценивает каждая суррогатная функция: точка минимума eta L(f) + (1 - eta) L(-f) при eta = 0.8
eta = 0.8
for name, L in [('logistic', lambda m: np.log2(1 + np.exp(-m))), ('hinge', lambda m: max(0, 1 - m)),
('exponential', lambda m: np.exp(-m)), ('squared hinge', lambda m: max(0, 1 - m) ** 2)]:
f = minimize_scalar(lambda f: eta * L(f) + (1 - eta) * L(-f), bounds=(-5, 5), method='bounded', options={'xatol': 1e-9}).x
print(name, round(f, 3))
# logistic 1.386 (log 4) | hinge 1.0 | exponential 0.693 (log 2) | squared hinge 0.6
# 4. перцептрон на четырёх точках разобранного примера, затем на разделимом облаке против оценки Новикова
def perceptron(X, y, max_epochs=1000):
Xb = np.c_[X, np.ones(len(X))]
w, updates = np.zeros(Xb.shape[1]), 0
for _ in range(max_epochs):
mistakes = 0
for xi, yi in zip(Xb, y):
if yi * (w @ xi) <= 0:
w, updates, mistakes = w + yi * xi, updates + 1, mistakes + 1
if mistakes == 0:
return w, updates
return w, updates
print(perceptron(np.array([[2., 1], [1, 3], [-1, 1], [0, -2]]), np.array([1, 1, -1, -1]))) # (array([ 3., 2., -1.]), 3)
u = np.array([0.6, 0.8]) # разделяющее направление, через начало координат
X = rng.uniform(-1, 1, (2000, 2))
X = X[np.abs(X @ u) >= 0.1][:200] # зазор не меньше 0.1 по обе стороны от прямой
y = np.sign(X @ u)
Xb = np.c_[X, np.ones(len(X))] # перцептрон учит и свободный член: работаем в расширенном пространстве
R, gamma = np.linalg.norm(Xb, axis=1).max(), (y * (Xb @ np.r_[u, 0])).min()
print(perceptron(X, y)[1], round((R / gamma) ** 2, 1)) # 4 253.4: четыре обновления, оценка 253
# 5. Ковер: вероятность, что случайные метки на n точках общего положения в R^5 линейно разделимы
def separable(X, y):
A = -y[:, None] * np.c_[X, np.ones(len(X))] # y_i (w·x_i + b) >= 1 как A [w, b] <= -1
return linprog(np.zeros(X.shape[1] + 1), A_ub=A, b_ub=-np.ones(len(X)), bounds=(None, None)).status == 0
d = 5
for n in (6, 12, 18):
share = np.mean([separable(rng.normal(size=(n, d)), rng.choice([-1., 1.], n)) for _ in range(400)])
exact = sum(comb(n - 1, k) for k in range(d + 1)) / 2 ** (n - 1)
print(n, share, round(exact, 4))
# 6 1.0 1.0 | 12 0.48 0.5 | 18 0.065 0.0717
Дальше#
Суррогатные функции потерь превращают классификацию в задачу оптимизации, и среди них выделяется логистическая: её точка минимума — логарифм шансов, поэтому её оценки можно читать как вероятности. Вероятность часто и нужна приложению — чтобы сравнить шанс клика с его ценой или риск пациента со стоимостью анализа. Следующая заметка выводит логистическую регрессию из вероятностной модели метки, показывает, что логистическая функция потерь — её отрицательный логарифм правдоподобия, и выясняет, когда её вероятностям можно доверять.
Литература#
- F. Rosenblatt. The perceptron: a probabilistic model for information storage and organization in the brain. Psychological Review, 65(6), 386–408, 1958.
- A. B. J. Novikoff. On convergence proofs on perceptrons. Proceedings of the Symposium on the Mathematical Theory of Automata, 12, 615–622. Polytechnic Institute of Brooklyn, 1962.
- M. Minsky, S. Papert. Perceptrons: An Introduction to Computational Geometry. MIT Press, 1969.
- T. M. Cover. Geometrical and statistical properties of systems of linear inequalities with applications in pattern recognition. IEEE Transactions on Electronic Computers, EC-14(3), 326–334, 1965.
- K.-U. Höffgen, H. U. Simon, K. S. Van Horn. Robust trainability of single neurons. Journal of Computer and System Sciences, 50(1), 114–125, 1995.
- S. Ben-David, N. Eiron, P. M. Long. On the difficulty of approximately maximizing agreements. Journal of Computer and System Sciences, 66(3), 496–514, 2003.
- P. L. Bartlett, M. I. Jordan, J. D. McAuliffe. Convexity, classification, and risk bounds. Journal of the American Statistical Association, 101(473), 138–156, 2006.
- T. Zhang. Statistical behavior and consistency of classification methods based on convex risk minimization. The Annals of Statistics, 32(1), 56–85, 2004.
- Y. Freund, R. E. Schapire. Large margin classification using the perceptron algorithm. Machine Learning, 37(3), 277–296, 1999.
- C. Cortes, V. Vapnik. Support-vector networks. Machine Learning, 20(3), 273–297, 1995.
- J. Friedman, T. Hastie, R. Tibshirani. Additive logistic regression: a statistical view of boosting. The Annals of Statistics, 28(2), 337–407, 2000. (AdaBoost как минимизация экспоненциальной функции потерь.)
- T. Hastie, R. Tibshirani, J. Friedman. The Elements of Statistical Learning, 2nd ed. Springer, 2009. Раздел 4.5 (разделяющие гиперплоскости и перцептрон), раздел 10.6 (функции потерь и устойчивость), раздел 12.3.2 и таблица 12.1 (функции потерь и их теоретические точки минимума).
- S. Shalev-Shwartz, S. Ben-David. Understanding Machine Learning: From Theory to Algorithms. Cambridge University Press, 2014. Глава 9 (полупространства и перцептрон), раздел 12.3 (суррогатные функции потерь).
- E. Sokolov et al. Машинное обучение (HSE), конспекты лекций: лекция 4: линейная классификация (отступы и верхние оценки доли ошибок), лекция 5 (логистическая и кусочно-линейная функции потерь).