exponenta event banner

huber

Потеря Huber для регрессионных задач

    Описание

    Операция Huber вычисляет потери Huber между предсказаниями сети и целевыми значениями для задач регрессии. Когда 'TransitionPoint' опция 1, это также известно как плавная потеря L1.

    huber функция вычисляет потери Huber с помощью dlarray данные. Используя dlarray объекты упрощают работу с высокоразмерными данными, позволяя маркировать размеры. Например, можно пометить, какие измерения соответствуют пространственным, временным, канальным и пакетным измерениям, используя 'S', 'T', 'C', и 'B' соответственно. Для неуказанных и других размеров используйте 'U' этикетка. Для dlarray функции объекта, которые работают над определенными размерами, можно указать метки размеров, отформатировав dlarray непосредственно или с помощью 'DataFormat' вариант.

    пример

    loss = huber(dlY,targets) возвращает потери Huber между отформатированными dlarray объект dlY содержащие прогнозы и целевые значения targets для задач регрессии. Вход dlY является отформатированным dlarray. Продукция loss является неформатированным dlarray скаляр.

    Для неформатированных входных данных используйте 'DataFormat' вариант.

    loss = huber(dlY,targets,weights) применяет веса к расчетным значениям потерь. Этот синтаксис используется для взвешивания вклада классов, наблюдений или областей входных данных в вычисленные значения потерь.

    loss = huber(___,'DataFormat',FMT) также задает формат размера FMT когда dlY не является отформатированным dlarray.

    loss = huber(___,Name,Value) указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к входным аргументам в предыдущих синтаксисах. Например, 'NormalizationFactor','all-elements' определяет нормализацию потерь путем деления уменьшенных потерь на количество входных элементов.

    Примеры

    свернуть все

    Создайте массив прогнозов для 12 наблюдений за 10 откликами.

    numResponses = 10;
    numObservations = 12;
    
    Y = rand(numResponses,numObservations);
    dlY = dlarray(Y,'CB');

    Просмотр размера и формата прогнозов.

    size(dlY)
    ans = 1×2
    
        10    12
    
    
    dims(dlY)
    ans = 
    'CB'
    

    Создайте массив случайных целей.

    targets = rand(numResponses,numObservations);

    Просмотр размера целевых объектов.

    size(targets)
    ans = 1×2
    
        10    12
    
    

    Вычислите потери Huber между прогнозами и целями.

    loss = huber(dlY,targets)
    loss = 
      1x1 dlarray
    
        0.7374
    
    

    Создайте массивы прогнозов и целей для 12 последовательностей различной длины в течение 10 откликов.

    numResponses = 10;
    numObservations = 12;
    maxSequenceLength = 15;
    
    sequenceLengths = randi(maxSequenceLength,[1 numObservations]);
    
    Y = cell(numObservations,1);
    targets = cell(numObservations,1);
    
    for i = 1:numObservations
        Y{i} = rand(numResponses,sequenceLengths(i));
        targets{i} = rand(numResponses,sequenceLengths(i));
    end

    Просмотр массивов ячеек прогнозов и целевых объектов

    Y
    Y=12×1 cell array
        {10×13 double}
        {10×14 double}
        {10×2  double}
        {10×14 double}
        {10×10 double}
        {10×2  double}
        {10×5  double}
        {10×9  double}
        {10×15 double}
        {10×15 double}
        {10×3  double}
        {10×15 double}
    
    
    targets
    targets=12×1 cell array
        {10×13 double}
        {10×14 double}
        {10×2  double}
        {10×14 double}
        {10×10 double}
        {10×2  double}
        {10×5  double}
        {10×9  double}
        {10×15 double}
        {10×15 double}
        {10×3  double}
        {10×15 double}
    
    

    Поместите последовательности прогнозирования и цели во втором измерении с помощью padsequences и также вернуть соответствующую маску.

    [Y,mask] = padsequences(Y,2);
    targets = padsequences(targets,2);

    Преобразование дополненных последовательностей в dlarray с форматом 'CTB' (канал, время, партия). Потому что отформатировано dlarray объекты автоматически сортируют размеры, сохраняют непротиворечивость размеров целевых объектов и маски путем их преобразования в форматированный dlarray объекты с одинаковыми форматами.

    dlY = dlarray(Y,'CTB');
    targets = dlarray(targets,'CTB');
    mask = dlarray(mask,'CTB');

    Просмотр размеров оценок прогноза, целей и маски.

    size(dlY)
    ans = 1×3
    
        10    12    15
    
    
    size(targets)
    ans = 1×3
    
        10    12    15
    
    
    size(mask)
    ans = 1×3
    
        10    12    15
    
    

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

    loss = huber(dlY,targets,'Mask',mask)
    loss = 
      1×1 dlarray
    
        8.1834
    
    

    Входные аргументы

    свернуть все

    Прогнозы, указанные как отформатированные dlarray, неформатированный dlarrayили числовой массив. Когда dlY не является отформатированным dlarray, необходимо указать формат размера с помощью 'DataFormat' вариант.

    Если dlY - числовой массив, targets должно быть dlarray.

    Целевые ответы, указанные как форматированные или неформатированные dlarray или числовой массив.

    Укажите конечные объекты как массив с тем же размером и форматом, что и dlY.

    Если targets является отформатированным dlarray, его формат измерения должен совпадать с форматом dlY, или то же самое, что 'DataFormat' если dlY является неформатированным

    Если targets является неформатированным dlarray или числовой массив, то формат dlY или значение 'DataFormat' неявно применяется к targets.

    Совет

    Отформатированный dlarray объекты автоматически сортируют свои размеры. Обеспечить, чтобы размеры dlY и targets непротиворечивы, когда dlY является отформатированным dlarray, также указать targets как отформатированный dlarray.

    Веса, указанные как dlarray или числовой массив.

    Чтобы задать веса отклика, укажите вектор с помощью 'C' (канал) размер с размером, соответствующим 'C' (канальный) размер dlX. Укажите 'C' (канал) размерность весов ответа с помощью форматированного dlarray или с помощью 'WeightsFormat' вариант.

    Чтобы задать веса наблюдения, задайте вектор с помощью 'B' (пакетное) измерение с размером, соответствующим 'B' (пакетное) измерение dlY. Укажите 'B' (пакетная) размерность весов класса с использованием форматированного dlarray или с помощью 'WeightsFormat' вариант.

    Чтобы задать веса для каждого элемента ввода независимо, укажите веса как массив того же размера, что и dlY. В этом случае, если weights не является отформатированным dlarray объект, то функция использует тот же формат, что и dlY. Можно также задать формат весов с помощью 'WeightsFormat' вариант.

    Аргументы пары «имя-значение»

    Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

    Пример: 'NormalizationFactor','all-elements' определяет нормализацию потерь путем деления уменьшенных потерь на количество входных элементов

    Точка, в которой потери Хубера переходят из квадратичной функции в линейную, заданную как разделенная запятыми пара, состоящая из 'TransitionPoint' и положительный скаляр.

    Когда 'TransitionPoint' равно 1, это также известно как плавная потеря L1.

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Маска, указывающая, какие элементы следует включить для вычисления потерь, указанная как разделенная запятыми пара, состоящая из 'Mask' и dlarray объект, логический массив или числовой массив с тем же размером, что и dlY.

    Функция включает и исключает элементы входных данных для вычисления потерь, когда соответствующее значение в маске равно 1 и 0 соответственно.

    Значением по умолчанию является логический массив с тем же размером, что и dlY.

    Совет

    Отформатированный dlarray объекты автоматически сортируют свои размеры. Обеспечить, чтобы размеры dlY и маска непротиворечивы, когда dlY является отформатированным dlarray, также укажите маску как отформатированную dlarray.

    Режим уменьшения массива значений потерь, определяемый как разделенная запятыми пара, состоящая из 'Reduction' и одно из следующих:

    • 'sum' - суммирование всех элементов в массиве значений потерь. В этом случае выходные данные loss является скалярным.

    • 'none' - Не уменьшайте массив значений потерь. В этом случае выходные данные loss является неформатированным dlarray объект с тем же размером, что и dlY.

    Делитель для нормализации уменьшенных потерь при 'Reduction' является 'sum', указанная как пара, разделенная запятыми, состоящая из 'NormalizationFactor' и одно из следующих:

    • 'batch-size' - Нормализовать потери путем деления на количество наблюдений в dlX.

    • 'all-elements' - Нормализовать потери делением на количество элементов dlX.

    • 'mask-included' - Нормализовать потери, разделив значения потерь на количество включенных элементов, указанных маской для каждого наблюдения независимо. Для использования этой опции необходимо указать маску с помощью 'Mask' вариант.

    • 'none' - Не нормализуйте потери.

    Размерный порядок неформатированных входных данных, указанный как разделенная запятыми пара, состоящая из 'DataFormat' и вектор символов или строковый скаляр FMT с меткой для каждого измерения данных.

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

    • 'S' - Пространственный

    • 'C' - Канал

    • 'B' - Партия (например, пробы и наблюдения)

    • 'T' - Время (например, временные шаги последовательностей)

    • 'U' - Не указано

    Можно указать несколько размеров с метками 'S' или 'U'. Можно использовать метки 'C', 'B', и 'T' максимум один раз.

    Необходимо указать 'DataFormat' если входные данные не являются отформатированными dlarray.

    Пример: 'DataFormat','SSCB'

    Типы данных: char | string

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

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

    • 'S' - Пространственный

    • 'C' - Канал

    • 'B' - Партия (например, пробы и наблюдения)

    • 'T' - Время (например, временные шаги последовательностей)

    • 'U' - Не указано

    Можно указать несколько размеров с метками 'S' или 'U'. Можно использовать метки 'C', 'B', и 'T' максимум один раз.

    Необходимо указать 'WeightsFormat' когда weights является числовым вектором и dlX имеет два или более размеров nonsingleton.

    Если weights не является вектором, или оба weights и dlY являются векторами, то значение по умолчанию 'WeightsFormat' совпадает с форматом dlY.

    Пример: 'WeightsFormat','CB'

    Типы данных: char | string

    Выходные аргументы

    свернуть все

    Убыток Huber, возвращенный как неформатированный dlarray. Продукция loss является неформатированным dlarray с тем же базовым типом данных, что и входные данные dlY.

    Размер loss зависит от 'Reduction' вариант.

    Алгоритмы

    свернуть все

    Убыток Хубера

    Для каждого элемента Yj входа, huber функция вычисляет соответствующие значения потерь по элементам Huber по формуле

    lossj = {12 (Yj  Tj) 2если |Yj−Tj|≤δδ'Yj−Tj|−12δ2otherwise,

    где Tj - соответствующее целевое значение для Yj, а δ - точка перехода, где потери переходят из квадратичной функции в линейную функцию.

    Когда точка перехода равна 1, это также называется плавной потерей L1.

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

    loss=−1N∑jmjwjlossj,

    где N - коэффициент нормализации, mj - значение маски для элемента j, и wj - значение веса для элемента j.

    Если потери не уменьшаются, функция применяет маску и веса непосредственно к значениям потерь:

    lossj * = mjwjlossj

    Расширенные возможности

    Представлен в R2021a