Hengyuan Cloud_[SimCSE]: контрастное обучение, нужен только Dropout?

глубокое обучение NLP
Hengyuan Cloud_[SimCSE]: контрастное обучение, нужен только Dropout?

Источник статьи | Облачное сообщество Hengyuan (Hengyuan Cloud, платформа общей вычислительной мощности, ориентированная на индустрию искусственного интеллекта.)

Исходный адрес |Dropout

Оригинальный автор | Матор


Говорить о том, что самые популярные статьи по НЛП в первой половине 2021 года не должны быть «SimCSE: Simple Contrastive Learning of Sentence Embeddings"Это не что иное, как. Полное название SimCSE — простое встраивание контрастных предложений.

Sentence Embedding

Встраивание предложений всегда было острой проблемой в области NLP, в основном из-за его широкого спектра приложений и краеугольного камня многих задач. Существует множество способов получения векторов предложений.Обычные из них включают прямое использование выходных данных позиции [CLS] в качестве вектора предложений или суммирование или усреднение выходных данных всех слов. Однако было доказано, что вышеупомянутые методы имеют проблему анизотропии. Вообще говоря, проблема непоследовательного представления Word Embedding в различных измерениях будет возникать в процессе обучения модели, поэтому полученные векторы предложений нельзя сравнивать напрямую.

Наиболее популярными способами решения этой проблемы являются:

  1. Линейные преобразования: BERT-поток, BERT-отбеливание. Эти два больше похожи на постобработку, которая облегчает проблему анизотропии, выполняя определенные преобразования векторов предложений, извлеченных BERT.
  2. Контрастное обучение: SimCSE. Идея контрастного обучения состоит в том, чтобы закрыть похожие образцы и оттолкнуть разнородные образцы, тем самым улучшив способность модели к представлению предложений.

Unsupervised SimCSE

image.png

SimCSE использует самоконтролируемое обучение для улучшения представления предложений. Поскольку SimCSE не имеет размеченных данных (неконтролируемых), каждое предложение рассматривается как похожее предложение. Грубо говоря, по существу(Своя,Своя)(сам, себя)В качестве положительного примера,(Своя,другие люди)(себе, другим)в качестве негативных примеров для обучения модели контрастивного обучения. Конечно, это далеко не просто: если в качестве положительных примеров использовать только два одинаковых образца, то способность к обобщению будет сильно снижена. Вообще говоря, мы будем использовать некоторые методы увеличения данных, чтобы сделать два образца положительного примера разными, но как сделать усиление данных в самом НЛП, также является проблемой.SimCSE предлагает очень простое и элегантное решение: прямое удаление в качестве увеличения данных!

Конкретно,NNПредложения получают вектор через Encoder с Dropouth1(0),h2(0),,hN(0)\boldsymbol{h}_1^{(0)},\boldsymbol{h}_2^{(0)},…,\boldsymbol{h}_N^{(0)}, а затем снова пропустите пакет предложений через Encoder (на этот раз еще один случайный Dropout), чтобы получить векторh1(1),h2(1),,hN(1)\boldsymbol{h}_1^{(1)},\boldsymbol{h}_2^{(1)},…,\boldsymbol{h}_N^{(1)}, мы можем(hi(0),hi(1))(\boldsymbol{h}_i^{(0)},\boldsymbol{h}_i^{(1)})рассматривается как пара (немного отличающихся) положительных примеров, то цель обучения

image.pngв,sim(h1,h2)=h1Th2h1h2\text{sim}(\boldsymbol{h}_1, \boldsymbol{h}_2)=\frac{\boldsymbol{h}_1^T\boldsymbol{h}_2}{\Vert \boldsymbol{h}_1\Vert \cdot \Vert \boldsymbol{h}_2\Vert}. В самом деле, если формула (1) не виднаlog-\logит\tauчасть, остальное очень нравитсяSoftmax\text{Softmax}. установить в диссертациит=0.05\tau = 0.05, что касается этогот\tauЧто он делает, я видел некоторые объяснения в Интернете:

  1. Если вы используете косинусное сходство непосредственно в качестве входных логитов дляSoftmax\text{Softmax}, поскольку диапазон сходства косинусов равен[1,1][-1,1], диапазон слишком малSoftmax\text{Softmax}Дать достаточно большой разрыв между положительными и отрицательными образцами невозможно, и в итоге получается, что модель недостаточно обучена, поэтому ее нужно корректировать, делить на достаточно малый параметрт\tauУвеличьте значение
  2. Гиперпараметрыт\tauОсновное внимание в обновлении модели будет сосредоточено на сложных отрицательных примерах, и они будут соответственно наказаны.Чем больше сложность, тем сложнее.hi(0){h}_i^{(0)}Чем ближе расстояние, тем больше назначается пенальти. На самом деле, это тоже легче понять, мы будемsim(hi(0),hj(1))\text{sim}(\boldsymbol{h}_i^{(0)},\boldsymbol{h}_j^{(1)})разделить нат\tauЭто эквивалентно увеличению логит-значения отрицательной выборки из года в год, еслит\tauдостаточно малы, то теsim(hi(0),hj(1))\text{sim}(\boldsymbol{h}_i^{(0)},\boldsymbol{h}_j^{(1)})Отрицательные образцы ближе к 1, послет\tauбудет доминировать при увеличении

Лично я думаю, что недостаточно думать о значении формулы или символа с точки зрения восприятия без строгого математического доказательства, поэтому, ознакомившись с некоторыми материалами, ят\tauРоль этого гиперпараметра описана в другой статье:Параметры контрастной потерит\tauПонимание

Подводя итог методу SimCSE, я лично считаю его слишком изобретательным, потому что для людей очень субъективно судить о том, похожи ли два предложения, например: «Мне нравится Пекин» и «Мне не нравится Пекин». Я спрашиваю эти два предложения. Похожи ли слова? Модель подобна новорожденному ребенку: вы учите его тому, что эти два предложения похожи, затем он думает, что они похожи, вы учите его быть непохожим, так что позже он видит похожие предложения и думает, что они не похожи. В настоящее время производительность или точность модели мало связаны с процессом обучения, структурой модели и т. д. Именно люди или данные, отмеченные людьми, действительно влияют на результаты прогнозирования модели.

Но если вы спросите кого-нибудь, похожи ли два предложения «Мне нравится Пекин» и «Мне нравится Пекин», я не думаю, что нормальные люди скажут, что они различны. Метод SimCSE создания положительных выборок через Dropout можно рассматривать как наименьшую форму увеличения данных, потому что семантика исходного предложения и сгенерированного предложения полностью совпадают, но сгенерированное встраивание отличается. Это позволяет избежать ручной маркировки данных, или выборки в настоящее время очень объективны.

Alignment and Uniformity

Цель контрастивного обучения состоит в том, чтобы изучить высококачественное семантическое пространство представления из данных, так как же оценить качество этого пространства представления? Ван и Изола (2020) предложили две метрики для измерения качества сопоставительного обучения: согласованность и единообразие, где выравнивание вычисляетxix_iиxi+x_i^+Среднее расстояние:

image.png

И Uniformity вычисляет однородность общего распределения вектора:

image.png

Мы надеемся, что эти два показателя будут как можно ниже, то есть, с одной стороны, мы надеемся, что положительные образцы должны быть достаточно близки, а с другой стороны, семантические векторы должны быть максимально равномерно распределены по гиперсфере. , потому что равномерное распределение имеет самую высокую информационную энтропию, и чем больше распределение, тем более равномерно сохраняется информация. Автор случайным образом выбрал 100 000 предложений из Википедии для точной настройки BERT и протестировал его на устройстве STS-B. Результаты эксперимента представлены в следующей таблице:

Среди них None — это предложенный автором метод random Dropout, а остальные методы основаны на None.xi+x_{i}^+Внесите изменения, вы можете видеть, что добавление явных методов увеличения данных снизит производительность модели в разной степени. Эффект, наиболее близкий к Dropout, заключается в удалении слова, но удаление слова не приносит большого улучшения единообразия. Автор также специально Чтобы доказать это, был проведен эксперимент, как показано на следующем рисунке:

image.png

Connection to Anisotropy

В последние годы во многих исследованиях упоминалась проблема анизотропии в распределении семантических векторов, генерируемых языковыми моделями.Прежде чем обсуждать, почему контрастное обучение может решить проблему анизотропии векторов слов, давайте сначала разберемся, что такое анизотропия. В частности, если предположить, что наш вектор слова установлен в 2 измерения, если единичная длина базового вектора в каждом измерении различна, это анизотропия (Анизотропия)

Например, на рисунке ниже базисные векторы неортогональны и анизотропны (единичные длины не равны), вычислитеx1xx_1xиx2x_2Подобие cos равно 0,x1x_1иx3x_3Косинусное сходство также равно 0. Но с геометрической точки зренияx1x_1иx3x_3По факту больше похоже, но по результатам расчета,x1x_1иx2x_2иx3x_3Сходство такое же, причина этой аномалии вызвана анизотропией

image.png

Авторы SimCSE показывают, что когда количество отрицательных выборок стремится к бесконечности, цель обучения контрастивному обучению может быть асимптотически выражена как:

Чтобы немного объяснить эту формулу, для удобства мы будем далее1тE(x,x+)ppos[f(x)Tf(x+)]\frac{1}{\tau}\mathop{\mathbb{E}}\limits_{(x,x^+)\sim p_{\text{pos}}}\left[f(x)^Tf(x^+)\right]называется первым членом,Expdata[logExpdata[ef(x)Tf(x)/т]]\mathop{\mathbb{E}}\limits_{x\sim p_{\text{data}}}\left[\log \mathop{\mathbb{E}}\limits_{x^-\sim p_{\text{data}}}\left[e^{f(x)^Tf(x^-)/\tau}\right]\right]называется второй элемент.

Наша конечная цель состоит в том, чтобы надеяться, что уравнение (4) будет как можно меньше, В частности, если первый член больше, а второй член меньше, то общий результат будет очень мал. Первый элемент большой, что указывает на большое сходство между положительными парами выборок; второй элемент мал, что указывает на то, что сходство между отрицательными парами выборок невелико, что также является итоговой производительностью модели, которую мы надеемся увидеть.

Затем попробуем перейти от уравнения (1) к уравнению (4), заметив, что на самом делеf(x)=hi(0),f(x+)=hi(1),f(x)=hj(1)f(x)=\boldsymbol{h}_{i}^{(0)},f(x^+)=\boldsymbol{h}_{i}^{(1)},f(x^-)=\boldsymbol{h}_{j}^{(1)}

image.png

Отсюда следует не строгое равенство, а некоторая эквивалентность или пропорциональное отношение. Например, оригиналsim(h1,h2)=h1Th2h1h2\text{sim}(\boldsymbol{h}_1, \boldsymbol{h}_2)=\frac{\boldsymbol{h}_1^T\boldsymbol{h}_2}{\Vert \boldsymbol{h}_1\Vert \cdot \Vert \boldsymbol{h}_2\Vert}, здесь мы опускаем знаменатель, меняем его на математическое ожидание, а суммирование меняем на математическое ожидание, тогдаimage.png

Далее мы можем получить нижнюю границу второго члена с помощью неравенства Дженсена:

Во-первых, часть знака равенства легко понять, т. е. математическое ожидание преобразуется в форму суммирования вероятностей, аf(x)f(x)иf(x)f(x^-)изменился обратноhi,hj\boldsymbol{h}_i,\boldsymbol{h}_jформа. Возможно, некоторые студенты не очень хорошо знают неравенство Дженсена, и здесь я кратко объясню его. для выпуклой функцииf(x)f(x),какλi0\lambda_i \ge 0иiλi=1\sum_i \lambda_i=1, то есть

Возвращаясь к доказательству уравнения (5), посколькуlog⁡\логявляется выпуклой функцией, и мы будем1m\frac{1}{m}рассматривается какλi\lambda_i,ehiThj/тe^{\boldsymbol{h}_i^T \boldsymbol{h}_j/\tau}рассматривается какxix_i, используя неравенство Дженсена, чтобы получить

Спустя долгое время вспомним, что наша конечная цель — оптимизировать уравнение (4), или минимизировать второй член уравнения (4). ПредполагатьW\mathbf{W}заxii=1m{x_i}_{i=1}^mСоответствующая матрица встраивания предложений, а именноW\mathbf{W}Первыйiiлинияhi\boldsymbol{h}_i. Тогда оптимизация второго члена эквивалентна минимизацииWWT\mathbf{W}\mathbf{W}^Tверхняя граница. Зачем? так какSum(WWT)=i=1mj=1mhiThj!\text{Sum}(\mathbf{W}\mathbf{W}^T)=\sum_{i=1}^m \sum_{j=1}^m\boldsymbol{h}_i^T \boldsymbol{h}_j!Предположим, мы нормализовалиhi\boldsymbol{h}_i,В настоящее времяWWT\mathbf{W}\mathbf{W}^TВсе диагональные элементы равны 1,tr(WWT)\text{tr}(\mathbf{W}\mathbf{W}^T)представляет собой сумму собственных значений и является константой. Согласно Merikoski (1984), еслиWWT\mathbf{W}\mathbf{W}^TВсе элементы положительны, тогдаSum(WWT)\text{Sum}(\mathbf{W}\mathbf{W}^T)даWWT\mathbf{W}\mathbf{W}^Tверхняя граница наибольшего собственного значения, поэтому, когда мы минимизируем второй член, мы на самом деле минимизируем косвенноWWT\mathbf{W}\mathbf{W}^TНаибольшее собственное значение , т. е. неявно сглаживающее сингулярный спектр пространства вложения или делающее распределение пространства вложения более однородным

До сих пор я лично думаю, что основное содержание SimCSE было объяснено достаточно ясно.Что касается части обучения с учителем в исходной статье, я не буду здесь вдаваться в подробности, потому что по существу она заключается в изменении определений положительных пар выборок и пары отрицательных проб.

Results

Эксперименты оригинальной статьи очень богаты, читатели могут внимательно прочитать исходный текст, вот простая экспериментальная сравнительная таблица.

image.png

Общий результат анализировать нечего.Из приведенного выше рисунка мы можем узнать, что SimCSE достигла SOTA на нескольких наборах данных, и автор обнаружил, что цель предварительного обучения MLM была добавлена ​​​​на основе исходной цели обучения, а потери двух целей были добавлены пропорционально+λmlm\ell + \lambda \ell^{mlm}Совместное обучение может помешать SimCSE забыть знание уровня токена, тем самым улучшив эффект модели. Это меня немного удивляет. После стольких операций я, наконец, заставил модель лучше извлекать функции на уровне предложений. В результате я забыл знания на уровне токенов.

Code

Хотя в теории мы говорим, что SimCSE отправляет предложения в одном пакете на два кодировщика (эти два кодировщика отличаются только в Dropout), но на практике мы фактически копируем все образцы в пакете, и тогда вы можете передать кодировщик один раз . Предположим, что начальный ввод[A,B][A, B]Два предложения, скопируйте их первыми[A,A,B,B][A, A, B, B], то вектор предложения, полученный кодировщиком, равен[hA(0),hA(1),hB(0),hB(1)][\boldsymbol{h}_A^{(0)}, \boldsymbol{h}_A^{(1)}, \boldsymbol{h}_B^{(0)}, \boldsymbol{h}_B^{(1)}], вопрос теперь в том, какой у нас лейбл?

Очевидно, мы знаем, что если заданоhA(0),hA(1)\boldsymbol{h}_A^{(0)},\boldsymbol{h}_A^{(1)}, их метка равна 1; если заданоhB(0),hB(1)\boldsymbol{h}_B^{(0)},\boldsymbol{h}_B^{(1)}, их метка равна 1, а другие случаи равны 0, поэтому мы можем дать нам следующую таблицу (где метка 1 — это позиция одного и того же предложения с другим встраиванием)

image.png

Приведенную выше таблицу можно преобразовать в метки:[1,0,3,2][1, 0, 3, 2]. Предполагая, что в исходном пакете 4 предложения, всего после копирования остается 8. В соответствии с расположением приведенной выше таблицы мы можем получить метку:[1,0,3,2,5,4,7,6][1, 0, 3, 2, 5, 4, 7, 6]. Достаточно сгенерировать метки по этому правилу, и это правило на самом деле достаточно очевидно, поэтому я не буду его объяснять.

import torch
import torch.nn.functional as F
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

def SimCSE_loss(pred, tau=0.05):
    ids = torch.arange(0, pred.shape[0], device=device)
    y_true = ids + 1 - ids % 2 * 2
    similarities = F.cosine_similarity(pred.unsqueeze(1), pred.unsqueeze(0), dim=2)

    # 屏蔽对角矩阵,即自身相等的loss
    similarities = similarities - torch.eye(pred.shape[0], device=device) * 1e12
    similarities = similarities / tau
    return torch.mean(F.cross_entropy(similarities, y_true))

pred = torch.tensor([[0.3, 0.2, 2.1, 3.1],
        [0.3, 0.2, 2.1, 3.1],
        [-1.79, -3, 2.11, 0.89],
        [-1.79, -3, 2.11, 0.89]])
SimCSE_loss(pred)

References