Глава 3. Вводим нелинейность: теперь не только взвешенные суммы
135
и т. д.), изза плоских участков графика ступенчатой функции, лежащей в ее основе,
процедура обучения не может определить, куда нужно двигаться в пространстве
весов, чтобы снизить потери.
Следовательно, при безошибочности в качестве функции потерь мы не сможем
вычислить пригодные для нас градиенты, а значит, и найти осмысленные обновле
ния для весовых коэффициентов модели. Те же ограничения относятся и к таким
метрикам, как точность, полнота, FPR и AUC. И хотя с помощью этих метрик людям
удобно разбираться в поведении бинарного классификатора, для процесса обучения
моделей они бесполезны.
Для задачи бинарной классификации воспользуемся в качестве функции потерь
бинарной перекрестной энтропией
(binary cross entropy), соответствующей значению
параметра
'binaryCrossentropy'
в коде нашей модели для обнаружения фишинга
(см. листинги 3.5 и 3.6). Алгоритмически можно описать бинарную перекрестную
энтропию с помощью такого псевдокода (листинг 3.8).
Листинг 3.8.
Псевдокод для функции потерь на основе бинарной перекрестной энтропии
1
function binaryCrossentropy(truthLabel, prob):
if truthLabel is 1:
return -log(prob)
else:
return -log(1 - prob)
В этом псевдокоде
truthLabel
может принимать значения 0 или 1 и указывает,
какая на самом деле метка у входного примера — позитивная или негативная.
prob
—
вероятность принадлежности примера к позитивному классу, предсказанная моде
лью. Обратите внимание, что, в отличие от
truthLabel
,
prob
является вещественным
числом, которое может принимать любое значение от 0 до 1.
log
— натуральный
алгоритм по основанию
e
(= 2,718), как вы помните из школьного курса математики.
В теле функции
binaryCrossentropy
содержится условный оператор
if-else
, и она
выполняет различные действия в зависимости от того, чему равно
truthLabel
— 0
или 1. На рис. 3.8 на одном графике показаны оба случая.
Глядя на рис. 3.8, учтите, что чем меньше значение, тем лучше, ведь это функция
потерь. Относительно этой функции потерь важно отметить следующее.
z
z
Если
truthLabel
равно 1, то чем ближе
prob
к 1,0, тем ниже значение функции
потерь. Это вполне логично, ведь для фактически позитивного примера данных
модель должна выдавать как можно более близкую к 1,0 вероятность. И напро
тив, если
truthLabel
равно 0, то чем ближе вероятность к 0, тем ниже значение
функции потерь. Это логично, ведь в таком случае модель должна выдавать как
можно более близкую к 0 вероятность.
1
В реальном коде для binaryCrossentropy необходимо предусмотреть случаи, когда prob или
1 – prob в точности равны нулю, при передаче которого в функцию log возникла бы бес
конечность. Для решения этой проблемы к prob и 1 – prob перед передачей их в функцию
логарифма прибавляется очень маленькое число (например, 1e6), обычно называемое
«эпсилон» или «поправочный параметр».
136
Do'stlaringiz bilan baham: |