Что такое нейросети и как использовать их в интернет-торговле: инструкция, советы, примеры
Нейросети, или искусственный интеллект, активно применяется в маркетинге. Крупные корпорации уже используют их для своих нужд. Давайте узнаем, как нейросети могут помочь владельцу интернет-магазина уже сейчас.
Что такое нейронные сети и как они работают?
Страшно? Наверное, вспомнили фильмы про то, как искусственный интеллект завоевывает мир? Не надо бояться, антиутопиям свойственно нагнетать краски. На самом деле, по крайней мере сейчас, нейросети прекрасно управляются человеком и служат на благо общества. Приведем несколько примеров:
Чем хороши нейросети?
Во-вторых, будущее этих механизмов имеет огромные перспективы. Если сейчас, за прошедшие несколько лет, нейросети из предмета разработки программистов перешли в народ и стали использоваться повсеместно, трудно представить, что же ждет нас в будущем. В любом случае надо использовать открывающиеся возможности по полной программе.
Итак, давайте посмотрим, какую выгоду могут принести нейросети в сфере электронной коммерции уже сейчас.
2. Нейросети распознают изображения. Этот механизм работал и ранее: зайдите в Яндекс.Картинки и поищите любое изображение. Система отфильтрует самые подходящие запросу картинки и выдаст похожие изображения.
Как это использовать в электронной коммерции?
Что делать? Адаптируйте сайт интернет-магазина под это нововведение: во-первых, создайте удобную мобильную версию, которая не виснет и хорошо читается, а во-вторых, включитесь в систему голосового поиска. Следите за тем, чтобы в статьях, карточках товара, описании и надписями под фото фигурировала обычная человеческая речь. Представьте, что вы сами ищете те самые шторы. Что вы спросите? Вот эти выражения и вставляйте в контент.
5. Нейросети умеют общаться с клиентами. Чат-боты и системы автоматизации имитируют диалог с пользователем, причем делают это так хитро, что на первый взгляд и не разберешь, кто с тобой общается: живой человек или нейросеть.
Чат-боты умеют обрабатывать ответы пользователей и отвечать на них, развивать диалог, задавать клиенту наводящие вопросы и всячески мотивировать к совершению покупки. Чат-боты могут обучаться: если внести коррективы в их ответы, в следующий раз нейросеть учтет это и исправит предыдущие ошибки.
Пример: Google Inbox использует нейросети, чтобы общаться с пользователями. Система анализирует переписку и предлагает уже не один вариант ответа, а несколько.
Что делать? Устанавливать системы автоматизации на сайт интернет-магазина. Привлекать виртуальных помощников к общению. Этим вы оптимизируете время ваших реальных сотрудников и избавите их от ежедневной рутины общения с клиентами.
6. Нейросети умеют делать рассылки. Сколько времени уходит на создание и рассылку писем? Очень много, если делать это вручную, поручив какому-нибудь сотруднику. Время летит вперед, и теперь этим успешно занимаются нейросети. Они умеют делать рассылки и уведомлять пользователей о распродажах, акциях и скидках, поступлении нового товара или другом заманчивом предложении.
Что делать? Искать предложения и устанавливать систему на сайт. Экономить время для создания и рассылки писем. Ах да: нейросети еще и писать тексты умеют. Но все же, наверное, лучше пока делать это самостоятельно или поручить маркетологу. А в будущем станет видно.
Что делать? Искать подобные сервисы и пользоваться их услугами. Это не реклама, а один из примеров того, как нейросети служат на благо малого бизнеса.
8. Нейросети могут автоматизировать техподдержку. Мы уже писали, что гарантом отличного сервиса служит круглосуточная работа техподдержки, которая помогает клиенту в любое время дня и ночи и дает действительно полезные советы. Помогут те же чат-боты, которых можно научить отвечать на распространенные ответы пользователей.
Что ждет нас в будущем?
И это еще только цветочки, ягодки будут впереди. По прогнозам экспертов, нейросети продолжат завоевывать нишу электронной коммерции. Например, совсем не обязательно будет проходить по ссылке на сайт, чтобы купить товар. Это возможно будет сделать прямо из того места, где пользователь увидел эту ссылку. Допустим, читаете вы комментарии в соцсетях и видите ссылку на гаджет своей мечты. Даже сейчас купить его составит пару минут: достаточно пройти по ссылке, добавить в корзину или сразу же оплатить. В будущем процесс покупки еще более упростится: вы сможете оформить заказ прямо в той же соцсети.
И напоследок
Нейросети. Самый полный гайд. Часть 1 для чего нужны нейросети
Всем привет, сегодня мы с вами поговорим о такой области программирования как нейросети. Для чего они нужны, когда их придумали, ну и конечно как они работают. Статья получилась такая большая, что я решил разбить её на три части. В этой части описано для чего нужны нейросети, а если интересно узнать чем всё закончится, или посмотрите ролик, или дождитесь второй и третей части. Вот в ролике всё целиком.
Первая часть. Для чего нужны нейросети.
Для того что бы понять что же такое нейросети и для чего они нужны, нам стоит вообще понять суть решения задач при помощи электронно-вычислительных машин. В общем случае любая задача решается на компьютере в 6 этапов:
1. Постановка задачи. В ходе этого этапа происходит подготовка к решению, а так же запись всех исходных данных и требуемого результата.
2. Формализация. Т.е. запись на каком либо формальном языке процесса превращения исходных данных в результат. Чаще всего это язык математики или формальной логики.
3. Создание алгоритма.
4. Запись алгоритма, на каком либо компьютерном языке.
5. Тестирование и отладка.
6. Проведение расчетов и анализ результатов.
Как видим, три первых пункта вообще никоим образом не относятся к компьютеру. А 6-й пункт уже относиться не столько к программированию, сколько к практике. Теперь и вы наглядно можете видеть, что большая часть программирования – это не столько нажимание на кнопочки, сколько размышления над тем или иным алгоритмом, которые довольно часто сливаются в размышления над смыслом жизни. Так же понятно, что удачные алгоритмы можно создавать и вовсе не знаю ни одного языка программирования. На практике это означает что человеку, который освоил создание программ на одном языке программирования, будет гораздо проще освоить другой язык, чем человеку, который вообще не сведущ в программировании.
Весь этот список, более менее понятен любому человеку. Кроме, быть может, третьего пункта. Если не знать что такое алгоритм нельзя и понять что требуется. Хотя всем нам на интуитивном уровне ясно, что это, но даже немногие программисты знают, что в информатике у этого слова есть довольно чёткое определение.
Пример: «сделай мне бутер», это не детерминированная команда.
Так же в жизни очень многие тру-программисты вовсе не записывают алгоритм отдельно, постоянно держа его целиком у себя в голове. Это привычка о двух концах. С одной стороны она экономит время, с другой стороны из-за неё происходят порой самые глупые и труднонаходимые ошибки. Но в любом случае не записывание алгоритма на бумаге, не означает не создание его в голове. Прежде чем начать клацать на кнопочки, любой человек обязательно создаст алгоритм работы программы у себя в голове.
Кстати для записи алгоритмов есть специальный язык – блок схемы. Большинство из тех кто изучал программирование в учебном заведении его узнает. Остальные, даже вполне успешные программисты, понятия не имеют что это такое.
Теперь зная об алгоритмах, мы с вами должны ответить для себя на такой вопрос. Можно ли при помощи алгоритмов описать любую последовательность действий, которая не противоречит законам физики и математики. Пример: сможем ли мы написать алгоритм движения боевого шагающего паука-робота, если до этого были очень успешны в написании других алгоритмов. Ответ – да. Если выполнены два пункта из списка выше, то и третий не должен создать проблем. Давайте сейчас вместе попытаемся приступить к решению данной задачи. И всё по науке, по пунктам.
1. Исходные данные и результат.
Исходные данные: Робот – 1 штука. Ноги – 6 штук. Суставы на ногах – 3 штуки на каждой. Степени свободы у каждого сустава – по одной. Начальные координаты каждой ноги и сустава. Начальные углы в суставах робота. Начальная координата центра робота.
Результат: робот сместился на Х метров в указанном направлении.
На этом этапе мы должны чётенько расписать опираясь на законы Ньютона куда и когда послать усилие на сервопривод чтобы нога передвинулась в необходимое нам место.
3. Написание Алгоритма.
Теперь зная, куда и когда двигаются ноги, мы должны расписать последовательность их движения, отталкиваясь от взаимного их расположения и координаты куда нам требуется попасть. Алгоритм будет громадный, с кучей разных условий, но он будет работать.
4. Превратим всё это в строчки кода.
5. Зальём в голову микрочип робота.
6. Отправим робота на прогулку.
Да, я вам не сказал что робот у нас запитан не от святого духа, а от энергии, которую вырабатывает топливный генератор. Во время его путешествия, часть топлива сгорела и масса робота стала меньше начальной отчего он потерял равновесие и упал.
Разумеется возникла идея создать такой алгоритм который мог бы подстроится к изменениям прям на ходу. Ведь паук в природе как то передвигается если ему оторвать ногу. Это и было зарождением нейросетей. По сути нейросеть – это такой алгоритм, который не нужно записывать в привычном понимании. Мы строим некую логическую конструкцию с начальными параметрами, а дальше она сама обучается, по каким-нибудь правилам, и принимает решение в каждом конкретном случае самостоятельно, исходя из старого опыта. История возникновения нейросетей отправляет нас прямиком к 1943 год, т.е. нейросети придумали сразу, как только появились ЭВМ. Но вот беда, в те времени один нейрон был размером с холодильник, а для серьёзных задач нейронов требовались сотни и даже тысячи. Почесав затылки, тогдашние программисты и инженеры сказали что мы и так всё сделаем без ваших нейросетей и отринули данную идею. Вновь к нейросетям вернулись только через 30 лет, за это время компьютеры шагнули невероятно далеко, на целых 4 поколения. В 71-м как вы помните, изобрели первый процессор. А в 75-м на этих крутейших по тем временам компам японский программист Кунихико Фукусима создал так называемый когнитрон – нейронную сеть умеющую выполнять логическую операцию «или». Вдумайтесь 30 лет от задумки да простейшей реализации.
Из вышесказанного вытекает и функция нейросетей. Они нужны тогда когда классические алгоритмы плохо справляются с задачей, или же условия задачи могут немного измениться в процессе её выполнения, что потребует новый классический алгоритм.
Примеров применения нейросетей сегодня можно привести целую кучу. Очень популярны в последнее время нейросети распознающие образы. Такие используются в автомобилях Тесла например. Одна нейросеть переводит окружающий мир в 3D модель, а другая управляет автомобилем вместо человека.
Создание искусственного интеллекта – тоже пример использования нейросетей. Голова у Яндекс Алисы, или эпловской Сири, не из классических алгоритмов состоит, а из множества нейрончиков. Именно нейросети распознают вашу речь когда вы спрашиваете что то у гугла, и делают подборку песен, которая вам скорее всего понравиться. А ещё они всё больше вытесняет работников техподдержки, заставляя нас кричать в трубку: «Я хочу поговорить с человеком!». Если честно, всего 6 лет назад когда я смотрел фильм «Элизиум: Рай не на Земле», я и представить не мог себя в ситуации когда я буду спорить с роботом, и просить его переключить на человека. Но я думаю что с подобной проблемой сталкивались уже многие. Сейчас способности ИИ, оставляют желать лучшего, но скорость развития этих гомункулов поражает. И спустя те же 6 лет, человек в тех поддержке будет такой же редкостью, как сегодня использование DVD-дисков.
Несмотря на относительную тупизну, нейросети и сегодня влияют на вашу жизнь, и быть может даже больше чем вы думаете. Именно они решают, дать вам кредит в банке или отказать, какой фильм или музыка вам может понравиться, и какую рекламу вам показать, анализируя ваш сёрфинг интернета, а быть может и подслушавшая за вами через телефон.
Начало работы с нейронными сетями
В этой главе мы познакомимся с нейронными сетями и узнаем для чего они были спроектированы. Эта глава служит фундаментом для последующих глав, в то время как эта показывает базовые понятия нейронных сетей. В этой главе мы покроем следующие темы:
Весы(weights) и смещения(biases)
Активационные функции(activation functions)
Реализация нейронной сети на Java
Раскрывая нейронные сети
Во-первых, термин «нейронные сети» может создать снимок мозга в вашем сознании, в частности для тех, кто ранее познакомился с ним. В действительности это правда, мы считаем мозг — большая и естественная нейронная сеть. Однако что мы можем сказать об искусственных нейронных сетях (ANN — artificial neural network)? Хорошо, он начинается с антонима естественный и первая мысль, которая приходит в нашу голову — это картинка искусственного мозга или робота учитывает термин «искусственный«. В этом случае, мы так же имеем дело с созданием структуры, похожей и вдохновленной человеческим мозгом; поэтому это названо искусственным интеллектом. Поэтому читатель, который не имел прошлого опыта с ANN, сейчас может думать, что книга учит, как строить интеллектуальные системы, включая искусственный мозг, способный эмулировать человеческое сознание, используя Java программы, не так ли? Конечно мы не будем покрывать создание искусственного мышления машин как в трилогии Матрицы; однако эта книга растолкует несколько неимоверных способностей и что могут эти структуры. Мы предоставим читателю Java исходники с определением и созданием основных нейросетевых структур, воспользоваться всеми преимуществами языка программирования Java.
Почему искусственные нейронные сети?
Мы не можем начать говорить про нейросети без понимания их происхождения, включая также термин. Мы используем термины нейронные сети (NN) и ANN взаимозаменяемо в этой книге, хотя NN более общий, покрывая также
естественные нейронные сети. Таким образом, что же такое на самом деле ANN? Давайте изучим немного историю этого термина.
В 1940-ых нейрофизиолог Warren McCulloch и математик Walter Pits спроектировали первую математическую реализацию искусственного нейрона, комбинируя нейронаучный фундамент с математическими операциями. В то время многие исследования осуществлялись на понимании человеческого мозга и как и если бы мог смоделирован, но в пределах области неврологии. Идея McCulloch и Pits была реально уникальна, потому что добавлен математический компонент. Далее, считая, что мозг состоит из миллиардов нейронов, каждый из них взаимосвязан с другими миллионами, в результате чего в некоторых триллионах соединениях, мы говорим о гигантской структуре сети. Однако, каждый нейрон очень простой, действуя как простой процессор, способный суммировать и распространять сигналы.
На базе этого факта, McCulloch и Pits спроектировали простую модель для одного нейрона, первоначально симулируя человеческое зрение. Доступные калькуляторы или компьютеры в то время были очень редкими, но способные иметь дело с математическими операциями достаточно хорошо; с другой стороны, даже современные задачи, такие как компьютерное зрение и распознавание звуков не очень легко программируются без специальных фреймворков, основанных на математических операциях и функциях. Тем не менее, человеческий мозг может выполнять эти последние задачи эффективнее чем первые, и этот факт реально побуждает ученых исследователей.
Таким образом, ANN должна быть структурой для выполнения таких задач, как распознавание образов, обучение из данных и прогнозирование трендов, как эксперт может делать на основании знаний, в отличие от обычного алгоритмического подхода, что требует установки шагов для достижения определенной цели. ANN напротив имеет возможность изучать, как решить задачу самостоятельно, вследствие хорошо взаимосвязанной структуре сети.
Задачи, быстро решаемые человеком
Задачи, быстро решаемые компьютером
Классификация изображений Распознавание голоса идентификация лиц Прогнозирование событий на основе предыдущего опыта
Комплексные вычисления Исправление грамматических ошибок Обработка сигналов Управление операционной системой
Как устроены нейронные сети
Можно сказать, что ANN — это естественная структура, таким образом она имеет схожести с человеческим мозгом. Как показано на следующей картинке, естественный нейрон состоит из ядра, дендритов и аксона. Аксон продолжается в несколько ветвей, формируя синапсы с другими дендритами нейронов.
Таким образом, искусственный нейрон имеет похожую структуру. Он состоит из ядра(единицы обработки), несколько дендритов(аналогично входам), и одного аксона(аналогично выходу), как показано на следующей картинке:
Соединения между нейронами формируют так называемую нейронную сеть, аналогично синапсам в естественной структуре.
Самый базовый элемент — искусственный нейрон
Доказано, что естественные нейроны — обработчики сигналов поскольку они получают микросигналы в дендритах, что вызывает сигнал в аксонах в зависимости от их силы или величины. Мы можем поэтому подумать, что нейрон как имеющий сборщик сигналов во входах(inputs) и активационную единицу в выходе(output), что вызывает сигнал, который будет передаваться другим нейронам. Таким образом, мы можем определить искусственную нейронную структуру, как показано на следующем рисунке:
В естественных нейронах есть пороговый потенциал, когда он достигается, включается аксон и сигнал передается другим нейронам. Поведение включения эмулируется активационной функцией, которая доказана быть полезной в представлении нелинейных поведений в нейронах.
Давая жизнь нейронам — активационная функция
Вывод нейрона получен благодаря активационной функции. Этот компонент добавляет нелинейность обработке нейронных сетей, которым это необходимо, потому что естественный нейрон имеет нелинейные поведения. Активационная функция обычно связана между двумя значениями на выходе, поэтому является нелинейной функцией, но в некоторых случаях она может быть линейной.
Четыре самых используемых активационных функций:
Гиперболический тангенс(Hyberbolic tangent)
Жесткая пороговая функция(Hard limiting threshold)
Уравнения и графики ассоциирующиеся с этими функциями, показаны
в следующей таблице:
Фундаментальные величины — весы(weights)
В нейронных сетях, синапсы представляют собой соединения между нейронами и имеют возможность усиливать или смягчать нейронные сигналы, например, перемножать сигналы, таким образом улучшать их. Итак, путем модификации нейронных сетей, нейронные весы(weights) могут повлиять на нейронный вывод(output), следовательно нейронная активация может быть зависима от ввода и от весов. При условии, что inputs идут от других нейронов или от внешнего мира, весы(weights) считаются установленными нейронными соединениями между нейронами. Таким образом, с тех пор как весы являются внутренними для нейронных сетей, мы можем считать их как знания нейронных сетей, предоставленные изменения весов будут изменять возможности нейронных сетей и поэтому — действия.
Важный параметр — смещение
Искусственный нейрон может иметь независимый элемент, который добавляет специальный сигнал для активации функции.
Части образующие целое — слои
Естественные нейроны организованы в слои, каждый из которых предоставляет специальный уровень обработки; например, входные слои получают прямой раздражитель из внешнего мира, и выходные слои активируют действия, которые повлияют на внешний мир. Между этими слоями есть несколько скрытых слоев, в смысле, что они не взаимодействуют напрямую с внешним миром. В искусственных нейронных сетях все нейроны в слое делят те же входы и активационную функцию, как показано на изображении:
Нейронные сети могут быть составлены из нескольких соединенных слоев, которые называются многослойными сетями. Обычные нейронные сети могут быть разделены на 3 класса:
1. Input layer;
2. Hidden layer;
3. Output layer;
На практике, дополнительный нейронный слой добавляет другой уровень
абстракции внешней стимуляции, тем самым повышая способность
нейронных сетей представлять больше комплексных данных.
Каждая нейросеть имеет как минимум входной/выходной слой независимо от количества слоев. В случае с многослойной сетью, слои между входом и выходом названы скрытыми.
Изучение архитектуры нейронных сетей
В принципе, нейронные сети могут иметь разные разметки, зависимые от того как нейроны или нейронные слои соединены друг с другом. Каждая архитектура нейронных сетей спроектирована для определенного результата. Нейронные сети могут быть применены для некоторогоколичества проблем и зависимые от природы проблемы, нейронную сеть следует спроектировать в целях этой проблемы более продуктивно. Обычно, существует 2 модальности архитектуры нейронных сетей:
1. Нейронные соединения:
1.1 Однослойные(monolayer) сети;
1.2 Многослойные(multilayer) сети;
2. Поток сигналов:
2.1 Сети прямой связи(Feedforward networks);
2.2 Сети обратной связи(Feedback networks);
Однослойные сети
Нейронная сеть получает на вход сигналы и кормит их в нейроны, которые в очереди продуцируют выходные сигналы. Нейроны могут быть соединены с другими с или без использования рекуррентности. Примеры таких архитектур: однослойный персептрон, Adaline(адаптивный линейный нейрон), самоорганизованная карта, нейронная сеть Элмана(Elman) и Хопфилда.
Многослойные сети
В этой категории нейроны делятся во много слоев, каждый слой соответствует параллельному расположению нейронов, которые делят одни и те же входные данные, как показано на рисунке:
Радиальные базисные функции и многослойные персептроны – хорошие примеры этой архитектуры. Такие сети реально полезны для апроксимации реальных данных в функцию, специально спроектированной для представлении этих данных. Более того, благодаря тому, что они имеют много слоев обработки, эти сети адаптивны для изучения из нелинейных данных, возможности отделить их или легче определять знания, которые воспроизводят или распознают эти данные.
Сети прямой связи(feedforward networks)
Поток сигналов в нейронных сетях может быть только в одном направлении или рекуррентности. В первом случае мы называем архитектуру нейронных сетей – feedforward, начиная с входных сигналов кормили во входной слой; затем, после обработки, они отправляются в следующий слой, как показано на ричунке про многослойную секцию. Многослойные персептроны и радиальные базисные функции – хорошие примеры feedforward сети.
Сети обратной связи(Feedback networks)
Когда нейронная сеть имеет некоторый вид внутреннего рецидива, это значит, что сигналы вернулись обратно в нейрон или слой, который уже получил и обработал сигнал, сеть – это тип feedback-а. Посмотрите на картинку:
Специальная причина добавить рекуррентность в сеть – это выработка динамического поведения, в частности когда сеть адресует проблемы, включая временные ряды или распознавание образов, которые требуют внутреннюю память для подкрепления обучающего процесса. Тем не менее, такие сети особенно трудны в тренировке, в конечном счете не в состоянии учиться. Многие feedback сети – однослойные, такие как сети Элмана(Elman) и Хопфилда(Hopfield), но возможно и построить рекуррентную многослойную сеть, такие как эхо и рекуррентные многослойные персептронные сети.
От незнания к знаниям — процесс обучения
Нейронные сети обучаются благодаря регулировке соединений между нейронами, а именно весов. Как уже упоминалось в структуре нейронных секций, весы представляют собой знания нейронных сетей. Разные весы призывают сеть вырабатывать разные результаты для тех же входных данных. Таким образом, нейронная сеть может улучшить эти результаты, адаптируя эти весы следуя обучающемуся правилу. Основная схема обучения показана на следующем рисунке:
Процесс, показанный на предыдущей схеме, называется контролируемое обучение(supervised learning), потому что это желаемый вывод, но нейронные сети могут обучаться только входных данных, без желаемого результата(контролируемое обучение). Во второй главе, «Как обучаются нейронные сети», мы собираемся глубже погрузиться в процесс обучения нейронных сетей.
Давайте начнем реализацию! Нейронные сети на практике
В этой книге мы покроем все процессы реализации нейронных сетей на Java. Java — это объектно-ориентированный язык программирования, созданный в 1990-ые маленькой группой инженеров из Sun Microsystems, позже приобретенной компанией Oracle в 2010-ых. Сегодня, Java представлена во многих устройствах, которые участвуют в нашей повседневной жизни. В объектно-ориентированном языке, таком как Java, мы имеем дело склассами и объектами. Класс — план чего-то в реальной жизни, а объект — образец такого плана, например, car(класс, ссылающийся на все машины) и my car(объект, ссылающийся на конкретную машину — мою). Java классы обычно состоят из атрибутов и методов(или функций), которые включают принципы объектно-ориентированного программирования(ООП). Мы собираемся кратко рассмотреть эти принципы без углубления в них, поскольку цель этой книги — просто спроектировать и создать нейронные сети с практической точки зрения. В этом процессе четыре принципа уместны и нуждаются в рассмотрении:
Абстракция: Перевод проблем и правил реальной жизни в сферу программирования, рассматривая только их уместные особенности и отпуская детали, которые часто мешают разработке.
Инкапсуляция: Аналогично инкапсуляции продукта, при которой некоторые соответствующие функции раскрыты открыто (публичные(public) методы), в то время как другие хранится скрытым в пределах своего домена (частного(private) или защищенного(protected)), избегая неправильное использование или избыток информации.
Наследование: В реальной мире, много классов этих объектов представляют собой атрибуты и методы в иерархической манере; например, велосипед может быть супер-классом для машин и грузовиков.Таким образом, в ООП эта концепция позволяет из одного класса перенимать все свойства в другой класс, тем самым избегая переписывания кода.
Полиморфизм: Во многом схожа с наследованием, но с изменениями в методах со схожими сигнатурами, представляющие разные поведения в разных классах.
Используя концепции нейронных сетей, представленные в этой главе и коцепции ООП, мы сейчас собираемся проектировать самый первый класс, реализующий нейронную сеть. Как можно увидеть, нейронная сеть состоит из слоев, нейронов, весов, активационных функций и смещений, и трех типов слоев: входные, скрытые и выходные. Каждый слой может иметь один или несколько нейронов. Каждый нейрон соединен друг с другом входом/выходом или другими нейронами, и эти соединения называются весами.
Важно выделить, что нейронная сеть может иметь много скрытых слоев или вообще их не иметь, количество нейронов в слое может различаться. Тем не менее, входные и выходные слои имеют одинаковое кол-во нейронов, как количество нейронных входов/выходов соответственно. Так начнем же реализацию. Сначала, мы собираемся определить 6 классов, Детально показанные тут:
Имя класса: Neuron
Атрибуты
private ArrayList listOfWeightIn
Переменная ArrayList дробных чисел представляет список входных весов
private ArrayList listOfWeightOut
Переменная ArrayList дробных чисел представляет список выходных весов
public double initNeuron()
Инициализирует функции listOfWeightIn, listOfWeightOut с псевдослучайными числами
Возвращает: Псевдослучайное число
public ArrayList getListOfWeightIn()
Возвращает: список дробных чисел, сохраненной в переменной ListOfWeightIn
public void setListOfWeightIn(ArrayList listOfWeightIn)
Параметры: список дробных чисел, сохранненных в объекте класса
public ArrayList getListOfWeightOut()
Возвращает: список дробных чисел, сохраненной в переменной ListOfWeightOut
public void setListOfWeightOut(ArrayList listOfWeightOut)
Параметры: список дробных чисел, сохранненных в объекте класса
Реализация класса: файл Neuron.java
Имя класса: Layer
Заметка: Этот класс абстрактный и не может быть проинициализирован.
Атрибуты
private ArrayList listOfNeurons
Переменная ArrayList объектов класса Neuron
private int numberOfNeuronsInLayer
Целочисленное значение для хранения количества нейронов, которая является частью слоя.
Методы
public ArrayList getListOfNeurons()
Параметры: нет
Возвращает: listOfNeurons
public void setListOfNeurons(ArrayList listOfNeurons)
Параметры: listOfNeurons
Возвращает: ничего
public int getNumberOfNeuronsInLayer()
Параметры: нет
Возвращает: numberOfNeuronsInLayer
public void setNumberOfNeuronsInLayer(int numberOfNeuronsInLayer)
Параметры: numberOfNeuronsInLayer
Возвращает: ничего
Реализация класса: файл Layer.java
Имя класса: InputLayer
Заметка: Этот класс наследует атрибуты и методы от класса Layer
Атрибуты
Методы
public void initLayer(InputLayer inputLayer)
Инициализирует входной слой с дробными псевдорандомными числами
Параметры: Объект класса InputLayer
Возвращает: ничего
public void printLayer(InputLayer inputLayer)
Выводит входные весы слоя
Параметры: Объект класса InputLayer
Возвращает: ничего
Реализация класса: файл InputLayer.java
Имя класса: HiddenLayer
Заметка: Этот класс наследует атрибуты и методы от класса Layer
Атрибуты
Методы
public ArrayList initLayer( HiddenLayer hiddenLayer, ArrayList listOfHiddenLayers, InputLayer inputLayer, OutputLayer outputLayer )
Инициализирует скрытый слой(и) с дробными псевдослучайными числами
Параметры: Объект класса HiddenLayer, список объектов класса HiddenLayer, объект класса InputLayer, объект класса OutputLayer
Возвращает: список скрытых слоев с добавленным слоем
public void printLayer(ArrayList listOfHiddenLayers)
Выводит входные весы слоя(ев)
Параметры: Список объектов класса HiddenLayer
Возвращает: ничего
Реализация класса: файл HiddenLayer.java
Имя класса: OutputLayer
Заметка: Этот класс наследует атрибуты и методы от класса Layer
Атрибуты
Методы
public void initLayer(OutputLayer outputLayer)
Инициализирует выходной слой с дробными псевдорандомными числами
Параметры: Объект класса OutputLayer
Возвращает: ничего
public void printLayer(OutputLayer outputLayer)
Выводит входные весы слоя
Параметры: Объект класса OutputLayer
Возвращает: ничего
Реализация класса: файл OutputLayer.java
Имя класса: NeuralNet
Заметка: Значения в топологии нейросети фиксированы в этом классе(два нейрона во входном слое, два скрытых слоя с тремя нейронами в каждом, и один нейрон в выходном слое). Напоминание: Это первая версия.
Атрибуты
private InputLayer inputLayer
Объект класса InputLayer
private HiddenLayer hiddenLayer
Объект класса HiddenLayer
private ArrayList listOfHiddenLayer
Переменная ArrayList объектов класса HiddenLayer. Может иметь больше одного скрытого слоя
private OutputLayer outputLayer
Объект класса OutputLayer
private int numberOfHiddenLayers
Целочисленное значение для хранения количества слоев, что является частью скрытого слоя
Методы
public void initNet()
Инициализирует нейросеть. Слои созданы и каждый список весов нейронов созданы случайно
public void printNet()
Печатает нейросеть. Показываются каждое входное и выходное значения каждого слоя.
Реализация класса: файл NeuralNet.java
Огромное преимущество ООП — легко документировать программу в унифицированный язык моделирования(UML). Диаграммы классов UML представляют классы, атрибуты, методы, и отношения между классами очень простым и понятным образом, таким образом, помогая программисту и/или заинтересованным сторонам понять проект в целом. На следующем рисунке представлена самая первая версия диаграммы классов проекта: Сейчас давайте применим эти классы, чтобы получить некоторые результаты.
Показанный следующий код имеет тестовый класс, главный метод объектом класса NeuralNet, названный n. Когда этоn метод вызывается (путем выполнения класса), он вызывает initNet () и printNet () методы из объекта n, генерирующие следующий результат, показанный на рисунке справа после кода. Он представляет собой нейронную сеть с двумя нейронами во входном слое, три в скрытом слое и один в выходном слое:
Важно помнить, что каждый раз, когда код запускается, он генерирует новые псевдослучайные значения веса. Итак, когда вы запускаете код, другие значения появятся в консоли:
В сумме
В этой главе мы увидели введение в нейронные сети, что они собой представляют, для чего они используются, и их основные понятия. Мы также видели очень простую реализацию нейронной сети на языке программирования Java, в которой мы применили теоретические концепции нейронной сети на практике, кодируя каждый из элементов нейронной сети. Важно понять основные понятия, прежде чем мы перейти к передовым концепциям. То же самое относится и к коду, реализованному на Java. В следующей главе мы углубимся в процесс обучения нейронной сети и изучим различные типы наклонов на простых примерах.











