Машинное обучение и нейронные сети - страница 52

 

Автоэнкодеры (DL 22)



Автоэнкодеры (DL 22)

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

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

Постепенно уменьшая размер скрытых слоев, автоэнкодер заставляет сеть изучать сжатые представления входных данных. Если сеть может стабильно воспроизводить исходный ввод из этого сжатого представления, она эффективно обучается сжатию данных. Например, если у нас есть изображение 200x200 пикселей в качестве входных данных и мы уменьшаем его до скрытого слоя из 1000 нейронов, который затем может расширяться, чтобы воспроизвести близкое приближение к исходному изображению, мы достигаем коэффициента сжатия 20:1.

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

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

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

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

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

 

Генеративно-состязательные сети (DL 23)



Генеративно-состязательные сети (DL 23)

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

При использовании случайной библиотеки в программировании выборки из случайных распределений генерируются на основе последовательности случайных или псевдослучайных битов. Генератор случайных чисел выполняет вычисления для преобразования этой последовательности битов в выборки из другого распределения. Многие дистрибутивы построены поверх однородных дистрибутивов в этих генераторах.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

AlphaGo и AlphaGo Zero (DL 24)



AlphaGo и AlphaGo Zero (DL 24)

AlphaGo и AlphaGo Zero — два игровых агента, разработанных DeepMind, дочерней компанией Google. Эти системы сочетают в себе глубокие сверточные нейронные сети с обучением с подкреплением для самостоятельной игры, чтобы добиться значительных успехов в алгоритмах игры. В 2016 году AlphaGo стал первым ИИ, победившим чемпиона мира среди людей. В этом видео мы рассмотрим, как DeepMind создала эти системы, и обсудим основные результаты исследований, опубликованных как на AlphaGo, так и на AlphaGo Zero.

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

Разработка алгоритма ИИ для движения требует планирования нескольких шагов вперед. Шахматные движки, такие как Deep Blue, достигли этого, рассматривая все возможные последовательности ходов и оценивая полученные позиции на доске. Однако оценка качества позиции на доске для го является более сложной задачей из-за сложности игры и более высокого фактора ветвления. Ограничение пространства поиска многообещающими ходами и определение качества позиции на доске были серьезными проблемами, которые AlphaGo решила с помощью глубокого обучения.

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

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

Обучить сеть создания стоимости относительно просто, используя представления состояния доски и метки выигрышей/проигрышей. Обучение сети политик является более сложным, так как требует прогнозирования качества перемещения. AlphaGo Zero улучшила это, обучив сеть политики на оценках качества перемещения, сгенерированных алгоритмом поиска во время развертывания. Со временем сеть политик научится оценивать качество перемещения на несколько шагов вперед.

И AlphaGo, и AlphaGo Zero используют поиск по дереву Монте-Карло (MCTS) в качестве алгоритма планирования. MCTS выполняет развертывание для сбора информации о значениях последовательности перемещений и неопределенности. Алгоритм поиска использует политику и сети ценности для оценки состояния доски и оценки качества ходов. Благодаря самообучению с подкреплением обе системы улучшают оценки качества своих сетей и становятся более сильными игроками в го.

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

 

Расчетные графики (DL 25)



Расчетные графики (DL 25)

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

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

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

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

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

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

Чтобы расширить вычислительный граф для плотносвязной нейронной сети, мы можем ввести переменные, соответствующие векторам активаций или матрицам весов. Назовем вектор активаций на всем этом слое сети как «a1», обозначаемый символом векторной шляпы (^). Точно так же мы можем представить веса в виде матрицы W1.

В этом расширенном графе входными данными для каждого узла слоя является скалярное произведение вектора активаций (a1) и соответствующей матрицы весов (W1). Мы можем представить эту операцию как умножение матриц: a1 * W1.

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

Затем мы применяем функцию активации (например, сигмовидную или ReLU) поэлементно к полученному вектору. Обозначим этот вектор как «a2» (с символом шляпы), представляющий активации следующего слоя.

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

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

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

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

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

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

 

AlphaGo и AlphaGo Zero (DL 24)



AlphaGo и AlphaGo Zero (DL 24)

AlphaGo и AlphaGo Zero — два игровых агента, разработанных DeepMind, дочерней компанией Google. Эти системы сочетают в себе глубокие сверточные нейронные сети с обучением с подкреплением для самостоятельной игры, чтобы добиться значительных успехов в алгоритмах игры. В 2016 году AlphaGo стал первым ИИ, победившим чемпиона мира среди людей. В этом видео мы рассмотрим, как DeepMind создала эти системы, и обсудим основные результаты исследований, опубликованных как на AlphaGo, так и на AlphaGo Zero.

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

Разработка алгоритма ИИ для движения требует планирования нескольких шагов вперед. Шахматные движки, такие как Deep Blue, достигли этого, рассматривая все возможные последовательности ходов и оценивая полученные позиции на доске. Однако оценка качества позиции на доске для го является более сложной задачей из-за сложности игры и более высокого фактора ветвления. Ограничение пространства поиска многообещающими ходами и определение качества позиции на доске были серьезными проблемами, которые AlphaGo решила с помощью глубокого обучения.

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

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

Обучить сеть создания стоимости относительно просто, используя представления состояния доски и метки выигрышей/проигрышей. Обучение сети политик является более сложным, так как требует прогнозирования качества перемещения. AlphaGo Zero улучшила это, обучив сеть политики на оценках качества перемещения, сгенерированных алгоритмом поиска во время развертывания. Со временем сеть политик научится оценивать качество перемещения на несколько шагов вперед.

И AlphaGo, и AlphaGo Zero используют поиск по дереву Монте-Карло (MCTS) в качестве алгоритма планирования. MCTS выполняет развертывание для сбора информации о значениях последовательности перемещений и неопределенности. Алгоритм поиска использует политику и сети ценности для оценки состояния доски и оценки качества ходов. Благодаря самообучению с подкреплением обе системы улучшают оценки качества своих сетей и становятся более сильными игроками в го.

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

 

Автоматическое дифференцирование (DL 26)



Автоматическое дифференцирование (DL 26)

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

Zygote предлагает «градиентную» функцию, которая принимает другую функцию и входные аргументы и автоматически вычисляет градиент в этих точках. Например, учитывая функцию и входные данные (1, 2, -1), Zygote может вычислить градиент как (22, 4, -12). Эта функция удобна, но похожа на то, что вы могли реализовать в Project Zero.

Сила автоматического дифференцирования заключается в его способности вычислять градиенты для более сложных функций. Например, давайте рассмотрим функцию для вычисления n-го элемента последовательности Фибоначчи. Используя функцию градиента Zygote, мы можем вычислить градиент этой функции Фибоначчи. На входах (0, 1, 12) частная производная по «а» равна 89, а по «b» — 144. Однако частной производной по «n» нет, поскольку это не непрерывная переменная в этой функции.

Чтобы понять, как Zygote вычисляет градиент для таких функций, мы можем изучить автоматическое дифференцирование в обратном режиме. В обратном режиме AD граф вычислений строится по мере выполнения функции, а частные производные передаются обратно по графу. Для этого числовые значения переменных заменяются объектами, которые хранят как значение, так и дополнительную информацию для вычисления производной.

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

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

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

Таким образом, автоматическое дифференцирование в обратном режиме, поддерживаемое такими библиотеками, как Zygote в Julia, позволяет нам эффективно вычислять градиенты для функций. Построив граф вычислений и распространив по нему производные, мы можем автоматизировать процесс вычисления градиентов, сделав его пригодным для глубокого обучения и других сложных приложений.

 

Coursera Neural Networks for Machine Learning — Джеффри Хинтон — Лекция 1.1 — Зачем нам нужно машинное обучение



Лекция 1.1 — Зачем нам машинное обучение [Нейронные сети для машинного обучения]

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

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

Другой пример — обнаружение мошеннических транзакций по кредитным картам. Традиционные системы, основанные на правилах, с трудом улавливают хитросплетения мошеннических моделей, поскольку требуют объединения множества ненадежных правил, которые постоянно меняются со временем. Машинное обучение предлагает альтернативный подход, используя большое количество примеров, которые определяют правильные выходные данные для заданных входных данных. Алгоритм обучения обрабатывает эти примеры для создания программы, которая эффективно решает задачу. Полученная программа может отличаться от традиционных программ ручной работы, потенциально содержащих миллионы взвешенных чисел. Однако при правильной реализации он может хорошо обобщаться для новых случаев и адаптироваться к изменяющимся данным путем переобучения на обновленной информации.

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

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

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

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

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

 

Лекция 1.2 — Что такое нейронные сети



Лекция 1.2 — Что такое нейронные сети [Нейронные сети для машинного обучения]

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

Есть несколько причин для изучения того, как сети нейронов могут выполнять вычисления. Во-первых, это помогает нам понять работу мозга. Хотя проведение экспериментов непосредственно на мозге кажется логичным, это сложный и деликатный орган, плохо выдерживающий манипуляции. Таким образом, компьютерное моделирование необходимо для понимания эмпирических результатов.

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

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

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

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

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

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

Тогда возникает вопрос: как синапсы решают, как изменить свою силу? Каковы правила их адаптации? Это важные соображения.

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

Мозг состоит приблизительно из 10^11 нейронов, каждый из которых имеет около 10^4 синаптических весов. Следовательно, мозг содержит огромное количество синаптических весов, многие из которых способствуют текущим вычислениям в течение миллисекунд. Это обеспечивает мозгу более высокую пропускную способность для хранения знаний по сравнению с современными рабочими станциями.

Еще одним интригующим аспектом мозга является его модульность. Различные области коры в конечном итоге специализируются на различных функциях. Входные данные от органов чувств генетически направляются в определенные области, влияя на их возможную функциональность. Локальное повреждение головного мозга приводит к специфическим последствиям, таким как потеря понимания языка или распознавания объектов. Гибкость мозга проявляется в том факте, что функции могут перемещаться в другие части мозга в ответ на раннее повреждение. Это говорит о том, что кора содержит гибкий универсальный алгоритм обучения, который может адаптироваться к конкретным задачам на основе опыта.

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

 

Лекция 1.3 — Некоторые простые модели нейронов



Лекция 1.3 — Некоторые простые модели нейронов [Нейронные сети для машинного обучения]

Я опишу несколько простых моделей нейронов, включая линейные нейроны, пороговые нейроны и более сложные модели. Эти модели проще, чем настоящие нейроны, но все же позволяют нам создавать нейронные сети для машинного обучения. При понимании сложных систем нам необходимо упростить и идеализировать их, чтобы понять, как они работают. Это включает в себя удаление несущественных деталей и применение математики и аналогий. Хотя важно не упускать из виду существенные свойства, может быть полезно изучить модели, которые, как известно, неверны, но все же полезны на практике. Например, нейронные сети часто используют нейроны, которые передают реальные значения вместо дискретных всплесков, хотя настоящие нейроны коры головного мозга ведут себя по-другому.

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

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

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

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


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

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

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

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

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

 

Лекция 1.4 — Простой пример обучения



Лекция 1.4 — Простой пример обучения [Нейронные сети для машинного обучения]

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

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

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

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

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

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

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

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

Причина обращения: