В этом посте подводятся итоги занятий по глубокому обучению в рамках программы Udacity Data Science Nano Degree Program. Репозиторий Github: https://github.com/jl4730/DeepLearning

1 Введение в нейронные сети

Алгоритм восприятия:

В этом видео выше показана простая задача классификации 0/1 и то, как постепенно достигается оптимальная линия классификации.

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

Горячее кодирование вводится для маркировки нескольких классов перед классификацией. И тогда функция softmax поможет дать каждой категории вероятность после того, как модель выдала результат.

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

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

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

Для многоклассовой классификации кросс-энтропия примет вид:

Объединив все, что у нас есть выше, и применив их к простой задаче классификации 2 классов, мы получим функцию ошибки как:

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

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

  • Выполнение операции прямой связи.
  • Сравнение результата модели с желаемым результатом.
  • Расчет ошибки.
  • Запуск операции прямой связи в обратном направлении (обратное распространение), чтобы распространить ошибку на каждый из весов.
  • Используйте это, чтобы обновить веса и получить лучшую модель.
  • Продолжайте это, пока у нас не будет хорошей модели.

Видео ниже покажет нам концептуальную интерпретацию того, что такое обратное распространение:

2 Обучение нейронных сетей

Мы можем совершить два типа ошибок: 1) пытаться убить Годзиллу с помощью мухобойки; 2) пытаясь убить муху с помощью базуки. Первый называется недообучением, а второй — переоснащением в машинном обучении. График сложности модели может помочь нам определить точку Златовласки.

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

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

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

3 Сверточная нейронная сеть

CNN довольно широко применяется во многих областях. Например, Google использовал CNN для создания модели волновой сети https://deepmind.com/blog/article/wavenet-generative-model-raw-audio, которая может читать любой текст. Если вы предоставите достаточно собственного голоса, модель может помочь прочитать текст так же, как и вы.

Чтобы понять CNN, нам нужна концепция MLP. Ключевой концепцией MLP (многослойный персептрон) является персептрон, который имитирует функцию в организме человека:

Чтобы обнаружить изображение, MLP сначала преобразует двумерное изображение в вектор. Затем, соединив несколько слоев полностью связанных персептронов, мы можем получить MLP, как показано ниже:

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

Вместо использования вектора CNN построена для выявления закономерностей в многомерных данных. В отличие от MLP, CNN понимают тот факт, что пиксели изображения, которые находятся ближе друг к другу, более тесно связаны, чем пиксели, которые находятся далеко друг от друга. CNN и MLP имеют сходство в том, что оба состоят из набора слоев. Но CNN представила два разных типа скрытых слоев: слои свертки и слои объединения.

CNN соединяет слои только локально, что значительно снижает количество параметров и менее подвержено переобучению.

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

Сверточные слои рассчитываются очень простым способом. После определения шага заполнения (https://iamaaditya.github.io/2016/03/one-by-one-convolution/) сверточный слой может быть получен путем умножения матриц. Мы часто добавляем функцию RELU, чтобы решить проблемы с исчезающими градиентами. Часто у нас будет много разных фильтров для захвата разных шаблонов на изображении. Как правило, мы можем визуализировать фильтры, чтобы понять, какие шаблоны CNN пытается уловить.

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

CNN — это процесс обнаружения пространственных шаблонов, содержащихся в изображении, через несколько слоев. Комбинация сверточных слоев и слоев с максимальным объединением достигает цели получения достаточно глубокого массива с очень маленькими пространственными размерами.

Поскольку CNN часто сложно обучать, мы можем использовать обучение с переносом, чтобы воспользоваться преимуществами революционных архитектур CNN, таких как VGG и ResNet, обученных на лучших графических процессорах на планете. Это поможет нам сократить время обучения и часто достигать хороших результатов.

4 новаторские архитектуры CNN