Лекции-2016 (1126938), страница 6
Текст из файла (страница 6)
Он знает, как считать∂tmp33якобианы ∂tmp∂h и ∂w2Но сами якобианы он никогда не считает∂lossЕму достаточно лишь умножать свой градиент ∂tmpна3эти якобианы, одновременно подставляя текущие значенияh и w2Готовые градиенты ∂loss∂h ии w2 соответственноКонстантин Архипенко∂loss∂w2отправляются вершинам hНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonBackpropagationКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonBackpropagationКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonОбучение нейросети с мини-батчамиПодаём на вход не вектор x, а матрицу X с равнымразмеру мини-батча количеством строкtmp1 , tmp2 , h превращаются в матрицыtmp3 , tmp4 , y , ytrue , loss – в векторыПотери на элементах мини-батча нужно усреднить –добавляем зелёную вершину avgLoss и минимизируем еёВ итоге мы распараллеливаем не только вычислениеответа нейросети, но и backpropagationКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonОбучение нейросети с мини-батчамиНа практике процесс обучения нейросети состоит изнекоторого количества эпохВо время каждой эпохи обучающую выборку случайнымобразом разбивают на мини-батчиДля каждого мини-батча в рамках определённой эпохивычисляют градиент потери на этом мини-батче иобновляют настраиваемые параметрыМини-батчи используются и при работе нейросети натестовой выборкеКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonМодификации SGDВ отличие от логистическойрегрессии, обучение нейросетиесть оптимизация очень сложнойфункции с большим количествомлокальных минимумовПрименять SGD становитсятрудноРассмотрим некоторыемодификации SGD, призванныеоблегчить поиск оптимальныхпараметровКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonМодификации SGD: МоментОбозначим через θ совокупностьнастраиваемых параметровнейросетиvt = γvt−1 − αt ∂loss∂θ |θ=θtθt+1 = θt + vtБез момента:0<γ<1По функции потерь катитсямячик, набирая скорость наспусках и проскакивая неглубокиелокальные минимумыНестеров:vt = γvt−1 − αt ∂loss∂θ |θ=θt +vt−1θt+1 = θt + vtКонстантин АрхипенкоНейронные сетиС моментом:Нейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonМодификации SGD: RMSPropgt = ∂loss∂θ |θ=θtE[g2 ]t = 0.9E[g2 ]t−1 + 0.1gt2αt = √ η2E[g ]t +εθt+1 = θt − αt gt – поэлементное умножениеПоддерживает примерно одинаковую скоростьПомогает выбираться из узких глубоких локальныхминимумовТребует дополнительной памятиСм.
также AdaDelta, AdaGrad, AdamКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonDropoutКаждый элемент тензора обнуляется свероятностью p либо умножается на p1с вероятностью 1 − pПример:h̃ = tanh(xW1 + b1 )h = dropout(h̃)y = σ(hw2T + b2 )Помогает не переобучатьсяПри работе нейросети на тестовойвыборке dropout выключаютКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonСодержание1 Нейронные сети прямого распространенияКак они устроеныКак они обучаютсяКак их написать на Python2 Рекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonБиблиотеки глубокого обученияTheano – низкоуровневая; строит иоптимизирует графы вычислений,считает в них градиенты; остальноепользователь делает самTensorFlowKeras – высокоуровневая; используетTheano или TensorFlow в качествеbackend; простая в освоении; посравнению с Theano обладает меньшейгибкостьюКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonKeras: примерКлассифицируем новости на 46 темПусть есть словарь из max_words словКаждую новость представим в виде бинарного вектора изmax_words элементов (присутствует ли слово в текстеновости)Разобьём новости на обучающую и тестовую части;построим соответствующие матрицы X_train и X_test извышеупомянутых бинарных векторовКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonKeras: reuters_mlp.pymodel = Sequential()model.add(Dense(512, input_shape=(max_words,)))model.add(Activation("relu"))model.add(Dropout(0.5))model.add(Dense(46))model.add(Activation("softmax"))model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])history = model.fit(X_train, Y_train,nb_epoch=5, batch_size=32,verbose=1, validation_split=0.1)score = model.evaluate(X_test, Y_test,batch_size=32, verbose=1)Константин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиКак они устроеныКак они обучаютсяКак их написать на PythonСоветыДля задач классификации используйте кросс-энтропиюИли hinge loss, если кажется, что максимизацияправдоподобия является не лучшей идеей.
При этомпоследний слой нейросети следует делать линейнымНе забывайте использовать class_weight в случаенесбалансированных классовДля задач регрессии чаще всего используютсреднеквадратичную ошибку (MSE) и линейный последнийслойИспользуйте модификации SGD и dropoutЧасто полезен ранний останов (early stopping) – обучениепрекращается, если значение функции потерь навалидационной выборке перестаёт уменьшатьсяКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейСодержание1 Нейронные сети прямого распространенияКак они устроеныКак они обучаютсяКак их написать на Python2 Рекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейНейронная сеть прямого распространенияВход имеет фиксированное числоэлементов; то же самое для выходаА как быть с последовательностямипеременной длины, например, спредложениями на русском языке, вкоторых имеются тесные взаимосвязимежду соседними словами?Константин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейРекуррентная нейронная сетьКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейПредставленная в другом видеКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейЕсли нас интересует только последний выходКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейРекуррентная нейронная сеть Элманаht = fh (xt W + ht−1 U + b) – скрытое состояниеyt = fy (ht V + c)h0 = 0Константин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейЗадача анализа тональности твитовКлассифицируем твиты на три класса – негативные,нейтральные и позитивныеВозьмём обученный на соцсетях word2vec; будемпредставлять твит в виде последовательности (xt )Tt=1векторов его словРешим задачу с помощью рекуррентной нейросети Элмана:ht = f (xt W + ht−1 U + b)y = softmax(hT V + c)h0 = 0Используем categoricalCrossentropyКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейВычисление градиента в рекуррентной нейросетиКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейВычисление градиента в рекуррентной нейросетиКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейВычисление градиента в рекуррентной нейросетиКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейВычисление градиента в рекуррентной нейросетиКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейВычисление градиента в рекуррентной нейросетиКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейВычисление градиента в рекуррентной нейросетиКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейВычисление градиента в рекуррентной нейросетиВершина W получает части своего градиента от трёхвершин – tmp1 , tmp5 и tmp9 ; эти части суммируютсяАналогично для вершин U и bКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейРекуррентная нейросеть с мини-батчамиПроблема: признаки элементов выборки имеют разнуюдлинуЧтобы сформировать мини-батч, придётся дополнитьнулевыми векторами признаки его элементов так, чтобыони имели одинаковую длинуKeras поддерживает маскирование – при достижениитаких нулевых векторов прекращается обновлениескрытого состояния и выходаВ Theano матрицу-маску можно создать самомуСовокупность признаков элементов мини-батча,подаваемая на вход нейросети, есть 3-мерный тензорКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейСодержание1 Нейронные сети прямого распространенияКак они устроеныКак они обучаютсяКак их написать на Python2 Рекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейЗатухающий градиентht = fh (xt W + ht−1 U + b)yt = fy (ht V + c)h0 = 0∂h5= diag (fh0 (x5 W + h4 U + b))WT∂x5∂h5 ∂h4 ∂h3∂h5=diag (fh0 (x2 W + h1 U + b))WT∂x2∂h4 ∂h3 ∂h2Константин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейЗатухающий градиентht = fh (xt W + ht−1 U + b)yt = fy (ht V + c)h0 = 0∂ht= diag (fh0 (xt W + ht−1 U + b))UT∂ht−1Если |fh0 (·)| < γ и kUk < γ1 , то элементы матрицыбудут близки к нулю∂h5∂x2Нейросеть начнёт страдать маразмом: на её ответ вмомент времени t = 5 то, что подавалось на вход приt = 2, уже почти не влияетКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейЗатухающий градиентПроблема затухающего градиента проявляется и вмногослойных персептронахДля её избежания нужно грамотно выбирать функцииактивации и использовать правильную инициализациюнастраиваемых параметров нейросетиВместо нейросети Элмана следует использовать менееподверженные этой проблеме рекуррентные нейросетиВместо затухания градиент может и взрыватьсяКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейФункции активацииσ(z), чья производнаяограничена 14 , большевсех провоцируетзатухание градиентаКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейИнициализацияВ случае обычного слоя y = f (xW + b) дляинициализации W чаще всего используется равномерноераспределение (например, Glorot uniform)Рекуррентные матрицы (U) любят инициализироватьслучайными ортогональными матрицами, уменьшаявероятность затухания или взрыва градиентаСмещения (b) инициализируются нулями, за редкимиисключениямиКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейLong Short-Term MemoryКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейLong Short-Term Memoryft = σ(xt Wf + ht−1 Uf + bf )it = σ(xt Wi + ht−1 Ui + bi )c̃t = tanh(xt Wc + ht−1 Uc + bc )ot = σ(xt Wo + ht−1 Uo + bo )ct = ft ct−1 + it c̃tht = ot tanh(ct )LSTM обладает дополнительнымскрытым состоянием cКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейLong Short-Term Memoryft = σ(xt Wf + ht−1 Uf + bf )it = σ(xt Wi + ht−1 Ui + bi )c̃t = tanh(xt Wc + ht−1 Uc + bc )ot = σ(xt Wo + ht−1 Uo + bo )ct = ft ct−1 + it c̃tht = ot tanh(ct )Forget gate: с учётом xt определяет,какую информацию из ct−1 стоитсохранитьКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейLong Short-Term Memoryft = σ(xt Wf + ht−1 Uf + bf )it = σ(xt Wi + ht−1 Ui + bi )c̃t = tanh(xt Wc + ht−1 Uc + bc )ot = σ(xt Wo + ht−1 Uo + bo )ct = ft ct−1 + it c̃tht = ot tanh(ct )Input gate и слой c̃: вместеопределяют важность информациииз xt и преобразуют важнуюинформацию для сохранения вскрытом состоянии cКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейLong Short-Term Memoryft = σ(xt Wf + ht−1 Uf + bf )it = σ(xt Wi + ht−1 Ui + bi )c̃t = tanh(xt Wc + ht−1 Uc + bc )ot = σ(xt Wo + ht−1 Uo + bo )ct = ft ct−1 + it c̃tht = ot tanh(ct )Output gate: определяет, какуюинформацию из обновлённогоскрытого состояния c выдать вкачестве ответаКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейLSTM и проблема затухающего градиента∂ct= diag (ft )∂ct−1Для тех моментов времени, когда нейросеть не хотелазабывать (значение forget gate почти равно единице),градиент почти не затухаетНаша нейросеть больше не страдает маразмом и можетзапоминать важную информацию на много шагов вовремениСмещение bf forget gate желательно инициализировать ненулевым вектором, а, например, вектором из единицКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейСодержание1 Нейронные сети прямого распространенияКак они устроеныКак они обучаютсяКак их написать на Python2 Рекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейKeras: анализ тональностиКлассифицируем рецензии на IMDb на негативные ипозитивныеРецензию представляем в виде последовательностииндексов её слов в словаре, который имеет размерmax_featuresИндексы в словаре начинаются с единицы; ноль будемиспользовать для выравниванияКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейKeras: imdb_lstm.pyX_train = sequence.pad_sequences(X_train, maxlen=80)X_test = sequence.pad_sequences(X_test, maxlen=80)model = Sequential()model.add(Embedding(max_features, 128, dropout=0.2))model.add(LSTM(128, dropout_W=0.2, dropout_U=0.2))model.add(Dense(1))model.add(Activation("sigmoid"))model.compile(loss="binary_crossentropy", optimizer="adam",metrics=["accuracy"])model.fit(X_train, y_train, batch_size=32,nb_epoch=15, validation_data=(X_test, y_test))score, acc = model.evaluate(X_test, y_test, batch_size=32)Константин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейСлой EmbeddingСпециальный слой для перевода индексов слов в словаре ввекторные представления этих словЭкономит памятьМожно инициализировать векторами word2vec и сделатьнеобучаемымКонстантин АрхипенкоНейронные сетиНейронные сети прямого распространенияРекуррентные нейронные сетиРекуррентная нейронная сеть ЭлманаЗатухающий градиент и LSTMПриложения рекуррентных нейронных сетейПриложения рекуррентных нейронных сетейАнализ тональности (sentiment analysis)Моделирование языка, генерация текстаМашинный переводОпределение частей речи и синтаксический анализЧат-боты (см.