MIT Introduction to Deep Learning (2024) | 6.S191

MIT Introduction to Deep Learning (2024) | 6.S191

Введение в курс по глубокому обучению

Приветствие и структура курса

  • Преподаватели Александер Амини и Эва приветствуют студентов на курсе MIT SUS1 191, который будет интенсивным и быстрым.
  • Курс охватывает основы быстро развивающейся области искусственного интеллекта (AI) и глубокого обучения, которая значительно изменилась за последние восемь лет.
  • AI решает задачи, которые ранее считались нерешаемыми, демонстрируя производительность выше человеческой.

Изменения в преподавании

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

Примеры использования AI

  • Ранее созданное видео с использованием AI стало вирусным благодаря своей реалистичности; оно было создано за $10,000 всего за одну минуту.
  • За несколько месяцев видео набрало более миллиона просмотров, что подчеркивает интерес к технологиям AI.

Современные достижения в глубоком обучении

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

Будущее курса и его цели

  • Курс направлен на обучение основам создания различных моделей глубокого обучения от нуля до готовых решений.

Введение в глубокое обучение

Основы интеллекта и искусственного интеллекта

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

Структура курса

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

Лабораторные работы

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

Ресурсы и поддержка

  • Все ресурсы курса будут доступны онлайн; вопросы можно задавать через платформу Piaza.

Почему мы изучаем глубокое обучение?

Введение в глубокое обучение

  • Обсуждение важности глубокого обучения и его актуальности в современном мире. Спикер задает вопрос о том, почему аудитория заинтересована в этом курсе.

Эволюция машинного обучения

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

Применение глубокого обучения

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

Причины популярности глубокого обучения сегодня

  • Доступность больших объемов данных: современные модели требуют много данных для эффективного обучения.
  • Увеличение вычислительных мощностей благодаря GPU, которые идеально подходят для параллельной обработки информации.
  • Развитие открытых программных инструментов упрощает создание и развертывание моделей глубокого обучения.

Что такое перцептрон?

Основные компоненты нейронной сети

  • Перцептрон — это базовый строительный блок нейронной сети; каждая нейронная сеть состоит из множества перцептронов.

Процесс передачи информации через нейрон

  • Нейроны принимают несколько входных значений (X1, X2,... XM), каждое из которых умножается на соответствующий вес (W1,... WM).

Вычисление выходного значения

  • После умножения входных значений на веса они суммируются и проходят через нелинейную активационную функцию для получения окончательного выхода (Y).

Влияние смещения на активацию нейрона

Как работают нейронные сети?

Входные данные и веса

  • Входные данные обозначаются вектором X, который включает все входы от X1 до XM. Веса обозначаются вектором W, состоящим из W1 до WM.
  • Для получения выходного значения используется скалярное произведение векторов X и W, что подразумевает поэлементное умножение и последующее суммирование.

Нелинейность и активационные функции

  • К результату добавляется смещение (bias), обозначаемое как w0, после чего применяется нелинейная функция активации, обозначенная как Z или G.
  • Одной из распространенных активационных функций является сигмоидальная функция, которая преобразует любое действительное число в диапазон от 0 до 1.
  • Сигмоидальная функция часто используется для вероятностных распределений, позволяя нейронам обучаться на вероятностях.

Разнообразие активационных функций

  • Существуют различные типы нелинейных активационных функций. На слайде представлены три наиболее популярных: сигмоидальная функция слева, ReLU (Rectified Linear Unit) справа.
  • Функция ReLU линейна во всех точках за исключением x = 0, где происходит разрыв. Это делает её быстрой для вычислений и сохраняет необходимую нелинейность.

Зачем нужна нелинейность?

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

Применение обученной нейронной сети

  • Обученная нейронная сеть имеет заданные веса. Например, если смещение w0 равно 1, а веса W составляют 3 и 2.
  • Для получения выхода сети необходимо выполнить те же шаги: скалярное произведение входов с весами, добавить смещение и применить нелинейность.

Как работает нейрон?

Визуализация нейрона и его функции

  • Нейрон можно представить в двумерном пространстве, где линия определяет его поведение. Если новая точка данных (X1 = -1, X2 = 2) попадает с одной стороны линии, это влияет на результат.
  • Подставляя значения -1 и 2 в уравнение нейрона, получаем значение -6. Применяя нелинейную функцию G к этому значению, итоговый выход составляет 0.2.
  • Сигмоидная функция делит пространство на две части: все значения меньше 0.5 и больше 0.5, что зависит от положения точки относительно линии.
  • Если входное значение меньше нуля, выход будет менее 0.5; если больше — выход будет более 0.5.

Простота нейрона и сложность сетей

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

Основы перцептрона

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

Многофункциональные выходы

  • При наличии нескольких выходов можно использовать несколько нейронов в сети; каждый из них предсказывает свой собственный ответ независимо друг от друга.
  • Каждый нейрон имеет свои веса и может взаимодействовать с другими слоями сети для передачи информации.

Программирование нейросети

  • Для создания простой нейросети необходимо определить процесс передачи информации через сеть: умножение матриц входных данных на веса и добавление смещения перед применением нелинейности.

Пример создания плотного слоя

Инициализация плотного слоя

  • Пример инициализации плотного слоя с двумя нейронами, который принимает произвольный набор входных данных. Код на TensorFlow упрощает этот процесс до одной строки, что делает его удобным для использования.

Однослойная нейронная сеть

Структура сети

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

Скрытые слои

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

Матрицы весов в нейронной сети

Веса и нелинейности

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

Анализ единицы в скрытом слое

Вычисление ответа нейрона

  • Рассмотрение второго нейрона (Z2) в первом слое: его ответ вычисляется через скалярное произведение весов с входами, добавление смещения и применение нелинейности.

Полностью связанный слой

Связь между входами и выходами

  • Переход к полностью связанному слою, где каждый элемент входа соединен с каждым элементом выхода. Процесс остается прежним: скалярное произведение, смещение и нелинейность.

Глубокие нейронные сети

Создание глубокой модели

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

Применение нейросетей для решения реальных задач

Проблема предсказания успеха в учебе

Как нейронные сети помогают предсказать успех в учебе?

Введение в задачу

  • Нейронная сеть может помочь определить вероятность успешной сдачи курса на основе двух входных данных: количества посещенных лекций и часов, потраченных на финальный проект.
  • Прогнозируемая вероятность успешной сдачи курса составляет 10%, что является неблагоприятным результатом, несмотря на то, что фактическая вероятность равна 100%.

Проблемы с обучением нейронной сети

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

Обучение и оценка ошибок

  • Важно информировать нейронную сеть о том, когда ее ответы неверны. Это позволяет ей корректировать свои прогнозы.
  • Мы вычисляем "потерю" (loss), которая показывает разницу между предсказанным значением и истинным значением. Чем ближе эти значения друг к другу, тем меньше потеря.

Использование данных для обучения

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

Функции потерь и их применение

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

Оптимизация весов нейронной сети

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

Визуализация функции потерь

Понимание градиентного спуска

Основы градиентного спуска

  • Для любых весов W1 и W2 необходимо определить функцию потерь, чтобы найти минимальное значение потерь. Чем меньше потери, тем лучше.
  • Начинаем с произвольной точки в пространстве весов и вычисляем градиент функции потерь в этой точке, что дает представление о том, куда двигаться для уменьшения потерь.
  • Двигаемся в противоположном направлении от градиента, чтобы уменьшить значения функции потерь. Этот процесс повторяется до тех пор, пока не достигнем локального минимума.
  • Алгоритм называется градиентным спуском: начинаем с случайной инициализации весов, вычисляем градиенты и продолжаем итерации до сходимости.
  • Важно понимать шаги алгоритма: инициализация весов, вычисление градиента и движение в сторону уменьшения функции потерь.

Кодирование процесса

  • При обучении нейронной сети веса всегда инициализируются случайно. Затем начинается цикл для вычисления потерь и обновления весов на основе градиентов.
  • Градиент показывает направление увеличения функции потерь; его отрицательное значение указывает на направление движения для уменьшения этих потерь.

Обратное распространение ошибки

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

Распространение градиентов

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

Нейрон vs Перцептрон

Обратное распространение информации в нейронных сетях

Теория обратного распространения

  • Обратное распространение (backpropagation) — это алгоритм, который позволяет изменять веса в нейронной сети для улучшения потерь. Он основан на цепном правиле и достаточно прост в теории.
  • Современные библиотеки глубокого обучения автоматизируют процесс вычисления обратного распространения, что упрощает реализацию.

Практика оптимизации нейронных сетей

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

Важность начальной инициализации

  • Начальная инициализация весов имеет критическое значение: плохая инициализация может привести к застреванию в локальных минимумах.
  • Для улучшения оптимизации необходимо разрабатывать архитектуры нейронных сетей с более "дружественными" ландшафтами потерь.

Настройка скорости обучения

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

Адаптивные методы настройки скорости обучения

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

Ограничения поиска по пространству весов

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

Оптимизация нейронных сетей с помощью стохастического градиентного спуска

Определение оптимизатора

  • Модель определяет оптимизатор, который ранее обозначался как градиентный спуск. Здесь он называется стохастическим градиентным спуском (SGD).
  • Оптимизатор может быть любым из адаптивных оптимизаторов, и важно тестировать различные методы для понимания их влияния на процесс обучения.

Пакетирование данных

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

Стохастический градиентный спуск (SGD)

  • В SGD используется один обучающий пример для вычисления градиента, что упрощает процесс, но приводит к шуму в оценках.
  • Мини-пакеты представляют собой компромисс между использованием одного примера и полным набором данных. Например, размер пакета 32 позволяет быстрее оценивать градиенты.

Преимущества мини-пакетов

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

Переобучение и недообучение

  • Переобучение — это проблема не только глубокого обучения; она существует во всех областях машинного обучения.
  • Ключевая задача заключается в том, чтобы модель могла обобщать данные и хорошо работать на новых тестовых примерах.

Баланс между переобучением и недообучением

  • Если модель показывает хорошие результаты на обучающих данных, но плохие на тестовых — это признак переобучения.

Регуляризация в нейронных сетях

Что такое регуляризация?

  • Регуляризация — это техника, которая помогает предотвратить переобучение модели, ограничивая её способность учиться на нюансах обучающих данных.
  • Основная цель регуляризации — улучшить обобщающую способность модели не только на обучающих данных, но и на тестовых.

Техника Dropout

  • Dropout — популярная техника регуляризации, при которой во время обучения случайным образом отключаются некоторые нейроны (активации устанавливаются в ноль).
  • Например, если вероятность отключения составляет 50%, то половина нейронов будет "выключена" в каждом проходе вперёд.
  • Это снижает ёмкость нейронной сети и заставляет её постоянно находить новые пути для передачи информации от входа к выходу.
  • Такой подход предотвращает чрезмерную зависимость от небольших частей признаков в обучающих данных.

Раннее остановка (Early Stopping)

  • Вторая техника регуляризации — ранняя остановка. Она применяется ко всем моделям и основана на мониторинге производительности на тестовом наборе.
  • Переобучение происходит, когда модель начинает показывать худшие результаты на тестовом наборе по сравнению с обучающим.

График потерь

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

Ключевые моменты лекции

  • Лекция охватывает основные строительные блоки нейронных сетей: от перцептрона до сложных архитектур.
Video description

MIT Introduction to Deep Learning 6.S191: Lecture 1 * 2024 Edition* Foundations of Deep Learning Lecturer: Alexander Amini For all lectures, slides, and lab materials: http://introtodeeplearning.com/ Lecture Outline 0:00​ - Introduction 7:25​ - Course information 13:37​ - Why deep learning? 17:20​ - The perceptron 24:30​ - Perceptron example 31;16​ - From perceptrons to neural networks 37:51​ - Applying neural networks 41:12​ - Loss functions 44:22​ - Training and gradient descent 49:52​ - Backpropagation 54:57​ - Setting the learning rate 58:54​ - Batched gradient descent 1:02:28​ - Regularization: dropout and early stopping 1:08:47 - Summary Subscribe to stay up to date with new deep learning lectures at MIT, or follow us on @MITDeepLearning on Twitter and Instagram to stay fully-connected!!