Катастрофическая проблема забывания глубокого обучения

алгоритм

Забывчивость — это болезнь, забывчивость — это своего рода мудрость. - написать на лицевой стороне @[toc]

1. Предпосылки

Когда вы читаете этот блог, вы используете сложную биологическую нейронную сеть. У вас есть сильно взаимосвязанный мозг из примерно 87,6 миллиардов нейронов, которые помогают вам читать, дышать, двигаться и думать. Каждый из ваших биологических нейронов представляет собой органическую комбинацию биологической ткани и химических веществ. Без учета его скорости можно сказать, что каждый нейрон представляет собой сложный микропроцессор. Некоторые из ваших нейронных структур являются врожденными, тогда как другие развиваются на практике.

У ученых есть определенное понимание механизма работы биологических нейронных сетей. Принято считать, что все биологические нейронные функции, включая память, хранятся в нейронах и связях между ними.Обучение рассматривается как процесс создания новых связей или изменения существующих связей между нейронами.Еще в 1960-х годах, основываясь на понимании механизма работы биологических нейронных сетей, ученые рассчитывали создать искусственную нейронную сеть, которая сочетала бы в себе интеллект, сознание и память, подобно человеческому мозгу. Но все закончилось неудачей. Даже глубокое обучение, которое все принесли на алтарь, далеко от биологической нейронной сети по структуре и функциям.

По сравнению с биологическими нейронными сетями существующее глубокое обучение имеет много недостатков.катастрофическое забываниеявляется одним из недостатков. Так называемыйКатастрофическое забывание: после изучения новых знаний почти полностью забывается ранее изученное.. он включает искусственный интеллектнедостатокСпособность постоянно адаптироваться к окружающей среде и учиться постепенно (непрерывно), как живое существо. Еще в древние времена нейронных сетей исследователи [1-2] обнаружили эту проблему в искусственных нейронных сетях. До сих пор многие исследователи (например... Гудфеллоу, Йошуа Бенджио и др. [3]) пытаются решить (смягчить) проблему катастрофического забывания в глубоком обучении.


2. Что и почему Катастрофическое забывание

Сначала ответьте на первый W: что такое катастрофическое забывание?

Определение катастрофического забывания, данное выше, повторяется здесь:Катастрофическое забывание — почти полное забывание ранее усвоенного содержания после усвоения новых знаний..

конкретное описание: Мы построили глубокую нейронную сеть, чтобы научиться распознавать различных животных. Предположим, мы встречаемся с очень скупым поставщиком данных, предоставляем данные только для одного животного за раз, и, научившись распознавать животное, собираем данные, а затем даем обучающие данные для следующего животного. Выяснилось интересное явление: научившись распознавать щенков, эта нейросеть попросила ее распознать котят, которых она научилась раньше, но не смогла их распознать. Это катастрофическое забывание, которое всегда было серьезной проблемой в области глубокого обучения.

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

В реальном мире невозможно получить все обучающие данные сразу для многих задач (например, открытые среды, неспецифические задачи). Это делает необходимым, чтобы нейронная сеть могла непрерывно изучать новые знания, используя постоянно генерируемые новые данные, и не забывать важное содержание, которое было изучено ранее. Однако непрерывное обучение является врожденной способностью людей и других существ. Только решив проблему катастрофического забывания, искусственные нейронные сети могут стать такими же мощными агентами, как люди, вместо статичных справочников на полке.

Примечание. Процесс обучения глубокому обучению с подкреплением, по-видимому, не требует предварительного сбора всех обучающих данных, но его среда и задача закрыты. Структура глубокой нейронной сети настраивается вручную под задачу и остается неизменной при обучении, тестировании и использовании. Я хочу подчеркнуть, что глубокое обучение с подкреплением облачено в обучение с подкреплением с использованием данных о взаимодействии между роботами и окружающей средой, что создает у нас иллюзию того, что глубокое обучение способно непрерывно учиться без проблемы катастрофического забывания. Во-первых, в большинстве случаев, когда глубокое обучение с подкреплением проходит успешно, задача конкретна, а пространство состояний среды детерминировано. В такой среде изучение этой задачи эквивалентно наличию определенного ограниченного набора данных, и все обучающие данные выбираются из этого набора данных в соответствии с определенным распределением вероятностей. И, как и в случае глубокого обучения под наблюдением, данные взаимодействия, поступающие в глубокое обучение с подкреплением, также повторяются, и обучение осуществляется путем непрерывной стимуляции нейронов. В последнее время некоторые исследователи использовали глубокое обучение с подкреплением для изучения многозадачности.Автор четко указал, что первая проблема, которую необходимо решить, - это проблема катастрофического забывания глубоких нейронных сетей, которая имеет очень очевидный механизм для облегчения катастрофического забывания. проблема.

Тогда ответьте на второй W: Почему катастрофическое забывание?

Катастрофическая проблема забывания глубокого обучения глубоко укоренилась в его генах, и это неразрешимая проблема, которую можно облегчить только с помощью различных механизмов и стратегий.

Почему говорят, что он глубоко укоренен в его генах? Нейронная сеть состоит из сетевой структуры и сетевых параметров. К сожалению, глубокое обучениеструктураипараметрОба имплантированных гена губительны забыты:

  • Как только структура глубокого обучения определена, ее трудно корректировать во время обучения. Структура нейронной сети напрямую определяет возможности модели обучения. Нейронная сеть с фиксированной структурой означает, что возможности модели также ограничены.В случае ограниченных возможностей, чтобы изучить новую задачу, нейронная сеть должна стереть старые знания.
  • Нейроны в скрытом слое глубокого обучения являются глобальными, и небольшие изменения в одном нейроне могут одновременно повлиять на вывод всей сети. Кроме того, все параметры сети прямого распространения связаны с каждым измерением входных данных, и новые данные, вероятно, изменят все параметры в сети. Мы знаем, что для нейронной сети, структура которой фиксирована сама по себе, единственными изменениями в знаниях являются параметры. Если измененные параметры включают в себя параметры, которые тесно связаны с историческими знаниями, конечным результатом является то, что новые знания перекрывают старые знания.

Если другие типы искусственных нейронных сетей также страдают от проблемы катастрофического забывания, они не могут избежать ни одной (или одной из этих) причин.

Примечание: тогда, конечно, существует ли какая-либо искусственная нейронная сеть без катастрофической проблемы забывания: например, сеть с инкрементной радиальной базисной функцией, самоорганизующаяся сеть с инкрементным обучением и т. д.широта обученияКатастрофической проблемы забывания нет. Но у них есть и другие очень серьезные проблемы, так что у них нет способности к непрерывному обучению, как у человека, которая не указана в этой статье.

3. Обзор существующих решений

Существующие решения проблемы катастрофического забывания можно условно разделить на две группы: параметрические и структурные. Среди них школа параметров выступает за исправление глубокого обучения, а школа структур — за новую модель искусственной нейронной сети. В этой части в основном рассматривается проблема катастрофического забывания глубокого обучения, поэтому в основном вводится метод школы параметров, но в основном затрагивается школа структуры.

Новые данные изменяют параметры важных нейронов, связанных с историческими знаниями, что является основной причиной катастрофического забывания в глубоком обучении. Существует примерно четыре метода: 1) Во время обучения с новыми данными постоянно стимулируйте нейроны информацией, связанной с историческими данными, чтобы создать конкуренцию, чтобы параметры важных нейронов, связанных с историческими знаниями, влияли как можно меньше. Это также гарантирует, что новые знания могут быть изучены; часто упоминается какSelf-refreshing Memory Approaches[5]; 2) Прежде чем приступить к обучению новых данных, используйте старую сеть для прогнозирования новых данных для получения виртуальных обучающих данных [можно рассматривать как память старой сети], целевая функция содержит ограничения параметров старой и новые сети, каждое обучение Новые данные с использованием всех фиктивных данных для ограничения старых параметров и подавления забывания; такой метод называетсядистилляция знаний[6]; 3) [7] Ограничить изменение параметров с другой точки зрения. В этой статье параметр считается распределением вероятностей. Пока он находится в основной области этого распределения, это возможно для задачи.Разные задачи соответствуют разным распределениям вероятностей. , если можно найти перекрывающуюся часть двух распределений и ограничить параметр этой областью, то этот параметр не может быть эффективным для этих задач, такой метод называетсяМетоды передачи[7]. 4) Четвертая категория, я называю ее другими методами, такими как сохранение всех исторических данных, исследование методов оценки важных данных и сохранение только тех важных, информативных данных. Это просто улучшенная версия, в которой сохраняются все исторические данные. Если метод оценки является разумным, он, безусловно, может облегчить проблему забывания о стихийных бедствиях. Этот метод не будет представлен в этой статье. Ниже описаны только первые три метода.

3.1 Self-refreshing Memory Approaches

Об этом методе показательна статья [4].

3.1.1 Основная идея — свойства аттракторов рекуррентных сетей

Основная идея этого типа метода заключается в использовании процесса рекурсивной реверберации для создания виртуальных объектов знаний (используемых для напоминания учащемуся о предотвращении забывания). Этот процесс может сходиться к притягивающему состоянию и выходу сети со случайным входом. Такое привлекательное состояние и результаты могут лучше описать знания, полученные ранее.

Важное свойство нейросети с рекурсивным автоэнкодером —аттрактор.

Конкретное описание выглядит следующим образом: Для автоэнкодера (желаемый результат - это сам ввод) мы используем состояния, содержащиеся в подмножестве пространства состояний, для обучения автоэнкодера. После обучения мы используем состояния, которых нет в этом пространстве состояний, для ввода в сеть и получить вывод, а затем использовать полученный вывод в качестве ввода, после нескольких итераций вывод сети будет привлечен в подпространство состояния обучения.

На следующем рисунке представлена ​​стандартная схема структуры нейронной сети с самокодированием.在这里插入图片描述

Теперь введите двухмерное состояние в розовом кружке, как показано ниже, в автоэнкодер путем случайной выборки, пока обучение не сойдется. Затем я ввожу 20 состояний за пределами розового круга в обученный автоэнкодер и непрерывно повторяю. На рисунке ниже показана каждая траектория притяжения входных данных, и мы обнаруживаем, что она в конечном итоге притягивается к подпространству состояний, используемому для обучения.Подходы с самообновляющейся памятью в основном используют эту функцию нейронной сети с самокодированием для неявного хранения информации об исторических данных, чтобы при обучении новых данных в будущем она могла генерировать виртуальные обучающие данные для пробуждения исторических знаний. 在这里插入图片描述

3.1.2 Введение метода

Вышеизложенное является основной идеей подходов к самообновляющейся памяти.

Аннотация статьи кратко описывается следующим образом:

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

Основная картина статьи такова:在这里插入图片描述В статье предлагается двухсетевая структура, состоящая из двух взаимно связанных многоуровневых сетей.NET1NET_1иNET2NET_2сочинение. Для каждой сети входной и скрытый слои, а также скрытый и выходной слои полностью связаны. В отличие от обычных сетей, скрытый слой и входной слой здесь также полностью связаны, что означает, что входной слой и скрытый слой являются двунаправленными.Разумеется, разные направления соответствуют разным весам соединения.NET1NET_1То есть уметь усваивать внешнюю (окружающую) информацию, а также усваиватьNET2NET_2опубликованная информация. иNET2NET_2можно только учитьсяNET1NET_1опубликованная информация. Здесь алгоритм BP используется для обновления параметров двух сетей. Когда вNET1NET_1В , для обновления сети необходимо использовать ошибку ввода и вывода, а также ошибку ввода и вычисленное значение от скрытого слоя к выходному слою (эта структура эквивалентна сети с самокодированием). Таким образом, ввод-неявный вывод эквивалентенразные ассоциации, в то время как ввод-неявный ввод эквивалентенсамоассоциация.NET2NET_2Здесь также используются те же методы и приемы обучения. Здесь стоит подчеркнуть, что необходимы как автоассоциация, так и гетероассоциация.

Далее используется простой процесс обучения, чтобы проиллюстрировать, как использовать эту структуру, чтобы избежать катастрофического забывания.

Начальное состояние, например,NET1NET_1Задача обучения завершена для заданного набора данных, на данный моментNET2NET_2Он по-прежнему должен быть в «пустом» состоянии, а параметры по-прежнему в состоянии случайных настроек. Предполагая, что в это время наступает первая стадия, обозначенная стадия (слева на рисунке):NET1NET_1На этом этапе прекратите прием образцов из окружающей среды, ноNET1NET_1Еще работает. С помощью генератора шума случайным образом генерируется сигнал возбуждения, окончательное значение вычисляется в соответствии с маршрутом «вход-скрытый-вход», а значение активации выходного слоя, полученное в первый раз, снова вводится в неявный слой, таким образом получая выход и входное активное значение. Второе входное активное значение также повторно включается в неявный слой, получает следующий выход и входное активное значение, которое было повторено.RRраз, конечное выходное значение и входное активное значение получаются какNET2NET_2обучающие образцы. Второй этап (рисунок справа):NET1NET_1При изучении новых образцов используйтеNET2NET_2Сгенерированные «напоминание» образцы кNET1NET_1Делайте постоянный обзор.

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

Я использую простую последовательность обучающих данных для проверки эффективности метода.

3.1.3 Пример

обучающий набор данныхИспользуя два набора наборов данных (сгенерированных из функцииy=sin(x1)x1+x210y=\frac{sin(x_1)}{x_1}+\frac{x_2}{10})S1,S2S_1,S_2. использовать сначалаS1S_1Обучите модель, обучите определенное количество шагов, а затем используйте ееS2S_2Обучите модель.

  • S1:x1=[20,0],x2=[20,0]S_1:x_1=[-20,0],x_2=[-20,0]

[外链图片转存失败(img-N8FHyrER-1564736476898)(./e1_2.png)]

  • S2:x1=[0,20],x2=[20,0]S_2:x_1=[0,20],x_2=[-20,0]

在这里插入图片描述

Контролируемый эксперимент

  • Оригинальный метод: используйте только одну модель для первого анализа набора данных.S1S_1учиться, а потомS2S_2исследование, окончательная тестовая параS1S_1Ошибка подбора набора данных.

  • Метод этой статьи: использование двух моделей,NET1NET_1для получения новых знаний,NET2NET_2Используется для хранения полученных знаний иNET1NET_1Делайте «напоминания», чтобы предотвратить катастрофическое забывание.

результат

  • Оригинальный метод: размер шага обучения каждого набора данных составляет 60000.
S1S_1 S2S_2 re-fitting S1S_1
MSE 0.042918288146 0.03675510078 0.453335550511
  • Метод в тексте: размер шага обучения каждого набора данных составляет 60000.
S1S_1 S2S_2 re-fitting S1S_1
MSE 0.042918288146 0.0409538226834 0.0502870424298

Среднеквадратическая ошибка (MSE) после каждого процесса субобучения приведена в таблице. Модель может очень хорошо соответствовать каждому набору данных, но после изучения поднабора данных S2 и повторного обнаружения ошибки подбора набора данных S1 мы обнаруживаем, что MSE исходного метода становится очень большим (0,04).\rightarrow0,45), а в тексте метод изменен незначительно (0,04\rightarrow0,05),Это показывает, что метод в этой статье действительно облегчает катастрофическую проблему забывания нейронных сетей..

3.1.4 Процедура

Процедура 1: оригинальный метод

import numpy as np
from collections import namedtuple
import torch
import torch.nn.functional as F
from torch.autograd import Variable
import torch.nn as nn
from sklearn import preprocessing
from sklearn.decomposition import PCA
import torch.optim as optim
import time
import random

random.seed(0)
FloatTensor = torch.FloatTensor
LongTensor = torch.LongTensor
ByteTensor = torch.ByteTensor
Tensor = FloatTensor

def data_generator(x1, x2):
    return np.sin(x1)/x1+x2/10
Transition = namedtuple('Transition',
                        ('state', 'label'))

class ReplayMemory(object):
    def __init__(self, capacity):
        self.capacity = capacity
        self.memory = []
        self.position = 0

    def push(self, *args):
        """Saves a transition."""
        if len(self.memory) < self.capacity:
            self.memory.append(None)
        self.memory[self.position] = Transition(*args)
        self.position = (self.position + 1) % self.capacity

    def sample(self, batch_size):
        return random.sample(self.memory, batch_size)

    def __len__(self):
        return len(self.memory)

"""  MLP  """
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.fc1 = nn.Linear(2, 100)
        self.fc2 = nn.Linear(100, 3)
    def forward(self, x):
        x = F.sigmoid(self.fc1(x))
        return self.fc2(x)


data = ReplayMemory(3000)
for i in range(3000):
    x1 = 20.0*np.random.rand(1)-20.0
    x2 = 20.0*np.random.rand(1)-20.0
    x = np.array([x1[0], x2[0]])
    y = data_generator(x1[0], x2[0])
    label = np.array([x1[0], x2[0], y])
    data.push(Tensor([x]),Tensor([label]))

model = Net()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)
tic = time.time()
for i in range(60000):
    # get the inputs
    transitions = data.sample(25)
    batch = Transition(*zip(*transitions))
    state_batch = Variable(torch.cat(batch.state))
    label_batch = Variable(torch.cat(batch.label))

    # zero the parameter gradients
    optimizer.zero_grad()

    # forward + backward + optimize
    outputs = model(state_batch)

    loss = criterion(outputs, label_batch)
    loss.backward()
    optimizer.step()
toc = time.time()
print("the time cost is:"+str(toc-tic))
print('Finished Training')   

x1_axis = np.linspace(-20,-0.001,75)
x2_axis = np.linspace(-20,-0.001,75)



X1 = []
X2 = []

true_y = []
pre_y = []
for m in range(len(x1_axis)):
    for n in range(len(x2_axis)):
        X1.append(x1_axis[m])
        X2.append(x2_axis[n])
        x = np.array([[x1_axis[m], x2_axis[n]]])    
        inputs = Variable(torch.Tensor(x))
        outputs = model(inputs)
        true_y.append(data_generator(x1_axis[m],x2_axis[n]))
        label = outputs.data[0].numpy()
        pre_y.append(label[-1])
X1 = np.array(X1)
X2 = np.array(X2)
true_y = np.array(true_y).ravel()
pre_y = np.array(pre_y).ravel()
error = np.sum(np.abs(true_y-pre_y))/len(true_y)
print('error: '+str(error)) 

Процедура 2: Самообновление памяти

import copy
import time
new_model = copy.deepcopy(model)
new_optimizer = optim.Adam(new_model.parameters(), lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)
old_model = copy.deepcopy(model)
old_optimizer = optim.Adam(old_model.parameters(), lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)
tc = time.time()
def generate_new(batch_size):
    test_x = 40*np.random.rand(batch_size,2)-20
    for i in range(100):
        inputs = Variable(torch.Tensor(test_x))
        outputs = new_model(inputs)
        label = outputs.data.numpy()
        test_x[:,0] = label[:,0]
        test_x[:,1] = label[:,1]
    X = test_x
    Y = label
    return Tensor(X),Tensor(label)

def generate_old(batch_size):
    test_x = 40*np.random.rand(batch_size,2)-20
    for i in range(100):
        inputs = Variable(torch.Tensor(test_x))
        outputs = old_model(inputs)
        label = outputs.data.numpy()
        test_x[:,0] = label[:,0]
        test_x[:,1] = label[:,1]
    X = test_x
    Y = label
    return Tensor(X),Tensor(label)
    
data = ReplayMemory(3000)
for i in range(3000):
    x1 = 20.0*np.random.rand(1)-0.0
    x2 = 20.0*np.random.rand(1)-20.0
    x = np.array([x1[0], x2[0]])
    y = data_generator(x1[0], x2[0])
    label = np.array([x1[0], x2[0], y])
    data.push(Tensor([x]),Tensor([label]))
    
tic = time.time()
for i in range(60000):
    # get the inputs
    transitions = data.sample(10)
    batch = Transition(*zip(*transitions))
    extern_state = torch.cat(batch.state)
    extern_label = torch.cat(batch.label)
#     new_active_state, new_active_label = generate_new(10)
    
#     state_batch = Variable(extern_state)
#     label_batch = Variable(extern_label)    
    
    state_batch = Variable(torch.cat((extern_state,new_active_state),0))
    label_batch = Variable(torch.cat((extern_label,new_active_label),0))

    # zero the parameter gradients
    old_optimizer.zero_grad()

    # forward + backward + optimize
    outputs = old_model(state_batch)

    loss = criterion(outputs, label_batch)
    loss.backward()
    old_optimizer.step()
    
    
    
    old_active_state, old_active_label = generate_old(10)
    old_state_batch = Variable(old_active_state)
    old_label_batch = Variable(old_active_label)
    new_optimizer.zero_grad()
    old_outputs = new_model(old_state_batch)
    loss = criterion(old_outputs, old_label_batch)
    loss.backward()
    new_optimizer.step()    
    
toc = time.time()
print("the time cost is:"+str(toc-tic))
print('Finished Training')   


тестовая основная программа

# x1_axis = np.linspace(-20,-0.001,75)
# x2_axis = np.linspace(-20,-0.001,75)

x1_axis = np.linspace(0.001,20,75)
x2_axis = np.linspace(-20,-0.001,75)

X1 = []
X2 = []

true_y = []
pre_y = []
for m in range(len(x1_axis)):
    for n in range(len(x2_axis)):
        X1.append(x1_axis[m])
        X2.append(x2_axis[n])
        x = np.array([[x1_axis[m], x2_axis[n]]])    
        inputs = Variable(torch.Tensor(x))
        outputs = old_model(inputs)
        true_y.append(data_generator(x1_axis[m],x2_axis[n]))
        label = outputs.data[0].numpy()
        pre_y.append(label[-1])
X1 = np.array(X1)
X2 = np.array(X2)
true_y = np.array(true_y).ravel()
pre_y = np.array(pre_y).ravel()
error = np.sum(np.abs(true_y-pre_y))/len(true_y)
print('error: '+str(error)) 

3.2 Метод дистилляции знаний

3.2.1 Нейронная сеть дистилляции

Нейронная сеть дистилляции [8] — это концепция, предложенная Хинтоном в 2014 году. Чтобы лучше понять, как дистилляция знаний может облегчить проблему катастрофического забывания, сначала прочитайте этот блог CSDN.Что такое дистилляция нейронных сетей? (Идеи дизайна). Конкретное содержание можно резюмировать следующим образом:

Первоначальная нейронная сеть дистилляции предназначена для повышения эффективности обучения глубокому обучению и уменьшения сложности структуры сетевой модели, а также уменьшения временных и пространственных затрат на глубокое обучение на легкой мобильной платформе. Предысторией применения [8] является проблема классификации меток с горячим кодированием. Во-первых, сложная глубокая нейронная сеть обучается на платформе с сильными вычислительными мощностями.Выход сети представляет собой распределение вероятностей, сгенерированное функцией softmax.В функции softmax есть значение, определяющее равномерность выходного распределения вероятностей - значение температуры Т. При обучении сложной сети значение температуры задается большим значением, и ожидается более равномерное распределение. Суть статьи в том, чтобы обучить эту сложную сеть большим объемом данных. После завершения обучения сложной сети я могу более эффективно обучать сеть с более простой структурой модели. Как правило, простые сети должны решать более конкретные задачи и применяться. Для задачи, к которой он будет применяться, у нас будут некоторые данные (гораздо меньший объем данных, чем при обучении сложной сети), и мы сначала используем сложную сеть для прогнозирования вывода этих данных. Теперь у нас есть два набора данных для обучения простой сети: а) истинный вывод состояния (горячая метка); б) вероятностный вывод состояния (непрерывное значение), предсказанный сложной сетью. Сначала обучите простую сеть с набором данных b, пока она не станет стабильной, а затем продолжите обучение с набором данных a. Дополнительная часть стандартного шага состоит в том, чтобы сначала использовать выходные данные, предсказанные сложной сетью, для управления простой сетью.Поскольку предсказанное выходное значение является значением вероятности и является непрерывным, использование этого типа данных облегчает сходимость сети. К этому моменту простая сеть быстро усвоила некоторые приблизительные знания, и гораздо быстрее продолжить обучение с реальным набором данных на этой основе. (На рисунке ниже показана кривая, выводимая функцией softmax, когда значение температуры T принимает разные значения. Когда значение больше, T=20, кривая функции плавно изменяется, а распределение становится более равномерным.)

在这里插入图片描述

Короче говоря, основная основа нейронной сети дистилляции состоит из двух пунктов:1) обученная нейронная сеть содержит информацию о распределении выходных данных исторических данных; 2) нейронная сеть имеет характеристики аналогичного ввода и аналогичного вывода.

3.2.2 Метод дистилляции знаний

Далее мы познакомим вас с тем, как использовать методы дистилляции знаний, чтобы облегчить катастрофическую проблему забывания.

Во-первых, приведен следующий информативный график.在这里插入图片描述(b)-(e) на приведенном выше рисунке — это методы расширения традиционного глубокого обучения до непрерывного обучения соответственно. Дистилляция знания соответствует (е). В этой главе представлен только пункт (e), а пункты (b)–(d) будут представлены позже. Как показано на рисунке (e), фоном приложения является многозадачное обучение, и обучение является инкрементным. Для каждой задачи независимым является только выходной полносвязный слой, а другие извлечения признаков и средний скрытый слой являются общими. Предположим, что в это время сеть закончила обучение n-й задаче и хочет начать обучение n+1-й задаче. Дистилляция позволяет изучать новые знания путем точной настройки общих параметров.Наблюдая за (d) и (e), оба они кажутся точно такими же из структурной диаграммы, оба из которых являются точной настройкой общих параметров. Разница между ними в том, как не забыть. Подход (d) является относительно грубым, напрямую используя совместные исторические данные для обучения сети с новыми данными, а это означает, что исторические данные необходимо постоянно хранить. Однако дистилляция не хранит исторические данные.

3.2.3 Введение в алгоритм

Алгоритм, показанный на рисунке ниже, используется для иллюстрации того, как в статье [6] используется «метод дистилляции» для решения проблемы катастрофического забывания. Для глубокой нейронной сети для инкрементной многозадачности есть общие параметрыθs\theta_s. Чтобы облегчить отличие от новых задач, которые предстоит изучить, мы записываем выходные полносвязные параметры, относящиеся к старым задачам, какθo\theta_o, запишите выходной параметр полного соединения, соответствующий новой задаче, какθn\theta_n. Целью обучения являются все параметры сети (θs,θo,θn\theta_s,\theta_o,\theta_n) может хорошо справляться как с новыми, так и со старыми задачами (см. рис. e).在这里插入图片描述В центре внимания вопроса находятся общие параметрыθs\theta_s: Чтобы приспособиться к новой задаче, ее нужно скорректировать, чтобы не забыть старую задачу, лучше оставаться прежней. Если есть конфликт, он должен быть разрешен. Теперь, когда его нужно настроить, мы его настроим, но мы должны добавить некоторые ограничения.

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

Давайте посмотрим, как работает этот.

Идея: чтобы старая задача не была забыта, необходимо, чтобы данные, относящиеся к старой задаче, могли непрерывно стимулировать нейроны подкрепления во время обучения новым данным и препятствовать возникновению забывания. Наши высокие цели не позволяют использовать низкоуровневые способы записи исторических данных. Параметры старой задачи содержат информацию о распределении исторических данных.Мы можем использовать параметры старой задачи для создания некоторых фиктивных данных, что эквивалентно выборке распределения. Примите во внимание эти фиктивные данные при обучении на новых данных. [Эта идея совпадает с самообновляющейся памятью[4-5]]

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

3.2.4 Этапы обучения

1) Запишите вывод новых данных в исходной сетиYo^\hat{Y_o}(с параметромθsθoθ_s θ_oСвязанный); 2) Для вновь добавленных классов мы увеличиваем количество узлов в соответствующем FC, и случайным образом инициализируем весаθnθ_n; 3) Мы обучаем сеть и оптимизируем ее потери, чтобы иметь наименьшие потери по всем классификациям. Во время тренировки мы сначала замираемθsθ_sиθoθ_o, а потом тренироватьсяθnθ_nпока не сходится, то тренируем всеθsθ_s,θoθ_oиθnθ_nпока не сходится.

3.2.5 Потери при дистилляции

Lold(yo,yo^)=H(yo',y^o')=i=1lyo'(i)logy^o'(i)L_{old}(y_o,\hat{y_o})=-H(y'_o,\hat{y}'_o)=-\sum_{i=1}^l y'^{(i)}_o log\hat{y}'^{(i)}_oздесь,llколичество новых данных,yo'(i)y'^{(i)}_oвывод, предсказанный для старой нейронной сети,y^o'(i)\hat{y}'^{(i)}_o— вероятностная форма, нормализованная функцией softmax. Конкретный расчет выглядит следующим образом:

yo(i)=(yo(i))1/Tj(yo(j))1/T,y^o(i)=(y^o(i))1/Tj(y^o(j))1/Ty_{o}^{(i)}=\frac{\left(y_{o}^{(i)}\right)^{1 / T}}{\sum_{j}\left(y_{o}^{(j)}\right)^{1 / T}}, \quad \hat{y}_{o}^{(i)}=\frac{\left(\hat{y}_{o}^{(i)}\right)^{1 / T}}{\sum_{j}\left(\hat{y}_{o}^{(j)}\right)^{1 / T}}

По сути, [5] аналогичен [6], [5] использует резервную нейронную сеть для генерации виртуальных данных (сгенерированных из случайных входных данных), которые представляют собой случайную выборку старых знаний, и мы используем их для непрерывной стимуляции нейронов. , помогают вспомнить, препятствуют забыванию. [6] Введите новые данные в старую сеть для создания виртуальных данных.Целевая функция содержит ограничения старой сети.Всякий раз, когда обучаются новые данные, все виртуальные данные используются для вызова старых знаний.

3.3 Transfer Techniques

Первый график в статье [7] приведен первым. Автор считает, что для каждой задачи ее эффективные параметры должны быть представлены в виде распределения вероятностей. Светло-красный цвет на рисунке представляет распределение параметров, соответствующее старой задаче, а светло-зеленый цвет соответствует распределению параметров новой задачи. Если среднее значение двух распределений просто усредняется, конечное значение может не быть допустимым параметром для старой задачи или допустимым параметром для новой задачи.Как всесторонне рассмотреть старые параметры и новые данные, чтобы параметры можно было перенести на значение, которое всех устроит, — основная идея этой статьи, чтобы преодолеть проблему катастрофического забывания. 在这里插入图片描述Если просто рассматривать каждое измерение веса задачи как одинаково важное, то форма функции потерь полностью игнорируется, и получается плохой результат. Поэтому в статье рассматривается информация о втором моменте (дисперсия) параметрического распределения.Также автор предлагает 3 способа постепенного переноса веса: 1) перенос веса, 2) перенос L2, 3) перенос веса.Конкретные детали не будут расширены, и заинтересованные читатели могут обратиться к оригинальной статье [7].

Сначала я хотел воспользоваться отпуском при высокой температуре, чтобы написать этот блог, но Най Хе в последнее время стал немного более игривым, и он может закончить его только в спешке. Дается основная идея этой части.Если вы хотите узнать больше, вы можете прочитать оригинальную статью. Я искал в Интернете и не нашел подробной интерпретации этой статьи, поэтому я могу полагаться только на себя.

4. Вывод

В этой статье впервые представлена ​​серьезная и неотложная проблема нейронных сетей — проблема катастрофического забывания. В этой статье делается попытка объяснить причины катастрофического забывания и проводится обзор существующих исследований катастрофического забывания в глубоком обучении. Эта статья не имеет ничего общего с новой школой архитектуры нейронных сетей. Если новая структура может избежать катастрофического забывания, то ей не нужно беспокоиться об этом, у нее есть более важные дела. Если эта новая сетевая структура не может не забыться, то какой в ​​ней смысл? По этой причине я не считаю нужным добавлять содержание новой структурной школы к резюме катастрофического забывания.

Содержание этой статьи - это только контент, который я обычно собираю, и я не изучал его глубоко. Многие описания, понимания и мнения могут быть неясными и правильными. Прошу простить меня и прошу указать на любые неточности в тексте. Спасибо! Книга рекордов предназначена для вашего собственного быстрого припоминания, чтобы избежать катастрофического забывания. Содержание этой статьи касается толькозабывчивый,забывчивыйЭто также очень важная тема для исследований, особенно для нас и нашего творчества в эпоху больших данных и стремительного роста знаний. Я все еще хочу закончить предложением в начале:Забывчивость - болезнь, забывчивость - вид мудрости.


использованная литература

[1] McCloskey, M., & Cohen, N. J. (1989). Catastrophic interference in connectionist networks: The sequential learning problem. Psychology of learning and motivation, 24, 109-165. [2] French, R. M. . (1999). Catastrophic forgetting in connectionist networks. Trends in Cognitive Sciences, 3(4), 128-135. [3] Goodfellow, I. J., Mirza, M., Xiao, D., Courville, A., & Bengio, Y. (2013). An empirical investigation of catastrophic forgetting in gradient-based neural networks. arXiv preprint arXiv:1312.6211. [4] Ans B, Rousset S. Neural networks with a self-refreshing memory: Knowledge transfer in sequential learning tasks without catastrophic forgetting[J]. Connection Science, 2000, 12(1):1-19. [5] Shmelkov K, Schmid C, Alahari K. Incremental Learning of Object Detectors without Catastrophic Forgetting[J]. 2017. [6] Li, Z., & Hoiem, D. (2016). Learning without forgetting. In ECCV2016 [7] Lee, S. W., Kim, J. H., Ha, J. W., & Zhang, B. T. (2017). Overcoming Catastrophic Forgetting by Incremental Moment Matching. In NIPS2017 [8] Hinton, Geoffrey, Oriol Vinyals, and Jeff Dean."Distilling the knowledge in a neural network." arXiv preprint arXiv:1503.02531 (2015)