Часть II • Введение в TensorFlow.js
предсказание вероятности позитивной классификации, то есть насколько вероятно,
что модель «считает»: данный пример относится к позитивному классу. Как вы пом
ните из школьной математики, вероятность — число в диапазоне между 0 и 1. Есть
два преимущества возврата моделью значения ожидаемой вероятности.
z
z
Значение демонстрирует степень уверенности модели в произведенной класси
фикации. Значение сигмафункции 0,5 указывает на полную неопределенность,
то есть равную вероятность любой из двух возможных классификаций. Равное
0,6 значение указывает, что, хотя система предсказывает позитивную классифи
кацию, уверенность в ней невелика. Равное же 0,99 значение означает, что модель
более чем уверена: этот пример данных относится к позитивному классу и т. д.
Таким образом, преобразование выданного моделью значения в окончательный
результат не представляет проблем (достаточно пропустить выходной сигнал
через сито порогового значения, допустим, 0,5). А теперь представьте себе, на
сколько сложно было бы найти пороговое значение при очень широком диапазоне
изменений выходного сигнала модели.
z
z
Упрощается поиск дифференцируемой функции потерь, которая по заданному
выходному сигналу модели и истинным бинарным целевым меткам выдает чис
ло — меру погрешности модели. Этот вопрос мы обсудим подробнее, когда будем
изучать фактическую бинарную перекрестную энтропию этой модели.
Впрочем, остается вопрос: как втиснуть выходной сигнал нейронной сети в диа
пазон
[0,
1]
? Последний слой нейронной сети (обычно плотный слой) производит
операции матричного умножения (
matMul
) и прибавления смещения (
biasAdd
)
своего входного сигнала. У этих операций нет никаких внутренних ограничений,
которые бы гарантировали, что результат будет в диапазоне
[0,
1]
. Естественный
способ добиться нужного диапазона
[0,
1]
— применить к результату операций
matMul
и
biasAdd
«сплющивающую» нелинейность наподобие сигмафункции.
Еще один новый для нас нюанс кода из листинга 3.5 — тип оптимизатора:
'adam'
,
который отличается от использовавшегося в предыдущих примерах оптимизатора
'sgd'
. Чем же
adam
отличается от
sgd
? Как вы помните из подраздела 2.2.2, опти
мизатор
sgd
всегда умножает градиенты, полученные путем обратного распростра
нения ошибки, на фиксированное число (скорость обучения, умноженную на –1),
чтобы вычислить величины обновлений весовых коэффициентов. У этого подхода
есть свои недостатки, включая медленную сходимость к минимуму функции по
терь при малой скорости обучения и «зигзагообразные» пути в пространстве весов
при определенных особых свойствах (гипер)поверхности потерь. Оптимизатор
adam
как раз и нацелен на устранение этих изъянов
sgd
за счет использования мно
жителя, который хитроумно варьируется в зависимости от истории градиентов
(предыдущих итераций обучения). Более того,
adam
обычно обеспечивает лучшую
сходимость и меньше зависит от выбранной скорости обучения, по сравнению с
sgd
,
для широкого круга типов моделей глубокого обучения, а потому снискал популяр
ность как оптимизатор. В библиотеке TensorFlow.js есть несколько других типов
оптимизаторов, часть из которых тоже широко распространены (например,
rmsprop
).
Их краткий обзор приведен далее.
Do'stlaringiz bilan baham: |