воскресенье, 8 марта 2026 г.

Немного о нейронных сетях

 Предлагаю немного погрузиться в тему нейронных сетей. т.к. теперь это весьма популярная тема и на то есть причины. Одна из причин, вероятно, заключается в том что они обучаются на подобии того как это происходит с мозгом живых существ а не программируются обычным для электронных устройств способом. Это значительно упрощает процесс создания какого либо полезного цифрового продукта. Ну например, для того чтобы создать программу переводчик обычным способом, придется учитывать все правила языков между которыми происходит перевод и составлять длинные словари всех возможных слов, словосочетаний и всё подобное. Для создания переводчика на основе нейронной сети, понадобятся обучающие выборки и процесс тренировки сети который будет происходить автоматически. Обычно под нейронными сетями понимаются их эмуляторы т.е. такие программы которые используют не нейросетевую архитектуру какого либо устройства для выполнения алгоритмов которые функционируют по принципам нейронных сетей. Например нейросети могут эмулироватся на обычном процессоре. И это не очень эффективно т.к. требует много времени. Также немаловажным является колличество памяти, как постоянной так и оперативной, поскольку работа с нейронными сетями это работа с огромными массивами данных. Долгое время это ограничивало возможности искусственных нейронных сетей. Но когда для их эмуляции стали использовать графические, тензорные или специальные процессоры то это увеличило их возможности.Также сами алгоритмы нейронных улучшались. И теперь они, можно сказать, из разряда игрушек перешли в разряд серьезных вещей которые сильно влияют на всю развитую часть человечества. В частности сильно влияют на рынок труда но вероятно что это далеко не предел. Основой большинства нейронных сетей является многослойный персептрон. Обычный однослойный персептрон изначально был придуман как модель для изучения естественных нейронных сетей из которых состоят мозги живых существ. Один слой состоит из некоторого количества нейронов которые работают параллельно и расположены как бы в одном слое. На вход этого слоя приходят какие то сигналы. Слой их обрабатывает и выдает какие то сигналы на выход. Обычно естественные нейронные сети состоят из более чем одного слоя. Т.е. сначала сигналы со входов обрабатываются одним слоем который выдает какие то сигналы на выход. После, эти выходные сигналы идут на вход следующего слоя который также обрабатывает сигналы  и пойдёт их на выход следующего слоя или просто на выход. Каждый нейрон, если он натуральный, то это живая клетка которая устроена очень сложно но в данном случае это не важно. У нейрона имеются отростки. Отростки бывают двух типов. Это аксоны т.е. выходы. У одного нейрона обычно один аксон. И дендриты т.е. входы. Дендритов у нейрона может быть много.

Место соединения акстона и дендрита или ещё входов с дендритами, называется синапсом или по простому связью.

сигнал который проходит через синапс, умножается на коэффициент который называется весовым или просто весом и дальше результат этой операции идет в нейрон и складывается с такими же результатами для всех остальных дендритов. После чего эта сумма, которая еще называется взвешенной суммой проходит через функцию активации и поступает на выход нейрона.

В реальных нейронных сетях сигналами являются бегущие по отросткам потенциалы а не токи поэтому мозги не разогреваются до красна но это не важно т.к. другого практически полезного способа эмулировать нейросети пока не существует. Помимо весовых коэффициентов ещё существуют коэффициенты смещения которые позволяют лучше настраивать сеть но пока что остановимся только на весовых. Совокупность весовых коэффициентов это можно сказать и есть сама сеть или модель. Если она существует в таком простом виде. Обучение нейронной сети заключается в настройке этих весовых коэффициентов так чтобы при подаче на вход сети определенной совокупности сигналов, на выходе этой сети были совокупности сигналов которые желательно чтобы сеть выдавала.

Входные и выходные совокупности сигналов для настройки сети называются обучающими выборками. Их чаще всего больше одной. И чем больше обучающих выборок тем точнее можно настроить нейронную сеть для своих задач. Процесс расчета выходных сигналов по входным, называется "прямое распространение" или forward propagation. Этот процесс нужен для использования нейронной сети. И он относительно прост. Задача же обучения нейронной сети гораздо сложнее и не описывается простыми формулами. Существуют разные методы обучения с разными вариациями. Но пока что на них останавливаться не будем. Т.к. это большая отдельная тема. Предположим что у нас имеется двухслойный персептрон с четырьмя нейронами, двумя входами и двумя выходами.

Попробуем реализовать код прямого распространения. На каком нибудь языке программирования. Обычно подобные вещи делают на питоне со специальными библиотеками для матричных операций. Так получается всё очень просто и быстро. Но о том как реализовать этот алгоритм на чем нибудь си подобном, информации не так много. Поэтому попробуем что нибудь си подобное. Наиболее простой вариант это на мой взгляд javascript. При желании код можно адаптировать под си. Что может быть полезно для применения в микроконтроллерах. 

Данный код реализует прямое распространение двухслойного персептрона с двумя нейронами в каждом слое и возможностью увеличить это количество, т.е. масштабирования путем изменения соответствующих переменных. Весовые коэффициенты каждого синапса инициализируются случайными значениями в диапазоне от -1 до +1.  На вход сети подается массив входных значений а на выходе получается массив выходных. Для того чтобы запустить программу её нужно сохранить в формате html и открыть каким нибудь браузером, например google chrome. После загрузки произойдет прямой проход и результаты появятся во всплывающем окне а также их можно посмотреть в специальном поле если нажать F12. Есть конечно ограничения. Нельзя сделать слои с разными колличествами нейронов. Т.е. этим ограничена архитектура но зато такая архитектура очень красиво и удобно помещается в трехмерный массив и обрабатывается вложенными циклами что мне очень нравиться 😄

Посмотреть и послушать про нейронные сети также можно на видео:


the_video

Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

Также поддержать можно в телеграмм боте https://t.me/electe_bot

Комментариев нет:

Отправить комментарий