эпоха обучения нейронной сети это
Эпоха обучения нейронной сети это
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 20.9.2011
Репутация: нет
Всего: нет
Опытный
Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006
Репутация: нет
Всего: 8
Просмотр тестовой выборки после каждой эпохи необязателен. Зависит от целей и задач.
Почему идёт измерение по эпохам? Потому, что существуют (и могут использоваться) такие индикаторы обученности нейросети, как средняя или суммарная ошибка на обучающей выборке. И потому, что существуют алгоритмы обучения сети по полной выборке (так называемое batch-обучение). Но можно выводить на экран или на график и ошибку для одного отдельного примера, и ошибку по некоторой подвыборке. Я, например, при баловстве с задачей MNIST выводил график ошибки обучения по подвыборкам из 1000 примеров (т.е. суммарная ошибка по очередной тысяче примеров формировала новую точку на графике).
Соответственно, нейронная сеть берет на вход два числа и должна на выходе дать другое число — ответ. Теперь о самих нейронных сетях. Что такое нейронная сеть?Нейронная сеть — это последовательность нейронов, соединенных между собой синапсами. Структура нейронной сети пришла в мир программирования прямиком из биологии. Благодаря такой структуре, машина обретает способность анализировать и даже запоминать различную информацию. Нейронные сети также способны не только анализировать входящую информацию, но и воспроизводить ее из своей памяти. Заинтересовавшимся обязательно к просмотру 2 видео из TED Talks: Видео 1, Видео 2). Другими словами, нейросеть это машинная интерпретация мозга человека, в котором находятся миллионы нейронов передающих информацию в виде электрических импульсов. Какие бывают нейронные сети?Пока что мы будем рассматривать примеры на самом базовом типе нейронных сетей — это сеть прямого распространения (далее СПР). Также в последующих статьях я введу больше понятий и расскажу вам о рекуррентных нейронных сетях. СПР как вытекает из названия это сеть с последовательным соединением нейронных слоев, в ней информация всегда идет только в одном направлении. Для чего нужны нейронные сети?Нейронные сети используются для решения сложных задач, которые требуют аналитических вычислений подобных тем, что делает человеческий мозг. Самыми распространенными применениями нейронных сетей является: Классификация — распределение данных по параметрам. Например, на вход дается набор людей и нужно решить, кому из них давать кредит, а кому нет. Эту работу может сделать нейронная сеть, анализируя такую информацию как: возраст, платежеспособность, кредитная история и тд. Предсказание — возможность предсказывать следующий шаг. Например, рост или падение акций, основываясь на ситуации на фондовом рынке. Распознавание — в настоящее время, самое широкое применение нейронных сетей. Используется в Google, когда вы ищете фото или в камерах телефонов, когда оно определяет положение вашего лица и выделяет его и многое другое. Теперь, чтобы понять, как же работают нейронные сети, давайте взглянем на ее составляющие и их параметры. Что такое нейрон?Нейрон — это вычислительная единица, которая получает информацию, производит над ней простые вычисления и передает ее дальше. Они делятся на три основных типа: входной (синий), скрытый (красный) и выходной (зеленый). Также есть нейрон смещения и контекстный нейрон о которых мы поговорим в следующей статье. В том случае, когда нейросеть состоит из большого количества нейронов, вводят термин слоя. Соответственно, есть входной слой, который получает информацию, n скрытых слоев (обычно их не больше 3), которые ее обрабатывают и выходной слой, который выводит результат. У каждого из нейронов есть 2 основных параметра: входные данные (input data) и выходные данные (output data). В случае входного нейрона: input=output. В остальных, в поле input попадает суммарная информация всех нейронов с предыдущего слоя, после чего, она нормализуется, с помощью функции активации (пока что просто представим ее f(x)) и попадает в поле output. Важно помнить, что нейроны оперируют числами в диапазоне [0,1] или [-1,1]. А как же, вы спросите, тогда обрабатывать числа, которые выходят из данного диапазона? На данном этапе, самый простой ответ — это разделить 1 на это число. Этот процесс называется нормализацией, и он очень часто используется в нейронных сетях. Подробнее об этом чуть позже. Что такое синапс?Синапс это связь между двумя нейронами. У синапсов есть 1 параметр — вес. Благодаря ему, входная информация изменяется, когда передается от одного нейрона к другому. Допустим, есть 3 нейрона, которые передают информацию следующему. Тогда у нас есть 3 веса, соответствующие каждому из этих нейронов. У того нейрона, у которого вес будет больше, та информация и будет доминирующей в следующем нейроне (пример — смешение цветов). На самом деле, совокупность весов нейронной сети или матрица весов — это своеобразный мозг всей системы. Именно благодаря этим весам, входная информация обрабатывается и превращается в результат. Важно помнить, что во время инициализации нейронной сети, веса расставляются в случайном порядке. Как работает нейронная сеть?В данном примере изображена часть нейронной сети, где буквами I обозначены входные нейроны, буквой H — скрытый нейрон, а буквой w — веса. Из формулы видно, что входная информация — это сумма всех входных данных, умноженных на соответствующие им веса. Тогда дадим на вход 1 и 0. Пусть w1=0.4 и w2 = 0.7 Входные данные нейрона Н1 будут следующими: 1*0.4+0*0.7=0.4. Теперь когда у нас есть входные данные, мы можем получить выходные данные, подставив входное значение в функцию активации (подробнее о ней далее). Теперь, когда у нас есть выходные данные, мы передаем их дальше. И так, мы повторяем для всех слоев, пока не дойдем до выходного нейрона. Запустив такую сеть в первый раз мы увидим, что ответ далек от правильно, потому что сеть не натренирована. Чтобы улучшить результаты мы будем ее тренировать. Но прежде чем узнать как это делать, давайте введем несколько терминов и свойств нейронной сети. Функция активацииФункция активации — это способ нормализации входных данных (мы уже говорили об этом ранее). То есть, если на входе у вас будет большое число, пропустив его через функцию активации, вы получите выход в нужном вам диапазоне. Функций активации достаточно много поэтому мы рассмотрим самые основные: Линейная, Сигмоид (Логистическая) и Гиперболический тангенс. Главные их отличия — это диапазон значений. Эта функция почти никогда не используется, за исключением случаев, когда нужно протестировать нейронную сеть или передать значение без преобразований. Это самая распространенная функция активации, ее диапазон значений [0,1]. Именно на ней показано большинство примеров в сети, также ее иногда называют логистической функцией. Соответственно, если в вашем случае присутствуют отрицательные значения (например, акции могут идти не только вверх, но и вниз), то вам понадобиться функция которая захватывает и отрицательные значения. Имеет смысл использовать гиперболический тангенс, только тогда, когда ваши значения могут быть и отрицательными, и положительными, так как диапазон функции [-1,1]. Использовать эту функцию только с положительными значениями нецелесообразно так как это значительно ухудшит результаты вашей нейросети. Тренировочный сетТренировочный сет — это последовательность данных, которыми оперирует нейронная сеть. В нашем случае исключающего или (xor) у нас всего 4 разных исхода то есть у нас будет 4 тренировочных сета: 0xor0=0, 0xor1=1, 1xor0=1,1xor1=0. ИтерацияЭто своеобразный счетчик, который увеличивается каждый раз, когда нейронная сеть проходит один тренировочный сет. Другими словами, это общее количество тренировочных сетов пройденных нейронной сетью. ЭпохаПри инициализации нейронной сети эта величина устанавливается в 0 и имеет потолок, задаваемый вручную. Чем больше эпоха, тем лучше натренирована сеть и соответственно, ее результат. Эпоха увеличивается каждый раз, когда мы проходим весь набор тренировочных сетов, в нашем случае, 4 сетов или 4 итераций. Важно не путать итерацию с эпохой и понимать последовательность их инкремента. Сначала n ОшибкаОшибка — это процентная величина, отражающая расхождение между ожидаемым и полученным ответами. Ошибка формируется каждую эпоху и должна идти на спад. Если этого не происходит, значит, вы что-то делаете не так. Ошибку можно вычислить разными путями, но мы рассмотрим лишь три основных способа: Mean Squared Error (далее MSE), Root MSE и Arctan. Здесь нет какого-либо ограничения на использование, как в функции активации, и вы вольны выбрать любой метод, который будет приносить вам наилучший результат. Стоит лишь учитывать, что каждый метод считает ошибки по разному. У Arctan, ошибка, почти всегда, будет больше, так как он работает по принципу: чем больше разница, тем больше ошибка. У Root MSE будет наименьшая ошибка, поэтому, чаще всего, используют MSE, которая сохраняет баланс в вычислении ошибки. Принцип подсчета ошибки во всех случаях одинаков. За каждый сет, мы считаем ошибку, отняв от идеального ответа, полученный. Далее, либо возводим в квадрат, либо вычисляем квадратный тангенс из этой разности, после чего полученное число делим на количество сетов. ЗадачаТеперь, чтобы проверить себя, подсчитайте результат, данной нейронной сети, используя сигмоид, и ее ошибку, используя MSE. H1input = 1*0.45+0*-0.12=0.45 H2input = 1*0.78+0*0.13=0.78 O1input = 0.61*1.5+0.69*-2.3=-0.672 Результат — 0.33, ошибка — 45%. Большое спасибо за внимание! Надеюсь, что данная статья смогла помочь вам в изучении нейронных сетей. В следующей статье, я расскажу о нейронах смещения и о том, как тренировать нейронную сеть, используя метод обратного распространения и градиентного спуска. В чем разница между партией и эпохой в нейронной сети?Дата публикации 2018-07-20 В этом посте вы обнаружите разницу между партиями и эпохами в стохастическом градиентном спуске. Прочитав этот пост, вы узнаете: обзорЭтот пост разделен на пять частей; они есть: Стохастический градиентный спускЗадача алгоритма состоит в том, чтобы найти набор внутренних параметров модели, которые хорошо работают против некоторого показателя производительности, такого как логарифмическая потеря или среднеквадратическая ошибка. Алгоритм является итеративным. Это означает, что процесс поиска происходит в несколько отдельных этапов, каждый шаг, мы надеемся, немного улучшает параметры модели. Каждый шаг включает использование модели с текущим набором внутренних параметров для прогнозирования некоторых выборок, сравнение прогнозов с реальными ожидаемыми результатами, вычисление ошибки и использование ошибки для обновления внутренних параметров модели. Эта процедура обновления отличается для разных алгоритмов, но в случае искусственных нейронных сетейобратное распространениеалгоритм обновления используется. Прежде чем мы погрузимся в партии и эпохи, давайте взглянем на то, что мы подразумеваем под образцом. Узнайте больше о градиентном спуске здесь: Что такое образец?Образец представляет собой одну строку данных. Он содержит входные данные, которые вводятся в алгоритм, и выходные данные, которые используются для сравнения с прогнозом и вычисления ошибки. Обучающий набор данных состоит из множества строк данных, например, много образцов. Образец также может называться экземпляром, наблюдением, входным вектором или вектором признаков. Теперь, когда мы знаем, что такое образец, давайте определим партию. Что такое партия?Думайте о пакете как о цикле for, повторяющем одну или несколько выборок и делающем прогнозы. В конце пакета прогнозы сравниваются с ожидаемыми выходными переменными, и вычисляется ошибка. Исходя из этой ошибки, алгоритм обновления используется для улучшения модели, например, двигаться вниз по градиенту ошибки. Набор обучающих данных может быть разделен на одну или несколько партий. Когда все обучающие образцы используются для создания одной партии, алгоритм обучения называется спуском градиента партии. Когда размер пакета составляет одну выборку, алгоритм обучения называется стохастическим градиентным спуском. Когда размер пакета больше, чем одна выборка и меньше, чем размер обучающего набора данных, алгоритм обучения называется спуском градиента мини-пакета. В случае мини-пакетного градиентного спуска популярные размеры партии включают 32, 64 и 128 образцов. Вы можете увидеть эти значения, используемые в моделях в литературе и учебниках. Что если набор данных не делится равномерно по размеру пакета? Это может случаться и часто случается при обучении модели. Это просто означает, что в последней партии меньше образцов, чем в других партиях. Кроме того, вы можете удалить некоторые выборки из набора данных или изменить размер пакета так, чтобы количество выборок в наборе данных делилось равномерно на размер пакета. Подробнее о различиях между этими вариациями градиентного спуска читайте в посте: Пакет включает обновление модели с использованием образцов; Далее, давайте посмотрим на эпоху. Что такое эпоха?Одна эпоха означает, что у каждой выборки в наборе обучающих данных была возможность обновить внутренние параметры модели. Эпоха состоит из одной или нескольких партий. Например, как указано выше, эпоха, в которой есть одна партия, называется алгоритмом обучения пакетного градиентного спуска. Вы можете придумать цикл for для числа эпох, где каждый цикл проходит через набор обучающих данных. В этом цикле for находится еще один вложенный цикл for, который выполняет итерацию для каждой партии выборок, где одна партия имеет указанное количество выборок «размера партии». Количество эпох традиционно велико, часто сотни или тысячи, что позволяет алгоритму обучения работать до тех пор, пока ошибка модели не будет сведена к минимуму. Вы можете увидеть примеры количества эпох в литературе и в учебных пособиях 10, 100, 500, 1000 и более. Обычно создаются линейные графики, которые показывают эпохи вдоль оси X как время и ошибку или навык модели на оси Y. Эти графики иногда называют кривыми обучения. Эти графики могут помочь диагностировать, является ли модель переученной, недостаточно изученной или подходит ли она для набора данных обучения. Подробнее о диагностике с помощью кривых обучения в сетях LSTM см. Пост: Если это все еще не ясно, давайте посмотрим на различия между партиями и эпохами. В чем разница между партией и эпохой?Размер партии должен быть больше или равен одному и меньше или равен количеству выборок в наборе обучающих данных. Количество эпох может быть установлено в целочисленное значение от одного до бесконечности. Вы можете запускать алгоритм сколько угодно и даже останавливать его, используя другие критерии, помимо фиксированного количества эпох, таких как изменение (или отсутствие изменения) ошибки модели со временем. Они оба являются целочисленными значениями и являются гиперпараметрами для алгоритма обучения, например параметры для процесса обучения, а не внутренние параметры модели, найденные в процессе обучения. Вы должны указать размер пакета и количество эпох для алгоритма обучения. Не существует волшебных правил для настройки этих параметров. Вы должны попробовать разные значения и посмотреть, что лучше всего подходит для вашей проблемы. Работал ПримерНаконец, давайте сделаем это с небольшим примером. Предположим, у вас есть набор данных с 200 выборками (строками данных), и вы выбираете размер пакета 5 и 1000 эпох. Это означает, что набор данных будет разделен на 40 партий, каждая с пятью выборками. Вес модели будет обновляться после каждой партии из пяти образцов. Это также означает, что одна эпоха будет включать 40 партий или 40 обновлений модели. При 1000 эпохах модель будет экспонироваться или проходить через весь набор данных 1000 раз. Это всего 40 000 партий за весь учебный процесс. Дальнейшее чтениеЭтот раздел предоставляет больше ресурсов по теме, если вы хотите углубиться. РезюмеВ этом посте вы обнаружили разницу между партиями и эпохами в стохастическом градиентном спуске. В частности, вы узнали: У вас есть вопросы?
|