Введение: Искусственный интеллект — это область информатики, которая занимается разработкой интеллектуальных компьютерных систем, то есть систем, обладающих возможностями, которые мы традиционно связываем с человеческим разумом, — понимание языка, обучение, способность рассуждать, решать проблемы и т. д. Грубо говоря, написание любой программы, решающей более-менее сложные задачи (даже если эта программа целиком состоит из if’ов) – это создание искусственного интеллекта. Машинное обучение – класс методов искусственного интеллекта, характерной чертой которых является не прямое решение задачи, а обучение за счёт применения решений множества сходных задач. Машинное обучение входит в понятие искусственного интеллекта. А вот наоборот не работает: т.е. искусственный интеллект - понятие гораздо более общее, чем машинное обучение. Нейронная сеть или искусственная нейронная сеть (НС или ИНС) — математическая модель, а также её программное или аппаратное воплощение, построенная по принципу организации и функционирования биологических нейронных сетей — сетей нервных клеток живого организма. Нейронная сеть - одна из разновидностей моделей машинного обучения. Глубокое обучение – это обучение таких нейронных сетей, у которых много слоёв. Нейронные сети с большим количеством слоёв называются глубинными нейронными сетями. На самом деле, большинство нейросетей, которые находят реальное применение, глубокие, однако можно создать и простейшую нейронную сеть для решения каких-то очень несложных задач (или просто в качестве тренировки) 1 Глава 1 Что такое нейросети? Нейросеть — это тип машинного обучения, при котором компьютерная программа имитирует работу человеческого мозга. Подобно тому, как нейроны в мозге передают сигналы друг другу, в нейросети информацией обмениваются вычислительные элементы. Идею нейронных сетей впервые предложили исследователи из Чикагского университета Уоррен Маккалоу и Уолтер Питтс в 1944 году. Первую обучаемую нейросеть в 1957 году продемонстрировал психолог Корнеллского университета Фрэнк Розенблатт. Она была примитивной (одноуровневой). В 1980-х годах, когда появились более мощные компьютеры для вычислений, исследователи смогли разработать нейросети с двумя и тремя уровнями обучения. Однако возрождение интереса к нейронным сетям и революция в глубоком обучении произошли лишь в последние годы благодаря индустрии компьютерных игр. Современные игры требуют сложных вычислений для обработки большого числа операций. В итоге производители начали выпускать графические процессоры (GPU), которые объединяют тысячи относительно простых вычислительных ядер на одном чипе. Исследователи вскоре поняли, что архитектура графического процессора очень похожа на архитектуру нейросети. Современные GPU позволили развивать «глубокое обучение» — повышать глубину слоев нейросети. Именно благодаря ему появились самообучаемые нейросети, которые не требуют специальной настройки, а самостоятельно обрабатывают входящую информацию 2 Глава 2 Как они работают? Каждая нейронная сеть состоит из искусственных нейронов, которые имитируют работу человеческих. Это программные модули или узлы, которые взаимодействуют и обмениваются информацией для решения задачи. Базовая нейронная сеть содержит три слоя искусственных нейронов: • входной — обрабатывает информацию извне, анализирует или классифицирует ее и передает на следующий слой; • скрытый (их может быть несколько) — анализирует выходные данные предыдущего слоя, обрабатывает их и передает на следующий • выходной — выдает окончательный результат после обработки всех данных.; Глубокие нейронные сети отличаются тем, что искусственные нейроны в них связаны друг с другом, а каждой такой связи присваивается определенный вес, который отражает ее значимость. Кроме того, связь между нейронами может быть «упреждающей». Это означает, что данные проходят через них только в одном направлении. Такое происходит, если значение «веса» соединения ниже заданного. При обучении нейронной сети все ее «веса» изначально задаются случайными значениями. Обучающие данные подаются на нижний, или входной, слой. Затем они проходят через последующие слои, пока не достигают выходного. Во время обучения «веса» и пороговые значения постоянно корректируются до тех пор, пока данные обучения не будут постоянно давать одинаковые результаты. Эти «веса» помогают определить важность той или иной переменной во входных данных. При прохождении каждого слоя входные данные 3 Рис. 2.1. Схема работы нейросетей умножаются на их «веса», а затем суммируются. Если получившееся значение выше заданного порога, то нейрон активируется и передает данные на следующий уровень. Приведем пример — попросим нейросеть ответить на вопрос, стоит ли заняться серфингом (варианты ответа «да» — 1 и «нет» — 0. Предположим, что на это решение (y-hat) влияют три фактора. Сформулируем их в виде вопросов: • хорошие ли волны? («да» — 1 и «нет» — 0); • свободен ли пляж? («да» — 1 и «нет» — 0); • фиксировались ли в последнее время нападения акул? («да» — 0 и «нет» — 1). Затем предположим следующее, используя входные данные: • X1 =1, так как волны есть; • X2 = 0, так как на пляже нет толпы; • X3 = 1, так как нападений акул не фиксировалось. Теперь нам нужно присвоить этим значениям некоторые «веса», чтобы определить их важность. Расположим приоритеты следующим образом: • W 1 = 5, так как большие волны на этом пляже возникают нечасто; 4 • W 2 = 2, так как вы не боитесь толпы; • W 3 = 4, так как вы боитесь акул. За пороговое значение мы примем 3, соответственно, значение смещения составит –3. Теперь можно начать подставлять значения в формулу, чтобы получить желаемый результат: Y − hat = (1 ∗ 5) + (0 ∗ 2) + (1 ∗ 4)˘3 = 6 Поскольку полученное значение выше 3, то решение о серфинге будет положительным. Задачи, решаемые с помощью нейросетей, можно разделить на следующие типы: • регрессии • прогнозирования • кластеризации • классификации • интерполирования и аппроксимации данных и рядов • распознавания образов 5 Глава 3 Метрики, использующиеся при решении задач с помощью нейросетей • Accuracy Интуитивно понятной, очевидной и почти неиспользуемой метрикой является accuracy — доля правильных ответов алгоритма: , где positive - количество правильных ответов алaccuracy = positive all горитма, all - общее количество ответов. Accuracy — это показатель, который описывает общую точность предсказания модели по всем классам. Это особенно полезно, когда каждый класс одинаково важен. Он рассчитывается как отношение количества правильных прогнозов к их общему количеству. Стоит учесть, что метрика accuracy может быть обманчивой. Один из таких случаев — это несбалансированные данные. Предположим, у нас есть всего 600 единиц данных, из которых 550 относятся к классу Positive и только 50 — к Negative. Поскольку большинство семплов принадлежит к одному классу, accuracy для этого класса будет выше, чем для другого. Если модель сделала 530 правильных прогнозов из 550 для класса Positive, по сравнению с 5 из 50 для Negative, то общая accuracy равна (530 + 5) / 600 = 0.8917. Это означает, что точность модели составляет 89.17 процентов. Полагаясь на это значение, вы можете подумать, что для любой выборки (независимо от ее класса) модель сделает правильный прогноз в 89.17 процентах случаев. Это неверно, так как для класса Negative модель работает очень плохо. • Кросс-энтропия (или логарифмическая функция потерь – log loss) 6 Кросс-энтропия измеряет расхождение между двумя вероятностными распределениями. Если кросс-энтропия велика, это означает, что разница между двумя распределениями велика, а если кросс-энтропия мала, то распределения похожи друг на друга. Обычно применняется к задачам классификации с двумя классами: 0 и 1. Кросс-энтропия определяется как: P H(P, Q) = − P (x)logQ(x), где P – распределение истинных ответов, а Q – распределение вероятностей прогнозов модели. После логарифмирования правдоподобия получим, что его максимизация эквивалентна минимизации последнего записанного выражения. Именно его и называют «логистической функции ошибки». Для задачи бинарной классификации, в которой алгоритм должен выдать вероятность принадлежности классу 1, она логична ровно настолько, насколько логична MSE (описана далее) в задаче линейной регрессии с нормальным шумом (поскольку обе функции ошибки выводятся из метода максимального правдоподобия). Рис. 3.1. logloss-ошибка на одном объекте Отметим неприятное свойство: если для объекта 1-го класса мы предсказываем нулевую вероятность принадлежности к этому классу или, наоборот, для объекта 0-го – единичную вероятность принадлежности к классу 1, то ошибка равна бесконечности. Таким образом, грубая ошиб7 ка на одном объекте сразу делает алгоритм бесполезным. На практике часто logloss ограничивают каким-то большим числом (чтобы не связываться с бесконечностями). Далее, прежде чем перейти к изучению метрик качества, введём некоторые базовые понятия, которые нам в этом помогут. Для этого рассмотрим рисунок ниже: Рис. 3.2. Линейная регрессия Наклонная прямая представляет собой линию регрессии с переменной, на которой расположены точки, соответствующие предсказанным значениям выходной переменной ȳ (кружки синего цвета). Оранжевые 8 кружки представляют фактические (наблюдаемые) значения y. Расстояния между ними и линией регрессии — это ошибка предсказания модели y− ȳ (невязка, остатки). Именно с её использованием вычисляются все приведённые в статье меры качества. Горизонтальная линия представляет собой модель простого среднего, где коэффициент при независимой переменной x, равен нулю, и остаётся только свободный член b, который становится равным среднему арифметическому фактических значений выходной переменной, т.е b = ȳ. Очевидно, что такая модель для любого значения входной переменной будет выдавать одно и то же значение выходной — ȳ. В линейной регрессии такая модель рассматривается как «бесполезная», хуже которой работает только «случайный угадыватель». Однако, она используется для оценки, насколько дисперсия фактических значений y относительно линии среднего, больше, чем относительно линии регрессии с переменной, т.е. насколько модель с переменной лучше «бесполезной». • Mean Squared Error Среднеквадратичная ошибка (MSE) — одна из основных функций расчёта отклонения. Для каждой точки вычисляется квадрат отклонения, после чего полученные значения суммируются и делятся на общее количество точек. Чем ближе полученное значение к нулю, тем точнее наша модель. Данный метод расчёта в значительной мере чувствителен к выбросам в выборке, или к выборкам где разброс значений очень большой. В основном, данная функция применяется для переменных, распределение которых близко к распределению Гаусса. • Mean Absolute Error Средняя абсолютная ошибка (MAE) – это усреднённая сумма модулей разницы между реальным и предсказанным значениями. MAE во многом похожа на MSE, но она отличается меньшей чувствительностью к выбросам значений (так как не берётся квадрат отклонения). Эти обе функции потерь используются для решения регрессионных задач. Далее по мере разбора методов, задач и сфер применения мы столкнемся с ошибками и других видов. 9 Глава 4 Нейроны, функции активации Нейрон — это вычислительная единица, которая получает информацию, производит над ней простые вычисления и передает ее дальше. Они делятся на три основных типа: входной (синий), скрытый (красный) и выходной (зеленый). Также есть нейрон смещения и контекстный нейрон. В том случае, когда нейросеть состоит из большого количества нейронов, вводят термин слоя. Соответственно, есть входной слой, который получает информацию, n скрытых слоев (обычно их не больше 3), которые ее обрабатывают и выходной слой, который выводит результат. У каждого из нейронов есть 2 основных параметра: входные данные (input data) и выходные данные (output data). В случае входного нейрона: input=output. В остальных, в поле input попадает суммарная информация всех нейронов с предыдущего слоя, после чего, она нормализуется, с помощью функции активации (пока что просто представим ее f(x)) и попадает в поле output. Синапс — это связь между двумя нейронами. У синапсов один параметр — вес. Благодаря ему, входная информация изменяется, когда передается от одного нейрона к другому. Пример: есть 3 нейрона, которые передают информацию следующему. Тогда у нас есть 3 веса, соответствующие каждому из этих нейронов. У того нейрона, у которого вес будет больше, та информация и будет доминирующей в следующем нейрон. На самом деле, совокупность весов нейронной сети или матрица весов — это своеобразный мозг всей системы. Именно благодаря этим весам, входная информация обрабатывается и превращается в результат. Функция активации — это способ нормализации входных данных (мы уже говорили об этом ранее). То есть, если на входе у вас будет большое число, пропустив его через функцию активации, вы получите выход в нужном вам диапазоне. Функций активации достаточно много поэтому мы рассмотрим самые основные: Линейная, Сигмоид (Логистическая) и 10 Гиперболический тангенс. Главные их отличия — это диапазон значений. • Линейная функция Рис. 4.1. Линейная функция активации Эта функция почти никогда не используется, за исключением случаев, когда нужно протестировать нейронную сеть или передать значение без преобразований. • Сигмоид Рис. 4.2. Сигмоид - функция активации Это самая распространенная функция активации, ее диапазон значений [0,1]. Именно на ней показано большинство примеров в сети, также ее иногда называют логистической функцией. Соответственно, если в вашем случае присутствуют отрицательные значения (например, акции могут идти не только вверх, но и вниз), то вам понадобиться функция которая захватывает и отрицательные значения. • Гиперболический тангенс Имеет смысл использовать гиперболический тангенс, только тогда, когда ваши значения могут быть и отрицательными, и положительными, так как диапазон функции [-1,1]. Использовать эту функцию только с 11 Рис. 4.3. Гиперболический тангенс - функция активации положительными значениями нецелесообразно так как это значительно ухудшит результаты вашей нейросети. Нейрон смещения или bias нейрон — это вид нейронов, используемый в большинстве нейросетей. Особенность этого типа нейронов заключается в том, что его вход и выход всегда равняются 1 и они никогда не имеют входных синапсов. Нейроны смещения могут, либо присутствовать в нейронной сети по одному на слое, либо полностью отсутствоватьт. Соединения у нейронов смещения такие же, как у обычных нейронов — со всеми нейронами следующего уровня, за исключением того, что синапсов между двумя bias нейронами быть не может. Следовательно, их можно размещать на входном слое и всех скрытых слоях, но никак не на выходном слое, так как им попросту не с чем будет формировать связь. Нейрон смещения нужен для того, чтобы иметь возможность получать выходной результат, путем сдвига графика функции активации вправо или влево. 12 Глава 5 Градиентный спуск Градиентный спуск - это способ нахождения локального минимума или максимума функции с помощью движения вдоль градиента. Построим график, где по оси х будут значения веса нейрона(w) а по оси у — ошибка соответствующая этому весу (e). Рис. 5.1. График для градиента Посмотрев на этот график, мы поймем, что график функция f(w) является зависимостью ошибки от выбранного веса. На этом графике нас интересует глобальный минимум — точка (w2,e2) или, иными словами, то место где график подходит ближе всего к оси х. Эта точка будет означать, что выбрав вес w2 мы получим самую маленькую ошибку — e2 и как следствие, самый лучший результат из всех возможных. Найти же эту точку нам поможет метод градиентного спуска (желтым на графике обозначен градиент). Соответственно у каждого веса в нейросети будет свой график и градиент и у каждого надо найти глобальный минимум. Градиент — это вектор который определяет крутизну склона и указывает его направление относительно какой либо из точек на поверхности или графике. Чтобы найти градиент нужно взять производную от графика по данной точке (как это и показано на графике). 13 Глава 6 Обучение нейросетей Существует три споба обучения нейронных сетей: • Обучение с учителем — это тип тренировок, присущий таким проблемам как регрессия и классификация. Иными словами здесь вы выступаете в роли учителя а НС в роли ученика. Вы предоставляете входные данные и желаемый результат, то есть ученик посмотрев на входные данные поймет, что нужно стремиться к тому результату который вы ему предоставили. • Обучение без учителя — этот тип обучения встречается не так часто. Здесь нет учителя, поэтому сеть не получает желаемый результат или же их количество очень мало. В основном такой вид тренировок присущ НС у которых задача состоит в группировке данных по определенным параметрам. • Обучение с подкреплением (reinforcement learning). Такой способ применим тогда, когда мы можем основываясь на результатах полученных от НС, дать ей оценку. Например мы хотим научить НС играть в PAC-MAN, тогда каждый раз когда НС будет набирать много очков мы будем ее поощрять. Иными словами мы предоставляем НС право найти любой способ достижения цели, до тех пор пока он будет давать хороший результат. Таким способом, сеть начнет понимать чего от нее хотят добиться и пытается найти наилучший способ достижения этой цели без постоянного предоставления данных “учителем”. 14 Глава 7 Архитектуры нейросетей • Первая классическая архитектура — полносвязные нейросети прямого распространения, или Fully Connected Feed-Forward Neural Network, FNN. Преимущества: цель этой нейросети взять какой-то вход, прогнать через себя и на выходе сгенерировать тот же самый вход, то есть чтобы они совпадали. Если мы сможем обучить такую сеть, которая берет вход, прогоняет через себя и генерирует точно такой же выход, это значит, что этих 10 нейронов в середине достаточно для описания этого входа. То есть можно очень значительно уменьшить пространство, сократить объём данных, экономно закодировать любые входные данные в новых терминах 10 векторов. Недостатки: большое количество параметров и затухающие градиенты. • Convolutional Neural Networks, CNN - сверточные нейросети Сверточные нейросети решают 3 основные задачи: классификация, детекция и сегментация. Сверточная нейросеть — это обычная FeedForward сеть специального вида. Сверточные слои обычно рисуются в виде набора плоскостей или объемов. Каждая плоскость на таком рисунке или каждый срез в этом объеме — это, по сути, один нейрон, который реализует операцию свертки. По сути, это матричный фильтр, который трансформирует исходное изображение в какое-то другое, и это можно делать много раз. Слои субдискретизации (Subsampling) просто уменьшают размер изображения: было 200*200 ps, после Subsampling стало 100*100 ps. По сути, усреднение. 15 Полносвязные слои обычно персептрон использует для классификации. Ничего специального в них нет. • Recurrent Neural Networks, RNN - рекуррентные нейросети. Главное отличие их от обычных FNN-сетей в том, что просто появляется циклическая связь. То есть скрытый слой свои же значения отправляет сам на себя на следующем шаге, но есть и принципиальная разница. Про обычную нейросеть Feed-Forward известно, что это универсальный аппроксиматор. Они могут аппроксимировать любую непрерывную функцию. Рекуррентные же нейросети могут вычислить любое вычислимое. По сути рекуррентные нейросети — это обычный компьютер. Задача — его правильно обучить. Потенциально он может считать любой алгоритм. Обычные Feed-Forward сети не обладают никакой памятью, кроме той, которая была получена на этапе обучения, а рекуррентные обладают. За счет того, что содержимое слоя передается нейросети обратно, это как бы ее память. Она хранится во время работы нейросети. 16
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )