Искусственные нейронные сети (ИНС) и особенно глубокие нейронные сети (ГНС) изменили то, как мы взаимодействуем с компьютерами. Мы собираемся изучить, как они функционируют, начав с изучения сути искусственной нейронной сети (основанной на модели работы биологического нейрона), а затем краткую историю ИНС. Затем мы рассмотрим простой пример запрограммированной и обученной нейронной сети.
Биологические нейроны
Сначала мы рассмотрим биологический нейрон, чтобы понять модель ИНС:
диаграмма 1
Нейроны используются для обработки информации, образов, звуков, чувств и запахов.
Нейрон (в нашем мозгу) состоит из четырех основных компонентов:
- Аксон
- Дендриты
- Тело клетки (или сома)
- Терминал Аксона
(Синапсы также очень важны. Однако они не являются физическими частями нейрона, это промежутки между дендритами и окончаниями аксонов, где электрический импульс будет преобразован в химический сигнал.)
Три основных типа нейрона:
Сенсорные нейроны:
- Сенсорные нейроны получают и передают информацию из окружающей среды вне организма. Эта информация передается в ЦНС (ЦНС означает центральную нервную систему). Их также называют афферентными нейронами.
Интернейроны:
- Интернейроны соединяют множество нейронов в нашем спинном и головном мозге. Они также помогают нейронам взаимодействовать; сенсорные нейроны могут обмениваться данными с моторными нейронами. Они также могут влиять на наши рефлексы. Их также можно назвать ассоциативными нейронами.
Двигательные нейроны:
- Моторные нейроны фактически противоположны сенсорным нейронам, информация, которую они получают, решает, что они будут делать, чтобы воздействовать на окружающую среду или сообщать органу или мышце, какое действие ему необходимо выполнить. Термин эфферентные нейроны также может использоваться при обращении к ним.
Существует 4 ключевых этапа передачи информации между нейронами:
- Синтез нейромедиаторов
- Упаковка и выпуск
- Связывание нейротрансмиттера
- Получение химического сигнала
Нам нужны эти шаги, потому что электрические импульсы не могут проходить через промежутки; вот почему они должны быть преобразованы в химические сигналы.
Нейрон срабатывает в зависимости от того, находится ли «потенциал действия» выше или ниже порогового уровня; потенциал действия — это электрический стимул, который высвобождает нейротрансмиттеры. Если он не выше порогового уровня, нейрон не сработает, если выше порогового уровня, он сработает. Каждый нейрон в нашем мозгу срабатывает примерно 200 раз в секунду, и каждый раз, когда нейрон срабатывает, информация передается тысяче других нейронов. Наш мозг содержит около 100 000 000 000 нейронов.
Как ИНС основаны на нашем мозге:
диаграмма 4
Искусственные нейронные сети основаны на шаблоне нашего мозга. ANN будет получать данные (входные данные), а затем производить выходные данные. ИНС состоят из нескольких слоев искусственных нейронов, которые связаны так же, как биологические нейроны в мозге. Каждый нейрон получает сигналы от связанных с ним нейронов и срабатывает, если сумма сигналов превышает порог функций активации. Как показано на диаграмме 4.
Пороговый уровень в искусственных нейронах определяет, будет ли выходной сигнал ближе к 1 или 0, подобно тому, как нейрон срабатывает или не срабатывает. Другое сходство заключается в том, что один нейрон не может работать сам по себе для выполнения сложных функций или задач; ИНС имеет несколько уровней; входные слои, скрытые слои и выходные слои. Каждый слой будет иметь «узлы». Узлы похожи на нейроны; они получают ввод (или несколько вводов) от другого узла, применяют функцию или обрабатывают формулу, а затем передают вывод другому узлу. Скрытые слои называются «скрытыми», потому что они не имеют связи с внешним миром, вся информация, которую они получают, исходит от входного слоя, а их вывод идет на выходной слой, а не во внешний мир.
Что такое ИНС?
Нейрон — это «математическая функция»; он может принимать любое количество входных данных (чисел) и может быть обучен [посредством обратного и прямого распространения] реагировать определенным образом (давать желаемый результат). Мы обучаем нейронную сеть, давая ей входные данные и давая выходные данные, которые мы хотим, чтобы она нам вернула, входные данные подключаются к сигмовидной функции. Мы корректируем эти факторы, применяем их к входным данным, называемым весами.
Веса добавляют значимости определенным факторам, например, если вы собираетесь на прогулку, решение о том, хороша ли погода, менее важно, чем решение о том, опасно это или нет, мы бы добавили больший вес входным данным об опасности, чтобы они повлияли на наш выход. Мы корректируем веса так, чтобы они добавляли значимости, но другие входные данные также учитываются при определении результата. Веса и смещения изменяются до тех пор, пока результат, который нам дается, не будет очень похож на результат, который мы хотим. Циклы, которые мы запускаем, называются Эпохами, каждый раз, когда мы изменяем переменную (веса и смещения), и числа будут распространяться вперед и назад, чтобы проверить, насколько они ближе к истинному результату.
Контролируемое и неконтролируемое обучение:
Примером контролируемого обучения в реальной жизни является то, что малыш учится распознавать объекты. Каждый раз, когда малыш видит кошку, если вы говорите малышу, что это кошка, это обучение под наблюдением. Вы устанавливаете связи для малыша, а не они. их связи между животными сами по себе. Неконтролируемое обучение позволяет малышу самостоятельно понять, что это животное — кошка. Неконтролируемое обучение позволяет использовать более необычные модели для распознавания животного.
В ИНС контролируемая модель будет иметь входы и выходы; малыш получает входные данные (увидев кошку) и выходные данные (узнав, что это кошка). В неконтролируемой модели он будет получать только ввод, а не вывод; малыш получает только входные данные (видит кошку) и не получает выходных данных (ему не говорят, что это кошка). Обучение с учителем использует алгоритмы, которые обучаются с использованием помеченных данных, в отличие от обучения без учителя, когда данные не помечены. При неконтролируемом обучении количество классов неизвестно программисту, при обучении с учителем программист знает и лучше контролирует классы. Программа на Python учится обучать и проверять наборы образцов данных.
Однако ИНС существуют не так давно…
История искусственных нейронных сетей:
Первая влиятельная идея нейронных сетей возникла в 1943 году. Эта идея была предложена парой мужчин по имени Уоррен МакКаллох и Уолтер Питтс. Эта идея была развита в книге под названием «Организация поведения», написанной Дональдом Хеббом. Книга была написана в 1949 году, примерно через 6 лет. Дональд Хебб предположил, что чем дольше мы используем определенные нервные пути, тем мощнее они становятся. Это была одна из фундаментальных теорий книги, поскольку ее часто перефразируют поговоркой «Клетки, которые активируются вместе, соединяются вместе». Это также связано с одной из моделей, предложенных Хеббом — Hebbian Learning. Модель основана на нейронной пластичности мозга. Нейронная пластичность — это способность мозга реорганизовывать себя, создавая новые нейронные связи на протяжении всей жизни. Нейропластичность позволяет нейронам мозга учитывать повреждения и болезни и улучшать свои действия в ответ на новые условия или различия в окружающей среде.
Еще одна идея, предшественница нейронных сетей, — «Пороговая логика».
Обе эти идеи были сформированы в 1940-х годах, однако только в 1954 году в Массачусетском технологическом институте была успешно построена первая сеть Хебба. Примерно в то же время психолог по имени Фрэнк Розенблатт изучал мух и их реакцию бегства или борьбы. Эта система находится в глазу мухи. Позже, в 1958 году, он предложил персептрон. Он назвал его Персептроном Mark I; Персептрон состоял из функции активации, весов и процессора суммирования. Это 1959 год, и были запрограммированы две модели, одна из которых имеет реальное применение (это был первый случай, когда нейронная сеть имела реальное применение). Их звали АДАЛИН и МАДАЛИН; на самом деле, MADALINE используется до сих пор.
Внезапно все разработки в этой области были резко остановлены, поскольку возник страх перед его неизвестными возможностями и другими проблемами, все финансирование было прекращено, а влиятельные люди начали выступать против исследований ИНС; эта «зима ИИ» длилась до 1982 года, когда Джон Хопфилд представил статью в Национальную академию наук. И только в 1990-х годах ИНС вернулись навсегда, и хотя ИНС являются сравнительно недавним исследованием, они уже сейчас оказывают большое влияние на нашу жизнь…
Использование ИНС:
Обычно ИНС используются для распознавания фотографий, в Facebook, когда он автоматически помечает человека на изображении, или в Google Фото, когда он создает альбомы на основе того, кто изображен на фотографии. Аналогичное использование в распознавании символов, чтении человеческого почерка. Однако это может быть ненадежно, поскольку компьютер не человек и не учитывает различия в написании людей. Их можно даже использовать в музыкальном сочинении, распознавая закономерности в музыке. ИНС также используются для более серьезных и полезных регулярных приложений, таких как в больницах, их можно использовать для распознавания раковых опухолей. ИНС можно обучить, чтобы роботы могли выполнять человеческие задачи и не нуждались в управлении ими человеком.
Одной из наиболее распространенных идей использования нейронных сетей в будущем являются беспилотные автомобили, которые могут стать реальностью раньше, чем мы думаем. Они также особенно полезны в настоящее время, потому что они используются в автозамене и показывают вам рекламу или музыкальные рекомендации в зависимости от того, что вы слушаете, посещаете веб-сайты или смотрите видео. При анализе фондового рынка ИНС могут делать точные прогнозы относительно цены акций. Одной из конкретных областей, в которой ИНС и ИИ могут иметь особое значение, является медицина; как упоминалось ранее при диагностике рака и распознавании опухолей, их также можно использовать для прогнозирования рака. Однако их точность может варьироваться от 50% до 100% [https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0212356].
Поскольку все больше и больше больниц оцифровывают больничные записи и болезни и их лечение, ИНС могут оценивать эффективность лечения и излечения. Другими вариантами использования ИНС являются распознавание речи и проверка орфографии.
Будущее ИНС во многом зависит от их текущего использования в нашей жизни…
Будущее АНС:
Что может повлиять на будущее ИНС?
Одним из факторов, который может повлиять на то, насколько часто ИНС используются/оцениваются, являются их требования к данным, под этим я подразумеваю период обучения, в течение которого мы даем нейронной сети данные, необходимые для того, чтобы начать распознавать закономерности. ИНС используют данные, чтобы выяснить, являются ли две вещи одинаковыми, основываясь на их структуре или внешнем виде. Специалист по количественному анализу и финансам, разработчик программного обеспечения Пракаш Каннан считает, что в будущем ИНС смогут имитировать основные когнитивные функции человека и иметь смутное представление об основных эмоциональных моделях людей; «Может быть, нет большой разницы между когнитивным поведением человека и поведением ИИ». Конечно, у ИИ, вероятно, никогда не будет такой эмоциональной глубины и понимания, как у людей (по моему мнению и на основе статей, которые я читал), а если и будут, то не очень долго. Многие люди потеряют и потеряют работу из-за ИИ; Рабочие задачи, такие как фабрики, будут выполняться эффективными и более сильными роботами, и люди, которые анализируют данные для выявления закономерностей и т. д., также в конечном итоге будут заменены. Многие люди в HR также потеряют работу, а некоторые и сейчас. ИИ станет намного эффективнее и дешевле, точность также повысится; Однако ИИ по-прежнему нуждается в людях, чтобы программировать их, предоставлять данные и выполнять другие задачи, без которых он не может функционировать. Будет открыто много новых вакансий, таких как специалисты по данным.
Интервью с количественным аналитиком (полностью):
Что вы думаете об ИНС?
Я думаю, что это следующая эволюция приложений компьютеров, которая приближает их к человеческому мышлению и познанию.
Как вы думаете, каким будет будущее ИНС?
Я считаю, что ИНС начнут имитировать большинство основных когнитивных функций человека, таких как зрение, звук и т. д. ИНС потребуется некоторое время, чтобы достичь основных эмоциональных моделей человека, но я не удивлюсь, если кто-то придумает модель. человеческих эмоций. На самом деле не будет большой разницы между мышлением человека и мышлением ИИ.
Как вы думаете, насколько полезными будут ИНС в будущем?
Это было бы очень полезно в повседневных приложениях, где есть огромное количество данных, и мозг в настоящее время перегружен их обработкой. Таким образом, ИНС сможет сократить огромное количество данных до нескольких вариантов решения или представить свое решение для проверки человеком.
Насколько они сейчас полезны?
Они очень полезны при классификации огромных объемов данных (изображений, электронной почты и т. д.) по категориям.
С какими ИИ или ИНС вы сталкивались в повседневной жизни?
Автоматическая классификация электронной почты для нежелательной почты, поисковые системы, такие как Google, Alexa, беспилотные автомобили и т. д.
Использовали ли вы тензорный поток? Насколько это полезно?
Да, я начал использовать его для экспериментов с финансовыми моделями.
Как вы можете использовать AI/ANN в своей работе?
В настоящее время я изучаю возможность использования ИНС для классификации огромных объемов финансовых данных и калибровки финансовых моделей по рыночным ценам. Я использую для этого поток Python и Tensor.
Изменил ли ИИ нашу жизнь? По большому счету или по-маленькому?
Да, особенно в медицине, где точность обнаружения рака/опухолей и т. д. значительно повысилась, что приводит к раннему обнаружению и излечению.
Какие новые рабочие места могут быть открыты благодаря ИИ и ИНС?
Аналитик данных, специалист по данным и т. д. Исследование новых сетевых моделей.
Как вы думаете, может ли ИИ быть опасным?
Да, поскольку ANN работает как черный ящик, решения и значения, выдаваемые ANN, должны быть тщательно проверены в случае критических приложений. Существуют проблемы переобучения и т. д., когда предположение об обучении неверно, и если входные данные находятся за пределами диапазона «научных значений», выходные данные могут быть недействительными. Периодически ошибочно классифицировать нежелательную почту или изображение можно, но это может иметь катастрофические последствия, если такие ошибки случаются в беспилотных автомобилях или военной обороне и т. д.
Какие компании являются крупнейшими компаниями в области искусственного интеллекта и ИНС?
Google, Facebook, Amazon и микроточки уже вложили значительные средства в AI/ANN и продолжат вкладывать значительные средства в будущем.
На каких языках вы можете программировать ИНС или ИИ?
Библиотека Tensorflow, Keras, Python — в настоящее время python является стандартом по умолчанию для разработки ANN.
Простая нейронная сеть, демонстрирующая основные принципы работы нейронной сети:
Библиография
https://www.interactive-biology.com/3950/the-chemical-synaptic-transmission-how-it-happens/
https://faculty.washington.edu/chudler/lesson1.html
https://www.interactive-biology.com/3950/the-chemical-synaptic-transmission-how-it-happens/
https://www.brainfacts.org/core-concepts/how-neurons-communicate
https://faculty.washington.edu/chudler/synapse.html
https://study.com/academy/lesson/neurons-lesson-for-kids.html
https://faculty.washington.edu/chudler/cells.html
https://courses.lumenlearning.com/boundless-psychology/chapter/neurons/
https://medium.com/analytics-vidhya/brief-history-of-neural-networks-44c2bf72eec
https://towardsdatascience.com/a-concise-history-of-neural-networks-2070655d3fec
https://thephenomenalexperience.com/content/how-fast-is-your-brain/
https://cs.stanford.edu/people/eroberts/courses/soco/projects/neural-networks/Future/
https://www.tensorflow.org/tutorials/quickstart/beginner
Полный код:
import numpy as np def sigmoid(x): return 1 / (1 + np.exp(-x)) def sigmoid_derivative(x): return x * (1 - x) # Input datasets inputs = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) expected_output = np.array([[0], [1], [1], [0]]) epochs = 100000 lr = 0.1 inputLayerNeurons, hiddenLayerNeurons, outputLayerNeurons = 2, 25, 1 # Random weights and bias initialization hidden_weights = np.random.uniform(size=(inputLayerNeurons, hiddenLayerNeurons)) hidden_bias = np.random.uniform(size=(1, hiddenLayerNeurons)) output_weights = np.random.uniform(size=(hiddenLayerNeurons, outputLayerNeurons)) output_bias = np.random.uniform(size=(1, outputLayerNeurons)) # class thingy here!! class Training_Class: def forward_propagation(output_weights,output_bias): hidden_layer_activation = np.dot(inputs, hidden_weights) hidden_layer_activation += hidden_bias hidden_layer_output = sigmoid(hidden_layer_activation) output_layer_activation = np.dot(hidden_layer_output, output_weights) output_layer_activation += output_bias predicted_output = sigmoid(output_layer_activation) def Backward_propagation(out_put,output_weights,output_bias): # Backpropagation error = expected_output - predicted_output d_predicted_output = error * sigmoid_derivative(predicted_output) error_hidden_layer = d_predicted_output.dot(output_weights.T) d_hidden_layer = error_hidden_layer * sigmoid_derivative(hidden_layer_output) # Updating Weights and Biases output_weights += hidden_layer_output.T.dot(d_predicted_output) * lr output_bias += np.sum(d_predicted_output, axis=0, keepdims=True) * lr hidden_weights += inputs.T.dot(d_hidden_layer) * lr hidden_bias += np.sum(d_hidden_layer, axis=0, keepdims=True) * lr # Training algorithm for _ in range(epochs): hidden_layer_activation = np.dot(inputs, hidden_weights) hidden_layer_activation += hidden_bias hidden_layer_output = sigmoid(hidden_layer_activation) output_layer_activation = np.dot(hidden_layer_output, output_weights) output_layer_activation += output_bias predicted_output = sigmoid(output_layer_activation) # Backpropagation error = expected_output - predicted_output d_predicted_output = error * sigmoid_derivative(predicted_output) error_hidden_layer = d_predicted_output.dot(output_weights.T) d_hidden_layer = error_hidden_layer * sigmoid_derivative(hidden_layer_output) # Updating Weights and Biases output_weights += hidden_layer_output.T.dot(d_predicted_output) * lr output_bias += np.sum(d_predicted_output, axis=0, keepdims=True) * lr hidden_weights += inputs.T.dot(d_hidden_layer) * lr hidden_bias += np.sum(d_hidden_layer, axis=0, keepdims=True) * lr print("Initial hidden weights: ", end='') print(*hidden_weights) print("Initial hidden biases: ", end='') print(*hidden_bias) print("Initial output weights: ", end='') print(*output_weights) print("Initial output biases: ", end='') print(*output_bias) print("The input: [1,1]") test_inputs = ([[1, 1]]) hidden_layer_activation = np.dot(inputs, hidden_weights) hidden_layer_activation += hidden_bias hidden_layer_output = sigmoid(hidden_layer_activation) output_layer_activation = np.dot(hidden_layer_output, output_weights) output_layer_activation += output_bias predicted_output = sigmoid(output_layer_activation) hidden_layer_activation = np.dot(test_inputs, hidden_weights) hidden_layer_activation += hidden_bias hidden_layer_output = sigmoid(hidden_layer_activation) output_layer_activation = np.dot(hidden_layer_output, output_weights) output_layer_activation += output_bias predicted_output = sigmoid(output_layer_activation) print("This is the predicted output: ") print(predicted_output) print("The input: [0,1]") test_inputs = ([[0, 1]]) hidden_layer_activation = np.dot(inputs, hidden_weights) hidden_layer_activation += hidden_bias hidden_layer_output = sigmoid(hidden_layer_activation) output_layer_activation = np.dot(hidden_layer_output, output_weights) output_layer_activation += output_bias predicted_output = sigmoid(output_layer_activation) hidden_layer_activation = np.dot(test_inputs, hidden_weights) hidden_layer_activation += hidden_bias hidden_layer_output = sigmoid(hidden_layer_activation) output_layer_activation = np.dot(hidden_layer_output, output_weights) output_layer_activation += output_bias predicted_output = sigmoid(output_layer_activation) print("This is the predicted output: ") print(predicted_output) print("The input: [1,0]") test_inputs = ([[1, 0]]) hidden_layer_activation = np.dot(inputs, hidden_weights) hidden_layer_activation += hidden_bias hidden_layer_output = sigmoid(hidden_layer_activation) output_layer_activation = np.dot(hidden_layer_output, output_weights) output_layer_activation += output_bias predicted_output = sigmoid(output_layer_activation) hidden_layer_activation = np.dot(test_inputs, hidden_weights) hidden_layer_activation += hidden_bias hidden_layer_output = sigmoid(hidden_layer_activation) output_layer_activation = np.dot(hidden_layer_output, output_weights) output_layer_activation += output_bias predicted_output = sigmoid(output_layer_activation) print("This is the predicted output: ") print(predicted_output) print("The input: [0,0]") test_inputs = ([[0, 0]]) hidden_layer_activation = np.dot(inputs, hidden_weights) hidden_layer_activation += hidden_bias hidden_layer_output = sigmoid(hidden_layer_activation) output_layer_activation = np.dot(hidden_layer_output, output_weights) output_layer_activation += output_bias predicted_output = sigmoid(output_layer_activation) hidden_layer_activation = np.dot(test_inputs, hidden_weights) hidden_layer_activation += hidden_bias hidden_layer_output = sigmoid(hidden_layer_activation) output_layer_activation = np.dot(hidden_layer_output, output_weights) output_layer_activation += output_bias predicted_output = sigmoid(output_layer_activation) print("This is the predicted output: ") print(predicted_output)