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

"Код"

"Видео"

Dropout означает, что каждый установленный слой будет удалять некоторые параметры. Например, если выпадение равно 0,6, оно удалит 60% значений в этом слое. Dropout не сильно меняет слой, но делает его более обобщенным. С отсевом вы можете избежать переобучения. Например, без выпадения слой может начать распознавать собачий глаз на картинке и в соответствии с этим он будет предсказывать собаку каждый раз, когда видит собачий глаз. Но что, если на картинке собака смотрит в сторону. Тогда слой больше не мог предсказать, что есть собака, потому что единственным ключом к разгадке были глаза. Когда мы делаем выпадение, в некоторых случаях глаза выпадают, и слой должен научиться распознавать и другие части собаки. Затем слой учится использовать несколько различных факторов, которые определяют, является ли объект на изображении собакой или чем-то еще. Это критический компонент для хорошей работы глубокого обучения. Я думаю, что нет случаев, когда вы не должны использовать отсев при использовании глубокого обучения. Одна вещь, на которую я должен указать, это то, что вы не можете использовать выпадение в последнем слое.

Я рекомендую начинать с 50%, и если ваша модель кажется переоснащенной (потери при поездке намного меньше, чем потери при проверке), увеличьте ее и наоборот. Перемещайтесь на 5–10% за раз, проведите пару тестов и попытайтесь найти оптимальное место, где модель не переобучается, а также не выбрасывает слишком много информации. Но когда вы начнете использовать модель с набором тестов или проверок или просто в реальном мире, не забудьте установить отсев равным нулю, чтобы тогда не отбрасывалась никакая информация.

Магазин Россман

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

Во-первых, мы перечисляем все категориальные столбцы в один массив и числа в другой массив. Некоторые из категориальных столбцов понятны, например, в каком магазине это было. Мы не можем представить это как число, поэтому мы обрабатываем его как категориальное значение. Затем есть также категориальные значения, такие как год, которые можно обрабатывать как число. Когда мы говорим, что что-то обрабатывается как категориальная переменная, мы имеем в виду, что значения этой категории не обязательно должны совпадать. Например, когда мы рассматриваем год как категориальное значение, мы говорим, что 2012 и 2013 в любом случае не связаны друг с другом. Часто мы обрабатываем переменные с менее чем 10 уникальными значениями как категориальные. Мы не можем относиться к температуре как к категории, потому что могут быть сотни различных значений, которые могут сделать нашу модель очень медленной, и это мало поможет. Кардинальность означает, сколько различных значений содержится в этой переменной. Мощность недели равна 7, потому что это может быть одно из семи значений.

df, y, nas, mapper = proc_df(joined_samp,'Sales',do_scale=True)

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

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

Что мы потом и делаем каждый раз, когда в наших данных, например, есть понедельник, мы берем эти четыре числа и добавляем их к входному вектору. Эти числа в начале случайны, но по мере того, как мы продолжаем обучение, они должны меняться в направлении, в котором они могут найти какие-то отношения друг с другом. Это называется внедрением, и это в основном то же самое, что и одно горячее кодирование, где количество столбцов такое же, как количество строк, и в каждом столбце есть 1, который соответствует значению, и 0 в других. Разница, однако, заключается в том, что при использовании встраивания вам не нужно столько столбцов, а также значения не меняются, поэтому модель не может найти скрытые отношения между категориями. И говоря о скрытых отношениях, я имею в виду, что если вторник почти так же похож на четверг, значения должны стать похожими друг на друга. Количество столбцов не должно иметь большого значения, поэтому Джереми просто разделил количество строк + 1 (+1 для NAN) на 2, и если результат больше 50, он доводит его до 50.

Обзор:

  1. Перечислите категориальные и продолжающиеся имена столбцов.
  2. Сделать проверочный набор
  3. Решите, насколько большой должна быть каждая матрица встраивания.
  4. построить модель
  5. модель поезда

Естественное прогрессирование усталости (НЛП)

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

Джереми взял много текстовых данных с arxiv.org, где исследователи публикуют статьи. Он сделал модель, которая сначала состояла из нескольких слов, а затем продолжала текст.

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

Пример обзора фильма IMDb

В этом примере у нас есть большой набор данных обзоров фильмов с IMDb, и с их помощью мы пытаемся написать наши собственные обзоры.

Сначала мы импортируем текст так же, как мы импортировали изображения ранее в этом уроке. После импорта данных мы токенизируем их. Токенизация текстовых данных означает, что мы добавляем пробел между каждым словом и знаком препинания. Например:

Felissa Rose … man , oh man . She should work more often ! ! ! ! !

Fast.ai использует токенизатор spacy, который является одним из лучших.

На этом этапе мы также используем строчные буквы для наших символов.

Далее строим нашу модель. Мы передаем переменную min_freq, которая сообщает модели, как часто слово должно быть в тексте, чтобы его можно было рассматривать как слово. Если слово написано неправильно, оно не считается словом, потому что их меньше 10.

Обратное распространение во времени (bptt)

Во-первых, мы помещаем все наши обзоры фильмов в одну строку и разбиваем ее на пакеты. Итак, сначала у нас есть, например, (1,64M) матрица, потому что у нас 64 миллиона слов. Затем мы разделили его, скажем, на 64 партии, и тогда мы получили (10M, 64) матрицу. Затем мы берем первые строки bptt этой матрицы. Итак, если bptt равен 70, это означает, что мы впервые взяли 70 первых строк и получили матрицу, которая равна (70,64).

Затем мы заменяем каждое слово матрицей встраивания (которая представляла собой просто x число случайных чисел с плавающей запятой) и помещаем их в вектор, который является нашим входом.

Вы можете скачать матрицу встраивания слов из Интернета, но, по словам Джереми, это не имеет большого значения.

Наконец, мы можем создать текст, похожий на наши рецензии на фильмы.

~ Ланкинен