huber

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

    Описание

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

    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' и a 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 имеет два или более размеров несинглтона.

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

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

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

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

    свернуть все

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

    Размер loss зависит от 'Reduction' опция.

    Алгоритмы

    свернуть все

    Потеря Хубера

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

    lossj={12(YjTj)2если |YjTj|δδ|YjTj|12δ2иначе,

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

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

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

    loss=1Njmjwjlossj,

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

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

    lossj*=mjwjlossj

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

    Введенный в R2021a