Алгоритмы нейронных сетей: Обучение нейронной сети
Введение в RNN Рекуррентные Нейронные Сети для начинающих
Введение в RNN Рекуррентные Нейронные Сети для начинающих
Введение в RNN Рекуррентные Нейронные Сети для начинающих
Рекуррентные нейронные сети (RNN) — это тип нейронных сетей, которые специализируются на обработке последовательностей. Зачастую их используют в таких задачах, как обработка естественного языка (Natural Language Processing) из-за их эффективности в анализе текста. В данной статье мы наглядно рассмотрим рекуррентные нейронные сети, поймем принцип их работы, а также создадим одну сеть в Python, используя numpy.
Зачем нужны рекуррентные нейронные сети
Один из нюансов работы с нейронными сетями (а также CNN) заключается в том, что они работают с предварительно заданными параметрами. Они принимают входные данные с фиксированными размерами и выводят результат, который также является фиксированным. Плюс рекуррентных нейронных сетей, или RNN, в том, что они обеспечивают последовательности с вариативными длинами как для входа, так и для вывода. Вот несколько примеров того, как может выглядеть рекуррентная нейронная сеть:
Входные данные отмечены красным, нейронная сеть RNN — зеленым, а вывод — синим.
Способность обрабатывать последовательности делает рекуррентные нейронные сети RNN весьма полезными. Области использования:
- Машинный перевод (пример Google Translate) выполняется при помощи нейронных сетей с принципом «многие ко многим». Оригинальная последовательность текста подается в рекуррентную нейронную сеть, которая затем создает переведенный текст в качестве результата вывода;
- Анализ настроений часто выполняется при помощи рекуррентных нейронных сетей с принципом «многие к одному». Этот отзыв положительный или отрицательный? Такая постановка является одним из примеров анализа настроений. Анализируемый текст подается нейронную сеть, которая затем создает единственную классификацию вывода. Например — Этот отзыв положительный.
Далее в статье будет показан пример создания рекуррентной нейронной сети по схеме «многие к одному» для анализа настроений.
Создание рекуррентной нейронной сети на примере
Представим, что у нас есть нейронная сеть, которая работает по принципу «многое ко многим«. Входные данные — x
0, х
1, … x
n, а результаты вывода — y
0, y
1, … y
n. Данные x
i и y
i являются векторами и могут быть произвольных размеров.
Рекуррентные нейронные сети RNN работают путем итерированного обновления скрытого состояния h
, которое является вектором, что также может иметь произвольный размер. Стоит учитывать, что на любом заданном этапе t
:
- Следующее скрытое состояние
h
t подсчитывается при помощи предыдущегоh
t — 1 и следующим вводомx
t; - Следующий вывод
y
t подсчитывается при помощиh
t.
Рекуррентная нейронная сеть RNN многие ко многим
Вот что делает нейронную сеть рекуррентной: на каждом шаге она использует один и тот же вес. Говоря точнее, типичная классическая рекуррентная нейронная сеть использует только три набора параметров веса для выполнения требуемых подсчетов:
W
xh используется для всех связокx
t→ h
tW
hh используется для всех связокh
t-1→ h
tW
hy используется для всех связокh
t→ y
t
Для рекуррентной нейронной сети мы также используем два смещения:
b
h добавляется при подсчетеh
tb
y добавляется при подсчетеy
t
Вес будет представлен как матрица, а смещение как вектор. В данном случае рекуррентная нейронная сеть состоит их трех параметров веса и двух смещений.
Следующие уравнения являются компактным представлением всего вышесказанного:
Разбор уравнений лучше не пропускать. Остановитесь на минутку и изучите их внимательно. Помните, что вес — это матрица, а другие переменные являются векторами.
Говоря о весе, мы используем матричное умножение, после чего векторы вносятся в конечный результат. Затем применяется гиперболическая функция в качестве функции активации первого уравнения. Стоит иметь в виду, что другие методы активации, например, сигмоиду, также можно использовать.
Поставление задачи для рекуррентной нейронной сети
К текущему моменту мы смогли реализовать рекуррентную нейронную сеть RNN с нуля. Она должна выполнить простой анализ настроения. В дальнейшем примере мы попросим сеть определить, будет заданная строка нести позитивный или негативный характер.
Вот несколько примеров из небольшого набора данных, который был собран для данной статьи:
Текст | Позитивный? |
Я хороший | Да |
Я плохой | Нет |
Это очень хорошо | Да |
Это неплохо | Да |
Я плохой, а не хороший | Нет |
Я несчастен | Нет |
Это было хорошо | Да |
Я чувствую себя неплохо, мне не грустно | Да |
Составление плана для нейронной сети
В следующем примере будет использована классификация рекуррентной сети «многие к одному». Принцип ее использования напоминает работу схемы «многие ко многим», что была описана ранее. Однако на этот раз будет задействовано только скрытое состояние для одного пункта вывода y
:
Рекуррентная нейронная сеть RNN многие к одному
Каждый x
i будет вектором, представляющим определенное слово из текста. Вывод y
будет вектором, содержащим два числа. Одно представляет позитивное настроение, а второе — негативное. Мы используем функцию Softmax, чтобы превратить эти значения в вероятности, и в конечном счете выберем между позитивным и негативным.
Приступим к созданию нашей рекуррентной нейронной сети.
Предварительная обработка рекуррентной нейронной сети RNN
Упомянутый ранее набор данных состоит из двух словарей Python:
train_data = {
‘good’: True,
‘bad’: False,
# … больше данных
}
test_data = {
‘this is happy’: True,
‘i am good’: True,
# . .. больше данных
}
| train_data = { ‘good’: True, ‘bad’: False, # … больше данных }
test_data = { ‘this is happy’: True, ‘i am good’: True, # … больше данных } |
True = Позитивное, False = Негативное
Для получения данных в удобном формате потребуется сделать определенную предварительную обработку. Для начала необходимо создать словарь в Python из всех слов, которые употребляются в наборе данных:
from data import train_data, test_data
# Создание словаря
vocab = list(set([w for text in train_data.keys() for w in text.split(‘ ‘)]))
vocab_size = len(vocab)
print(‘%d unique words found’ % vocab_size) # найдено 18 уникальных слов
| from data import train_data, test_data
# Создание словаря vocab = list(set([w for text in train_data. keys() for w in text.split(‘ ‘)])) vocab_size = len(vocab)
print(‘%d unique words found’ % vocab_size) # найдено 18 уникальных слов |
vocab
теперь содержит список всех слов, которые употребляются как минимум в одном учебном тексте. Далее присвоим каждому слову из vocab
индекс типа integer
(целое число).
# Назначить индекс каждому слову
word_to_idx = { w: i for i, w in enumerate(vocab) }
idx_to_word = { i: w for i, w in enumerate(vocab) }
print(word_to_idx[‘good’]) # 16 (это может измениться)
print(idx_to_word[0]) # грустно (это может измениться)
| # Назначить индекс каждому слову word_to_idx = { w: i for i, w in enumerate(vocab) } idx_to_word = { i: w for i, w in enumerate(vocab) }
print(word_to_idx[‘good’]) # 16 (это может измениться) print(idx_to_word[0]) # грустно (это может измениться) |
Теперь можно отобразить любое заданное слово при помощи индекса целого числа. Это очень важный пункт, так как:
Напоследок напомним, что каждый ввод x
i для рассматриваемой рекуррентной нейронной сети является вектором. Мы будем использовать веторы, которые представлены в виде унитарного кода. Единица в каждом векторе будет находиться в соответствующем целочисленном индексе слова.
Рекуррентная нейронная сеть не различает слов — только числа.
Так как в словаре 18 уникальных слов, каждый x
i будет 18-мерным унитарным вектором.
Напоследок напомним, что каждый ввод x
i для рассматриваемой рекуррентной нейронной сети является вектором. Мы будем использовать веторы, которые представлены в виде унитарного кода. Единица в каждом векторе будет находиться в соответствующем целочисленном индексе слова.
Так как в словаре 18 уникальных слов, каждый x
i будет 18-мерным унитарным вектором.
import numpy as np
def createInputs(text):
»’
Возвращает массив унитарных векторов
которые представляют слова в введенной строке текста
— текст является строкой string
— унитарный вектор имеет форму (vocab_size, 1)
»’
inputs = []
for w in text. split(‘ ‘):
v = np.zeros((vocab_size, 1))
v[word_to_idx[w]] = 1
inputs.append(v)
return inputs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import numpy as np
def createInputs(text): »’ Возвращает массив унитарных векторов которые представляют слова в введенной строке текста — текст является строкой string — унитарный вектор имеет форму (vocab_size, 1) »’
inputs = [] for w in text.split(‘ ‘): v = np.zeros((vocab_size, 1)) v[word_to_idx[w]] = 1 inputs.append(v)
return inputs |
Мы используем createInputs()
позже для создания входных данных в виде векторов и последующей их передачи в рекуррентную нейронную сеть RNN.
Фаза прямого распространения нейронной сети
Пришло время для создания рекуррентной нейронной сети. Начнем инициализацию с тремя параметрами веса и двумя смещениями.
import numpy as np
from numpy.random import randn
class RNN:
# Классическая рекуррентная нейронная сеть
def __init__(self, input_size, output_size, hidden_size=64):
# Вес
self.Whh = randn(hidden_size, hidden_size) / 1000
self.Wxh = randn(hidden_size, input_size) / 1000
self.Why = randn(output_size, hidden_size) / 1000
# Смещения
self.bh = np.zeros((hidden_size, 1))
self.by = np.zeros((output_size, 1))
| import numpy as np from numpy.random import randn
class RNN: # Классическая рекуррентная нейронная сеть
def __init__(self, input_size, output_size, hidden_size=64): # Вес self. Whh = randn(hidden_size, hidden_size) / 1000 self.Wxh = randn(hidden_size, input_size) / 1000 self.Why = randn(output_size, hidden_size) / 1000
# Смещения self.bh = np.zeros((hidden_size, 1)) self.by = np.zeros((output_size, 1)) |
Обратите внимание: для того, чтобы убрать внутреннюю вариативность весов, мы делим на 1000. Это не самый лучший способ инициализации весов, но он довольно простой, подойдет для новичков и неплохо работает для данного примера.
Для инициализации веса из стандартного нормального распределения мы используем np.random.randn().
Затем мы реализуем прямую передачу рассматриваемой нейронной сети. Помните первые два уравнения, рассматриваемые ранее?
Эти же уравнения, реализованные в коде:
class RNN:
# …
def forward(self, inputs):
»’
Выполнение передачи нейронной сети при помощи входных данных
Возвращение результатов вывода и скрытого состояния
Вывод — это массив одного унитарного вектора с формой (input_size, 1)
»’
h = np. zeros((self.Whh.shape[0], 1))
# Выполнение каждого шага в нейронной сети RNN
for i, x in enumerate(inputs):
h = np.tanh(self.Wxh @ x + self.Whh @ h + self.bh)
# Compute the output
y = self.Why @ h + self.by
return y, h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class RNN: # …
def forward(self, inputs): »’ Выполнение передачи нейронной сети при помощи входных данных Возвращение результатов вывода и скрытого состояния Вывод — это массив одного унитарного вектора с формой (input_size, 1) »’ h = np.zeros((self.Whh.shape[0], 1))
# Выполнение каждого шага в нейронной сети RNN for i, x in enumerate(inputs): h = np. tanh(self.Wxh @ x + self.Whh @ h + self.bh)
# Compute the output y = self.Why @ h + self.by
return y, h |
Довольно просто, не так ли? Обратите внимание на то, что мы инициализировали h
для нулевого вектора в первом шаге, так как у нас нет предыдущего h
, который теперь можно использовать.
Давайте попробуем следующее:
# …
def softmax(xs):
# Применение функции Softmax для входного массива
return np.exp(xs) / sum(np.exp(xs))
# Инициализация нашей рекуррентной нейронной сети RNN
rnn = RNN(vocab_size, 2)
inputs = createInputs(‘i am very good’)
out, h = rnn.forward(inputs)
probs = softmax(out)
print(probs) # [[0.50000095], [0.49999905]]
| # …
def softmax(xs): # Применение функции Softmax для входного массива return np. exp(xs) / sum(np.exp(xs))
# Инициализация нашей рекуррентной нейронной сети RNN rnn = RNN(vocab_size, 2)
inputs = createInputs(‘i am very good’) out, h = rnn.forward(inputs) probs = softmax(out) print(probs) # [[0.50000095], [0.49999905]] |
Наша рекуррентная нейронная сеть работает, однако ее с трудом можно назвать полезной. Давайте исправим этот недочет.
Фаза обратного распространения нейронной сети
Для тренировки рекуррентной нейронной сети будет использована функция потери. Здесь будет использована потеря перекрестной энтропии, которая в большинстве случаев совместима с функцией Softmax. Формула для подсчета:
Здесь p
c является предсказуемой вероятностью рекуррентной нейронной сети для класса correct
(позитивный или негативный). Например, если позитивный текст предсказывается рекуррентной нейронной сетью как позитивный текст на 90%, то потеря составит:
При наличии параметров потери можно натренировать нейронную сеть таким образом, чтобы она использовала градиентный спуск для минимизации потерь. Следовательно, здесь понадобятся градиенты.
Оригиналы всех кодов, которые использованы в данной инструкции, доступны на GitHub.
Готовы? Продолжим!
Параметры рассматриваемой нейронной сети
Параметры данных, которые будут использованы в дальнейшем:
y
— необработанные входные данные нейронной сети;р
— конечная вероятность:р = softmax(y)
;с
— истинная метка определенного образца текста, так называемый «правильный» класс;L
— потеря перекрестной энтропии:L = -ln(p
c)
;W
xh,W
hh иW
hy — три матрицы веса в рассматриваемой нейронной сети;b
h иb
y — два вектора смещения в рассматриваемой рекуррентной нейронной сети RNN.
Установка
Следующим шагом будет настройка фазы прямого распространения. Это необходимо для кеширования отдельных данных, которые будут использоваться в фазе обратного распространения нейронной сети. Параллельно с этим можно будет установить основной скелет для фазы обратного распространения. Это будет выглядеть следующим образом:
class RNN:
# …
def forward(self, inputs):
»’
Выполнение фазы прямого распространения нейронной сети с
использованием введенных данных.
Возврат итоговой выдачи и скрытого состояния.
— Входные данные в массиве однозначного вектора с формой (input_size, 1).
»’
h = np.zeros((self.Whh.shape[0], 1))
self.last_inputs = inputs
self.last_hs = { 0: h }
# Выполнение каждого шага нейронной сети RNN
for i, x in enumerate(inputs):
h = np.tanh(self.Wxh @ x + self.Whh @ h + self.bh)
self.last_hs[i + 1] = h
# Подсчет вывода
y = self. Why @ h + self.by
return y, h
def backprop(self, d_y, learn_rate=2e-2):
»’
Выполнение фазы обратного распространения нейронной сети RNN.
— d_y (dL/dy) имеет форму (output_size, 1).
— learn_rate является вещественным числом float.
»’
pass
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class RNN: # …
def forward(self, inputs): »’ Выполнение фазы прямого распространения нейронной сети с использованием введенных данных. Возврат итоговой выдачи и скрытого состояния. — Входные данные в массиве однозначного вектора с формой (input_size, 1). »’ h = np.zeros((self.Whh.shape[0], 1))
self.last_inputs = inputs self.last_hs = { 0: h }
# Выполнение каждого шага нейронной сети RNN for i, x in enumerate(inputs): h = np.tanh(self.Wxh @ x + self.Whh @ h + self.bh) self.last_hs[i + 1] = h
# Подсчет вывода y = self.Why @ h + self.by
return y, h
def backprop(self, d_y, learn_rate=2e-2): »’ Выполнение фазы обратного распространения нейронной сети RNN. — d_y (dL/dy) имеет форму (output_size, 1). — learn_rate является вещественным числом float. »’ pass |
Градиенты
Настало время математики! Начнем с вычисления
. Что нам известно:
Здесь используется фактическое значение
, а также применяется дифференцирование сложной функции. Результат следующий:
К примеру, если p = [0.2, 0.2, 0.6]
, а корректным классом является с = 0
, то конечным результатом будет значение
= [-0.8, 0.2, 0.6]
. Данное выражение несложно перевести в код:
# Цикл для каждого примера тренировки
for x, y in train_data.items():
inputs = createInputs(x)
target = int(y)
# Прямое распространение
out, _ = rnn.forward(inputs)
probs = softmax(out)
# Создание dL/dy
d_L_d_y = probs
d_L_d_y[target] -= 1
# Обратное распространение
rnn.backprop(d_L_d_y)
| # Цикл для каждого примера тренировки for x, y in train_data.items(): inputs = createInputs(x) target = int(y)
# Прямое распространение out, _ = rnn.forward(inputs) probs = softmax(out)
# Создание dL/dy d_L_d_y = probs d_L_d_y[target] -= 1
# Обратное распространение rnn. backprop(d_L_d_y) |
Отлично. Теперь разберемся с градиентами для W
hy и b
y, которые используются только для перехода конечного скрытого состояния в результат вывода рассматриваемой нейронной сети RNN. Используем следующие данные:
Место нейросетей в Data Science: краткий ликбез и последние тренды
В этой статье мы рассмотрим одно из наиболее популярных сегодня понятий – нейронные сети, которые, фактически, стали «лицом» современного искусственного интеллекта. Как работает этот метод машинного обучения (Machine Learning), почему он стал таким востребованным в 21 веке, что такое глубокие нейросети и чего ждать от них в будущем – читайте в этом материале.
Краткая история нейросетей
Прежде всего, отметим, что нейронные сети – это не единственные методы машинного обучения и искусственного интеллекта. Помимо нейросетей в классе обучения с учителем выделяют методы коррекции и обратного распространения ошибки (backpropagation), а также машину опорных векторов (SVM, Support Vector Machine), применение которой в задаче одноклассовой классификации я описывал в здесь. Еще среди ML-методов различают обучение без учителя (альфа- и гамма-системы подкрепления, метод ближайших соседей), обучение с подкреплением (генетические алгоритмы), частичное, активное, трансиндуктивное, многозадачное и многовариантное обучение, а также бустинг и байесовские алгоритмы [1].
Тем не менее, сегодня именно нейросети считаются наиболее распространенными ML-инструментами. В частности, они широко используются в задачах распознавания образов, классификации, кластеризации, прогнозирования, оптимизации, принятии управленческих решений, анализе и сжатии данных в различных прикладных областях: от медицины до экономики.
История нейросетей в ИТ начинается с 40-х годов прошлого века, когда американские ученые Маккалок, Питтс и Винер описали это понятие в своих трудах о логическом исчислении идей, нервной активности и кибернетике с целью представления сложных биологических процессов в виде математических моделей.
Здесь стоит упомянуть теоретическую базу нейросетей в виде теоремы Колмогорова-Арнольда о представимости непрерывных функций нескольких переменных суперпозицией непрерывных функций одной переменной. Эта теорема была доказана советскими учеными А.Н. Колмогоровым и В.В. Арнольдом в 1957 году, а в 1987 году переложена американским исследователем Хехт–Нильсеном для нейронных сетей. Она показывает, что любая функция многих переменных достаточно общего вида может быть представлена с помощью двухслойной нейронной сети с прямыми полными связями нейронов входного слоя с нейронами скрытого слоя с заранее известными ограниченными функциями активации (например, сигмоидальными) и нейронами выходного слоя с неизвестными функциями активации.
Из этой теоремы следует, что для любой функции многих переменных существует отображающая ее нейросеть фиксированной размерности, при обучении которой могут использоваться три параметра [2]:
- область значений сигмоидальных функций активации нейронов скрытого слоя;
- наклон сигмоид нейронов этого слоя;
- вид функций активации нейронов выходного слоя.
Еще одной ключевой вехой в истории нейросетей стало изобретение перцентрона Фрэнком Розенблаттом в 60-хх гг. XX века. Благодаря успешным результатам использования перцептронов в ограниченном круге задач (прогнозирование погоды, классификация, распознавание рукописного текста), нейросети стали весьма популярны среди ученых по всему миру. Например, в СССР нейросетями занимались в Институте проблем передачи информации ученые научной школы М. М. Бонгарда и А.П. Петрова (1963-1965 гг.). Однако, поскольку существовавшие на то время вычислительные мощности не могли эффективно реализовать теоретические алгоритмы на практике, исследовательский энтузиазм к этим ML-методам временно упал.
Следующая волна интереса к нейросетям началась спустя 20 лет, в 80-х годах прошлого века и, по сути, продолжается до сих пор. Здесь стоит отметить различные вариации сетей Кохонена и Хопфилда, развившиеся в модели глубокого обучения – тенденции, подробнее о которых мы поговорим далее [3].
Что такое нейросети и как они работают
Начнем с классического определения: искусственная нейронная сеть (нейросеть) – это математическая модель с программной или аппаратной реализацией, построенная по принципу организации и функционирования биологических нейронных сетей – нервных клеток живого организма. Нейросеть представляет собой систему соединённых и взаимодействующих между собой простых процессоров (искусственных нейронов), где каждый из них работает только с сигналами, которые он периодически получает и посылает сам другим нейронам [3].
Характерным отличием нейросетей от других вычислительных моделей является их ориентация на биологические принципы, благодаря чему они обладают следующими качествами:
- массовый параллелизм;
- распределённое представление информации и вычисления;
- способность к обучению и обобщению;
- адаптивность;
- свойство контекстуальной обработки информации;
- толерантность к ошибкам;
- низкое энергопотребление.
Вышеперечисленные свойства позволяют использовать нейросети для решения сложных задач с неполными входными данными или отсутствием четко выраженных алгоритмических правил, например, для прогнозирования (погоды, валютного курса, чрезвычайных ситуаций и пр. ), распознавания образов (изображений, видео- и аудио-потоков), классификации, принятия управленческих решений, оптимизации, анализа данных и т.д. Примечательно, что нейросети могут применяться практически в любой области промышленности и искусства, от нефтегазового сектора до музыки.
Как мы уже отметили выше, правила работы нейросетей не программируются, а вырабатываются в процессе обучения, что обеспечивает адаптивность этой ML-модели к изменениям входных сигналов и шуму. Технически обучение нейросети состоит в нахождении коэффициентов связей между нейронами, при этом сеть способна выявлять сложные зависимости между входными данными и выходными, а также выполнять обобщение [3].
Типовая нейросеть состоит из трех компонентов (рис. 1):
- входной слой, нейроны которого принимают исходный вектор значений, кодирующий входной сигнал и передают его на последующий слой, усилив или ослабив;
- скрытые (промежуточные) слои, которые выполняют основные вычислительные операции;
- выходной слой, нейроны которого представляют собой выходы сети и иногда также могут производить какие-либо вычисления.
Рис. 1. Строение нейросети
Каждый нейрон предыдущего слоя передает сигналы нейронам последующего методом прямого или обратного распространения ошибки по синаптическим связям с весовыми коэффициентами (рис. 2). На рисунке 2 показана схема искусственного нейрона, где
- 1- нейроны, выходные сигналы которых поступают на вход данному (xi);
- 2- сумматор входных сигналов;
- 3- вычислитель функции активации;
- 4- нейроны, на входы которых подаётся выходной сигнал данного;
- 5- wi— веса входных сигналов
Рис. 2. Схема искусственного нейрона
Математически нейрон – то сумматор, результат которого y=f(u) определяется через его входы и весовые коэффициенты [4]:
, где
- xi– это возможные значения сигналов на входах нейрона, которые лежат в интервале [0,1] и могут быть дискретными или аналоговыми;
- wi – весовые коэффициенты, на которые умножается значение входного сигнала нейрона xi для его инициализации – смещения активационной функции по горизонтальной оси, с целью формирования порога чувствительности.
- x0 – это дополнительный вход нейрона, сигнал с которого умножается на вес w0.
Таким образом, выход каждого нейрона является результатом его нелинейной непрерывной и монотонной функции активации: сигмоиды, синусоиды, Гауссовой, ступенчатой и подобных им (рис. 3). Функция активации определяет зависимость сигнала на выходе нейрона от взвешенной суммы сигналов на его входах. Благодаря ее нелинейности нейросети с достаточно небольшим числом узлов и слоев могут решать довольно сложные задачи прогнозирования, распознавания и классификации. Различные функции активации отличаются друг от друга следующими характеристиками [5]:
- область значений, например, от минус до плюс бесконечности или ограниченный промежуток типа [0,1], (-π/2; π/2) и т.д. – при ограниченном множестве значений функции активации градиентные методы обучения более стабильны, т.к. эталонные представления существенно влияют лишь на ограниченные связи (их весовые коэффициенты). Если область значений функции активации бесконечна, то обучение более эффективно, т.к. используется большинство весов, однако, в этом случае нейросеть обучается медленнее.
- порядок гладкости, определяющий непрерывность ее производной, что позволяет использовать методы оптимизации на основе градиентного спуска и обеспечивает более высокую степень общности;
- монотонность (самой функции и ее производной), что означает характер убывания или возрастания на всей области определения. Для монотонной функции активации поверхность ошибок, ассоциированная с одноуровневой моделью, гарантированно будет выпуклой, у которой локальный экстремум (минимум или максимум) совпадает с глобальным, что важно для задач оптимизации.
- аппроксимация тождественной функции около начала координат – при наличии этого свойства нейронная сеть будет обучаться эффективно, если её веса инициализированы малыми случайными значениями.
Как правило, для каждого типа решаемой задачи и топологии сети, характерна своя функция активации. Например, в многослойных перцептронах используется сигмоида в форме гиперболического тангенса, которая хорошо нормализуется, усиливая слабые сигналы и не уходя в бесконечное возрастание от сильных. В радиально-базисных сетях чаще всего используются Гауссова, мультиквадратичная или обратно мультиквадратичная функции активации, параметры которых позволяют настраивать расходимость радиуса, регулируя область действия каждого нейрона [5].
Рис. 3. Наиболее распространенные функции активации
Искусственные нейроны объединяются в сети с различной топологией, в зависимости от решаемой задачи (рис. 4). Например, для распознавания образов часто используются перцептроны и сверточные нейросети (обучение с учителем), сети адаптивного резонанса (без учителя) и радиально-базисных функций (смешанное обучение). Для анализа данных применяются сети Кохонена (самоорганизующаяся карта и сети векторного квантования сигналов). Также на выбор типа сети влияет характер обучающего датасета. В частности, при прогнозировании временных рядов экспертная оценка уже содержится в исходных данных и может быть выделена при их обработке, поэтому в этих случаях можно использовать многослойный перцептрон или сеть Ворда [3].
Рис. 4. Популярные топологии нейросетей
Современные тренды развития нейросетевых технологий
Итак, особенно активно текущие нейросетевые технологии развиваются с 2000-х годов, когда мощность графических процессоров стала достаточной для быстрого и недорогого обучения нейросетей, а также в мире накопилось большое количество датасетов для тренировки. К примеру, до 2010 года не существовало базы данных, чтобы качественно обучить нейросети решать задачи по распознаванию и классификации изображений. Поэтому нейросети часто ошибались, путая кошку с собакой, или снимок здорового органа с больным. Однако, с появлением базы ImageNet в 2010 году, которая содержала 15 миллионов изображений в 22 тысячах категорий и была доступна для любого исследователя, качество результатов существенно улучшилось. Кроме того, к этому времени появились новые достижения ученых в области искусственного интеллекта: Джеффри Хинтон реализовал предобучение сети при помощи машины Больцмана, обучая каждый слой отдельно. Ян ЛеКан предложил использовать сверточные нейросети для распознавания изображений, а Иошуа Бенджио разработал каскадный автокодировщик, позволивший задействовать все слои в глубокой нейронной сети [6]. Именно эти исследования легли в основу современных тенденций развития нейросетевых технологий, наиболее значимыми среди которых можно назвать следующие:
- глубокое обучение (Deep Learning, DL) – иерархическое сочетание нескольких алгоритмов обучения (с учителем, без учителя, с подкреплением), когда нейросеть сперва тренируется на большом количестве данных общего характера, а затем целенаправленно обучается на датасетах, специфичных для конкретной задачи.
- гибридное обучение – сочетание DL-моделей с байесовскими подходами, которые хорошо подходят для вероятностного моделирования и вычисления причинно-следственных отношений в биоинформатике (генетические сети, структура белков), медицине, классификации документов, обработке изображений и системах поддержки принятия решений [7]. Байесовские алгоритмы значительно повышают качество обучения, способствуя генерации тренировочных данных, максимально близких к реальным, в генеративно-состязательных сетях (GAN, Generative adversarial network) [8].
- автоматическое обучение (AutoML) – автоматизация всех ML-процессов, от предварительной подготовки данных до анализа результатов моделирования. Инструменты AutoML (Google AutoML, Auto Keras, RECIPE, TransmogrifAI, Auto-WEKA, h3O AutoML и другие фреймворки и библиотеки) существенно облегчают работу Data Scientist’a, экономя его время за счет автоматического конструирования признаков, оптимизации гиперпараметров, поиске наилучшей архитектуры, подборе каналов и оценочных метрик, определения ошибок и выполнения других ML-процедур [9]. Также AutoML можно рассматривать как способ демократизации AI, который позволяет создавать ML-модели без сложного программирования [10].
Далее мы рассмотрим более подробно методы глубокого и автоматического ML.
Глубокое обучение: принципы работы и результаты использования
К глубокому обучению относят класс ML-моделей, основанных на обучении представлениями (feature/representation learning), а не на специализированных алгоритмах под конкретные задачи. В DL многослойные нейронные сети играют роль многоуровневой системы нелинейных фильтров для извлечения признаков. Для DL-моделей характерно иерархическое сочетание нескольких алгоритмов обучения: с учителем, без учителя, с подкреплением. Архитектура нейросети и состав ее нелинейных слоёв зависит от решаемой задачи. При этом используются скрытые переменные, организованные послойно, например, узлы в глубокой сети доверия и глубокой ограниченной машине Больцмана. При этом, независимо от архитектурных особенностей и прикладного назначения, для всей DL-сетей характерно предварительное обучение на большом объеме общих данных с последующей подстройкой на датасетах, специфичных для конкретного применения [11].
Например, одна из наиболее известных реализаций DL-моделей, нейронная сеть BERT, о которой я рассказывал здесь, предварительно обучена на статьях из Википедии, чтобы затем использоваться в распознавании текстов. По аналогичному принципу работает нейросеть XLNet, также применяемая в задачах обработки естественного языка для анализа и генерации текстов, извлечения данных, информационного поиска, синтеза речи, машинного перевода, автоматического реферирования, аннотирования, упрощения текстовой информации и прочих NLP-проблем [12]. Другая глубокая нейросеть, CQM (Calibrated Quantum Mesh), также показывает отличные результаты (более 95%) в понимании естественного языка, извлекающая смысл слова на основе вероятностного анализа его окружения (контекста) без использования заранее заданных ключевых слов [13]. На рисунке 5 показано использование предварительно подготовленной модели в качестве объектов в отдельной нисходящей DL-сети при трансферном обучении в NLP-задачах [14].
Рис. 5. Схема трансферного обучения в DL-сетях
Среди других DL-моделей стоит упомянуть капсульные сети, которые, в отличие от сверточных сетей, обрабатывают визуальные образы с учетом пространственной иерархии между простыми и сложными объектами, что повышает точность классификации и снижает объем данных для обучения [15]. Также отметим глубокое обучение с подкреплением (DRL, Deep Reinforcement Learning), работающее по принципу взаимодействия нейросети с окружающей средой посредством наблюдений, действий, штрафов и вознаграждений [16]. DRL считается наиболее универсальным из всех ML-методов, поэтому его можно использовать в большинстве бизнес-приложений. В частности, именно к DRL-моделям относится нейросеть AlphaGo, которая в 2015 году впервые победила человека в соревнованиях по древней китайской игре го, а в 2017 – обыграла сильнейшего профессионального игрока в мире [6].
А для распознавания образов, получения фотореалистичных изображений, улучшения качества визуальной информации и обеспечения кибербезопасности активно используются GAN-подобные сети. GAN-сеть представляет собой комбинацию двух конкурирующих нейросетей, одна из которых (G, генератор) генерирует образцы,а другая (D, Дискриминатор) старается отличить правильные («подлинные») образцы от неправильных, обрабатывая все данные. Со временем каждая сеть улучшается, благодаря чему качество обработки данных существенно возрастает, т.к. в процесс обучения уже заложена функция обработки помех. Эту систему DL-обучения без учителя впервые описал Ян Гудфеллоу из компании Google в 2014 году, а сама идея состязательного обучения была выдвинута в 2013 году учеными Li, Gauci и Gross. Сегодня GAN-сети активно используются в видеоиндустрии и дизайне (для подготовки кадров фильмов или мультипликации, сцен компьютерных игр, создания фотореалистичных изображений), а также в космической промышленности и астрономии (для улучшения снимков, полученных из астрономических наблюдений) [17]. Таким образом, GAN-сети отлично подходят для широкого спектра задач обучения без учителя, где помеченные данные не существуют или процесс их подготовки слишком дорог, например, создание 3D-образа удаленного объекта на основе его фрагментарных изображений. Благодаря состязательному подходу, этот ML-метод оказывается быстрее аналогичных DL-моделей, т.к. используются сразу две сети с противоположными локальными целями, направленными на общий глобальный результат [10].
AutoML: инструментальные возможности
Ценность AutoML состоит в «демократизации» машинного обучения: эта технология позволяет бизнес-пользователям, а не только опытным Data Scientist’ам работать с мощными средствами аналитики и прогнозирования. Средства AutoML нацелены на максимальное упрощение процессов создания и применения сложных алгоритмов: благодаря упрощенным пользовательским интерфейсам они позволяют быстро создавать необходимые модели, снижая вероятность ошибочных вычислений. AutoML-системы рассчитан на обработку большого объема данных, включая предварительную подготовку датасетов: пользователи могут самостоятельно идентифицировать метки, выбирать нужные участки информационного набора в режиме UI. Такой подход значительно отличается от традиционной работы Data Scientist’а, позволяя сосредоточиться на бизнес-задаче, а не на проблемах обработки данных. Многие платформы ML совместимы с Android и iOS, поэтому модели могут быть плавно и быстро интегрированы с мобильными приложениями [18]. Среди наиболее известных AutoML-решений стоит отметить следующие:
- Microsoft Azure ML— облачный сервис, который позволяет пользователям загружать свои данные, применяя графический интерфейс для разработки кода, который сам создает нейронные сети для анализа данных. Программа работает на любом устройстве, требуя от пользователя минимума знаний о данных или программировании. Сервис включает в себя инструменты Machine Learning Studio и Machine Learning API Service, которые позволяют создавать модели, определяющие вероятность того или иного события, используя данные, хранящиеся в SQL Server и других платформах, включая Azure HDInsight (реализация Apache Hadoop от Microsoft) [18].
- Google Cloud AutoML помогает самостоятельно создавать и обучать DL-модели распознавания изображений и объектов, а также NLP-задач, в т.ч. по машинному переводу. В частности, AutoML Vision включает в себя распознавание лиц, меток, почерка, логотипа, модерацию контента, оптическое распознавание символов и другие подобные задачи обработки графической информации. Например, ML-классификаторы Google Cloud используются в техасском научно-исследовательском институте Гарта TAMUCC для определения атрибутов в больших наборах данных изображений береговой линии вдоль Мексиканского залива. AutoML Natural language Toolkitпозволяет классифицировать контент в конкретные категории, извлекая из текста смысловые структуры и распознавая его элементы. Это позволяет быстро искать, переводить, аннотировать, сжимать и фильтровать текстовые данные, чем успешно пользуются сервисы Rewordify, Hater News, Smmry, Grammarly, Google WebSpeech, Vocalware и множество других бизнесов. Однако, пока большинство функциональных возможностей Google Cloud AutoML доступны и работают в полной мере только на английском языке. Также корпорация Google предлагает AutoML Data Science Toolkit – целый набор инструментов для работы с большими данными объемами данных. Благодаря использованию этого инструмента японский маркетплейс Mercari повысил эффективность классификации своих брендовых товаров на 16%, добившись точности распознавания продукции, равной 91,3% [19].
- Amazon SageMaker предлагает простой в эксплуатации сервис по ускоренной разработке ML-моделей и развертывание их на облачной платформе AWS. Система включает готовые алгоритмы, а также интегрированную командную оболочку Jupyter, позволяя пользоваться как общими алгоритмами и фреймворками обучения, так и создавать собственные с помощью контейнеров Docker. Для ускоренного обучения ML-моделей они могут тиражироваться на несколько экземплярах облачного кластера [18].
- Auto-Keras— в отличие от вышеперечисленных AutoML-систем, эта библиотека с открытым исходным кодом, разработанная в техасском университете (Texas A&M University), предоставляет функции для автоматического поиска архитектуры и гиперпараметров DL-моделей. По сути, Auto-Keras – это обычный «питоновский» пакет, для работы с которым необходима ML-библиотека, например, Theano или Tensorflow. Auto-Keras автоматически выполняет поиск архитектуры нейронной сети, подбирая её структуру и гиперпараметры для оптимального решения заданной задачи (классификация, регрессия и т.д.), что существенно облегчает процесс ML-моделирования [20].
Вместо заключения
Подведем краткое резюме о положении нейросетей в современной Data Science:
- нейронные сети – это не единственный, хотя, возможно, самый популярный и наиболее перспективный на сегодняшний день ML-метод;
- несмотря на почти 80-летнюю историю существования, математический аппарат нейросетей стал активно использоваться на практике только в 21 веке, с появлением быстрых и относительно дешевых вычислительных мощностей, способных эффективно реализовать заложенные в него идеи;
- наблюдается явная тенденция к демократизации ML вообще и нейросетей в частности, которые все больше применяются не только в научных исследованиях, но и в различных бизнес-задачах и приложениях развлекательного характера;
- также стоит отметить тренд к упрощению работы Data Scientist’a в связи с появлением инструментов AutoML, позволяющих автоматизировать многие этапы моделирования, в т.ч. сложную настройку весовых коэффициентов, оптимизацию гиперпараметров и прочие трудозатратные процедуры.
Итак, наиболее явными из современных ML-трендов являются нейросети глубокого обучения и средства AutoML, которые обеспечивают рост популярности DS, в т.ч. среди обывателей, что, в свою очередь, влечет к расширению прикладного использования и дальнейшему развитию всех методов AI.
Источники
- Машинное обучение
- Круглов В.В., Борисов В. В. Искусственные нейронные сети. Теория и практика. — 2-е изд., стереотип. — М.: Горячая линия-Телеком, 2002. — 382 с.
- Искусственная нейронная сеть
- Искусственный нейрон
- Функция активации
- Нейросети: как искусственный интеллект помогает в бизнесе и жизни
- Байесовская сеть
- Bayesian Conditional Generative Adverserial Networks
- AutoML
- Топ-10 трендов технологий искусственного интеллекта (ИИ) в 2018 году
- Глубокое обучение
- NLP – обработка естественного языка
- CQM — другой взгляд в глубоком обучении для оптимизации поиска на естественном языке
- The State of Transfer Learning in NLP
- Dynamic Routing Between Capsules. Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton
- Обучение с подкреплением
- Генеративно-состязательная сеть
- AutoML поможет справиться с нехваткой ИИ-специалистов
- AutoML от Google и новые возможности машинного обучения
- Библиотеки для глубокого обучения: Keras
2. Введение – Нейронные сети
В этой главе я в общих чертах расскажу о предмете данного учебника (и сайта) — искусственных нейронных сетях. Что это такое, какими преимуществами они обладают и так далее.
Популярность
Тема машинного обучения, интеллектуальных алгоритмов и искусственного интеллекта чрезвычайно популярна в наше время. Это легко можно увидеть, наблюдая за новостями на различных IT порталах. Подтверждает это и статистика. На графиках ниже представлены данные сервиса Google Trends с 2005(9) по настоящее время.
Поиск в интернете по машинному обучению (мир):
Новости по той же теме (мир):
Новости по искусственному интеллекту (мир):
Новости по искусственному интеллекту (Россия):
Как видно, тема известная.
Терминология
Разберемся с терминологией. Что такое искусственный интеллект, машинное обучение и искусственные нейронные сети. Как они связаны?
Начнем с самого важного, с искусственного интеллекта.
Искусственный интеллект (ИИ) (Artificial intelligence, AI):
1. наука о создании интеллектуальных (умных) машин (чаще всего — компьютерных программ).
2. свойство интеллектуальной системы выполнять творческие функции, которые считаются прерогативой человека.
В обоих определениях выше присутствует словосочетание «интеллектуальная машина (система)». Поясню его подробнее. Интеллектуальная машина — система (например, программа), способная выполнять задачи, считающиеся творческими.
Другими словами искусственный интеллект и наука о творческих системах, и сама способность «творить» этих систем.
Теперь настала очередь разобраться с термином «машинное обучение».
Машинное обучение (Machine learning) — подраздел искусственного интеллекта, изучающий различные способы построения обучающихся алгоритмов.
Под обучающимися алгоритмами понимаются алгоритмы, которые меняются (обучаются) каким-то образом в зависимости от входных данных.
Машинное обучение — очень обширная область знаний. Можно ведь по-разному определять слово «обучение» и каждый раз получать интересные результаты. Однако среди множества парадигм и подходов в машинном обучении выделяется одна очень интересная область — искусственные нейронные сети.
Искусственные нейронные сети (ИНС) (Artificial neural networks, ANN) — упрощенные модели биологических нейронных сетей.
Среди множества вариантов обучающихся алгоритмов особенно выделяют нейросети
Именно технологии ИНС я буду обучать вас на этом сайте. В дальнейшем искусственные нейронные сети я буду называть просто нейронными сетями.
В целом об ИНС
Теперь в самых общих чертах разберемся с такими понятиями, как искусственная нейронная сеть и искусственный нейрон. Более фундаментально мы разберем эти понятия в следующих главах.
Эти знания необходимы для того, чтобы вы поняли преимущества нейронных сетей и спектр задач, которые они могут решать. Без приблизительного понимания технологии рассказ будет выглядеть, как демонстрация фокусов зрителям.
Зададимся вопросом. А что такое биологические нейронные сети? Если вы помните школьную программу по биологии, то ответ скорее всего сразу пришел вам в голову. Вообще-то «голова» и есть один из ответов на этот вопрос. Точнее не голова, а наши мозги. Мозги есть не только у нас, но и у многих других животных. У животных без мозгов (медузы, черви) все равно есть нервная система.
Получается наш мозг представляет собой сложнейшую биологическую нейронную сеть, которая принимает информацию от органов чувств и каким-то образом ее обрабатывает (узнавание лиц, возникновение ощущений и т.д.).
Теперь задумаемся. А из чего состоит нервная система или мозг? Ответ очевиден — из нейронов. Наш мозг, как и любая биологическая нейронная сеть, состоит из совокупности нейронов. Строение биологического нейрона показано на рисунке ниже.
Как можно заметить, биологический нейрон — чрезвычайно сложная система. Во многом это объясняется тем, что нейрон, помимо обработки сигнала (основное его назначение), вынужден еще выполнять кучу других функций, поддерживающих его жизнь. Более того, сам механизм передачи сигнала от нейрона к нейрону тоже очень сложный с биологической и химической точки зрения.
Нам нужна модель. Нас не волнуют вопросы жизнедеятельности нейрона. Смело убираем все, что с этим связно: ядро, мембраны, рибосомы и все-все-все. В любом случае, мы будем его программировать и умереть он просто не сможет.
В итоге имеем гипотетическую структуру, которая принимает сигнал, преобразует его (примерно так, как это делают настоящие нейроны), и передает другим нейронам (которые делают тоже самое). Такую гипотетическую структуру и называют искусственным нейроном.
Искусственный нейрон
(Artificial neuron) — упрощенная модель биологического нейрона.
Биологические нейронные сети представляют собой совокупность биологических нейронов. Однако в таких сетях тоже много ненужных для обработки сигнала аспектов (системы очистки от продуктов жизнедеятельности и т.д). Плюс ко всему нейронов в биологической нейросети очень много.
Опять упрощаем: убираем ненужные химические и биологические компоненты, а также уменьшаем количество нейронов.
Таким образом логично приходим к другому определению ИНС.
Искусственная нейронная сеть (ИНС) — совокупность взаимодействующих между собой искусственных нейронов.
Почему нейросети работают?
Рассмотрим на ознакомительном уровне один важный вопрос. Почему нейросети работают (то есть могут решать задачи)? Ответ на этот вопрос не самый очевидный.
Самый частый вариант ответа: каждый нейрон по-своему преобразует сигнал, ну а так как таких нейронов много (миллиарды), то сигнал на входе преобразуется в правильный сигнал на выходе.
Это почти правильный ответ. Тонкость заключается в том, что все нейроны работают по одному алгоритму. Другими словами внутри любого нейрона сигнал обрабатывается всегда одинаково.
Но тогда ведь нет никакого индивидуально преобразования! А значит ответ сети всегда один и тот же. На самом деле, вся суть кроется в так называемых синапсах.
Синапс (Synapsis) — место стыка выхода одного нейрона и входа другого, в котором происходит усиление/ослабление сигнала.
На рисунке ниже цветом выделены синапсы (в центре сверху на картинке можно увидеть один из синапсов в деталях). Красный цвет — главный нейрон на картинке. Желтый цвет — выходы соседних нейронов.
Длинный отросток главного нейрона справа является его выходом. Можно заметить, что конец этого отростка соединен с двумя входами другого нейрона, которого мы уже не видим.
У каждого биологического нейрона тысячи входов. Каждый из них соединен с выходами других нейронов. Значит, имеем тысячи синапсов на каждый нейрон. Помножим это число на миллиарды нейронов в биологических нейросетях (в головном мозге 85 миллиардов нейронов!). Получаем огромное число синапсов.
Суть в том, что каждый синапс индивидуален. Он может либо усиливать, либо ослаблять проходящей через него сигнал. Более того, с течением времени синапсы могут меняться, а значит будет меняться характер изменения сигнала. Если правильно подобрать параметры синапсов, то входной сигнал, после прохода через нейронную сеть, будет преобразовываться в правильный выходной сигнал.
Именно так и происходит преобразование множества входных сигналов в верное решение на выходе.
Уровень сложности нейросетей
Выше я уже говорил, что мы уменьшаем количество нейронов для искусственных нейронных сетей (миллиарды нейронов моделировать мы не можем). Насколько сильно мы уменьшаем это количество? Внимание на картинку ниже.
Это картинка достаточно условная, но хорошо отражает степень упрощения. По горизонтальной оси у нас идет количество синапсов (воспринимайте это как сложность сети). По вертикальной сети отмечена скорость работы систем.
Серый квадрат слева внизу — возможности обычных компьютеров (но не компьютерных реализаций нейронных сетей!). Далее идут два эллипса. Они представляют собой современные программные (а иногда и аппаратные) реализации искусственных нейронных сетей.
Как видите, до человека еще достаточно далеко. Более того, здесь используется логарифмическая шкала. Не вдаваясь в подробности можно сказать, что даже очень маленькое перемещение по диагонали на данном графике означает увеличение в миллионы раз количества синапсов и скорости работы.
Где используются нейросети?
Вы уже познакомились с искусственными нейронными сетями. Теперь обсудим критически важный вопрос: а где и для чего их вообще используют?
Начнем издалека. Вообще говоря, нам нужно решать разные проблемы. Компьютерные программы — один из способов решать проблемы.
А их бесконечно много. Вместо перечисления каждой из проблем можно ввести их классификацию. Будем различать проблемы по условной сложности (простая, средняя и высокая сложности) и по тому, знаем ли мы, как ее решать (точно знаем, приблизительно знаем, вообще не знаем).
Проблемы малой/средней сложности, которые точно известно, как решать:
- решить простое уравнение
- вывести на экране окно программы
- распечатать документ на принтере
Такие задачи решаются с помощью обыкновенных компьютерных программ. Ничего сложного и необычного. Никаких проблем.
Проблемы малой/средней сложности, которые частично известно, как решать:
- простейшее прогнозирование
- расчет погрешностей
- приближенное решение уравнений
Такие задачи можно решать при помощи специальных статистических методов.
Проблемы высокой сложности, которые непонятно, как решать:
- распознавание образов
- распознавание речи
- сложные прогнозы
На этом типе задач я остановлюсь подробнее.
Вот вы идете по улице. Вокруг вас много прохожих. Вы смотрите на них и моментально распознаете лица. Этот процесс не вызывает у вас никаких вопросов. Вы просто очень хорошо натренировались его совершать.
А теперь вы поставили себе задачу — написать компьютерную программу, которая по данной картинке распознает лица. Можно даже проще. Попробуйте накидать приблизительный алгоритм распознавания лиц на бумаге. У вас ничего не выйдет. И все потому, что вы на бессознательном уровне распознаете лица, а бессознательное вы контролировать не можете. Делаете, но не знаете как.
Помимо распознавания лиц существует еще куча других задач, которые просто непонятно, как решать.
И тут на помощь приходят нейронные сети. Являясь моделью биологических нейросетей, они могут решать подобные задачи.
Нейронные сети применяют для решения задач, алгоритм решения которых неизвестен.
Эта способность нейросетей и сделала их такими популярными. Нейросети можно обучить играть в игры, узнавать голос, прогнозировать рост/падение цен. Их можно научить всему, что мы делаем бессознательно!
Преимущества нейронных сетей
Помимо возможности решать новый класс задач нейросети обладают рядом значительных достоинств.
Понять, откуда они берутся, очень просто. Все плюсы нейронных сетей являются следствиями плюсов биологических нейронных сетей, так как саму модель обработки информации мы практически не меняли (при упрощении).
Отсюда очень просто объяснять преимущества ИНС, просто выводя их из свойств биологических нейросетей.
Устойчивость к шумам входных данных
Представьте себе людей на пешеходном переходе. Вы без труда окидываете всех их взглядом и легко различаете лица. Однако рассмотрим эту картину подробнее. Помимо непосредственно лиц на изображении есть еще и асфальт, одежда людей, машины, сфетофор, сумки. И вся это ненужная (шумовая) информация тоже подается нам в глаза!
Но мы абсолютно не обращаем на нее внимания, мастерски различая лица. Как я уже говорил выше, мы просто натренировались их различать. Важная часть тренировки — игнорирование шумовых сигналов.
Это качество есть и у искусственных нейронных сетей. После тренировки они способны не обращать внимание на входы, на которые подаются шумовые данные.
Нейронные сети способны корректно функционировать, даже если на входе данные зашумлены.
Адаптация к изменениям
Представьте, что вы математик. Вы решаете уравнения с помощью каких-то компьютерных программ.
Сегодня утром ваша программа обновилась: в нее был добавлен новый функционал, а интерфейс немного изменился.
Вам потребуется совсем немного времени, чтобы самостоятельно разобраться в изменениях, а после этого вы все также продолжите решать уравнения, но уже используя добавленный функционал. Этот пример показывает, что при небольших изменениях среды вы способны адаптироваться (если бы программа полностью изменилась, сами вы бы уже не разобрались).
Опять же это свойство биологических нейросетей распространяется и на ИНС. Пусть у вас есть нейронная сеть, которая прогнозирует рост/падение цен на бирже. Однако постепенно, день за днем, ситуация на рынке меняется. Если бы ваша сеть не адаптировалась к этим изменениям, то она перестала бы давать правильные ответы уже через неделю. Но искусственные нейронные сети, обучаясь на данных, каждый раз подстраиваются под среду.
Нейронные сети могут подстраиваться под изменяющуюся окружающую обстановку.
Отказоустойчивость
Иногда случается, так, что в результате наследственных заболеваний или других проблем человеку приходится удалять половину головного мозга. Такие случаи действительно бывают. Поразительно то, что за определенное время оставшееся полушарие берет на себя функции исчезнувшего. Может быть не в полной мере, однако система (человек) продолжает функционировать.
Это свойство проявляется и у искусственных нейронных сетей. Они могут выдавать корректные результаты даже при значительном повреждении составляющих их компонентов.
Нейронные сети способны нормально функционировать даже при достаточно серьезных повреждениях.
Сверхвысокое быстродействие
Компьютер выполняет команды последовательно. Однако в голове человека каждый нейрон является маленьким процессором (который принимает сигнал, преобразует его, и подает на выход). И таких процессоров у нас в голове миллиарды. Получаем гигантскую сеть распределенных вычислений. Сигнал обрабатывается нейронами одновременно.
Это свойство потенциально проявляется и в искусственных нейронных сетях. Если у вас многоядерный компьютер, то это свойство будет выполняться. Для одноядерных компьютеров никакой разницы заметно не будет.
Нейронные сети решают задачи быстрее большей части других алгоритмов.
Недостатки нейронных сетей
Возможно у вас возникло ложное ощущение, что нейронные сети вот уже сейчас заменяют компьютеры. Можно выбрасывать свои системные блоки и приобретать новомодные нейрокомпьютеры.
Однако это не так. У нейронных сетей есть ряд серьезных недостатков, которые тоже можно вывести из биологических нейронных сетей.
Стоит заметить, что нейронные сети, несмотря на широкий спектр задач, которые они могут решать, все же остаются лишь полезным дополнительным функционалом. На первом месте всегда стоят компьютерные программы.
Замечательная новость заключается в том, что интегрируя обычные программные алгоритмы и нейронные сети можно почти полностью избавиться от всех потенциальных недостатков.
Перечислим их.
Ответ всегда приблизительный
Начнем с человеческого мозга.
Взгляните на фотографию ниже и попытайтесь понять, что на ней написано. Скорее всего, больших затруднений данное задание у вас не вызовет.
А теперь представьте себе, как сложно было бы распознать буквы в прямоугольниках по отдельности, без остальной записи.
Вы этого не замечаете, но на самом деле вы строите что-то типо таблички вероятностей у себя в голове и говорите, что, скорее всего (бессознательно выбрали наиболее вероятный результат), во 2 прямоугольнике написано «но». В случае же первого прямоугольника вы говорите, что, непонятно, что там (вероятности почти равны), но, мне кажется (выбираете случайным образом), что там написана буква «о».
Такая же проблема есть и у искусственных нейронных сетей. Вы никогда не будете получать точные ответы. Хорошая новость заключается в том, что редко встречаются задачи, в которых надо применять ИНС и одновременно получать точные ответы.
Нейронные сети не способны давать точные и однозначные ответы.
Принятие решений в несколько этапов
Связь с человеческим мозгом тут не сильно прослеживается в силу того, что мозг – супер сложная нейросеть и за счет свой сложности он может преодолеть этот недостаток.
Нейроны искусственной нейросети, в общем случае, не зависят друг от друга. Они просто получают сигнал, преобразуют его и отдают дальше. Они не смотрят друг на друга и, в зависимости от нейрона-соседа, меняют свои синапсы. Отсюда следует, что нейронная сеть может решать задачу только в один заход, залпом.
Поэтому совершенно бесполезно просить нейросеть доказать теорему. Там требуется цепочка последовательных шагов.
Наш мозг справляется с этой задачей благодаря тому, что он состоит из огромного количества маленьких нейросетей, каждая из которых может выполнять свой шаг. Более того, мы можем использовать и другие знакомые нам абстракции в помощь. У искусственной нейросети никакой помощи нет.
Нейронные сети не могут решать задачу по шагам.
Вычислительные задачи
Этот недостаток искусственных нейронных сетей в какой-то степени является следствием двух предыдущих недостатков.
Обратите внимание на картинку ниже. Как заставить сеть провести эти преобразования?
Первая проблема – очередность. Надо каким-то образом, используя только входы сети, указать ей какая часть выражения находится под корнем, а какая часть находится слева от знака равенства. Да и как передать сам знак равенства?
Предположим, что вы каким-то образом смогли доставить эти данные в сеть
Вторая проблема – последовательные шаги. Уже описанный выше недостаток.
И вишенка на торте – невозможность выдачи точных результатов. Это можно представить себе следующим образом. Вы учите нейросеть:
– 2 + 3 = ?
= 983
– Неправильно! = 5.
2 + 3 = ?
= 5
– Правильно!
2 + 4 = ?
= 5
– Неправильно! = 6.
2 + 4 = ?
= 5.5
И так будет происходить всегда.
Нейронные сети не способны решать вычислительные задачи.
Выводы
В этой главе вы узнали, что такое ИНС, где они используются, какие у них преимущества, какие недостатки. Вы теперь представляете, что такое искусственный интеллект и машинное обучение.
Вопросы и задачи
Основы очень важны для дальнейшего понимания материала. Обязательно добейтесь четкого ответа на все нижеприведенные вопросы!
Сформулируйте оба определения ИИ
Искусственный интеллект: 1) наука о создании интеллектуальных машин 2) свойство интеллектуальных систем проявлять творческие качества.
Что такое машинное обучение?
Машинное обучение – подраздел искусственного интеллекта, занимающийся изучением и построением обучающихся алгоритмов.
Расположите по порядку вложенности: ИНС, ИИ, машинное обучение.
ИИ – наука. Машинное обучение – подраздел ИИ. ИНС – подраздел машинного обучения.
Что такое искусственный нейрон и искусственная нейронная сеть? В чем их отличие от биологических версий?
Искусственный нейрон – упрощенная модель биологического нейрона. Искусственная нейронная сеть – совокупность искусственных нейронов или упрощенная модель биологических нейронных сетей.
Объясните, как работают нейронные сети (в целом)
У искусственных нейронов есть входы и выходы. Выходы нейронов связаны со входами других нейронов. Места, где они соединяются, называются синапсами. В синапсах проходящий сигнал может либо усилиться, либо ослабнуть. Каждый синапс может изменять степень усиления/ослабления сигнала. Когда синапсов очень много, можно подобрать такие их параметры, что входной сигнал будет преобразовываться в правильный выходной.
При решении каких задач применяются нейронные сети?
Нейронные сети чаще всего применяют тогда, когда точный алгоритм решения задачи неизвестен (распознавание лиц, речи, прогнозирование).
Перечислите плюсы нейронных сетей
Нейронные сети устойчивы к шумам входных данных, могут адаптироваться к изменениям окружающей среды, отказоустойчивы, а также очень быстры.
Перечислите недостатки нейронных сетей
Нейронные сети всегда дают приблизительный ответ. Они не могут решать задачи, содержащие последовательную цепочку шагов. Их бесполезно использовать для вычислений.
Применение нейронных сетей
Сегодня компании любого профиля сталкиваются с необходимостью обработки большого количества данных. От качества и скорости их анализа зависит эффективность принятия решений и уровень поддержки клиентов. Справиться с растущими информационными потоками помогают технологии искусственного интеллекта. В их основе лежат алгоритмы глубокого машинного обучения, сочетающие в себе нейросети определенных типов. Давайте посмотрим, какое применение они нашли в разных отраслях.
Какие бывают нейросети?
Может сложиться впечатление, что искусственные нейронные сети (ANN) — это какая-то прорывная технология, однако на уровне алгоритмов они были описаны еще во второй половине прошлого века. Просто сейчас появилась техническая возможность реализовать их в конечных продуктах — человечество накопило достаточные объемы информации и создало средства для ее быстрого анализа. К настоящему времени наибольшее распространение получили следующие виды нейросетей: – сверточные нейронные сети (CNN) имитируют работу зрительной коры головного мозга и частично выполняют функцию абстрактного мышления. Они прекрасно справляются с задачей распознавания изображений, а их вычисления легко распараллелить на графических процессорах, что позволяет создавать относительно дешевые аппаратные платформы с элементами ИИ.
CNN применяются в системах машинного зрения беспилотных автомобилей, коммерческих дронов, роботов, а также в охранном видеонаблюдении. Вы тоже каждый день используете CNN, если включили в настройках смартфона разблокировку с помощью распознавания лица.
– рекуррентные нейронные сети (RNN) обладают кратковременной памятью, за счет чего легко анализируют последовательности произвольной длины. RNN разбивают поток данных на элементарные части и оценивают взаимосвязи между ними. Эти алгоритмы нашли основное применение в распознавании рукописного текста и речи. Когда вы ищете мелодию на слух в Shazam, беседуете с Siri, Google Now или Алисой от «Яндекса», оставляете заметки от руки для Cortana — на облачных платформах берутся за дело рекуррентные нейросети.
– сети с долговременной и кратковременной памятью (LSTM) стали дальнейшим развитием RNN. Они хороши для прогнозирования изменений любой величины (например, биржевых курсов или покупательского спроса) путем экстраполяции. Также их применяют для глубокого анализа естественного языка. Например, Google использует LSTM в персональном помощнике и системе машинного перевода Google Translate. Без LSTM качество переводов так и оставалось бы на уровне программ из девяностых, с которыми порой было проще перевести текст самому, чем исправлять многочисленные ляпы.
– управляемые рекуррентные блоки (GRU) — сравнительно недавняя модификация RNN, появившаяся только в 2014 году. Их используют для синтеза речи, которая обладает эмоциональной окраской и звучит как настоящая. Например, в тестах сервисов Google Duplex и Microsoft XiaoIce люди не смогли отличить говорящих ботов от живых собеседников. Примечательно, что XiaoIce позволила Microsoft укрепиться на азиатском рынке, где развитие компании всегда сдерживалось языковым барьером.
– глубокие нейронные сети (DNN) — любая сеть более чем с тремя слоями. Они лежат в основе механизмов глубокого машинного обучения, находя неявные взаимосвязи между разнородными данными. Яркий пример — поиск корреляций между развитием заболеваний и различными потенциальными факторами в огромных массивах научных статей при помощи IBM Watson.
– генеративно-состязательные сети (GAN). Это комбинация нейросетей, одна из которых генерирует варианты, а другая отсеивает их (выступает в качестве арбитра). Такое сочетание позволяет реализовать машинное обучение без учителя, что повышает автономность ИИ. Например, PixelDTGAN генерирует отдельные изображения одежды, обуви и аксессуаров для каталогов онлайн-магазинов. В качестве входных данных используются фотографии, на которых эти предметы гардероба демонстрируют фотомодели. Пока съемка для каталогов одежды считается довольно затратной частью электронной коммерции, но вполне возможно, что в ближайшие годы нейросети позволят быстро проиллюстрировать каталог, даже не привлекая фотографа. Обработка фотографий тоже отнимает много времени. Вы можете попробовать сделать это гораздо быстрее, добавляя и убирая графические объекты с помощью другой нейросети —IBM GANPaint.
Подобная ей нейросеть DRAGAN уже применяется для автоматической отрисовки персонажей аниме и мультфильмов. Она позволяет ускорить выход новых серий и удержать аудиторию развлекательных каналов, не перегружая аниматоров колоссальным объемом работы. Да что там мультфильмы! GAN позволяют анимировать трехмерную модель человека, перенося на нее движения другого в реальном времени. Первые результаты выглядят не очень убедительно, однако особенность любой нейросети — в том, что она улучшается с каждой новой порцией данных.
Какие лидеры отрасли применяют ИИ?
Google использует нейронные сети во всех своих сервисах — от онлайн-поиска и фильтрации почты до подбора роликов на YouTube и перевода текстов. В отличие от старых моделей машинного перевода, нейросети Google оперируют практически неограниченными объемами данных для распознавания языковых шаблонов. Они могут выявлять больше семантических связей и улучшать результат с каждым разом посредством постоянного обучения.
С 2001 года в Google стал возможен поиск по изображениям, однако на первых порах для этого применялся простой анализ метаданных. То есть фактически поиск происходил по текстовому описанию картинки, которое часто было неточным. Современная версия этого сервиса использует систему автоматического описания графических файлов. Она построена на комбинации рекуррентных и сверточных нейросетей, поэтому в ней можно искать подобные изображения, сортировать их по типам и даже находить графические файлы без текстовой аннотации.
Google Cloud Speech-to-Text стал настоящей магией для крупных компаний, работающих с клиентами из разных стран. Выход за пределы родного региона всегда предъявлял высокие требования к организации технической поддержки. Если раньше для этого приходилось открывать региональные филиалы или нанимать переводчиков, то теперь в решения для колл-центров может быть интегрирован этот сервис. Он поддерживает интерфейс прикладного программирования и помогает преобразовывать запись разговоров в текст, применяя модели нейронных сетей. В настоящее время он распознает более 120 языков и продолжает осваивать новые.
LinkedIn использует нейронные сети совместно с линейными текстовыми классификаторами для анализа всех записей, распространяемых через свою платформу. Как поясняет вице-президент направления ИИ LinkedIn Дипак Агарвал, такое сочетание помогает эффективнее обнаруживать спам и контент оскорбительного содержания, а также подбирать лучшие персональные рекомендации.
Facebook применяет подобный нейросетевой алгоритм анализа текста. Он называется DeepText и преимущественно используется для таргетирования рекламных объявлений. Дополнительно Facebook использует сверточные нейронные сети для распознавания лиц и генеративно-состязательные сети для обработки изображений
Например, если на снимке человек моргнул, то GAN от Facebook найдет его изображение с открытыми глазами и отретуширует неудачное фото по аналогии. Чем больше портретов пользователя доступно для анализа, тем точнее получится результат.
Tesla использует набор DNN в фирменной системе автопилота. Они распознают все объекты вокруг машины в реальном времени, классифицируют их и определяют характеристики. Девятая версия автопилота стала в четыре раза сложнее восьмой за счет увеличения потока данных. Одних камер стало восемь штук, причем их разрешение тоже увеличилось. Вот как выглядит работа Tesla Autopilot v.9.
Антивирусные разработчики применяют различные нейронные сети для поиска новых угроз информационной безопасности. Они помогают распознавать неизвестные модификации вредоносных файлов и новые виды сетевых атак. Вот презентация системы ICSP Neural от Symantec:
Выводы
Совсем недавно искусственные нейронные сети были доступны только крупным компаниям, но за последние годы появилось множество доступных решений, готовых средств разработки и облачных сервисов, которые легко адаптировать к своим задачам. Например, IBM выпустила бета-версию Neural Network Modeler для Watson Studio. Этот инструмент позволяет использовать визуальный подход при разработке архитектур DNN для обработки изображений, текста и аудиофайлов, не имея навыков программирования.
В марте 2018 года Microsoft представила Project Brainwave — программно-аппаратный комплекс на программируемых вентильных матрицах (FPGA) производства Intel, который облегчает нейросетям задачи распознавания и классификации объектов в реальном времени. Сейчас эта платформа используется в фирменном поисковике Bing, ускоряя обработку запросов почти на порядок. Также она тестируется одним из партнеров Microsoft в автоматизированной системе оптической дефектоскопии для ускорения конвейерной сборки.
В ноябре 2018 года Intel представила Neural Compute Stick 2 — новое поколение компактных ускорителей для нейросетей. Обладая размерами флэшки, Intel NCS2 подключается к USB-порту любого устройства. Для сложных задач можно задействовать сразу несколько таких ускорителей, а их число — изменить в любой момент, что упрощает поэтапное внедрение технологий ИИ.
Нейронные сети могут помочь компаниям стать лучше сразу по нескольким направлениям: оптимизировать бизнес-логистику, улучшить прогнозирование и взаимодействие с клиентами. В конечном счете они дают возможность повысить конкурентоспособность за счет более глубокого анализа всех доступных данных. Ожидания клиентов постоянно растут, и они выбирают сервисы на базе ИИ, поскольку они быстрее и полнее удовлетворяют их запросы.
описание простым и понятным языком
Содержание:
В последнее время все чаще и чаще говорят про так званные нейронные сети, дескать вскоре они будут активно применятся и в роботехнике, и в машиностроении, и во многих других сферах человеческой деятельности, ну а алгоритмы поисковых систем, того же Гугла уже потихоньку начинают на них работать. Что же представляют собой эти нейронные сети, как они работают, какое у них применение и чем они могут стать полезными для нас, обо всем этом читайте дальше.
Что такое нейронные сети
Нейронные сети – это одно из направлений научных исследований в области создания искусственного интеллекта (ИИ) в основе которого лежит стремление имитировать нервную систему человека. В том числе ее (нервной системы) способность исправлять ошибки и самообучаться. Все это, хотя и несколько грубо должно позволить смоделировать работу человеческого мозга.
Биологические нейронные сети
Но это определение абзацем выше чисто техническое, если же говорить языком биологии, то нейронная сеть представляет собой нервную систему человека, ту совокупность нейронов в нашем мозге, благодаря которым мы думаем, принимаем те или иные решения, воспринимаем мир вокруг нас.
Биологический нейрон – это специальная клетка, состоящая из ядра, тела и отростков, к тому же имеющая тесную связь с тысячами других нейронов. Через эту связь то и дело передаются электрохимические импульсы, приводящие всю нейронную сеть в состояние возбуждение или наоборот спокойствия. Например, какое-то приятное и одновременно волнующее событие (встреча любимого человека, победа в соревновании и т. д.) породит электрохимический импульс в нейронной сети, которая располагается в нашей голове, что приведет к ее возбуждению. Как следствие, нейронная сеть в нашем мозге свое возбуждение передаст и другим органам нашего тела и приведет к повышенному сердцебиению, более частому морганию глаз и т. д.
Тут на картинке приведена сильно упрощенная модель биологической нейронной сети мозга. Мы видим, что нейрон состоит из тела клетки и ядра, тело клетки, в свою очередь, имеет множество ответвленных волокон, названых дендритами. Длинные дендриты называются аксонами и имеют протяженность много большую, нежели показано на этом рисунке, посредством аксонов осуществляется связь между нейронами, благодаря ним и работает биологическая нейронная сеть в наших с вами головах.
Примеры использования нейронных сетей | LAZY SMART
В вводной статье о нейронных сетях были введены основные понятия, показана типовая структура, разобрана модель нейрона. Рекомендуем прочитать её, если вы еще не сделали этого. В настоящей статье будут рассмотрены классы задач, которые в интеллектуальных системах решают с помощью нейронных сетей. Поехали!
Распознавание образов с помощью нейронной сети
С помощью нейронных сетей можно распознавать похожие образы. Это могут быть буквы, предметы и другие объекты. Например, можно обучить нейронную сеть распознавать рукописный текст. Для этого для каждой буквы алфавита нужно подобрать обучающую выборку – несколько вариантов написания этой буквы (например, буква, написанная несколькими людьми). На этом этапе происходит подбор весов нейронов, сеть «запоминает» как выглядит буква. После этого сеть будет правильно распознавать буквы, написанные и другим почерком.
Технически это делается так: изображения букв сканируются и оцифровываются. Закрашенные пиксели воспринимаются машиной как единицы, а не закрашенные как нули. Получается матрица буквы. Эта матрица и подаётся на вход сети.
Точно так же можно научить сеть распознавать предметы. Например, можно разделять разные детали и заготовки в автоматических производственных линиях. С использованием систем машинного зрения деталь оцифровывается и, как и в случае с распознаванием букв, превращается в массив из нулей и единиц (1 – часть тела детали, 0 – отсутствует тело детали). Этот массив – входные данные для нейронной сети.
Очевидно, что количество входов сети определяется размерностью массива (зависит от максимальных габаритных размеров деталей, производимых на данной линии).
Решение задач классификации с помощью нейронной сети
Нейронные сети могут использоваться для разделения событий, объектов и других данных на определённые классы. Это полезно для решения задач с большим количеством входных факторов, которые сложно связать между собой математически.
Например, так можно классифицировать клиентов банка по платёжеспособности на основе данных кредитной истории или классифицировать пациентов поликлиники по состоянию здоровья на основе данных из медицинских карт.
В таких задачах набор категорий точно определён и задаётся заранее. Например, для клиентов банка это могут быть категории: «Надёжные клиенты», «Непроверенные клиенты», «Потенциально ненадёжные клиенты», «Ненадёжные клиенты» и т.д.
Решение задач кластеризации с помощью нейронной сети
Задачи кластеризации очень похожу на задачи классификации, но в отличие от них не имеют заранее определённых категорий, на которые нужно разделить все данные. Нейронная сеть сама создаёт категории (кластеры), основываясь на общих признаках данных. Это позволяет представить массив данных в более наглядном виде, найти похожие данные в тех случаях, когда их сходство не очевидно.
Таким образом, например, страховые компании могут из множества страховых случаев выявить те, которые были фальсифицированы. Другой пример: с помощь нейросетевой кластеризации рекламные компании могут выявлять людей склонных к покупке определённого товара.
Нейронная сеть как алгоритм адаптации
Задача адаптации актуальна для робототехники. Роботу необходимо знать, как вести себя в различных ситуациях, но зачастую невозможно заранее предсказать все такие ситуации и запрограммировать поведение робота в каждом из этих случаев. В этих случаях в систему управления робота включают нейросетевые алгоритмы.
После настройки с помощью обучающей выборки, состоящей из известных ситуаций, в которых может оказаться робот, нейронная сеть позволит системе управления робота адаптироваться к ситуациям, отсутствующим в обучающих примерах.
Решение задач прогнозирования с помощью нейронной сети
Достаточно часто в производственных, экономических и финансовых приложениях возникает задача, когда необходимо предсказать, как система поведёт себя в той или иной ситуации. Нейронные сети широко используют для решения таких задач, благодаря «их умению» находить зависимость между большим количеством параметров.
При обучении нейронной сети с помощью обучающей выборки мы как бы получаем график целевой функции, зависящей от множества параметров. Конечно, мы не можем выразить его аналитически или отобразить графически, но его «знает» наша нейронная сеть – её коэффициенты подобраны таким образом.
Например, при анализе курсов валют, обучив сеть, используя данные за последние несколько месяцев, можно спрогнозировать курс на ближайшее время.
В энергетической промышленности стоит задача составления прогноза потребления энергоресурсов. Как известно, выработанная на электростанции энергия должна быть продана потребителям, иначе её придётся «спустить в трубу». Для того чтобы сэкономить энергоресурс, необходимо заранее как можно точнее знать, сколько его будет потреблено. Для решения этой задачи нужно обучить нейронную сеть на данных по статистике энергопотребления за предыдущий период (неделю, месяц).
Сверточная нейронная сеть
(CNN) | NVIDIA Developer
Сверточная нейронная сеть — это класс искусственной нейронной сети, которая использует сверточные слои для фильтрации входных данных для получения полезной информации. Операция свертки включает в себя объединение входных данных (карта признаков) с ядром свертки (фильтром) для формирования преобразованной карты признаков. Фильтры в сверточных слоях (сверточных слоях) модифицируются на основе изученных параметров для извлечения наиболее полезной информации для конкретной задачи.Сверточные сети настраиваются автоматически, чтобы найти лучшую функцию в зависимости от задачи. CNN будет фильтровать информацию о форме объекта, когда сталкивается с общей задачей распознавания объекта, но извлекает цвет птицы, когда сталкивается с задачей распознавания птицы. Это основано на понимании CNN, что разные классы объектов имеют разную форму, но разные типы птиц с большей вероятностью будут отличаться цветом, чем формой.
Применения сверточных нейронных сетей включают в себя различные системы обработки изображений (распознавание изображений, классификация изображений, маркировка видео, анализ текста) и речи (распознавание речи, обработка естественного языка, классификация текста), а также самые современные системы искусственного интеллекта, такие как в качестве роботов, виртуальных помощников и беспилотных автомобилей.
Компоненты сверточной нейронной сети
Сверточные сети состоят из входного слоя, выходного слоя и одного или нескольких скрытых слоев. Сверточная сеть отличается от обычной нейронной сети тем, что нейроны в ее слоях расположены в трех измерениях (ширина, высота и глубина). Это позволяет CNN преобразовывать входной объем в трех измерениях в выходной объем. Скрытые слои представляют собой комбинацию слоев свертки, слоев объединения, слоев нормализации и полностью связанных слоев.CNN используют несколько сверточных слоев для фильтрации входных объемов до более высоких уровней абстракции.
CNN
улучшают свою способность обнаруживать необычно размещенные объекты за счет использования слоев пула для ограниченной трансляции и инвариантности вращения. Пул также позволяет использовать больше сверточных слоев за счет снижения потребления памяти. Слои нормализации используются для нормализации по локальным входным областям путем перемещения всех входных данных в слое к среднему значению, равному нулю, и дисперсии, равной единице. Также можно использовать другие методы регуляризации, такие как пакетная нормализация, при которой мы нормализуем активаций для всего пакета, или выпадение, при котором мы игнорируем случайно выбранные нейроны в процессе обучения.У полносвязных слоев есть нейроны, которые функционально похожи на сверточные слои (вычисляют скалярные произведения), но отличаются тем, что они связаны со всеми активациями в предыдущем слое.
Более современные CNN используют начальные модули, которые используют сверточные ядра 1 × 1, чтобы дополнительно снизить потребление памяти, обеспечивая более эффективные вычисления (и, следовательно, обучение). Это делает CNN подходящими для ряда приложений машинного обучения.
Рисунок 1: Входное изображение дорожного знака фильтруется 4 сверточными ядрами 5 × 5, которые создают 4 карты характеристик, эти карты характеристик подвергаются субдискретизации с помощью максимального объединения.Следующий слой применяет 10 сверточных ядер 5 × 5 к этим субдискретизированным изображениям, и мы снова объединяем карты характеристик. Последний слой — это полностью связанный слой, где все сгенерированные функции объединяются и используются в классификаторе (по сути, логистическая регрессия). Изображение Мориса Пимена.
ФУНКЦИЯ ПРЯМОЙ ЛИНЕЙНОЙ АКТИВАЦИИ
Функция активации в нейронной сети применяет нелинейное преобразование к взвешенным входным данным. Популярной функцией активации для CNN является ReLu или выпрямленная линейная функция, которая обнуляет отрицательные входные данные и представлена как.Выпрямленная линейная функция ускоряет обучение без значительного снижения точности.
ВКЛЮЧЕНИЕ
Модули
Inception в CNN позволяют использовать более глубокие и большие сверточные слои, а также ускоряют вычисления. Это делается с помощью сверток 1 × 1 с малым размером карты признаков, например, 192 карты признаков размером 28 × 28 могут быть уменьшены до 64 карт признаков 28 × 28 посредством 64 сверток 1 × 1. Из-за уменьшенного размера эти свертки 1 × 1 могут сопровождаться более крупными свертками размером 3 × 3 и 5 × 5.В дополнение к свертке 1 × 1 для уменьшения размерности также может использоваться максимальное объединение. На выходе начального модуля все большие свертки объединяются в большую карту функций, которая затем передается в следующий слой (или начальный модуль).
БАССЕЙН / ДОБАВКА
Объединение в пул — это процедура, которая сокращает ввод в определенной области до одного значения (подвыборка). В сверточных нейронных сетях эта концентрация информации предоставляет информацию, аналогичную исходящим соединениям, с меньшим потреблением памяти.Объединение в пул обеспечивает базовую инвариантность к поворотам и сдвигам и улучшает способность сверточных сетей обнаруживать объекты. Например, лицо на участке изображения, которое находится не в центре изображения, но слегка переведено, все же может быть обнаружено сверточными фильтрами, поскольку информация направляется в нужное место с помощью операции объединения. Чем больше размер области объединения, тем больше информации собирается, что приводит к созданию тонких сетей, которые легче помещаются в память графического процессора.Однако, если область объединения слишком велика, слишком много информации будет выброшено, и эффективность прогнозирования снизится.
Обучение и вывод CNN
Подобно многослойным персептронам и рекуррентным нейронным сетям, сверточные нейронные сети также можно обучать с использованием методов оптимизации на основе градиентов. Алгоритмы стохастического, пакетного или мини-пакетного градиентного спуска могут использоваться для оптимизации параметров нейронной сети. После обучения CNN ее можно использовать для вывода, чтобы точно предсказать выходные данные для заданного входа.
Ускорение сверточных нейронных сетей с использованием графических процессоров
Инфраструктура глубокого обучения
позволяет исследователям легко создавать и исследовать сверточные нейронные сети (CNN) и другие глубокие нейронные сети (DNN), обеспечивая высокую скорость, необходимую как для экспериментов, так и для промышленного развертывания. NVIDIA Deep Learning SDK ускоряет широко используемые платформы глубокого обучения, такие как Caffe, CNTK, TensorFlow, Theano и Torch, а также многие другие приложения для машинного обучения. Фреймворки глубокого обучения работают быстрее на графических процессорах и масштабируются для нескольких графических процессоров в одном узле.Чтобы использовать фреймворки с графическими процессорами для обучения сверточной нейронной сети и процессов вывода, NVIDIA предоставляет cuDNN и TensorRT соответственно. cuDNN и TensorRT предоставляют хорошо настроенные реализации для стандартных подпрограмм, таких как уровни свертки, объединения, нормализации и активации.
Щелкните здесь, чтобы получить пошаговое руководство по установке и использованию. Здесь можно найти быструю реализацию сверточных нейронных сетей на C ++ / CUDA.
Дополнительные ресурсы
- «Глубокое обучение в двух словах: основные концепции» Деттмерс, Тим.Параллельно для всех. NVIDIA, 3 ноября 2015 г.
- «Понимание свертки в глубоком обучении» Деттмерс, Тим. Блог TD, 26 марта 2015 г.
- «Распознавание объектов с помощью нейронных сетей» Хинтон, Джеффри и др. Coursera, 5 ноября 2013 г.
- «Глубокое обучение» Нильсен, Майкл. Электронная книга «Нейронные сети и глубокое обучение», декабрь 2017 г.
- «Сверточные нейронные сети для визуального распознавания» Ли, Фей-Фей и др. Курсы Стэнфордского университета, весна 2017 г.
- «Углубляясь в извилины» Сегеди, Кристиан и др.CVPR, 2015.
- «Компьютерное зрение — объединение и подвыборка» Ларошель, Хьюго. Нейронные сети [9.5], 15 ноя 2013 г.
1. Введение в искусственные нейронные сети
Этап строительства
Приступим. Сначала нам нужно импортировать библиотеку tensorflow
. Затем мы должны указать количество входов и выходов и установить количество скрытых нейронов в каждом слое:
импорт
тензор потока
как
tf
n_inputs
=
28
*
28
# MNIST
n_hidden1
=
300
n_hidden2
=
100
n_выводов
=
10
Затем вы можете использовать узлы-заполнители для представления данных обучения и целей.Форма X
определена лишь частично. Мы знаем, что это будет двумерный тензор (то есть матрица) с экземплярами по первому измерению и функциями по второму измерению, и мы знаем, что количество функций будет 28 x 28 (одна функция на пиксель). , но мы еще не знаем, сколько экземпляров будет содержать каждый пакет обучения. Итак, форма X
— (None, n_inputs)
. Точно так же мы знаем, что y
будет 1D-тензором с одной записью для каждого экземпляра, но опять же, мы не знаем размер обучающего пакета на данный момент, поэтому форма (Нет)
.
X
=
tf
.
заполнитель
(
tf
.
float32
,
shape
=
(
Нет)
,
n_inputs
),
имя
=
"X "
)
y
=
tf
.
заполнитель
(
tf
.
int64
,
форма
=
(
Нет
),
имя
=
"y"
)
Теперь создадим настоящую нейронную сеть. Заполнитель X
будет действовать как входной слой; на этапе выполнения он будет заменяться одним обучающим пакетом за раз (обратите внимание, что все экземпляры в обучающем пакете будут обрабатываться нейронной сетью одновременно). Теперь вам нужно создать два скрытых слоя и выходной слой.Два скрытых слоя практически идентичны: они отличаются только входами, к которым они подключены, и количеством содержащихся в них нейронов. Выходной слой также очень похож, но он использует функцию активации softmax вместо функции активации ReLU. Итак, давайте создадим функцию neuroon_layer ()
, которую мы будем использовать для создания одного слоя за раз. Ему потребуются параметры для указания входов, количества нейронов, функции активации и имени слоя:
def
нейрон_уровень
(
X
,
n_neurons
,
имя
,
активация
=
Нет
):
с
tf
.
имя_сфера
(
имя
):
n_inputs
=
int
(
X
.
get_shape
() [
1
])
stddev
=
2
/
np
.
sqrt
(
n_inputs
+
n_neurons
)
инициализация
=
tf
.
truncated_normal
((
n_inputs
,
n_neurons
),
stddev
=
stddev
)
W
=
tf
.
Переменная
(
init
,
имя
=
"ядро"
)
b
=
tf
.
Переменная
(
tf
.
нули
([
n_neurons
]),
имя
=
«смещение»
)
Z
=
tf
.
матмул
(
X
,
W
)
+
b
если
активация
это
не
Нет
:
возврат
активация
(
Z
)
еще
:
возврат
Z
Давайте рассмотрим этот код строка за строкой:
Сначала мы создаем область имен, используя имя слоя: она будет содержать все вычислительные узлы для этого нейронного слоя.Это необязательно, но в TensorBoard график будет выглядеть намного лучше, если его узлы хорошо организованы.
Затем мы получаем количество входов, просматривая форму входной матрицы и получая размер второго измерения (например, первое измерение).
Следующие три строки создают переменную
W
, которая будет содержать матрицу весов (часто называемую ядром слоя ). Это будет двумерный тензор, содержащий все веса связи между каждым входом и каждым нейроном; следовательно, его форма будет(n_inputs, n_neurons)
.Он будет инициализирован случайным образом с использованием усеченного нормального (гауссовского) распределения 10 со стандартным отклонением. Использование этого конкретного стандартного отклонения помогает алгоритму намного быстрее сходиться (мы обсудим это далее в главе 2; это одна из тех небольших настроек нейронных сетей, которые оказали огромное влияние на их эффективность). Важно инициализировать веса соединений случайным образом для всех скрытых слоев, чтобы избежать любых симметрий, которые алгоритм градиентного спуска не сможет нарушить. 11В следующей строке создается переменная
b
для смещений, инициализированная значением 0 (в данном случае нет проблем с симметрией), с одним параметром смещения на нейрон.Затем мы создаем подграф для вычисления Z = X · W + b . Эта векторизованная реализация будет эффективно вычислять взвешенные суммы входных данных плюс член смещения для каждого нейрона в слое для всех экземпляров в пакете всего за один выстрел.Обратите внимание, что добавление 1D-массива ( b ) к 2D-матрице с тем же количеством столбцов ( X . W ) приводит к добавлению 1D-массива к каждой строке в матрице: это называется широковещательной передачей .
Наконец, если предоставляется параметр
активации
, напримерtf.nn.relu
(т.е. max (0, Z )), тогда код возвращаетактивация (Z)
, иначе он просто возвращаетZ
.
Хорошо, теперь у вас есть хорошая функция для создания нейронного слоя.Давайте воспользуемся им для создания глубокой нейронной сети! Первый скрытый слой принимает X
в качестве входных данных. Второй принимает выходные данные первого скрытого слоя в качестве входных. И, наконец, выходной слой принимает выходные данные второго скрытого слоя в качестве входных.
с
tf
.
name_scope
(
"dnn"
):
скрыто1
=
нейрон_уровень
(
X
,
n_hidden1
,
имя
=
"скрыто1"
,
активация
=
tf
.
нн
.
relu
)
скрыто2
=
нейрон_уровень
(
скрыто1
,
n_hidden2
,
имя
=
"скрыто2"
,
активация
=
tf
.
нн
.
relu
)
логит
=
нейрон_уровень
(
скрыто2
,
n_outputs
,
имя
=
"выходы"
)
Обратите внимание, что мы снова использовали область видимости имен для ясности.Также обратите внимание, что logits
— это выход нейронной сети до того, как пройдет через функцию активации softmax: по причинам оптимизации мы обработаем вычисление softmax позже.
Как и следовало ожидать, TensorFlow поставляется с множеством удобных функций для создания стандартных слоев нейронной сети, поэтому часто нет необходимости определять вашу собственную функцию neuroon_layer ()
, как мы только что сделали. Например, функция tf.layers.dense ()
TensorFlow (ранее называвшаяся tf.contrib.layers.fully_connected ()
) создает полностью связанный слой, где все входы подключены ко всем нейронам в слое. Он позаботится о создании переменных весов и смещений, названных kernel
и bias
соответственно, с использованием соответствующей стратегии инициализации, и вы можете установить функцию активации с помощью аргумента Activation
. Как мы увидим в главе 2, он также поддерживает параметры регуляризации. Давайте настроим предыдущий код, чтобы использовать функцию density ()
вместо нашей функции neuroon_layer ()
.Просто замените строительную секцию dnn
следующим кодом:
с
tf
.
name_scope
(
"dnn"
):
скрыто1
=
tf
.
слои
.
плотный
(
X
,
n_hidden1
,
имя
=
"скрыто1"
,
активация
=
tf
.
нн
.
relu
)
скрыто2
=
tf
.
слои
.
плотный
(
скрыто1
,
n_hidden2
,
имя
=
"скрыто2"
,
активация
=
tf
.
нн
.
relu
)
логит
=
tf
.
слои
.
плотный
(
скрыто2
,
n_outputs
,
имя
=
«выходы»
)
Теперь, когда у нас есть готовая модель нейронной сети, нам нужно определить функцию стоимости, которую мы будем использовать для ее обучения. Мы будем использовать кросс-энтропию. Как мы обсуждали ранее, перекрестная энтропия будет наказывать модели, которые оценивают низкую вероятность для целевого класса. TensorFlow предоставляет несколько функций для вычисления перекрестной энтропии.Мы будем использовать sparse_softmax_cross_entropy_with_logits ()
: он вычисляет перекрестную энтропию на основе «логитов» (т. Е. Выход сети до того, как проходит через функцию активации softmax), и ожидает метки в виде целых чисел в диапазоне от 0 на количество классов минус 1 (в нашем случае от 0 до 9). Это даст нам одномерный тензор, содержащий перекрестную энтропию для каждого экземпляра. Затем мы можем использовать функцию TensorFlow reduce_mean ()
для вычисления средней перекрестной энтропии по всем экземплярам.
с
tf
.
name_scope
(
«убыток»
):
xentropy
=
tf
.
нн
.
sparse_softmax_cross_entropy_with_logits
(
метки
=
y
,
логит
=
логит
)
убыток
=
tf
.
reduce_mean
(
xentropy
,
имя
=
«убыток»
)
Функция sparse_softmax_cross_entropy_with_logits ()
эквивалентна применению функции активации softmax и последующему вычислению перекрестной энтропии, но она более эффективна и должным образом учитывает угловые случаи: когда логиты большие, ошибки округления с плавающей запятой могут вызвать выходной сигнал softmax должен быть точно равен 0 или 1, и в этом случае уравнение кросс-энтропии будет содержать член log (0), равный отрицательной бесконечности.Функция sparse_softmax_cross_ entropy_with_logits ()
решает эту проблему, вычисляя вместо этого log (ε), где ε — крошечное положительное число. Поэтому раньше мы не применяли функцию активации softmax. Существует также другая функция, называемая softmax_cross_ entropy_with_logits ()
, которая принимает метки в виде горячих векторов (вместо целых чисел от 0 до количества классов минус 1).
У нас есть модель нейронной сети, у нас есть функция стоимости, и теперь нам нужно определить GradientDescentOptimizer
, который будет настраивать параметры модели, чтобы минимизировать функцию стоимости:
скорость обучения
=
0.01
с
tf
.
name_scope
(
"поезд"
):
Оптимизатор
=
tf
.
поезд
.
GradientDescentOptimizer
(
скорость обучения
)
training_op
=
оптимизатор
.
минимизировать
(
убыток
)
Последним важным шагом на этапе построения является определение того, как оценивать модель.Мы просто будем использовать точность как показатель эффективности. Сначала для каждого экземпляра определите, верен ли прогноз нейронной сети, проверив, соответствует ли наивысший логит целевому классу. Для этого вы можете использовать функцию in_top_k ()
. Это возвращает одномерный тензор, полный логических значений, поэтому нам нужно преобразовать эти логические значения в числа с плавающей запятой, а затем вычислить среднее значение. Это даст нам общую точность сети.
с
tf
.
name_scope
(
"eval"
):
правильный
=
tf
.
нн
.
in_top_k
(
логит
,
y
,
1
)
точность
=
tf
.
reduce_mean
(
tf
.
литье
(
правильно
,
tf
.
с плавающей запятой 32
))
И, как обычно, нам нужно создать узел для инициализации всех переменных, и мы также создадим Saver
для сохранения параметров нашей обученной модели на диск:
начальный
=
tf
.
global_variables_initializer
()
заставка
=
tf
.
поезд
.
Хранитель
()
Уф! На этом завершается этап строительства.Это было менее 40 строк кода, но оно было довольно интенсивным: мы создали заполнители для входов и целей, мы создали функцию для построения нейронного слоя, мы использовали ее для создания DNN, мы определили функцию стоимости, мы создали оптимизатор и, наконец, определили показатель производительности. Теперь перейдем к этапу исполнения.
Арабская классификация тональности с использованием сверточной нейронной сети и алгоритма дифференциальной эволюции
В последние годы сверточная нейронная сеть (CNN) привлекает значительное внимание благодаря своей впечатляющей производительности в различных приложениях, таких как классификация арабских предложений.Однако создание мощной CNN для классификации арабских настроений может быть очень сложным и трудоемким. В этой статье мы решаем эту проблему, комбинируя алгоритм дифференциальной эволюции (DE) и CNN, где алгоритм DE используется для автоматического поиска оптимальной конфигурации, включая архитектуру CNN и параметры сети. Для достижения цели алгоритм DE ищет пять параметров CNN, которые включают размеры сверточных фильтров, которые управляют архитектурой CNN, количество фильтров на размер сверточного фильтра (NFCS), количество нейронов в полностью подключенном (FC) слое, инициализацию. режим и процент отсева.Кроме того, было исследовано влияние операторов мутации и кроссовера в алгоритме DE. Эффективность предлагаемой структуры DE-CNN оценивается на пяти наборах данных о тональности арабского языка. Результаты экспериментов показывают, что DE-CNN имеет более высокую точность и занимает меньше времени, чем современные алгоритмы.
1. Введение
Люди и организации публикуют свою информацию и мнения в различных социальных сетях, таких как Twitter и Facebook. Понимание настроений, эмоций и опасений общественности, выраженных на этих платформах, является важным вопросом, который представляет интерес для анализа настроений (SA).SA — это приложение для обработки естественного языка (NLP), которое фокусируется на автоматическом определении и классификации тональности больших объемов текста или речи [1, 2]. Арабский — семитский язык, известный своим богатством морфологии и различными письменными и устными формами, такими как современный стандартный арабский (MSA) и его различные диалекты. Сложность морфологии и структуры арабского языка создает множество проблем, таких как нехватка больших наборов данных и ограниченность инструментов для анализа тональности [3, 4]. Даже глубокие нейронные сети (DNN) [5] и сверточные нейронные сети (CNN) [6] показали многообещающую и обнадеживающую производительность, мало исследований по анализу настроений с использованием методов глубокого обучения (DL) для арабского языка [7–9] в то время как многие исследования проводились на других языках [10–12].Исследования арабского языка с использованием методов глубокого обучения все еще относительно редки, и их стоит изучить.
Чтобы выбрать лучшую архитектуру и гиперпараметры для модели DL и применить ее к арабской классификации тональности, модель обычно оценивается на различных архитектурах и комбинациях гиперпараметров вручную или с использованием предыдущих успешных моделей напрямую [13]. Более того, задача построения модели DL для SA остается очень важным процессом, который требует привлечения специалистов в предметной области и языка или интеграции методов проектирования функций.Кроме того, создание модели DL остается сложной и трудоемкой задачей. Оценка параметров моделей DL требует процесса подгонки и оценки тестовых данных, что может быть очень дорогостоящим и невыполнимым на небольших вычислительных устройствах. Следовательно, для построения успешной арабской системы классификации тональности необходима эффективная методология выбора лучшей архитектуры для модели DL с оптимальными гиперпараметрами. Была проделана большая работа по развитию моделей DL с использованием методов NeuroEvolution (NE) [14] для различных задач, таких как классификация изображений [15] с использованием оптимизации роя частиц (PSO) и распознавание рукописных цифр на основе генетических алгоритмов и грамматических эволюция [16].В том же контексте в этой статье представлен альтернативный подход NE для классификации арабских настроений с использованием дифференциальной эволюции (DE) [17]. Алгоритм DE принят, поскольку он известен своей замечательной производительностью с использованием различных стратегий мутации в нескольких литературных источниках, а также имеет меньше параметров для точной настройки. Насколько нам известно, это первая работа, в которой была предпринята попытка решить проблему автоматического построения глубокой нейросетевой модели для классификации арабских тональности с использованием алгоритма DE.Предлагаемая модель DE-CNN фокусируется на использовании алгоритма DE для автоматического поиска и настройки соответствующих параметров для построения оптимальной модели CNN. Поскольку CNN широко применялись для классификации тональности на других языках, арабская классификация тональности выбрана как хорошо известная и широко используемая задача, которая составляет хорошую среду для проверки и оценки производительности DE-CNN.
DE-CNN начинается с генерации генеральной совокупности, где каждый индивидуум представляет конфигурацию, выбранную случайным образом из возможных значений каждого параметра.Затем DE-CNN оценивает каждого человека путем вычисления значения функции пригодности с использованием текущей конфигурации. После этого все особи в популяции обновляются с помощью операторов алгоритма DE. Эти шаги повторяются до тех пор, пока не будут выполнены критерии терминала. Для оценки эффективности предлагаемой структуры используются различные наборы данных арабской классификации тональности, охватывающие данные Twitter. Оценки этих наборов данных показывают, что предложенная структура превзошла существующие методы.
Основные вклады этой статьи можно резюмировать следующим образом: (i) Моделирование проблемы развития CNN как задачи метаэвристической оптимизации для построения арабской системы классификации настроений (ii) Использование двух различных методов оценки пригодности для оценки обобщения CNN (iii) Интеграция двух различных стратегий мутации для улучшения возможностей исследования и использования алгоритма DE (iv) Создание и обучение различных архитектур CNN с переменным количеством параллельных слоев свертки
Остальная часть этого документа организована следующим образом: Раздел 2 предоставляет родственные работы относительно классификации арабских настроений и NE.В разделе 3 описываются основы алгоритма DE и CNN. Предлагаемая структура представлена в Разделе 4. Раздел 5 представляет оценку предлагаемой структуры, а Раздел 6 дает заключение и представляет нашу будущую работу.
2. Связанные работы
В этом разделе мы рассмотрим самые последние работы, связанные с арабской классификацией тональности и NE. В последнее время было проведено много работ по SA, ориентированных на английский и другие европейские языки. Однако небольшое количество исследований сосредоточено на арабском языке [18, 19] с использованием моделей DL.Саллаб и др. [20] обучили несколько моделей DL, как описано в их оригинальных статьях, для классификации арабских настроений, включая глубокие нейронные сети (DNN), сети глубоких убеждений (DBN), глубокий автоэнкодер (DAE) и рекурсивный автоэнкодер (RAE). Аль-Азани и др. [21] исследовали проблему несбалансированных наборов данных для определения полярности настроений в арабском языке. Они провели сравнение между различными традиционными классификаторами и ансамблями машинного обучения, такими как k-ближайший сосед (k-NN), вспомогательные векторные машины (SVM), голосование, упаковка, бустинг, стек и случайные леса.Более того, Аль-Азани и др. [22] провели эмпирическую оценку двух современных моделей DL, которые представляют собой однонаправленную и двунаправленную долгосрочную краткосрочную память (LSTM) и ее упрощенный вариант Gated Recurrent Unit (GRU), чтобы определить полярность настроений арабских микроблогов. . Alayba et al. [23] использовали DNN и CNN вместе с несколькими алгоритмами машинного обучения для выполнения арабской SA для служб здравоохранения. В своих экспериментах они сообщили, что лучшими классификаторами были SVM и стохастический градиентный спуск (SGD), в которых они не исследовали влияние архитектуры и параметров моделей DL.
NE рассматривается как подполе в рамках искусственного интеллекта (AI). Он направлен на автоматическое развитие архитектур нейронных сетей и гиперпараметров на основе использования эволюционных алгоритмов. Например, Young et al. [24] представили структуру, названную многоузловыми эволюционными нейронными сетями для глубокого обучения (MENNDL), для изучения оптимизированных гиперпараметров CNN с помощью генетического алгоритма (GA). Ограничив сверточный слой тремя слоями, были оптимизированы гиперпараметры, такие как размер фильтра и количество фильтров для каждого сверточного слоя.Вербансикс и Харгесс [25] предложили модификацию основанной на гиперкубе NeuroEvolution дополнительных топологий (HyperNEAT) [26] для развития CNN для задач классификации изображений. Методологии оценивались на наборе данных MNIST. Tirumala et al. [27] изучали возможность использования эволюционных подходов, чтобы предложить перспективы развития глубинных архитектур с целью сокращения времени обучения DNN. При оценке их подхода на наборе данных MNIST время обучения DNN было ускорено по сравнению с обычным подходом с разницей во времени более чем на 6 часов.На основе обучения с подкреплением Baker et al. [28] предложил алгоритм метамоделирования под названием MetaQNN. Для задачи обучения, такой как классификация изображений, MetaQNN используется для автоматизации создания архитектур CNN и тестируется на наборе данных MNIST. Лощилов и Хаттер [29] предложили альтернативную оптимизацию гиперпараметров глубокой нейронной сети вместо поиска по сетке, случайного поиска или байесовской оптимизации. Стратегия эволюции адаптации ковариационной матрицы (CMA-ES) использовалась для развития нескольких гиперпараметров в оптимизаторе, свертке и полностью связанных слоях.Основываясь на картезианском генетическом программировании, Suganuma et al. [30] представили работу по выполнению классификации изображений в наборе данных CIFAR-10 путем автоматического построения и оптимизации архитектур CNN. Ядро их исследований было сосредоточено на блоках свертки и тензорной конкатенации, и они не рассматривали плотные слои или оптимизацию гиперпараметров. Они автоматически генерировали конкурентоспособные архитектуры CNN, которые могут конкурировать с самыми современными сетями. Се и Юилле [31] приняли генетические алгоритмы (ГА) для развития архитектуры CNN, предложив метод двоичного кодирования для представления индивидуумов ГА в строке фиксированной длины.Они использовали два общих набора данных, такие как MNIST и CIFAR-10, для визуального распознавания и развития архитектур CNN на основе точности распознавания. Следуя тем же принципам работы, что и NEAT [32], Miikkulainen et al. [33] представил автоматизированный подход к развитию глубинных нейронных сетей под названием Cooperative DeepNEAT (CoDeepNEAT), которые изучают сложные сверточные, прямые и повторяющиеся уровни для развития сетевой архитектуры. Real et al. [34] представили технику, основанную на ГА, для создания полностью обученной нейронной сети, не требующей постобработки.
3. Предварительные мероприятия
3.1. Дифференциальная эволюция
Дифференциальная эволюция (DE) — один из самых популярных эволюционных алгоритмов, введенных Сторном и Прайсом в [17, 35]. DE использовался в различных задачах оптимизации, таких как компьютерное зрение [36, 37] и классификация текста [38]. DE начинается с инициализации параметров обучения, таких как размер популяции N , индивидуальный размер, параметр масштабирования мутации F и вероятность кроссовера.Вначале совокупность X размером N и размерность генерируется с использованием
ОСНОВЫ НЕЙРОННОЙ СЕТИ С ГРАФИКАМИ, АЛГОРИТМАМИ И ПРИЛОЖЕНИЯМИ
Рекуррентные нейронные сети
Нейронные вычисления рекуррентных нейронных сетей: лекция 12 Джон А.Bullinaria, 2015 1. Рекуррентные архитектуры нейронных сетей 2. Модели пространства состояний и динамические системы 3. Обратное распространение во времени
Подробнее
Искусственные нейронные сети
Искусственные нейронные сети Сейчас Нейроны Модели нейронов Обучение перцептронов Многослойные перцептроны Обратное распространение 2 Все начинается с нейрона 3 Некоторые факты о человеческом мозге ~ 86 миллиардов нейронов ~ 10 15
Подробнее
Численные методы для инженеров
Стивен С.Чапра Бергер Кафедра вычислительной техники и инженерии Университета Тафтса Раймонд П. Канале, заслуженный профессор гражданского строительства Мичиганского университета. Численные методы для инженеров с программным обеспечением
Подробнее
Сети и архитектуры DEC
DEC Networks and Architectures Carl Malamud Intertext Publications McGraw-Hill Book Company Нью-Йорк Сент-Луис Сан-Франциско Окленд Богота Гамбург Лондон Мадрид Мексика Милан Монреаль Нью-Дели Панама
Подробнее
Нейронные сети в интеллектуальном анализе данных
IOSR Journal of Engineering (IOSRJEN) ISSN (e): 2250-3021, ISSN (p): 2278-8719 Vol.04, выпуск 03 (март 2014 г.), V6 PP 01-06 www.iosrjen.org Нейронные сети в интеллектуальном анализе данных Рипандип Сингх Гилл, департамент Ашима
Подробнее
Компьютерная организация
Разработка компьютерной организации и архитектуры для обеспечения производительности Девятое издание, международное издание Уильяма Столлингса, вклад Национального технологического института Р. Мохана, Тиручираппалли ПИРСОН
Подробнее
Исследование операций Введение
Исследование операций Введение Девятое издание Хэмди А.Университет Таха Арканзаса, Файетвили Бостон Колумбус Индианаполис Нью-Йорк Сан-Франциско Верхнее седло Река Амстердам Кейптаун Дубай Лондон
Подробнее
Самоорганизующиеся карты: основы
Самоорганизующиеся карты: основы Введение в нейронные сети: лекция 16 Джон А. Буллинария, 2004 г. 1. Что такое самоорганизующаяся карта? 2. Топографические карты 3. Создание самоорганизующейся карты 4. Kohonen
Подробнее
ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
МЕТОДЫ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ И ПРИЛОЖЕНИЯ С ИСПОЛЬЗОВАНИЕМ СЕТЕВЫХ РАБОЧИХ СТАНЦИЙ И ПАРАЛЛЕЛЬНЫХ КОМПЬЮТЕРОВ 2-е издание БАРРИ УИЛКИНСОН Университет Северной Каролины в Шарлотте Университет Западной Каролины МАЙКЛ
Подробнее
НЕЛИНЕЙНЫЙ АНАЛИЗ ВРЕМЕННЫХ РЯДОВ
АНАЛИЗ НЕЛИНЕЙНЫХ ВРЕМЕННЫХ СЕРИЙ ХОЛЬГЕР КАНЦ И ТОМАС ШРАЙБЕР Институт физики сложных систем им. Макса Планка, Дрезден I ПРЕССА КЕМБРИДЖСКОГО УНИВЕРСИТЕТА Предисловие к первому изданию pug e xi Предисловие
Подробнее
Введение в нейронные сети
Знакомство с Винсентом Ченом Лаборатория сжатия сигналов и данных Кевина Кэннона Электротехника и компьютерная инженерия Университет Манитобы Виннипег, Манитоба, Канада Советник: д-р.В. Кинснер, 27 мая
г.
Подробнее
Компенсация продавцам
Компенсация продаж. Практическое руководство по разработке программ вознаграждений за успешные продажи. Второе издание Дэвид Дж. Чичелли Me Graw Hill Нью-Йорк Чикаго Сан-Франциско Лиссабон Лондон Мадрид Мехико Милан
Подробнее
Как внедрить бережливое производство
Как внедрить бережливое производство Лонни Уилсон Ме Гроу Хилл Нью-Йорк Чикаго Сан-Франциско Лиссабон Лондон Мадрид Мехико Милан Нью-Дели Сан-Хуан Сеул Сингапур Сидней Торонто Содержание Предисловие Благодарности
Подробнее
Машинное обучение.01 — Введение
Машинное обучение 01 — Введение Курс машинного обучения Одна лекция (среда, 9:30, 346) и одно упражнение (понедельник, 17:15, 203). Устный экзамен, 20 минут, 5 зачетных баллов. Некоторые базовые математические знания
Подробнее
ПЛАНИРОВАНИЕ РЕСУРСОВ ПРЕДПРИЯТИЯ
ПЛАНИРОВАНИЕ РЕСУРСОВ ПРЕДПРИЯТИЯ ~ ВТОРОЕ НАПРАВЛЕНИЕ ~ ПЛАНИРОВАНИЕ РЕСУРСОВ ПРЕДПРИЯТИЯ ~ ВТОРОЕ НАПРАВЛЕНИЕ ~ Alexis Leon L&L Consultancy Services Pvt Ltd Kochi Tata McGraw-Hill Publishing Company Limited NEW DELHI McGraw-Hill
Подробнее
Роль нейронной сети в интеллектуальном анализе данных
Роль нейронной сети в интеллектуальном анализе данных Читранджанджит каур Ассоциированный профессор Колледж Гуру Нанак, Сукхчайнана Пхагвара, (GNDU) Пенджаб, Индия Пуджа Капур Ассоциированный профессор Свами Сарвананд Группа институтов Динанагар (PTU)
Подробнее
Глава ML: XI (продолжение)
Глава ML: XI (продолжение) XI.Кластерный анализ Обзор интеллектуального анализа данных Основы кластерного анализа Иерархический кластерный анализ Итерационный кластерный анализ Кластерный анализ на основе плотности Оценка кластера с ограничениями
Подробнее
Учебное пособие по MCSE Windows 98
Учебное пособие по MCSE Windows 98 (экзамен 70-98) Osborne / McGraw-Hill является независимой организацией от Microsoft Corporation и никоим образом не связана с Microsoft Corporation.Эта публикация и компакт-диск могут
Подробнее
Машинное обучение: обзор
Машинное обучение: обзор Зачем нужно обучение? Обучение — это суть интеллекта. Следовательно, машинное обучение — это основная область искусственного интеллекта. Есть необходимость в программах вести себя
Подробнее
Машинное обучение и интеллектуальный анализ данных —
Машинное обучение и интеллектуальный анализ данных — нейронные сети персептрона Нуно Кавальейру Маркес (nmm @ di.fct.unl.pt) Весенний семестр 2010/2011 Магистр информатики Многослойные нейроны персептрона и персептрон
Подробнее
КРИПТОГРАФИЯ И СЕТЕВАЯ БЕЗОПАСНОСТЬ
ПРИНЦИПЫ И ПРАКТИКА КРИПТОГРАФИИ И СЕТЕВОЙ БЕЗОПАСНОСТИ ШЕСТОЕ ИЗДАНИЕ Международное издание Уильяма Столлингса Вклад Мохита П. Тахилиани NITK Surathkal PEARSON Boston Columbus Indianapolis New
Подробнее
Резервное копирование и восстановление Oracle
ORACLG «Oracle Press Oracle Backup & Recovery Рама Велпури Осборн Макгроу-Хилл Беркли Нью-Йорк Стрит.